Пример #1
0
    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')
Пример #2
0
    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')
Пример #3
0
    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')
Пример #4
0
    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')
Пример #5
0
    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={})
Пример #6
0
    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={}
        )
Пример #8
0
 def delete():
     data = validate_or_abort(ProvisionSchemaDelete, request.get_json())
     return response_by_success(
         Host().remove(criteria={'name': data['name']}), is_remove=True)
Пример #9
0
 def put():
     data = validate_or_abort(ProvisionSchemaPut, request.get_json())
     return response_by_success(Host().update(
         criteria={'name': data['name']}, data=data['data']))
Пример #10
0
 def post():
     data = validate_or_abort(BaseHost, request.get_json())
     return response_by_success(Host().insert(data))
Пример #11
0
 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)
Пример #12
0
 def get(name):
     user = Host().find(criteria={'name': name})
     return parse_data(BaseHost, user.data)