def test_find_app_by_name_no_slash(self):
     p = dockercomposeparser.DockerComposeParser(
         self.test_compose_file, 'masterurl', None, None, None, None, None,
         'groupname', 'groupqualifier', '1',
         'registryhost', 'registryuser', 'registrypassword', 100)
     actual = p._find_app_by_name('app_name', {'apps':[{'id': 'app_name'}, {'id': 'second_app_name'}]})
     self.assertEquals('app_name', actual['id'])
 def test_create_private_ips_none_json(self):
     p = dockercomposeparser.DockerComposeParser(
         self.test_compose_file, 'masterurl', None, None, None, None, None,
         'groupname', 'groupqualifier', '1',
         'registryhost', 'registryuser', 'registrypassword', 100)
     actual = p._create_or_update_private_ips(None, 'new/group/id')
     self.assertEquals({}, actual)
 def test_find_app_by_name_not_found(self):
     p = dockercomposeparser.DockerComposeParser(
         self.test_compose_file, 'masterurl', None, None, None, None, None,
         'groupname', 'groupqualifier', '1',
         'registryhost', 'registryuser', 'registrypassword', 100)
     actual = p._find_app_by_name('missing_name', {'apps':[{'id': 'my_group/first_app_name'}, {'id': 'my_group/app_name'}]})
     self.assertIsNone(actual)
 def test_find_app_by_name_subfolders(self):
     p = dockercomposeparser.DockerComposeParser(
         self.test_compose_file, 'masterurl', None, None, None, None, None,
         'groupname', 'groupqualifier', '1',
         'registryhost', 'registryuser', 'registrypassword', 100)
     actual = p._find_app_by_name('app_name', {'apps':[{'id': 'my_group/version/app_name'}, {'id': 'my_group/anotherversion/second_app_name'}]})
     self.assertEquals('my_group/version/app_name', actual['id'])
 def test_find_app_by_name_no_json(self):
     p = dockercomposeparser.DockerComposeParser(
         self.test_compose_file, 'masterurl', None, None, None, None, None,
         'groupname', 'groupqualifier', '1',
         'registryhost', 'registryuser', 'registrypassword', 100)
     actual = p._find_app_by_name('app_name', None)
     self.assertIsNone(actual)
    def test_add_hosts_no_private_ip(self):
        p = dockercomposeparser.DockerComposeParser(
            self.test_compose_file, 'masterurl', None, None, None, None, None,
            'groupname', 'groupqualifier', '1',
            'registryhost', 'registryuser', 'registrypassword', 100)
        marathon_apps = [{
            'id': '/mygroup/service-a',
            'container': {
                'docker': {
                    'parameters': []
                }
        }}, 
        {
            'id': '/mygroup/service-b',
            'container': {
            }
        },
  {
            'id': '/mygroup/service-c',
            'container': {
                'docker': {
                    'portMappings':[{
                        'labels': {
                            'VIP_0': '1.1.1.1'
                        }
                    }]
                }
            }
        },]

        marathon_app = marathon_apps[0]
        expected = {'container': {'docker': {'parameters': [{'value': 'service-c:1.1.1.1', 'key': 'add-host'}]}}, 'id': '/mygroup/service-a'}
        vip_tuples = {'/mygroup/service-c': '1.1.1.1', '/mygroup/service-a': '1.1.1.3'}
        p._add_hosts(marathon_apps, marathon_app, vip_tuples)
        self.assertEquals(expected, marathon_app)
    def test_create_private_ips_multiple_apps(self):
        p = dockercomposeparser.DockerComposeParser(
            self.test_compose_file, 'masterurl', None, None, None, None, None,
            'groupname', 'groupqualifier', '1',
            'registryhost', 'registryuser', 'registrypassword', 100)

        apps_json = {'apps':[{
            'id': 'group_1/app_1',
            'container': {
                'docker': {
                    'portMappings':[{
                        'labels': {},
                        'servicePort': 10000}]
                    }
                }
            },
            {
                'id': 'group_2/app_2',
                'container': {
                'docker': {
                    'portMappings':[{
                        'labels': {},
                        'servicePort': 10001
                    }]
                    }
                }
            }]
        }

        expected = {'new/group/id/app_1': '10.64.0.0', 'new/group/id/app_2': '10.64.0.1'}
        actual = p._create_or_update_private_ips(apps_json, 'new/group/id/')
        self.assertEquals(expected, actual)
 def test_has_private_ip_missing_service(self):
     p = dockercomposeparser.DockerComposeParser(
         self.test_compose_file, 'masterurl', None, None, None, None, None,
         'groupname', 'groupqualifier', '1',
         'registryhost', 'registryuser', 'registrypassword', 100)
     marathon_apps = [{
         'id': '/mygroup/service-a',
         'container': {
     }}]
     self.assertFalse(p._has_private_ip(marathon_apps, '/mygroup/service-b'))
    def test_add_dependencies_no_tuple(self):
        p = dockercomposeparser.DockerComposeParser(
            self.test_compose_file, 'masterurl', None, None, None, None, None,
            'groupname', 'groupqualifier', '1',
            'registryhost', 'registryuser', 'registrypassword', 100)
        marathon_app = {}
        vip_tuples = {'/mygroup/service-a': (0, 3)}
        service_info = {'depends_on': 'service-b'}

        p._add_dependencies(marathon_app, vip_tuples, service_info)
        self.assertEquals({}, marathon_app)
 def test_has_private_ip_case_insensitive(self):
     p = dockercomposeparser.DockerComposeParser(
         self.test_compose_file, 'masterurl', None, None, None, None, None,
         'groupname', 'groupqualifier', '1',
         'registryhost', 'registryuser', 'registrypassword', 100)
     marathon_apps = [{
         'id': '/mygroup/service-a',
         'container': {
             'docker': {
                 'portMappings': [{
                     'labels': {
                         'VIP_1': '1.1.1.1'
                     }
                 }]
             }
         }}]
     self.assertFalse(p._has_private_ip(marathon_apps, '/mygroup/SERVICE-a'))
 def test_add_host_alias(self):
     p = dockercomposeparser.DockerComposeParser(
         self.test_compose_file, 'masterurl', None, None, None, None, None,
         'groupname', 'groupqualifier', '1',
         'registryhost', 'registryuser', 'registrypassword', 100)
     marathon_app = {'container': {
         'docker': {
             'parameters': []
         }
     }}
     vip_tuples = {'/mygroup/service-b': '1.1.1.1', '/mygroup/service-a': '1.1.1.2'}
     expected = {'container': {
         'docker': {
             'parameters': [{'value': 'myalias:1.1.1.2', 'key': 'add-host'}]
             }
         }
     }
     p._add_host(marathon_app, '/mygroup/service-a', vip_tuples,'myalias')
     self.assertEquals(expected, marathon_app)
