예제 #1
0
 def handle_create(self):
     vip = self._get_first_ip(self.VIP_PORT)
     ipv4_vip = vip['ip_address']
     ipv4_node1_ha = self._get_first_ip(self.NODE1_HA_PORT)['ip_address']
     ipv4_node2_ha = self._get_first_ip(self.NODE2_HA_PORT)['ip_address']
     ipv4_node1_lan1 = self._get_first_ip(
         self.NODE1_LAN1_PORT)['ip_address']
     ipv4_node2_lan1 = self._get_first_ip(
         self.NODE2_LAN1_PORT)['ip_address']
     subnet = self.client('neutron').show_subnet(vip['subnet_id'])['subnet']
     subnet_mask = str(netaddr.IPNetwork(subnet['cidr']).netmask)
     gateway = subnet['gateway_ip']
     vrid = self.properties[self.VIRTUAL_ROUTER_ID]
     if self.properties[self.UPDATE_ALLOWED_ADDRESS_PAIRS]:
         resource_utils.fix_ha_ports_mac(
             self.client('neutron'),
             {'ipv4': {'address': ipv4_vip}}, vrid, True,
             (self.properties[self.NODE1_HA_PORT],
              self.properties[self.NODE2_HA_PORT]))
     # Wait for node1 WAPI
     self.wait_for_https(self.properties[self.NODE1_FLOATING_IP])
     node1 = self.node(self.properties[self.NODE1_FLOATING_IP],
                       self.properties[self.NODE1_ADMIN],
                       self.properties[self.NODE1_PASSWORD])
     ha_pair_config = {
         'enable_ha': True,
         'router_id': vrid,
         'vip_setting': {
             'address': ipv4_vip,
             'gateway': gateway,
             'subnet_mask': subnet_mask
             },
         'node_info': [
             {
                 'lan_ha_port_setting': {
                     'ha_ip_address': ipv4_node1_ha,
                     'mgmt_lan': ipv4_node1_lan1
                 }
             },
             {
                 'lan_ha_port_setting': {
                     'ha_ip_address': ipv4_node2_ha,
                     'mgmt_lan': ipv4_node2_lan1
                 }
             }
         ]
     }
     node1.update_member('infoblox.localdomain', ha_pair_config)
     # Wait for VIP and node2 WAPI
     self.wait_for_https(self.properties[self.VIP_FLOATING_IP])
     self.wait_for_https(self.properties[self.NODE2_FLOATING_IP])
     node2 = self.node(self.properties[self.NODE2_FLOATING_IP],
                       self.properties[self.NODE2_ADMIN],
                       self.properties[self.NODE2_PASSWORD])
     # Default grid_name is 'Infoblox' and secret is 'test'
     # We just created VM so use default values.
     node2.join_grid('Infoblox', ipv4_vip, 'test')
     name = self.properties[self.NAME]
     self.resource_id_set(name)
 def handle_create(self):
     vip = self._get_first_ip(self.VIP_PORT)
     ipv4_vip = vip['ip_address']
     ipv4_node1_ha = self._get_first_ip(self.NODE1_HA_PORT)['ip_address']
     ipv4_node2_ha = self._get_first_ip(self.NODE2_HA_PORT)['ip_address']
     ipv4_node1_lan1 = self._get_first_ip(
         self.NODE1_LAN1_PORT)['ip_address']
     ipv4_node2_lan1 = self._get_first_ip(
         self.NODE2_LAN1_PORT)['ip_address']
     subnet = self.client('neutron').show_subnet(vip['subnet_id'])['subnet']
     subnet_mask = str(netaddr.IPNetwork(subnet['cidr']).netmask)
     gateway = subnet['gateway_ip']
     vrid = self.properties[self.VIRTUAL_ROUTER_ID]
     if self.properties[self.UPDATE_ALLOWED_ADDRESS_PAIRS]:
         resource_utils.fix_ha_ports_mac(
             self.client('neutron'), {'ipv4': {
                 'address': ipv4_vip
             }}, vrid, True, (self.properties[self.NODE1_HA_PORT],
                              self.properties[self.NODE2_HA_PORT]))
     # Wait for node1 WAPI
     self.wait_for_https(self.properties[self.NODE1_FLOATING_IP])
     node1 = self.node(self.properties[self.NODE1_FLOATING_IP],
                       self.properties[self.NODE1_ADMIN],
                       self.properties[self.NODE1_PASSWORD])
     ha_pair_config = {
         'enable_ha':
         True,
         'router_id':
         vrid,
         'vip_setting': {
             'address': ipv4_vip,
             'gateway': gateway,
             'subnet_mask': subnet_mask
         },
         'node_info': [{
             'lan_ha_port_setting': {
                 'ha_ip_address': ipv4_node1_ha,
                 'mgmt_lan': ipv4_node1_lan1
             }
         }, {
             'lan_ha_port_setting': {
                 'ha_ip_address': ipv4_node2_ha,
                 'mgmt_lan': ipv4_node2_lan1
             }
         }]
     }
     node1.update_member('infoblox.localdomain', ha_pair_config)
     # Wait for VIP and node2 WAPI
     self.wait_for_https(self.properties[self.VIP_FLOATING_IP])
     self.wait_for_https(self.properties[self.NODE2_FLOATING_IP])
     node2 = self.node(self.properties[self.NODE2_FLOATING_IP],
                       self.properties[self.NODE2_ADMIN],
                       self.properties[self.NODE2_PASSWORD])
     # Default grid_name is 'Infoblox' and secret is 'test'
     # We just created VM so use default values.
     node2.join_grid('Infoblox', ipv4_vip, 'test')
     name = self.properties[self.NAME]
     self.resource_id_set(name)
    def handle_create(self):
        mgmt = self._make_port_network_settings(self.MGMT_PORT)
        lan1 = self._make_port_network_settings(self.LAN1_PORT)
        lan2 = self._make_port_network_settings(self.LAN2_PORT)

        name = self.properties[self.NAME]
        nat = self.properties[self.NAT_IP]

        ha_pair = self.properties[self.HA_PAIR]
        if ha_pair:
            vrid = self.properties[self.VIRTUAL_ROUTER_ID]
            lan2_vrid = self.properties[self.LAN2_VIRTUAL_ROUTER_ID]
            vip = self._make_port_network_settings(self.VIP_PORT)
            node1_ha = self._make_port_network_settings(self.HA_PORT)
            node2_ha = self._make_port_network_settings(self.NODE2_HA_PORT)
            node2_lan1 = self._make_port_network_settings(self.NODE2_LAN1_PORT)
            node2_mgmt = self._make_port_network_settings(self.NODE2_MGMT_PORT)
            use_ipv4_vip = self.properties[self.USE_IPV4_VIP]
            config_addr_type = self.properties[self.CONFIG_ADDR_TYPE]
            if self.properties[self.UPDATE_ALLOWED_ADDRESS_PAIRS]:
                # Add 'allowed_address_pairs' to HA ports.
                resource_utils.fix_ha_ports_mac(
                    self.client('neutron'),
                    vip, vrid, use_ipv4_vip,
                    (self.properties[self.HA_PORT],
                     self.properties[self.NODE2_HA_PORT]))
            # Create infoblox HA pair member
            self.infoblox().create_member(
                name=name, config_addr_type=config_addr_type,
                mgmt=mgmt, vip=vip, lan2=lan2, nat_ip=nat,
                ha_pair=ha_pair, use_v4_vrrp=use_ipv4_vip,
                node1_ha=node1_ha, node2_ha=node2_ha,
                node1_lan1=lan1, node2_lan1=node2_lan1,
                node2_mgmt=node2_mgmt, vrid=vrid, lan2_vrid=lan2_vrid)
        else:
            self.infoblox().create_member(name=name, mgmt=mgmt, vip=lan1,
                                          lan2=lan2, nat_ip=nat)

        self.infoblox().pre_provision_member(
            name,
            hwmodel=self.properties[self.MODEL], hwtype='IB-VNIOS',
            licenses=self.properties[self.LICENSES], ha_pair=ha_pair)

        dns = self.properties[self.DNS_SETTINGS]
        if dns:
            self.infoblox().configure_member_dns(
                name,
                enable_dns=dns['enable']
            )

        self.resource_id_set(name)
 def test_fix_ha_ports_mac(self):
     neutron = mock.MagicMock()
     vip = {
         'ipv4': {'address': '1.1.1.1'},
         'ipv6': {'virtual_ip': '1234:5678:90ab:cdef::1'}
         }
     ports = ['port_1', 'port_2']
     vrid = 123
     mac_addr = '00:00:5E:00:01:7B'
     resource_utils.fix_ha_ports_mac(neutron, vip, vrid, use_ipv4=True,
                                     ports=ports)
     self.assertEqual(
         [mock.call(
             'port_1',
             {'port': {'allowed_address_pairs': [{
                 'ip_address': vip['ipv4']['address'],
                 'mac_address': mac_addr}]}}),
          mock.call(
              'port_2',
              {'port': {'allowed_address_pairs': [{
                  'ip_address': vip['ipv4']['address'],
                  'mac_address': mac_addr}]}})
          ],
         neutron.update_port.call_args_list
     )
     neutron = mock.MagicMock()
     vrid = 153
     mac_addr = '00:00:5E:00:02:99'
     resource_utils.fix_ha_ports_mac(neutron, vip, vrid, use_ipv4=False,
                                     ports=ports)
     self.assertEqual(
         [mock.call(
             'port_1',
             {'port': {'allowed_address_pairs': [{
                 'ip_address': vip['ipv6']['virtual_ip'],
                 'mac_address': mac_addr}]}}),
          mock.call(
              'port_2',
              {'port': {'allowed_address_pairs': [{
                  'ip_address': vip['ipv6']['virtual_ip'],
                  'mac_address': mac_addr}]}})
          ],
         neutron.update_port.call_args_list
     )
