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)
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)
# 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)