def test_create_duplicated_host(self): Host().insert({'name': 'host1', 'ips': ['192.168.1.5', '192.168.2.5']}) status = Host().insert({ 'name': 'host1', 'ips': ['192.168.1.5', '192.168.2.5'] }) self.assertEqual(status, False, 'Added duplicated host')
def test_find_all_hosts(self): Host().insert({'name': 'host1', 'ips': ['192.168.1.2', '192.168.2.3']}) Host().insert({'name': 'host2', 'ips': ['192.168.1.4', '192.168.2.5']}) hosts = Host().find() self.assertIsInstance(hosts.data, list, 'Hosts data is not a list') self.assertEqual(len(hosts.data), 2, 'There are more than 2 hosts')
def test_find_host(self): h = {'name': 'host1', 'ips': ['192.168.1.5', '192.168.2.5']} keys = ['_id', 'name', 'ips', 'deleted'] Host().insert(h) host = Host().find() self.assertNotEqual(host, None, 'Host obj not found') self.assertIsInstance(host.data, dict, 'Host data is not a dict') self.assertListEqual(list(host.data.keys()), keys, 'Keys are not equal') self.assertEqual(host.data['name'], h['name'], 'name not equal') self.assertEqual(host.data['ips'], h['ips'], 'ips not equal')
def test_create_host(self): status = Host().insert({ 'name': 'host1', 'ips': ['192.168.1.5', '192.168.2.5'] }) self.assertEqual(status, True, 'Host not added')
def test_run_playbook(self): self.playbook = 'test-alpine-ssh' self.hosts = ['alpine'] ips = '172.17.0.' response_list = DockerEngine().run_container_operation( operation='list', data={'all': False}) if len(response_list) > 0: ips = ips + str(2 + len(response_list)) else: ips = ips + '2' h = Host().insert({'name': self.hosts[0], 'ips': [ips]}) self.assertEqual(h, True, 'Host not added') p = Playbook().insert({ 'name': self.playbook, 'playbook': { 'hosts': self.hosts[0], 'remote_user': '******', 'tasks': [{ 'name': 'Test debug msg', 'debug': { 'msg': 'This works!' } }] } }) self.assertEqual(p, True, 'Playbook not added') container = DockerEngine().run_container_operation( operation='run', data={ 'image': 'sickp/alpine-sshd', 'detach': True }) self.assertNotEqual(container, False, 'Cointainer not running') self.container_id = container.short_id response = AnsibleEngine().run_playbook(hosts=self.hosts, playbook=self.playbook, passwords={ 'conn_pass': '******', 'become_pass': '******' }) self.assertNotEqual(response, False, 'Playbook did not run') self.assertNotEqual(response.find('PLAY [alpine]'), -1) c = DockerEngine().get_container_by_id(self.container_id) DockerEngine().run_operation_in_object(object=c, operation='stop', data={})
def test_dump_hosts_to_file_without_name(self): Host().insert({'name': 'host1', 'ips': ['192.168.1.5', '192.168.2.5']}) host = Host().find() self.assertNotEqual(host, None, 'Host obj not found') path = hosts_to_file(hosts=[host.data], domain=self.domain, root=self.root, base_path=self.base_path, sub_path=self.sub_path_hosts) self.assertEqual(os.path.exists(path), True, 'File does not exists') file = open(path, 'r') content = '[host1]\n192.168.1.5\n192.168.2.5\n' self.assertEqual(file.read(), content, 'File content is not correct') shutil.rmtree('./files-generated', ignore_errors=False, onerror=None)
def test_run_playbook(self): ips = '172.17.0.' response_list = DockerEngine().run_container_operation( operation='list', data={ 'all': False } ) if len(response_list) > 0: ips = ips + str(2 + len(response_list)) else: ips = ips + '2' h = Host().insert({ 'name': self.hosts[0], 'ips': ips }) self.assertEqual(h, True, 'Host not added') p = Playbook().insert({ 'name': self.playbook, 'playbook': { 'hosts': self.hosts[0], 'remote_user': '******', 'tasks': [ { 'name': 'Test debug msg', 'debug': { 'msg': 'This works!' } } ] } }) self.assertEqual(p, True, 'Playbook not added') container = DockerEngine().run_container_operation( operation='run', data={ 'image': 'sickp/alpine-sshd', 'detach': True } ) self.assertNotEqual(container, False, 'Cointainer not running') self.container_id = container.short_id # Run the playbook response = self.app.post( self.path, headers=self.headers, data=json.dumps({ 'hosts': self.hosts, 'playbook': self.playbook, 'passwords': { 'conn_pass': '******', 'become_pass': '******' } }) ) self.assertEqual(response.status_code, 200, 'Playbook failed running') self.assertNotEqual(json.loads(response.data)['result'] .find('PLAY [alpine]'), -1) # Stop the container c = DockerEngine().get_container_by_id(self.container_id) DockerEngine().run_operation_in_object( object=c, operation='stop', data={} )
def delete(): data = validate_or_abort(ProvisionSchemaDelete, request.get_json()) return response_by_success( Host().remove(criteria={'name': data['name']}), is_remove=True)
def put(): data = validate_or_abort(ProvisionSchemaPut, request.get_json()) return response_by_success(Host().update( criteria={'name': data['name']}, data=data['data']))
def post(): data = validate_or_abort(BaseHost, request.get_json()) return response_by_success(Host().insert(data))
def post(): data = validate_or_abort(QuerySchema, request.get_json()) host = Host().find( criteria=data['query'], projection=data['filter'] if 'filter' in data.keys() else {}) return parse_data(BaseHost, host.data)
def get(name): user = Host().find(criteria={'name': name}) return parse_data(BaseHost, user.data)