Esempio n. 12
0
if __name__ == '__main__':
    arguments = process_arguments()
    init_logger(arguments.verbose)

    cluster_info = ClusterInfo(arguments.acs_host, arguments.acs_port,
                               arguments.acs_username, arguments.acs_password,
                               arguments.acs_private_key,
                               arguments.api_endpoint_url,
                               arguments.orchestrator)

    registry_info = RegistryInfo(arguments.registry_host,
                                 arguments.registry_username,
                                 arguments.registry_password)

    group_info = GroupInfo(arguments.group_name, arguments.group_qualifier,
                           arguments.group_version)

    try:
        with dockercomposeparser.DockerComposeParser(
                arguments.compose_file, cluster_info, registry_info,
                group_info,
                arguments.deploy_ingress_controller) as compose_parser:
            compose_parser.deploy()
            sys.exit(0)
    except Exception as deployment_exc:
        import traceback
        traceback.print_exc()
        logging.error('Error occurred during deployment: \n%s', deployment_exc)
        sys.exit(1)
 def test_create_parser(self):
     p = dockercomposeparser.DockerComposeParser(
         self.test_compose_file, 'masterurl', None, None, None, None, None,
         'groupname', 'groupqualifier', '1',
         'registryhost', 'registryuser', 'registrypassword', 100)
     self.assertIsNotNone(p)
Esempio n. 14
0
    # Don't show INFO log messages from requests library
    logging.getLogger("requests").setLevel(logging.WARNING)


if __name__ == '__main__':
    arguments = process_arguments()
    init_logger(arguments.verbose)
    try:
        with dockercomposeparser.DockerComposeParser(
                arguments.compose_file,
                arguments.dcos_master_url,
                arguments.acs_host,
                arguments.acs_port,
                arguments.acs_username,
                arguments.acs_password,
                arguments.acs_private_key,
                arguments.group_name,
                arguments.group_qualifier,
                arguments.group_version,
                arguments.registry_host,
                arguments.registry_username,
                arguments.registry_password,
                arguments.minimum_health_capacity,
                check_dcos_version=True) as compose_parser:
            compose_parser.deploy()
            sys.exit(0)
    except Exception as deployment_exc:
        logging.error('Error occurred during deployment: %s', deployment_exc)
        sys.exit(1)