Fix for neutron-netns-cleanup-cron.py script.
Change-Id: I40a9b42204db4455f656e2711dda8ca136b201cb
This commit is contained in:
parent
820788a501
commit
7b05f28e82
@ -14,7 +14,7 @@ apiVersion: v1
|
|||||||
appVersion: v1.0.0
|
appVersion: v1.0.0
|
||||||
description: OpenStack-Helm Neutron
|
description: OpenStack-Helm Neutron
|
||||||
name: neutron
|
name: neutron
|
||||||
version: 0.2.20
|
version: 0.2.21
|
||||||
home: https://docs.openstack.org/neutron/latest/
|
home: https://docs.openstack.org/neutron/latest/
|
||||||
icon: https://www.openstack.org/themes/openstack/images/project-mascots/Neutron/OpenStack_Project_Neutron_vertical.png
|
icon: https://www.openstack.org/themes/openstack/images/project-mascots/Neutron/OpenStack_Project_Neutron_vertical.png
|
||||||
sources:
|
sources:
|
||||||
|
45
neutron/templates/bin/_neutron-netns-cleanup-cron.py.tpl
Normal file → Executable file
45
neutron/templates/bin/_neutron-netns-cleanup-cron.py.tpl
Normal file → Executable file
@ -6,12 +6,13 @@ import time
|
|||||||
import socket
|
import socket
|
||||||
from neutron.common import config
|
from neutron.common import config
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
|
from oslo_concurrency import processutils
|
||||||
from neutron.agent.linux import dhcp
|
from neutron.agent.linux import dhcp
|
||||||
from neutron.agent.l3 import namespaces
|
from neutron.agent.l3 import namespaces
|
||||||
from neutron.agent.l3 import dvr_snat_ns
|
from neutron.agent.l3 import dvr_snat_ns
|
||||||
from neutron.agent.l3 import dvr_fip_ns
|
from neutron.agent.l3 import dvr_fip_ns
|
||||||
from neutron.cmd.netns_cleanup import setup_conf
|
from neutron.cmd.netns_cleanup import setup_conf
|
||||||
from neutron.cmd.netns_cleanup import destroy_namespace
|
from neutron.cmd.netns_cleanup import unplug_device
|
||||||
from neutron.cmd.netns_cleanup import eligible_for_deletion
|
from neutron.cmd.netns_cleanup import eligible_for_deletion
|
||||||
from neutron.conf.agent import common as agent_config
|
from neutron.conf.agent import common as agent_config
|
||||||
from neutron.agent.linux import ip_lib
|
from neutron.agent.linux import ip_lib
|
||||||
@ -31,10 +32,24 @@ def get_neutron_creds():
|
|||||||
'username': os.getenv('OS_USERNAME', 'admin'),
|
'username': os.getenv('OS_USERNAME', 'admin'),
|
||||||
'cafile' : os.getenv('OS_CACERT','/var/lib/neutron/openstack-helm/openstack-helm.crt'),
|
'cafile' : os.getenv('OS_CACERT','/var/lib/neutron/openstack-helm/openstack-helm.crt'),
|
||||||
'insecure' : os.getenv('NEUTRON_CLEANUP_INSECURE', 'true'),
|
'insecure' : os.getenv('NEUTRON_CLEANUP_INSECURE', 'true'),
|
||||||
'debug': os.getenv('NEUTRON_CLEANUP_DEBUG', 'false'),
|
'debug': os.getenv('NEUTRON_CLEANUP_DEBUG', 'true'),
|
||||||
'wait': os.getenv('NEUTRON_CLEANUP_TIMEOUT', '1800')}
|
'wait': os.getenv('NEUTRON_CLEANUP_TIMEOUT', '600')}
|
||||||
return opts
|
return opts
|
||||||
|
|
||||||
|
def ldestroy_namespace(conf, namespace):
|
||||||
|
try:
|
||||||
|
ip = ip_lib.IPWrapper(namespace=namespace)
|
||||||
|
if ip.netns.exists(namespace):
|
||||||
|
cmd = ['ip', 'netns', 'pids', namespace]
|
||||||
|
output = processutils.execute(*cmd, run_as_root=True, root_helper=conf.AGENT.root_helper)
|
||||||
|
for pid in output[0].splitlines():
|
||||||
|
utils.kill_process(pid, signal.SIGTERM, run_as_root=True, root_helper=conf.AGENT.root_helper)
|
||||||
|
for device in ip.get_devices():
|
||||||
|
unplug_device(device)
|
||||||
|
ip.garbage_collect_namespace()
|
||||||
|
except Exception as e:
|
||||||
|
sys.stderr.write("Error - unable to destroy namespace: {} : {}\n".format(namespace, e))
|
||||||
|
|
||||||
def net_list(neutron_get):
|
def net_list(neutron_get):
|
||||||
hosts = dict()
|
hosts = dict()
|
||||||
net_list = neutron_get.list_networks()
|
net_list = neutron_get.list_networks()
|
||||||
@ -64,26 +79,26 @@ def del_bad_dhcp(dhcp_ns, dhcp_hosts, conf, dhcp_prefix, debug):
|
|||||||
cut_ns_name = ns[len(dhcp_prefix):]
|
cut_ns_name = ns[len(dhcp_prefix):]
|
||||||
if cut_ns_name in dhcp_hosts:
|
if cut_ns_name in dhcp_hosts:
|
||||||
if hostname not in dhcp_hosts[cut_ns_name]:
|
if hostname not in dhcp_hosts[cut_ns_name]:
|
||||||
destroy_namespace(conf, ns, conf.force)
|
ldestroy_namespace(conf, ns)
|
||||||
if debug:
|
if debug:
|
||||||
sys.stdout.write("DEBUG: {} host {} deleted {} because host wrong\n"
|
sys.stderr.write("DEBUG: {} host {} deleted {} because host wrong\n"
|
||||||
.format(sys.argv[0], hostname, ns))
|
.format(sys.argv[0], hostname, ns))
|
||||||
else:
|
else:
|
||||||
if debug:
|
if debug:
|
||||||
sys.stdout.write("DEBUG: {} host {} {} looks ok\n"
|
sys.stderr.write("DEBUG: {} host {} {} looks ok\n"
|
||||||
.format(sys.argv[0], hostname, ns))
|
.format(sys.argv[0], hostname, ns))
|
||||||
else:
|
else:
|
||||||
destroy_namespace(conf, ns, conf.force)
|
ldestroy_namespace(conf, ns)
|
||||||
if debug:
|
if debug:
|
||||||
sys.stdout.write("DEBUG: {} host {} deleted {} because no related network found\n"
|
sys.stderr.write("DEBUG: {} host {} deleted {} because no related network found\n"
|
||||||
.format(sys.argv[0], hostname, ns))
|
.format(sys.argv[0], hostname, ns))
|
||||||
|
|
||||||
def del_bad_not_dhcp(not_dhcp_ns, conf, debug):
|
def del_bad_not_dhcp(not_dhcp_ns, conf, debug):
|
||||||
for ns in not_dhcp_ns:
|
for ns in not_dhcp_ns:
|
||||||
if eligible_for_deletion(conf, ns, conf.force):
|
if eligible_for_deletion(conf, ns, conf.force):
|
||||||
destroy_namespace(conf, ns, conf.force)
|
ldestroy_namespace(conf, ns)
|
||||||
if debug:
|
if debug:
|
||||||
sys.stdout.write("DEBUG: {} host {} deleted {} because no IP addr\n"
|
sys.stderr.write("DEBUG: {} host {} deleted {} because no IP addr\n"
|
||||||
.format(sys.argv[0], hostname, ns))
|
.format(sys.argv[0], hostname, ns))
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
@ -118,17 +133,17 @@ if __name__ == "__main__":
|
|||||||
del_bad_dhcp(dhcp_ns, dhcp_hosts, conf, DHCP_NS_PREFIX, debug)
|
del_bad_dhcp(dhcp_ns, dhcp_hosts, conf, DHCP_NS_PREFIX, debug)
|
||||||
else:
|
else:
|
||||||
if debug:
|
if debug:
|
||||||
sys.stdout.write("DEBUG: {} host {} no dhcp ns found\n"
|
sys.stderr.write("DEBUG: {} host {} no dhcp ns found\n"
|
||||||
.format(sys.argv[0], hostname))
|
.format(sys.argv[0], hostname))
|
||||||
if not_dhcp_ns:
|
if not_dhcp_ns:
|
||||||
del_bad_not_dhcp(not_dhcp_ns, conf, debug)
|
del_bad_not_dhcp(not_dhcp_ns, conf, debug)
|
||||||
else:
|
else:
|
||||||
if debug:
|
if debug:
|
||||||
sys.stdout.write("DEBUG: {} host {} no not_dhcp ns found\n"
|
sys.stderr.write("DEBUG: {} host {} no not_dhcp ns found\n"
|
||||||
.format(sys.argv[0], hostname))
|
.format(sys.argv[0], hostname))
|
||||||
else:
|
else:
|
||||||
if debug:
|
if debug:
|
||||||
sys.stdout.write("DEBUG: {} host {} no ns found at all\n"
|
sys.stderr.write("DEBUG: {} host {} no ns found at all\n"
|
||||||
.format(sys.argv[0], hostname))
|
.format(sys.argv[0], hostname))
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
sys.stderr.write(
|
sys.stderr.write(
|
||||||
@ -139,6 +154,4 @@ if __name__ == "__main__":
|
|||||||
sys.stderr.write(
|
sys.stderr.write(
|
||||||
"Cleaning network namespaces caught an exception")
|
"Cleaning network namespaces caught an exception")
|
||||||
time.sleep(30)
|
time.sleep(30)
|
||||||
finally:
|
time.sleep(timeout)
|
||||||
cfg.CONF.clear()
|
|
||||||
time.sleep(timeout)
|
|
@ -34,4 +34,5 @@ neutron:
|
|||||||
- 0.2.18 Updated naming for subchart compatibility
|
- 0.2.18 Updated naming for subchart compatibility
|
||||||
- 0.2.19 Added qdhcp NS host validation for deleting wrong namespaces.
|
- 0.2.19 Added qdhcp NS host validation for deleting wrong namespaces.
|
||||||
- 0.2.20 Add Xena and Yoga values overrides
|
- 0.2.20 Add Xena and Yoga values overrides
|
||||||
|
- 0.2.21 Fix for qdhcp NS host validation for deleting wrong namespaces.
|
||||||
...
|
...
|
||||||
|
Loading…
x
Reference in New Issue
Block a user