From d4838790c4e31cc52e3fd50b8907e9774cd138ca Mon Sep 17 00:00:00 2001 From: Junaid Ali Date: Tue, 8 Mar 2016 18:18:43 +0500 Subject: [PATCH 01/10] Updated config-changed hook --- hooks/pg_dir_hooks.py | 48 ++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/hooks/pg_dir_hooks.py b/hooks/pg_dir_hooks.py index 6ba6cba..4cd441b 100755 --- a/hooks/pg_dir_hooks.py +++ b/hooks/pg_dir_hooks.py @@ -14,6 +14,8 @@ from charmhelpers.core.hookenv import ( config, ) +from charmhelpers.contrib.network.ip import is_ip + from charmhelpers.fetch import ( apt_install, apt_purge, @@ -66,33 +68,51 @@ def config_changed(): This hook is run when a config parameter is changed. It also runs on node reboot. ''' - if add_lcm_key(): - log("PLUMgrid LCM Key added") - return 1 charm_config = config() + log('Total number of configs %s ' % len(charm_config)) + if charm_config.changed('lcm-ssh-key'): + if add_lcm_key(): + CONFIGS.write_all() + log("PLUMgrid LCM Key added") + return 1 if charm_config.changed('plumgrid-license-key'): if post_pg_license(): + CONFIGS.write_all() log("PLUMgrid License Posted") return 1 + if charm_config.changed('network-device-mtu'): + CONFIGS.write_all() + ensure_mtu() + return 1 + stop_pg() + if charm_config.changed('plumgrid-virtual-ip'): + if not is_ip(charm_config['plumgrid-virtual-ip']): + raise ValueError('Invalid IP Provided') if charm_config.changed('fabric-interfaces'): if not fabric_interface_changed(): log("Fabric interface already set") - return 1 if charm_config.changed('os-data-network'): if charm_config['fabric-interfaces'] == 'MANAGEMENT': log('Fabric running on managment network') - return 1 - stop_pg() - configure_sources(update=True) - pkgs = determine_packages() - for pkg in pkgs: - apt_install(pkg, options=['--force-yes'], fatal=True) - remove_iovisor() - load_iovisor() - ensure_mtu() - add_lcm_key() + if (charm_config.changed('install_sources') or + charm_config.changed('plumgrid-build') or + charm_config.changed('iovisor-build')): + configure_sources(update=True) + pkgs = determine_packages() + log('Packages to upgrade: %s' % len(pkgs)) + for pkg in pkgs: + if charm_config.changed('install_sources'): + log("install_sources changed!") + if charm_config.changed('plumgrid-build'): + log("plumgrid-build changed!") + if charm_config.changed('iovisor-build'): + log("iovisor-build changed!") + apt_install(pkg, options=['--force-yes'], fatal=True) + remove_iovisor() + load_iovisor() CONFIGS.write_all() restart_pg() + return 1 @hooks.hook('start') From 649122d3134a1a76e29ebc71997289b0f96d7b4e Mon Sep 17 00:00:00 2001 From: Junaid Ali Date: Wed, 9 Mar 2016 16:11:40 +0500 Subject: [PATCH 02/10] Ensuring plumgrid services to restart only when certain parameters change --- hooks/pg_dir_hooks.py | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/hooks/pg_dir_hooks.py b/hooks/pg_dir_hooks.py index 4cd441b..b429d5b 100755 --- a/hooks/pg_dir_hooks.py +++ b/hooks/pg_dir_hooks.py @@ -69,22 +69,26 @@ def config_changed(): It also runs on node reboot. ''' charm_config = config() - log('Total number of configs %s ' % len(charm_config)) + count = 0 + for key in charm_config: + if charm_config.changed(key): + count += 1 if charm_config.changed('lcm-ssh-key'): if add_lcm_key(): - CONFIGS.write_all() + count -= 1 log("PLUMgrid LCM Key added") - return 1 if charm_config.changed('plumgrid-license-key'): if post_pg_license(): - CONFIGS.write_all() + count -= 1 log("PLUMgrid License Posted") - return 1 if charm_config.changed('network-device-mtu'): - CONFIGS.write_all() + count -= 1 ensure_mtu() + if count > 0: + stop_pg() + else: + CONFIGS.write_all() return 1 - stop_pg() if charm_config.changed('plumgrid-virtual-ip'): if not is_ip(charm_config['plumgrid-virtual-ip']): raise ValueError('Invalid IP Provided') @@ -99,20 +103,12 @@ def config_changed(): charm_config.changed('iovisor-build')): configure_sources(update=True) pkgs = determine_packages() - log('Packages to upgrade: %s' % len(pkgs)) for pkg in pkgs: - if charm_config.changed('install_sources'): - log("install_sources changed!") - if charm_config.changed('plumgrid-build'): - log("plumgrid-build changed!") - if charm_config.changed('iovisor-build'): - log("iovisor-build changed!") apt_install(pkg, options=['--force-yes'], fatal=True) remove_iovisor() load_iovisor() CONFIGS.write_all() restart_pg() - return 1 @hooks.hook('start') From 8db3c9f7e2ab27bdb840503f57e6b0d91d1b2002 Mon Sep 17 00:00:00 2001 From: Junaid Ali Date: Sat, 12 Mar 2016 16:28:57 +0500 Subject: [PATCH 03/10] Check for libvirt-bin service in restart_pg() --- hooks/pg_dir_utils.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hooks/pg_dir_utils.py b/hooks/pg_dir_utils.py index dacf0c7..dd291cd 100644 --- a/hooks/pg_dir_utils.py +++ b/hooks/pg_dir_utils.py @@ -30,6 +30,7 @@ from charmhelpers.contrib.openstack.utils import ( from charmhelpers.core.host import ( service_start, service_stop, + service_available, ) from socket import gethostname as get_unit_hostname import pg_dir_context @@ -141,6 +142,15 @@ def restart_pg(): ''' Stops and Starts PLUMgrid service after flushing iptables. ''' + if not service_available('plumgrid'): + if service_available('libvirt-bin'): + if not service_start('libvirt-bin'): + raise ValueError("libvirt-bin service couldn't be started") + else: + time.sleep(5) + else: + log("libvirt-bin not installed") + return 0 service_stop('plumgrid') time.sleep(2) _exec_cmd(cmd=['iptables', '-F']) From 8260d9e4d7d59d567a05f1b3af41445720c224e6 Mon Sep 17 00:00:00 2001 From: Junaid Ali Date: Mon, 14 Mar 2016 19:58:46 +0500 Subject: [PATCH 04/10] Updated config-changed hook and restart_pg() --- hooks/pg_dir_hooks.py | 23 +++++------------------ hooks/pg_dir_utils.py | 19 ++++++++----------- 2 files changed, 13 insertions(+), 29 deletions(-) diff --git a/hooks/pg_dir_hooks.py b/hooks/pg_dir_hooks.py index b429d5b..f1dea50 100755 --- a/hooks/pg_dir_hooks.py +++ b/hooks/pg_dir_hooks.py @@ -14,8 +14,6 @@ from charmhelpers.core.hookenv import ( config, ) -from charmhelpers.contrib.network.ip import is_ip - from charmhelpers.fetch import ( apt_install, apt_purge, @@ -69,46 +67,35 @@ def config_changed(): It also runs on node reboot. ''' charm_config = config() - count = 0 - for key in charm_config: - if charm_config.changed(key): - count += 1 if charm_config.changed('lcm-ssh-key'): if add_lcm_key(): - count -= 1 log("PLUMgrid LCM Key added") if charm_config.changed('plumgrid-license-key'): if post_pg_license(): - count -= 1 log("PLUMgrid License Posted") if charm_config.changed('network-device-mtu'): - count -= 1 ensure_mtu() - if count > 0: - stop_pg() - else: - CONFIGS.write_all() - return 1 - if charm_config.changed('plumgrid-virtual-ip'): - if not is_ip(charm_config['plumgrid-virtual-ip']): - raise ValueError('Invalid IP Provided') if charm_config.changed('fabric-interfaces'): if not fabric_interface_changed(): log("Fabric interface already set") + else: + restart_pg() if charm_config.changed('os-data-network'): if charm_config['fabric-interfaces'] == 'MANAGEMENT': log('Fabric running on managment network') if (charm_config.changed('install_sources') or charm_config.changed('plumgrid-build') or + charm_config.changed('plumgrid-virtual-ip') or charm_config.changed('iovisor-build')): + stop_pg() configure_sources(update=True) pkgs = determine_packages() for pkg in pkgs: apt_install(pkg, options=['--force-yes'], fatal=True) remove_iovisor() load_iovisor() + restart_pg() CONFIGS.write_all() - restart_pg() @hooks.hook('start') diff --git a/hooks/pg_dir_utils.py b/hooks/pg_dir_utils.py index dd291cd..167b382 100644 --- a/hooks/pg_dir_utils.py +++ b/hooks/pg_dir_utils.py @@ -30,7 +30,6 @@ from charmhelpers.contrib.openstack.utils import ( from charmhelpers.core.host import ( service_start, service_stop, - service_available, ) from socket import gethostname as get_unit_hostname import pg_dir_context @@ -142,19 +141,17 @@ def restart_pg(): ''' Stops and Starts PLUMgrid service after flushing iptables. ''' - if not service_available('plumgrid'): - if service_available('libvirt-bin'): - if not service_start('libvirt-bin'): - raise ValueError("libvirt-bin service couldn't be started") - else: - time.sleep(5) - else: - log("libvirt-bin not installed") - return 0 service_stop('plumgrid') time.sleep(2) _exec_cmd(cmd=['iptables', '-F']) - service_start('plumgrid') + if not service_start('plumgrid'): + if not service_start('libvirt-bin'): + raise ValueError("libvirt-bin service couldn't be started") + else: + # wait for 3 secs so that libvirt-bin can be completely up and + # start the plumgrid service + time.sleep(3) + service_start('plumgrid') time.sleep(5) From c1cd1cd500c019a76f12b4a8eb1586e652679fbd Mon Sep 17 00:00:00 2001 From: Junaid Ali Date: Tue, 15 Mar 2016 10:54:13 +0500 Subject: [PATCH 05/10] Ensuring plumgrid service to restart after config writes --- hooks/pg_dir_hooks.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/hooks/pg_dir_hooks.py b/hooks/pg_dir_hooks.py index f1dea50..15ecb12 100755 --- a/hooks/pg_dir_hooks.py +++ b/hooks/pg_dir_hooks.py @@ -20,6 +20,8 @@ from charmhelpers.fetch import ( configure_sources, ) +from charmhelpers.core.host import service_running + from pg_dir_utils import ( register_configs, restart_pg, @@ -79,13 +81,14 @@ def config_changed(): if not fabric_interface_changed(): log("Fabric interface already set") else: - restart_pg() + stop_pg() if charm_config.changed('os-data-network'): if charm_config['fabric-interfaces'] == 'MANAGEMENT': log('Fabric running on managment network') + if charm_config.changed('plumgrid-virtual-ip'): + stop_pg() if (charm_config.changed('install_sources') or charm_config.changed('plumgrid-build') or - charm_config.changed('plumgrid-virtual-ip') or charm_config.changed('iovisor-build')): stop_pg() configure_sources(update=True) @@ -94,8 +97,11 @@ def config_changed(): apt_install(pkg, options=['--force-yes'], fatal=True) remove_iovisor() load_iovisor() - restart_pg() CONFIGS.write_all() + # Starting the plumgrid service if it is stopped by + # any of the config-parameters + if not service_running('plumgrid'): + restart_pg() @hooks.hook('start') From 20882fbcc5826c0e21e26717de5c82812c4eb1b4 Mon Sep 17 00:00:00 2001 From: Junaid Ali Date: Wed, 16 Mar 2016 06:30:11 +0500 Subject: [PATCH 06/10] Validating plumgrid service start --- hooks/pg_dir_hooks.py | 2 +- hooks/pg_dir_utils.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/hooks/pg_dir_hooks.py b/hooks/pg_dir_hooks.py index 15ecb12..2eb7024 100755 --- a/hooks/pg_dir_hooks.py +++ b/hooks/pg_dir_hooks.py @@ -99,7 +99,7 @@ def config_changed(): load_iovisor() CONFIGS.write_all() # Starting the plumgrid service if it is stopped by - # any of the config-parameters + # any of the config-parameters or node reboot if not service_running('plumgrid'): restart_pg() diff --git a/hooks/pg_dir_utils.py b/hooks/pg_dir_utils.py index 167b382..fea6c12 100644 --- a/hooks/pg_dir_utils.py +++ b/hooks/pg_dir_utils.py @@ -151,7 +151,8 @@ def restart_pg(): # wait for 3 secs so that libvirt-bin can be completely up and # start the plumgrid service time.sleep(3) - service_start('plumgrid') + if not service_start('plumgrid'): + raise ValueError("plumgrid service couldn't be started") time.sleep(5) From 072e9e1286e2dc1207b7d0bac96375ae017ec98b Mon Sep 17 00:00:00 2001 From: Junaid Ali Date: Fri, 18 Mar 2016 18:59:17 +0500 Subject: [PATCH 07/10] Validating Plumgrid Virtual IP and addition of install_keys config parameter --- hooks/pg_dir_hooks.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hooks/pg_dir_hooks.py b/hooks/pg_dir_hooks.py index 2eb7024..45cb9e8 100755 --- a/hooks/pg_dir_hooks.py +++ b/hooks/pg_dir_hooks.py @@ -20,6 +20,7 @@ from charmhelpers.fetch import ( configure_sources, ) +from charmhelpers.contrib.network.ip import is_ip from charmhelpers.core.host import service_running from pg_dir_utils import ( @@ -86,9 +87,14 @@ def config_changed(): if charm_config['fabric-interfaces'] == 'MANAGEMENT': log('Fabric running on managment network') if charm_config.changed('plumgrid-virtual-ip'): - stop_pg() + plumgrid_vip = config('plumgrid-virtual-ip') + if is_ip(plumgrid_vip): + stop_pg() + else: + raise ValueError('Invalid IP Provided') if (charm_config.changed('install_sources') or charm_config.changed('plumgrid-build') or + charm_config.changed('install_keys') or charm_config.changed('iovisor-build')): stop_pg() configure_sources(update=True) From 70156791d1d70ced65de480247703e73baec8681 Mon Sep 17 00:00:00 2001 From: Junaid Ali Date: Mon, 21 Mar 2016 19:19:10 +0500 Subject: [PATCH 08/10] Plumgrid virtual IP validation moved to CONFIGS.write_all() --- hooks/pg_dir_context.py | 7 ++++++- hooks/pg_dir_hooks.py | 13 ++----------- 2 files changed, 8 insertions(+), 12 deletions(-) mode change 100755 => 100644 hooks/pg_dir_hooks.py diff --git a/hooks/pg_dir_context.py b/hooks/pg_dir_context.py index 94b6834..77b6fa9 100644 --- a/hooks/pg_dir_context.py +++ b/hooks/pg_dir_context.py @@ -12,6 +12,7 @@ from charmhelpers.core.hookenv import ( related_units, relation_get, ) +from charmhelpers.contrib.network.ip import is_ip from charmhelpers.contrib.openstack import context from charmhelpers.contrib.openstack.utils import get_host_ip from charmhelpers.contrib.network.ip import get_address_in_network @@ -81,7 +82,11 @@ class PGDirContext(context.NeutronContext): else: pg_dir_ips_string = pg_dir_ips_string + ',' + str(ip) pg_ctxt['director_ips_string'] = pg_dir_ips_string - pg_ctxt['virtual_ip'] = conf['plumgrid-virtual-ip'] + PG_VIP = config('plumgrid-virtual-ip') + if is_ip(PG_VIP): + pg_ctxt['virtual_ip'] = conf['plumgrid-virtual-ip'] + else: + raise ValueError('Invalid IP Provided') unit_hostname = get_unit_hostname() pg_ctxt['pg_hostname'] = unit_hostname from pg_dir_utils import get_mgmt_interface, get_fabric_interface diff --git a/hooks/pg_dir_hooks.py b/hooks/pg_dir_hooks.py old mode 100755 new mode 100644 index 45cb9e8..22e40af --- a/hooks/pg_dir_hooks.py +++ b/hooks/pg_dir_hooks.py @@ -20,7 +20,6 @@ from charmhelpers.fetch import ( configure_sources, ) -from charmhelpers.contrib.network.ip import is_ip from charmhelpers.core.host import service_running from pg_dir_utils import ( @@ -82,16 +81,10 @@ def config_changed(): if not fabric_interface_changed(): log("Fabric interface already set") else: + ensure_mtu() stop_pg() - if charm_config.changed('os-data-network'): - if charm_config['fabric-interfaces'] == 'MANAGEMENT': - log('Fabric running on managment network') if charm_config.changed('plumgrid-virtual-ip'): - plumgrid_vip = config('plumgrid-virtual-ip') - if is_ip(plumgrid_vip): - stop_pg() - else: - raise ValueError('Invalid IP Provided') + stop_pg() if (charm_config.changed('install_sources') or charm_config.changed('plumgrid-build') or charm_config.changed('install_keys') or @@ -104,8 +97,6 @@ def config_changed(): remove_iovisor() load_iovisor() CONFIGS.write_all() - # Starting the plumgrid service if it is stopped by - # any of the config-parameters or node reboot if not service_running('plumgrid'): restart_pg() From 41defd62add1a31a56679c92199e5296438b721e Mon Sep 17 00:00:00 2001 From: Junaid Ali Date: Mon, 21 Mar 2016 22:13:54 +0500 Subject: [PATCH 09/10] Validating plumgrid virtual IP before stopping the plumgrid services --- hooks/pg_dir_hooks.py | 8 +++----- hooks/pg_dir_utils.py | 1 - unit_tests/test_pg_dir_hooks.py | 4 ---- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/hooks/pg_dir_hooks.py b/hooks/pg_dir_hooks.py index 4d24fe2..94b547c 100644 --- a/hooks/pg_dir_hooks.py +++ b/hooks/pg_dir_hooks.py @@ -7,6 +7,7 @@ import sys import time +from charmhelpers.core.host import service_running from charmhelpers.core.hookenv import ( Hooks, @@ -21,8 +22,6 @@ from charmhelpers.fetch import ( configure_sources, ) -from charmhelpers.core.host import service_running - from pg_dir_utils import ( register_configs, restart_pg, @@ -78,15 +77,13 @@ def config_changed(): if charm_config.changed('plumgrid-license-key'): if post_pg_license(): log("PLUMgrid License Posted") - if charm_config.changed('network-device-mtu'): - ensure_mtu() if charm_config.changed('fabric-interfaces'): if not fabric_interface_changed(): log("Fabric interface already set") else: - ensure_mtu() stop_pg() if charm_config.changed('plumgrid-virtual-ip'): + CONFIGS.write_all() stop_pg() if (charm_config.changed('install_sources') or charm_config.changed('plumgrid-build') or @@ -99,6 +96,7 @@ def config_changed(): apt_install(pkg, options=['--force-yes'], fatal=True) remove_iovisor() load_iovisor() + ensure_mtu() CONFIGS.write_all() if not service_running('plumgrid'): restart_pg() diff --git a/hooks/pg_dir_utils.py b/hooks/pg_dir_utils.py index 4023456..697ecbf 100644 --- a/hooks/pg_dir_utils.py +++ b/hooks/pg_dir_utils.py @@ -154,7 +154,6 @@ def restart_pg(): raise ValueError("plumgrid service couldn't be started") else: raise ValueError("libvirt-bin service couldn't be started") - time.sleep(3) def stop_pg(): diff --git a/unit_tests/test_pg_dir_hooks.py b/unit_tests/test_pg_dir_hooks.py index 04065bd..c453ca8 100644 --- a/unit_tests/test_pg_dir_hooks.py +++ b/unit_tests/test_pg_dir_hooks.py @@ -62,10 +62,6 @@ class PGDirHooksTests(CharmTestCase): self.load_iovisor.assert_called_with() self.ensure_mtu.assert_called_with() - def test_config_changed_hook(self): - self.add_lcm_key.return_value = 1 - self._call_hook('config-changed') - def test_start(self): self._call_hook('start') self.test_config.set('plumgrid-license-key', None) From 163d491fad71d802f8fc66afb3401598c9985784 Mon Sep 17 00:00:00 2001 From: Junaid Ali Date: Fri, 25 Mar 2016 18:14:47 +0500 Subject: [PATCH 10/10] Changing pg_dir_hooks file permission --- hooks/pg_dir_hooks.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 hooks/pg_dir_hooks.py diff --git a/hooks/pg_dir_hooks.py b/hooks/pg_dir_hooks.py old mode 100644 new mode 100755