Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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})
Example #4
0
    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')
Example #5
0
    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')
Example #7
0
    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')
Example #8
0
    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.')
Example #9
0
    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})
Example #12
0
    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})
Example #13
0
    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}
        )
Example #15
0
    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.')
Example #16
0
    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)
Example #17
0
    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)
Example #19
0
    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)