def test_get_server_by_serial_with_no_registered_servers(self): self.mock_connection.get.side_effect = [ self.get_as_rest_collection([]) ] icsphelper = ICspHelper(self.mock_connection) server = icsphelper.get_server_by_serial('000') self.mock_connection.get.assert_called_once_with( '/rest/index/resources?category=osdserver&query=\'osdServerSerialNumber:"000"\'' ) self.assertIsNone(server)
def test_get_server_by_serial_with_matching_result(self): self.mock_connection.get.side_effect = [ self.get_as_rest_collection([DEFAULT_SERVER]) ] icsphelper = ICspHelper(self.mock_connection) server = icsphelper.get_server_by_serial('VCGYZ33007') expected = {'uri': '/rest/os-deployment-servers/123456'} self.mock_connection.get.assert_called_once_with( '/rest/index/resources?category=osdserver&query=\'osdServerSerialNumber:"VCGYZ33007"\'' ) self.assertEqual(server, expected)
def deploy_server(module): # Credentials icsp_host = module.params['icsp_host'] icsp_api_version = module.params['api_version'] username = module.params['username'] password = module.params['password'] # Build Plan Options server_id = module.params['server_id'] os_build_plan = module.params['os_build_plan'] custom_attributes = module.params['custom_attributes'] personality_data = module.params['personality_data'] ilo_address = module.params['server_ipAddress'] if ilo_address is None and server_id is None: return module.fail_json( msg= 'No server information provided. Param \"server_id\" or \"server_ipAddress\" must be specified.' ) con = hpICsp.connection(icsp_host, icsp_api_version) icsphelper = ICspHelper(con) # Create objects for all necessary resources. credential = {'userName': username, 'password': password} con.login(credential) jb = hpICsp.jobs(con) sv = hpICsp.servers(con) bp = icsphelper.get_build_plan(os_build_plan) if bp is None: return module.fail_json(msg='Cannot find OS Build plan: ' + os_build_plan) timeout = 600 while True: if ilo_address: server = icsphelper.get_server_by_ilo_address(ilo_address) else: server = icsphelper.get_server_by_serial(server_id) if server: break if timeout < 0: module.fail_json(msg='Cannot find server in ICSP.') return timeout -= 30 time.sleep(30) server = sv.get_server(server['uri']) if server['state'] == 'OK': return module.exit_json(changed=False, msg="Server already deployed.", ansible_facts={'icsp_server': server}) if custom_attributes: ca_list = [] for ca in custom_attributes: ca_list.append({ 'key': list(ca.keys())[0], 'values': [{ 'scope': 'server', 'value': str(list(ca.values())[0]) }] }) ca_list.extend(server['customAttributes']) server['customAttributes'] = ca_list sv.update_server(server) server_data = {"serverUri": server['uri'], "personalityData": None} build_plan_body = { "osbpUris": [bp['uri']], "serverData": [server_data], "stepNo": 1 } hpICsp.common.monitor_execution(jb.add_job(build_plan_body), jb) # If the playbook included network personalization, update the server to include it if personality_data: server_data['personalityData'] = personality_data network_config = {"serverData": [server_data]} # Monitor the execution of a nework personalization job. hpICsp.common.monitor_execution(jb.add_job(network_config), jb) server = sv.get_server(server['uri']) return module.exit_json(changed=True, msg='OS Deployed Successfully.', ansible_facts={'icsp_server': server})