예제 #5
0
 def test_fix_ha_ports_mac(self):
     neutron = mock.MagicMock()
     vip = {
         'ipv4': {
             'address': '1.1.1.1'
         },
         'ipv6': {
             'virtual_ip': '1234:5678:90ab:cdef::1'
         }
     }
     ports = ['port_1', 'port_2']
     vrid = 123
     mac_addr = '00:00:5E:00:01:7B'
     resource_utils.fix_ha_ports_mac(neutron,
                                     vip,
                                     vrid,
                                     use_ipv4=True,
                                     ports=ports)
     self.assertEqual([
         mock.call(
             'port_1', {
                 'port': {
                     'allowed_address_pairs':
                     [{
                         'ip_address': vip['ipv4']['address'],
                         'mac_address': mac_addr
                     }]
                 }
             }),
         mock.call(
             'port_2', {
                 'port': {
                     'allowed_address_pairs':
                     [{
                         'ip_address': vip['ipv4']['address'],
                         'mac_address': mac_addr
                     }]
                 }
             })
     ], neutron.update_port.call_args_list)
     neutron = mock.MagicMock()
     vrid = 153
     mac_addr = '00:00:5E:00:02:99'
     resource_utils.fix_ha_ports_mac(neutron,
                                     vip,
                                     vrid,
                                     use_ipv4=False,
                                     ports=ports)
     self.assertEqual([
         mock.call(
             'port_1', {
                 'port': {
                     'allowed_address_pairs':
                     [{
                         'ip_address': vip['ipv6']['virtual_ip'],
                         'mac_address': mac_addr
                     }]
                 }
             }),
         mock.call(
             'port_2', {
                 'port': {
                     'allowed_address_pairs':
                     [{
                         'ip_address': vip['ipv6']['virtual_ip'],
                         'mac_address': mac_addr
                     }]
                 }
             })
     ], neutron.update_port.call_args_list)
    def handle_create(self):
        mgmt = self._make_port_network_settings(self.MGMT_PORT)
        lan1 = self._make_port_network_settings(self.LAN1_PORT)
        lan2 = self._make_port_network_settings(self.LAN2_PORT)

        name = self.properties[self.NAME]
        nat = self.properties[self.NAT_IP]

        ha_pair = self.properties[self.HA_PAIR]
        if ha_pair:
            vrid = self.properties[self.VIRTUAL_ROUTER_ID]
            lan2_vrid = self.properties[self.LAN2_VIRTUAL_ROUTER_ID]
            vip = self._make_port_network_settings(self.VIP_PORT)
            node1_ha = self._make_port_network_settings(self.HA_PORT)
            node2_ha = self._make_port_network_settings(self.NODE2_HA_PORT)
            node2_lan1 = self._make_port_network_settings(self.NODE2_LAN1_PORT)
            node2_mgmt = self._make_port_network_settings(self.NODE2_MGMT_PORT)
            use_ipv4_vip = self.properties[self.USE_IPV4_VIP]
            config_addr_type = self.properties[self.CONFIG_ADDR_TYPE]
            if self.properties[self.UPDATE_ALLOWED_ADDRESS_PAIRS]:
                # Add 'allowed_address_pairs' to HA ports.
                resource_utils.fix_ha_ports_mac(
                    self.client('neutron'), vip, vrid, use_ipv4_vip,
                    (self.properties[self.HA_PORT],
                     self.properties[self.NODE2_HA_PORT]))
            # Create infoblox HA pair member
            self.infoblox().create_member(name=name,
                                          config_addr_type=config_addr_type,
                                          mgmt=mgmt,
                                          vip=vip,
                                          lan2=lan2,
                                          nat_ip=nat,
                                          ha_pair=ha_pair,
                                          use_v4_vrrp=use_ipv4_vip,
                                          node1_ha=node1_ha,
                                          node2_ha=node2_ha,
                                          node1_lan1=lan1,
                                          node2_lan1=node2_lan1,
                                          node2_mgmt=node2_mgmt,
                                          vrid=vrid,
                                          lan2_vrid=lan2_vrid)
        else:
            self.infoblox().create_member(name=name,
                                          mgmt=mgmt,
                                          vip=lan1,
                                          lan2=lan2,
                                          nat_ip=nat)

        self.infoblox().pre_provision_member(
            name,
            hwmodel=self.properties[self.MODEL],
            hwtype='IB-VNIOS',
            licenses=self.properties[self.LICENSES],
            ha_pair=ha_pair)

        dns = self.properties[self.DNS_SETTINGS]
        if dns:
            self.infoblox().configure_member_dns(name,
                                                 enable_dns=dns['enable'])

        self.resource_id_set(name)