From fcbd65fbeedd514bbb5d2061151856ed073b812f Mon Sep 17 00:00:00 2001 From: Mingyuan Qi Date: Fri, 5 Jul 2019 15:52:55 +0800 Subject: [PATCH] Add floating ip for ironic network This commit adds the floating ip support if ironic network is created and an interface is assigned to that network. Ironic floating ip is used for ironic node to access openstack services through it. It's an HA feature for ironic if 2 controllers are deployed. Story: 2004760 Task: 34740 Depends-On: https://review.opendev.org/669781 Change-Id: I55681abfee700dcf7036503d1490accc413b84c4 Signed-off-by: Mingyuan Qi --- .../src/modules/platform/manifests/network.pp | 28 ++++++++++++++++--- .../src/modules/platform/manifests/sm.pp | 18 ++++++++++++ .../sysinv/sysinv/sysinv/puppet/interface.py | 13 +++++++++ .../sysinv/sysinv/sysinv/puppet/networking.py | 10 +++++++ 4 files changed, 65 insertions(+), 4 deletions(-) diff --git a/puppet-manifests/src/modules/platform/manifests/network.pp b/puppet-manifests/src/modules/platform/manifests/network.pp index 383efac5d1..e67e24e1f0 100644 --- a/puppet-manifests/src/modules/platform/manifests/network.pp +++ b/puppet-manifests/src/modules/platform/manifests/network.pp @@ -1,5 +1,5 @@ class platform::network::pxeboot::params( - # shared parametes with base class - required for auto hiera parameter lookup + # shared parameters with base class - required for auto hiera parameter lookup $interface_name = undef, $interface_address = undef, $interface_devices = [], @@ -20,7 +20,7 @@ class platform::network::pxeboot::params( class platform::network::mgmt::params( - # shared parametes with base class - required for auto hiera parameter lookup + # shared parameters with base class - required for auto hiera parameter lookup $interface_name = undef, $interface_address = undef, $interface_devices = [], @@ -43,7 +43,7 @@ class platform::network::mgmt::params( ) { } class platform::network::oam::params( - # shared parametes with base class - required for auto hiera parameter lookup + # shared parameters with base class - required for auto hiera parameter lookup $interface_name = undef, $interface_address = undef, $interface_devices = [], @@ -63,7 +63,27 @@ class platform::network::oam::params( ) { } class platform::network::cluster_host::params( - # shared parametes with base class - required for auto hiera parameter lookup + # shared parameters with base class - required for auto hiera parameter lookup + $interface_name = undef, + $interface_address = undef, + $interface_devices = [], + $subnet_version = undef, + $subnet_network = undef, + $subnet_network_url = undef, + $subnet_prefixlen = undef, + $subnet_netmask = undef, + $subnet_start = undef, + $subnet_end = undef, + $gateway_address = undef, + $controller_address = undef, # controller floating + $controller_address_url = undef, # controller floating url address + $controller0_address = undef, # controller unit0 + $controller1_address = undef, # controller unit1 + $mtu = 1500, +) { } + +class platform::network::ironic::params( + # shared parameters with base class - required for auto hiera parameter lookup $interface_name = undef, $interface_address = undef, $interface_devices = [], diff --git a/puppet-manifests/src/modules/platform/manifests/sm.pp b/puppet-manifests/src/modules/platform/manifests/sm.pp index 96853f852a..3cfbfe46bd 100644 --- a/puppet-manifests/src/modules/platform/manifests/sm.pp +++ b/puppet-manifests/src/modules/platform/manifests/sm.pp @@ -41,6 +41,11 @@ class platform::sm $oam_ip_param_ip = $::platform::network::oam::params::controller_address $oam_ip_param_mask = $::platform::network::oam::params::subnet_prefixlen + include ::platform::network::ironic::params + $ironic_ip_interface = $::platform::network::ironic::params::interface_name + $ironic_ip_param_ip = $::platform::network::ironic::params::controller_address + $ironic_ip_param_mask = $::platform::network::ironic::params::subnet_prefixlen + include ::platform::drbd::cgcs::params $cgcs_drbd_resource = $::platform::drbd::cgcs::params::resource_name $cgcs_fs_device = $::platform::drbd::cgcs::params::device @@ -306,6 +311,19 @@ class platform::sm } } + # Create the Ironic IP service if it is configured + if $ironic_ip_interface and $system_mode != 'simplex' { + exec { 'Configure Ironic IP service in SM (service-group-member ironic-ip)': + command => 'sm-provision service-group-member controller-services ironic-ip', + } + -> exec { 'Configure Ironic IP service in SM (service ironic-ip)': + command => 'sm-provision service ironic-ip', + } + -> exec { 'Configure Ironic IP': + command => "sm-configure service_instance ironic-ip ironic-ip \"ip=${ironic_ip_param_ip},cidr_netmask=${ironic_ip_param_mask},nic=${ironic_ip_interface},arp_count=7\"", + } + } + exec { 'Configure Postgres DRBD': command => "sm-configure service_instance drbd-pg drbd-pg:${hostunit} \"drbd_resource=${pg_drbd_resource}\"", } diff --git a/sysinv/sysinv/sysinv/sysinv/puppet/interface.py b/sysinv/sysinv/sysinv/sysinv/puppet/interface.py index 86c7fc1e3a..70e405d9d6 100644 --- a/sysinv/sysinv/sysinv/sysinv/puppet/interface.py +++ b/sysinv/sysinv/sysinv/sysinv/puppet/interface.py @@ -277,6 +277,19 @@ class InterfacePuppet(base.BasePuppet): except exception.AddressNotFoundByName: pass + try: + ironic_address = self._get_address_by_name( + constants.CONTROLLER_HOSTNAME, constants.NETWORK_TYPE_IRONIC) + + ironic_floating_ip = (str(ironic_address.address) + '/' + + str(ironic_address.prefix)) + + floating_ips.update({ + constants.NETWORK_TYPE_IRONIC: ironic_floating_ip, + }) + except exception.AddressNotFoundByName: + pass + return floating_ips def _get_datanetworks(self, host): diff --git a/sysinv/sysinv/sysinv/sysinv/puppet/networking.py b/sysinv/sysinv/sysinv/sysinv/puppet/networking.py index 097a6c5156..7a4132338c 100644 --- a/sysinv/sysinv/sysinv/sysinv/puppet/networking.py +++ b/sysinv/sysinv/sysinv/sysinv/puppet/networking.py @@ -22,6 +22,7 @@ class NetworkingPuppet(base.BasePuppet): config.update(self._get_mgmt_network_config()) config.update(self._get_oam_network_config()) config.update(self._get_cluster_network_config()) + config.update(self._get_ironic_network_config()) return config def get_host_config(self, host): @@ -29,6 +30,7 @@ class NetworkingPuppet(base.BasePuppet): config.update(self._get_pxeboot_interface_config()) config.update(self._get_mgmt_interface_config()) config.update(self._get_cluster_interface_config()) + config.update(self._get_ironic_interface_config()) if host.personality == constants.CONTROLLER: config.update(self._get_oam_interface_config()) return config @@ -90,6 +92,11 @@ class NetworkingPuppet(base.BasePuppet): return config + def _get_ironic_network_config(self): + networktype = constants.NETWORK_TYPE_IRONIC + config = self._get_network_config(networktype) + return config + def _get_network_config(self, networktype): try: network = self.dbapi.network_get_by_type(networktype) @@ -172,6 +179,9 @@ class NetworkingPuppet(base.BasePuppet): def _get_cluster_interface_config(self): return self._get_interface_config(constants.NETWORK_TYPE_CLUSTER_HOST) + def _get_ironic_interface_config(self): + return self._get_interface_config(constants.NETWORK_TYPE_IRONIC) + def _get_interface_config(self, networktype): config = {}