X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_ro%2Fvimconn_vmware.py;h=0f0570499130af53401eeb1a1ef17c6cc4e06d08;hb=5b2d5c1e94f94949d933236bbf0b3b4133222109;hp=caaf50dee81f509813439e6777e61a83e412aecd;hpb=1fdf999b4398253634e56f8541c47aeae3cd456a;p=osm%2FRO.git
diff --git a/osm_ro/vimconn_vmware.py b/osm_ro/vimconn_vmware.py
index caaf50de..0f057049 100644
--- a/osm_ro/vimconn_vmware.py
+++ b/osm_ro/vimconn_vmware.py
@@ -579,9 +579,10 @@ class vimconnector(vimconn.vimconnector):
else:
net_uuid = net_uuid[3]
# create dict entry
- self.logger.debug("Adding {} to a list vcd id {} network {}".format(net_uuid,
- vdc_uuid,
- net_details.get('name')))
+ self.logger.debug("get_vcd_network_list(): Adding network {} "
+ "to a list vcd id {} network {}".format(net_uuid,
+ vdc_uuid,
+ net_details.get('name')))
filter_dict["name"] = net_details.get('name')
filter_dict["id"] = net_uuid
if [i.text for i in net_details if i.tag.split('}')[-1] == 'IsShared'][0] == 'true':
@@ -667,9 +668,10 @@ class vimconnector(vimconn.vimconnector):
else:
net_uuid = net_uuid[3]
# create dict entry
- self.logger.debug("Adding {} to a list vcd id {} network {}".format(net_uuid,
- vdcid,
- net_details.get('name')))
+ self.logger.debug("get_network_list(): Adding net {}"
+ " to a list vcd id {} network {}".format(net_uuid,
+ vdcid,
+ net_details.get('name')))
filter_entry["name"] = net_details.get('name')
filter_entry["id"] = net_uuid
if [i.text for i in net_details if i.tag.split('}')[-1] == 'IsShared'][0] == 'true':
@@ -1466,7 +1468,7 @@ class vimconnector(vimconn.vimconnector):
'name': (optional) name for the interface.
'net_id': VIM network id where this interface must be connect to. Mandatory for type==virtual
'vpci': (optional) virtual vPCI address to assign at the VM. Can be ignored depending on VIM capabilities
- 'model': (optional and only have sense for type==virtual) interface model: virtio, e2000, ...
+ 'model': (optional and only have sense for type==virtual) interface model: virtio, e1000, ...
'mac_address': (optional) mac address to assign to this interface
#TODO: CHECK if an optional 'vlan' parameter is needed for VIMs when type if VF and net_id is not provided,
the VLAN tag to be used. In case net_id is provided, the internal network vlan is used for tagging VF
@@ -1866,6 +1868,14 @@ class vimconnector(vimconn.vimconnector):
# add NICs & connect to networks in netlist
try:
+ vdc_obj = VDC(self.client, href=vdc.get('href'))
+ vapp_resource = vdc_obj.get_vapp(vmname_andid)
+ vapp = VApp(self.client, resource=vapp_resource)
+
+ self.logger.info("Removing primary NIC: ")
+ # First remove all NICs so that NIC properties can be adjusted as needed
+ self.remove_primary_network_adapter_from_all_vms(vapp)
+
self.logger.info("Request to connect VM to a network: {}".format(net_list))
primary_nic_index = 0
nicIndex = 0
@@ -1886,10 +1896,6 @@ class vimconnector(vimconn.vimconnector):
interface_net_name = self.get_network_name_by_id(network_uuid=interface_net_id)
interface_network_mode = net['use']
- if interface_net_name == primary_netname:
- nicIndex += 1
- continue
-
if interface_network_mode == 'mgmt':
primary_nic_index = nicIndex
@@ -1899,26 +1905,26 @@ class vimconnector(vimconn.vimconnector):
- NONE (No IP addressing mode specified.)"""
if primary_netname is not None:
+ self.logger.debug("new_vminstance(): Filtering by net name {}".format(interface_net_name))
nets = filter(lambda n: n.get('name') == interface_net_name, self.get_network_list())
#For python3
#nets = [n for n in self.get_network_list() if n.get('name') == interface_net_name]
if len(nets) == 1:
self.logger.info("new_vminstance(): Found requested network: {}".format(nets[0].get('name')))
- vdc_obj = VDC(self.client, href=vdc.get('href'))
- vapp_resource = vdc_obj.get_vapp(vmname_andid)
- vapp = VApp(self.client, resource=vapp_resource)
- # connect network to VM - with all DHCP by default
- task = vapp.connect_org_vdc_network(nets[0].get('name'))
-
- self.client.get_task_monitor().wait_for_success(task=task)
+ if interface_net_name != primary_netname:
+ # connect network to VM - with all DHCP by default
+ self.logger.info("new_vminstance(): Attaching net {} to vapp".format(interface_net_name))
+ task = vapp.connect_org_vdc_network(nets[0].get('name'))
+ self.client.get_task_monitor().wait_for_success(task=task)
type_list = ('PF', 'PCI-PASSTHROUGH', 'VF', 'SR-IOV', 'VFnotShared')
if 'type' in net and net['type'] not in type_list:
# fetching nic type from vnf
if 'model' in net:
- if net['model'] is not None and net['model'].lower() == 'virtio':
- nic_type = 'VMXNET3'
+ if net['model'] is not None:
+ if net['model'].lower() == 'paravirt' or net['model'].lower() == 'virtio':
+ nic_type = 'VMXNET3'
else:
nic_type = net['model']
@@ -4636,6 +4642,85 @@ class vimconnector(vimconn.vimconnector):
" for VM : {}".format(exp))
raise vimconn.vimconnException(message=exp)
+
+ def remove_primary_network_adapter_from_all_vms(self, vapp):
+ """
+ Method to remove network adapter type to vm
+ Args :
+ vapp - VApp
+ Returns:
+ None
+ """
+
+ self.logger.info("Removing network adapter from all VMs")
+ for vms in vapp.get_all_vms():
+ vm_id = vms.get('id').split(':')[-1]
+
+ url_rest_call = "{}/api/vApp/vm-{}/networkConnectionSection/".format(self.url, vm_id)
+
+ headers = {'Accept':'application/*+xml;version=' + API_VERSION,
+ 'x-vcloud-authorization': self.client._session.headers['x-vcloud-authorization']}
+ response = self.perform_request(req_type='GET',
+ url=url_rest_call,
+ headers=headers)
+
+ if response.status_code == 403:
+ response = self.retry_rest('GET', url_rest_call)
+
+ if response.status_code != 200:
+ self.logger.error("REST call {} failed reason : {}"\
+ "status code : {}".format(url_rest_call,
+ response.content,
+ response.status_code))
+ raise vimconn.vimconnException("remove_primary_network_adapter : Failed to get "\
+ "network connection section")
+
+ data = response.content
+ data = data.split('
+
+ Specifies the available VM network connections
+ 0
+
+ """.format(url=url_rest_call)
+ response = self.perform_request(req_type='PUT',
+ url=url_rest_call,
+ headers=headers,
+ data=newdata)
+
+ if response.status_code == 403:
+ add_headers = {'Content-Type': headers['Content-Type']}
+ response = self.retry_rest('PUT', url_rest_call, add_headers, newdata)
+
+ if response.status_code != 202:
+ self.logger.error("REST call {} failed reason : {}"\
+ "status code : {} ".format(url_rest_call,
+ response.content,
+ response.status_code))
+ raise vimconn.vimconnException("remove_primary_network_adapter : Failed to update "\
+ "network connection section")
+ else:
+ nic_task = self.get_task_from_response(response.content)
+ result = self.client.get_task_monitor().wait_for_success(task=nic_task)
+ if result.get('status') == 'success':
+ self.logger.info("remove_primary_network_adapter(): VM {} conneced to "\
+ "default NIC type".format(vm_id))
+ else:
+ self.logger.error("remove_primary_network_adapter(): VM {} failed to "\
+ "connect NIC type".format(vm_id))
+
def add_network_adapter_to_vms(self, vapp, network_name, primary_nic_index, nicIndex, net, nic_type=None):
"""
Method to add network adapter type to vm
@@ -4648,8 +4733,8 @@ class vimconnector(vimconn.vimconnector):
None
"""
- self.logger.info("Add network adapter to VM: network_name {} nicIndex {}".\
- format(network_name, nicIndex))
+ self.logger.info("Add network adapter to VM: network_name {} nicIndex {} nic_type {}".\
+ format(network_name, nicIndex, nic_type))
try:
ip_address = None
floating_ip = False
@@ -4694,6 +4779,7 @@ class vimconnector(vimconn.vimconnector):
data = response.content
data = data.split('' not in data:
+ self.logger.debug("add_network_adapter PrimaryNIC not in data")
item = """{}{}
@@ -4712,6 +4798,7 @@ class vimconnector(vimconn.vimconnector):
data = data.replace('\n','\n{}\n'.format(item))
else:
+ self.logger.debug("add_network_adapter PrimaryNIC in data")
new_item = """{}true
@@ -4760,7 +4847,6 @@ class vimconnector(vimconn.vimconnector):
for vms in vapp.get_all_vms():
vm_id = vms.get('id').split(':')[-1]
-
url_rest_call = "{}/api/vApp/vm-{}/networkConnectionSection/".format(self.url, vm_id)
headers = {'Accept':'application/*+xml;version=' + API_VERSION,
@@ -4782,6 +4868,7 @@ class vimconnector(vimconn.vimconnector):
data = response.content
data = data.split('' not in data:
+ self.logger.debug("add_network_adapter PrimaryNIC not in data nic_type {}".format(nic_type))
item = """{}{}
@@ -4801,6 +4888,7 @@ class vimconnector(vimconn.vimconnector):
data = data.replace('\n','\n{}\n'.format(item))
else:
+ self.logger.debug("add_network_adapter PrimaryNIC in data nic_type {}".format(nic_type))
new_item = """{}true