diff --git a/lib/ansible/modules/cloud/vmware/vmware_vcenter_settings.py b/lib/ansible/modules/cloud/vmware/vmware_vcenter_settings.py index ff08e75adb6002..2cc883a3692668 100644 --- a/lib/ansible/modules/cloud/vmware/vmware_vcenter_settings.py +++ b/lib/ansible/modules/cloud/vmware/vmware_vcenter_settings.py @@ -225,10 +225,14 @@ class VmwareVcenterSettings(PyVmomi): def __init__(self, module): super(VmwareVcenterSettings, self).__init__(module) + self.option_manager = self.content.setting if not self.is_vcenter(): self.module.fail_json(msg="You have to connect to a vCenter server!") + def get_default_setting_value(self, setting_key): + return self.option_manager.QueryOptions(name=setting_key)[0].value + def ensure(self): """Manage settings for a vCenter server""" result = dict(changed=False, msg='') @@ -237,9 +241,28 @@ def ensure(self): db_task_retention = self.params['database'].get('task_retention') db_event_cleanup = self.params['database'].get('event_cleanup') db_event_retention = self.params['database'].get('event_retention') - runtime_unique_id = self.params['runtime_settings'].get('unique_id') - runtime_managed_address = self.params['runtime_settings'].get('managed_address') - runtime_server_name = self.params['runtime_settings'].get('vcenter_server_name') + + # runtime default value + runtime_unique_id_default = self.get_default_setting_value('instance.id') + runtime_managed_address_default = self.get_default_setting_value('VirtualCenter.ManagedIP') + runtime_server_name_default = self.get_default_setting_value('VirtualCenter.InstanceName') + + if self.params['runtime_settings']: + runtime_unique_id = self.params['runtime_settings'].get('unique_id') + runtime_managed_address = self.params['runtime_settings'].get('managed_address') + runtime_server_name = self.params['runtime_settings'].get('vcenter_server_name') + + if runtime_unique_id is None: + runtime_unique_id = runtime_unique_id_default + if runtime_managed_address is None: + runtime_managed_address = runtime_managed_address_default + if runtime_server_name is None: + runtime_server_name = runtime_server_name_default + else: + runtime_unique_id = runtime_unique_id_default + runtime_managed_address = runtime_managed_address_default + runtime_server_name = runtime_server_name_default + directory_timeout = self.params['user_directory'].get('timeout') directory_query_limit = self.params['user_directory'].get('query_limit') directory_query_limit_size = self.params['user_directory'].get('query_limit_size') @@ -289,8 +312,7 @@ def ensure(self): result['timeout_long_operations'] = timeout_long_operations result['logging_options'] = logging_options change_option_list = [] - option_manager = self.content.setting - for setting in option_manager.setting: + for setting in self.option_manager.setting: # Database if setting.key == 'VirtualCenter.MaxDBConnection' and setting.value != db_max_connections: changed = True @@ -554,7 +576,7 @@ def ensure(self): message += changed_suffix if not self.module.check_mode: try: - option_manager.UpdateOptions(changedValue=change_option_list) + self.option_manager.UpdateOptions(changedValue=change_option_list) except (vmodl.fault.SystemError, vmodl.fault.InvalidArgument) as invalid_argument: self.module.fail_json( msg="Failed to update option(s) as one or more OptionValue contains an invalid value: %s" %