def test_should_update_server_when_task_include_custom_attributes(self): self.mock_get_build_plan.return_value = DEFAULT_BUILD_PLAN self.mock_get_server_by_serial.return_value = DEFAULT_SERVER self.mock_server_service.get_server.side_effect = [ DEFAULT_SERVER, DEFAULT_SERVER_UPDATED ] self.mock_server_service.update_server.return_value = DEFAULT_SERVER_UPDATED task_with_custom_attr = deepcopy(TASK_OS_DEPLOYMENT) custom_attr = [{ "SSH_CERT": "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" }] task_with_custom_attr['custom_attributes'] = custom_attr mock_ansible_instance = create_ansible_mock(task_with_custom_attr) self.mock_ansible_module.return_value = mock_ansible_instance hpe_icsp_os_deployment.main() personality_data = deepcopy(DEFAULT_SERVER) personality_data['customAttributes'] = [{ 'values': [{ 'scope': 'server', 'value': "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" }], 'key': 'SSH_CERT' }] self.mock_server_service.update_server.assert_called_once_with( personality_data)
def test_should_update_server_when_task_include_custom_attributes(self): self.mock_connection.get.side_effect = [ self.get_as_rest_collection([DEFAULT_BUILD_PLAN]), self.get_as_rest_collection([DEFAULT_SERVER]) ] self.mock_server_service.get_server.side_effect = [ DEFAULT_SERVER, DEFAULT_SERVER_UPDATED ] self.mock_server_service.update_server.return_value = DEFAULT_SERVER_UPDATED task_with_custom_attr = deepcopy(TASK_OS_DEPLOYMENT) custom_attr = [{ "SSH_CERT": "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" }] task_with_custom_attr['custom_attributes'] = custom_attr self.mock_ansible_instance.params = task_with_custom_attr hpe_icsp_os_deployment.main() personality_data = deepcopy(DEFAULT_SERVER) personality_data['customAttributes'] = [{ 'values': [{ 'scope': 'server', 'value': "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" }], 'key': 'SSH_CERT' }] self.mock_server_service.update_server.assert_called_once_with( personality_data)
def test_should_deploy_server_with_server_ipAddress(self): task_os_deployment = dict(TASK_OS_DEPLOYMENT, server_id=None, server_ipAddress="16.124.135.239") self.mock_connection.get.side_effect = [ self.get_as_rest_collection([DEFAULT_BUILD_PLAN]), self.get_as_rest_collection([DEFAULT_SERVER]) ] self.mock_server_service.get_server.side_effect = [ DEFAULT_SERVER, DEFAULT_SERVER_UPDATED ] self.mock_ansible_instance.params = task_os_deployment hpe_icsp_os_deployment.main() times_sleep_called = self.mock_time_sleep.call_count self.assertEqual(0, times_sleep_called) self.mock_ansible_instance.exit_json.assert_called_once_with( changed=True, msg='OS Deployed Successfully.', ansible_facts={'icsp_server': DEFAULT_SERVER_UPDATED})
def test_should_fail_when_os_build_plan_not_found(self): self.mock_connection.get.side_effect = [self.get_as_rest_collection([])] self.mock_ansible_instance.params = TASK_OS_DEPLOYMENT hpe_icsp_os_deployment.main() self.mock_ansible_instance.fail_json.assert_called_once_with(msg='Cannot find OS Build plan: RHEL 7.2 x64')
def test_should_fail_when_no_serial_no_ilo_ip_in_params(self): task_os_deployment = dict(TASK_OS_DEPLOYMENT, server_id=None) self.mock_ansible_instance.params = task_os_deployment hpe_icsp_os_deployment.main() self.mock_ansible_instance.fail_json.assert_called_once_with( msg='No server information provided. Param \"server_id\" or \"server_ipAddress\" must be specified.')
def test_should_fail_when_os_build_plan_not_found(self): self.mock_connection.get.side_effect = [self.get_as_rest_collection([]), self.get_as_rest_collection([]), self.get_as_rest_collection([]), self.get_as_rest_collection([DEFAULT_SERVER])] self.mock_server_service.get_server.return_value = DEFAULT_SERVER self.mock_ansible_instance.params = TASK_OS_DEPLOYMENT hpe_icsp_os_deployment.main() self.mock_ansible_instance.fail_json.assert_called_once_with(msg='Cannot find OS Build plan: RHEL 7.2 x64')
def test_should_fail_when_os_build_plan_not_found(self): self.mock_get_build_plan.return_value = None self.mock_get_server_by_serial.side_effect = [ None, None, DEFAULT_SERVER ] self.mock_server_service.get_server.return_value = DEFAULT_SERVER mock_ansible_instance = create_ansible_mock(TASK_OS_DEPLOYMENT) self.mock_ansible_module.return_value = mock_ansible_instance hpe_icsp_os_deployment.main() mock_ansible_instance.fail_json.assert_called_once_with( msg='Cannot find OS Build plan: RHEL 7.2 x64')
def test_should_fail_after_try_get_server_by_serial_21_times(self): self.mock_connection.get.side_effect = [self.get_as_rest_collection([DEFAULT_BUILD_PLAN])] self.mock_server_service.get_server.return_value = DEFAULT_SERVER self.mock_ansible_instance.params = TASK_OS_DEPLOYMENT with mock.patch(MODULE_NAME + '.ICspHelper.get_server_by_serial') as mock_get_srv_ser: mock_get_srv_ser.return_value = None hpe_icsp_os_deployment.main() times_sleep_called = self.mock_time_sleep.call_count self.assertEqual(21, times_sleep_called) self.mock_ansible_instance.fail_json.assert_called_once_with(msg='Cannot find server in ICSP.')
def test_should_fail_after_try_get_server_by_serial_21_times(self): self.mock_get_build_plan.return_value = DEFAULT_BUILD_PLAN self.mock_get_server_by_serial.return_value = None self.mock_server_service.get_server.return_value = DEFAULT_SERVER mock_ansible_instance = create_ansible_mock(TASK_OS_DEPLOYMENT) self.mock_ansible_module.return_value = mock_ansible_instance hpe_icsp_os_deployment.main() times_sleep_called = self.mock_time_sleep.call_count self.assertEqual(21, times_sleep_called) mock_ansible_instance.fail_json.assert_called_once_with( msg='Cannot find server in ICSP.')
def test_should_fail_after_try_get_server_by_serial_21_times(self): self.mock_connection.get.side_effect = [self.get_as_rest_collection([DEFAULT_BUILD_PLAN])] self.mock_server_service.get_server.return_value = DEFAULT_SERVER self.mock_ansible_instance.params = TASK_OS_DEPLOYMENT with mock.patch(MODULE_NAME + '.get_server_by_serial') as mock_get_srv_ser: mock_get_srv_ser.return_value = None hpe_icsp_os_deployment.main() times_sleep_called = self.mock_time_sleep.call_count self.assertEqual(21, times_sleep_called) self.mock_ansible_instance.fail_json.assert_called_once_with(msg='Cannot find server in ICSP.')
def test_should_deploy_server(self): self.mock_connection.get.side_effect = [self.get_as_rest_collection([DEFAULT_BUILD_PLAN]), self.get_as_rest_collection([DEFAULT_SERVER])] self.mock_server_service.get_server.side_effect = [DEFAULT_SERVER, DEFAULT_SERVER_UPDATED] self.mock_ansible_instance.params = TASK_OS_DEPLOYMENT hpe_icsp_os_deployment.main() times_sleep_called = self.mock_time_sleep.call_count self.assertEqual(0, times_sleep_called) self.mock_ansible_instance.exit_json.assert_called_once_with(changed=True, msg='OS Deployed Successfully.', ansible_facts={ 'icsp_server': DEFAULT_SERVER_UPDATED})
def test_should_deploy_server(self): self.mock_connection.get.side_effect = [self.get_as_rest_collection([DEFAULT_BUILD_PLAN]), self.get_as_rest_collection([DEFAULT_SERVER])] self.mock_server_service.get_server.side_effect = [DEFAULT_SERVER, DEFAULT_SERVER_UPDATED] self.mock_ansible_instance.params = TASK_OS_DEPLOYMENT hpe_icsp_os_deployment.main() times_sleep_called = self.mock_time_sleep.call_count assert 0 == times_sleep_called self.mock_ansible_instance.exit_json.assert_called_once_with(changed=True, msg='OS Deployed Successfully.', ansible_facts={ 'icsp_server': DEFAULT_SERVER_UPDATED})
def test_should_not_add_server_when_already_present(self): server_already_deployed = dict(DEFAULT_SERVER, state="OK") self.mock_connection.get.side_effect = [self.get_as_rest_collection([DEFAULT_BUILD_PLAN]), self.get_as_rest_collection([DEFAULT_SERVER])] self.mock_server_service.get_server.return_value = server_already_deployed self.mock_ansible_instance.params = TASK_OS_DEPLOYMENT hpe_icsp_os_deployment.main() self.mock_time_sleep.assert_not_called() self.mock_ansible_instance.exit_json.assert_called_once_with( changed=False, msg="Server already deployed.", ansible_facts={'icsp_server': server_already_deployed} )
def test_should_not_add_server_when_already_present(self): server_already_deployed = dict(DEFAULT_SERVER, state="OK") self.mock_connection.get.side_effect = [self.get_as_rest_collection([DEFAULT_BUILD_PLAN]), self.get_as_rest_collection([DEFAULT_SERVER])] self.mock_server_service.get_server.return_value = server_already_deployed self.mock_ansible_instance.params = TASK_OS_DEPLOYMENT hpe_icsp_os_deployment.main() self.mock_time_sleep.assert_not_called() self.mock_ansible_instance.exit_json.assert_called_once_with( changed=False, msg="Server already deployed.", ansible_facts={'icsp_server': server_already_deployed} )
def test_should_fail_after_try_get_server_by_ilo_address_21_times(self): task_os_deployment = dict(TASK_OS_DEPLOYMENT, server_id=None, server_ipAddress="16.124.135.239") self.mock_connection.get.side_effect = [self.get_as_rest_collection([DEFAULT_BUILD_PLAN])] self.mock_server_service.get_server.return_value = DEFAULT_SERVER self.mock_ansible_instance.params = task_os_deployment with mock.patch(MODULE_NAME + '.ICspHelper.get_server_by_ilo_address') as mock_get_srv_ser: mock_get_srv_ser.return_value = None hpe_icsp_os_deployment.main() times_sleep_called = self.mock_time_sleep.call_count assert 21 == times_sleep_called self.mock_ansible_instance.fail_json.assert_called_once_with(msg='Cannot find server in ICSP.')
def test_should_update_server_when_task_include_network_personalization( self): self.mock_connection.get.side_effect = [ self.get_as_rest_collection([DEFAULT_BUILD_PLAN]), self.get_as_rest_collection([DEFAULT_SERVER]) ] self.mock_server_service.get_server.side_effect = [ DEFAULT_SERVER, DEFAULT_SERVER_UPDATED ] self.mock_icsp.common.monitor_execution.return_value = {} self.mock_icsp_jobs.add_job.return_value = {"job mock return"} task_with_network_personalization = deepcopy(TASK_OS_DEPLOYMENT) network_config = { "network_config": { "hostname": "test-web.io.fc.hpe.com", "domain": "demo.com" } } task_with_network_personalization['personality_data'] = network_config self.mock_ansible_instance.params = task_with_network_personalization hpe_icsp_os_deployment.main() server_data = { "serverUri": DEFAULT_SERVER['uri'], "personalityData": None } network_config = {"serverData": [server_data]} build_plan_body = { "osbpUris": [DEFAULT_BUILD_PLAN['uri']], "serverData": [server_data], "stepNo": 1 } monitor_build_plan = mock.call( self.mock_icsp_jobs.add_job(build_plan_body), self.mock_icsp_jobs) monitor_update_server = mock.call( self.mock_icsp_jobs.add_job(network_config), self.mock_icsp_jobs) calls = [monitor_build_plan, monitor_update_server] self.mock_icsp.common.monitor_execution.assert_has_calls(calls)
def test_should_not_add_server_when_already_present(self): server_already_deployed = dict(DEFAULT_SERVER, state="OK") self.mock_get_build_plan.return_value = DEFAULT_BUILD_PLAN self.mock_get_server_by_serial.return_value = { 'uri': '/rest/os-deployment-servers/123456' } self.mock_server_service.get_server.return_value = server_already_deployed mock_ansible_instance = create_ansible_mock(TASK_OS_DEPLOYMENT) self.mock_ansible_module.return_value = mock_ansible_instance hpe_icsp_os_deployment.main() self.mock_time_sleep.assert_not_called() mock_ansible_instance.exit_json.assert_called_once_with( changed=False, msg="Server already deployed.", ansible_facts={'icsp_server': server_already_deployed})
def test_should_update_server_when_task_include_custom_attributes(self): self.mock_connection.get.side_effect = [self.get_as_rest_collection([DEFAULT_BUILD_PLAN]), self.get_as_rest_collection([DEFAULT_SERVER])] self.mock_server_service.get_server.side_effect = [DEFAULT_SERVER, DEFAULT_SERVER_UPDATED] self.mock_server_service.update_server.return_value = DEFAULT_SERVER_UPDATED task_with_custom_attr = deepcopy(TASK_OS_DEPLOYMENT) custom_attr = [{"SSH_CERT": "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"}] task_with_custom_attr['custom_attributes'] = custom_attr self.mock_ansible_instance.params = task_with_custom_attr hpe_icsp_os_deployment.main() personality_data = deepcopy(DEFAULT_SERVER) personality_data['customAttributes'] = [ {'values': [{'scope': 'server', 'value': "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"}], 'key': 'SSH_CERT'}] self.mock_server_service.update_server.assert_called_once_with(personality_data)
def test_should_deploy_server(self): self.mock_get_build_plan.return_value = DEFAULT_BUILD_PLAN self.mock_get_server_by_serial.side_effect = [DEFAULT_SERVER] self.mock_server_service.get_server.side_effect = [ DEFAULT_SERVER, DEFAULT_SERVER_UPDATED ] mock_ansible_instance = create_ansible_mock(TASK_OS_DEPLOYMENT) self.mock_ansible_module.return_value = mock_ansible_instance hpe_icsp_os_deployment.main() times_sleep_called = self.mock_time_sleep.call_count self.assertEqual(0, times_sleep_called) mock_ansible_instance.exit_json.assert_called_once_with( changed=True, msg='OS Deployed Successfully.', ansible_facts={'icsp_server': DEFAULT_SERVER_UPDATED})
def test_should_update_server_when_task_include_network_personalization(self): self.mock_connection.get.side_effect = [self.get_as_rest_collection([DEFAULT_BUILD_PLAN]), self.get_as_rest_collection([DEFAULT_SERVER])] self.mock_server_service.get_server.side_effect = [DEFAULT_SERVER, DEFAULT_SERVER_UPDATED] self.mock_icsp.common.monitor_execution.return_value = {} self.mock_icsp_jobs.add_job.return_value = {"job mock return"} task_with_network_personalization = deepcopy(TASK_OS_DEPLOYMENT) network_config = {"network_config": {"hostname": "test-web.io.fc.hpe.com", "domain": "demo.com"}} task_with_network_personalization['personality_data'] = network_config self.mock_ansible_instance.params = task_with_network_personalization hpe_icsp_os_deployment.main() server_data = {"serverUri": DEFAULT_SERVER['uri'], "personalityData": None} network_config = {"serverData": [server_data]} build_plan_body = {"osbpUris": [DEFAULT_BUILD_PLAN['uri']], "serverData": [server_data], "stepNo": 1} monitor_build_plan = mock.call(self.mock_icsp_jobs.add_job(build_plan_body), self.mock_icsp_jobs) monitor_update_server = mock.call(self.mock_icsp_jobs.add_job(network_config), self.mock_icsp_jobs) calls = [monitor_build_plan, monitor_update_server] self.mock_icsp.common.monitor_execution.assert_has_calls(calls)