- if 'config' in vim_account:
- if vim_account.get('config')=="" and (sdn_controller or sdn_port_mapping):
- raise ClientException("clearing config is incompatible with updating SDN info")
- if vim_account.get('config')=="":
- vim_config = None
- else:
- vim_config = yaml.safe_load(vim_account['config'])
- if sdn_controller:
- sdnc = self._client.sdnc.get(sdn_controller)
- vim_config['sdn-controller'] = sdnc['_id']
- if sdn_port_mapping:
- with open(sdn_port_mapping, 'r') as f:
- vim_config['sdn-port-mapping'] = yaml.safe_load(f.read())
- vim_account['config'] = vim_config
- #vim_account['config'] = json.dumps(vim_config)
- http_code, resp = self._http.put_cmd(endpoint='{}/{}'.format(self._apiBase,vim['_id']),
- postfields_dict=vim_account)
- # print 'HTTP CODE: {}'.format(http_code)
- # print 'RESP: {}'.format(resp)
- if http_code in (200, 201, 202, 204):
- if wait:
- # In this case, 'resp' always returns None, so 'resp['id']' cannot be used.
- # Use the previously obtained id instead.
- wait_id = vim_id_for_wait
- # Wait for status for VI instance update
- self._wait(wait_id)
- else:
- pass
+ if config is not None:
+ if not config and (sdn_controller or sdn_port_mapping):
+ # If config is empty (clearing config)
+ raise ClientException(
+ "clearing config is incompatible with updating SDN info"
+ )
+ vim_config = config
+ if sdn_controller == "":
+ vim_config["sdn-controller"] = None
+ vim_config["sdn-port-mapping"] = None