def add_provisioning_network(self, task): node = task.node network_uuid = CONF.provisioning_network_uuid client = common_net.get_neutron_client() for port in task.ports: body = { 'port': { 'network_id': network_uuid, 'mac_address': port.address, 'device_owner': 'baremetal:none', 'device_id': node.uuid, 'admin_state_up': True, 'binding:vnic_type': 'baremetal', 'binding:host_id': node.uuid, 'binding:profile': { 'local_link_information': [ port.local_link_connection ], }, } } por = client.create_port(body) extra = dict(port.extra) extra['vif_port_id'] = por['port']['id'] port.extra = extra port.save() task.ports = objects.Port.list_by_node_id(task.context, node.id) return self._port_map(task)
def get_ip_addresses(self, task): vifs = _get_vifs(task) client = common_net.get_neutron_client() ips = [] for vif in vifs: n_port = client.show_port(vif).get('port') fixed_ips = n_port.get('fixed_ips') if fixed_ips: ips.append(fixed_ips[0].get('ip_address', None)) return ips
def remove_provisioning_network(self, task): client = common_net.get_neutron_client() for port in task.ports: try: client.delete_port(port.extra['vif_port_id']) except Exception: pass extra = dict(port.extra) try: del extra['vif_port_id'] except Exception: pass port.extra = extra port.save() task.ports = objects.Port.list_by_node_id(task.context, task.node.id) return self._port_map(task)
def configure_tenant_networks(self, task): node = task.node client = common_net.get_neutron_client() for portgroup in task.portgroups: for vif in portgroup.extra.get('vif_port_ids', []): lli = [] ports = objects.Port.list_by_portgroup_id(portgroup.id) for port in ports: lli.append(port.local_link_connection) body = { 'port': { 'device_owner': 'baremetal:none', 'device_id': node.instance_uuid, 'admin_state_up': True, 'binding:vnic_type': 'baremetal', 'binding:host_id': node.uuid, 'binding:profile': { 'local_link_information': lli, }, } } client.update_port(vif, body) for port in task.ports: if port.portgroup_id is None: for vif in port.extra.get('vif_port_ids', []): body = { 'port': { 'device_owner': 'baremetal:none', 'device_id': node.instance_uuid, 'admin_state_up': True, 'binding:vnic_type': 'baremetal', 'binding:host_id': node.uuid, 'binding:profile': { 'local_link_information': [ port.local_link_connection ], }, } } client.update_port(vif, body)