def test_parse_command_list(self):
     expected = {'cmd': 'bundle exec thin -p 3000'}
     p = serviceparser.Parser(
         'groupname', 'myservice',
         {'command': ['bundle', 'exec', 'thin', '-p', 3000]})
     p._parse_command('command')
     self.assertEquals(expected, p.app_json)
 def test_parse_labels_healthcheck_json_dict(self):
     my_hc = [{
         'portIndex': 0,
         'protocol': 'MYCHECKHEALTHCHECK',
         'timeoutSeconds': 20,
         'intervalSeconds': 5,
         'gracePeriodSeconds': 300,
         'maxConsecutiveFailures': 3
     }]
     expected = {
         'healthChecks': [{
             'portIndex': 0,
             'protocol': 'MYCHECKHEALTHCHECK',
             'timeoutSeconds': 20,
             'intervalSeconds': 5,
             'gracePeriodSeconds': 300,
             'maxConsecutiveFailures': 3
         }]
     }
     p = serviceparser.Parser(
         'groupname', 'myservice', {
             'labels': {
                 'com.microsoft.acs.dcos.marathon.healthchecks':
                 '[{"portIndex": 0, "protocol": "myhc", "timeout": 30}]'
             }
         })
     p._parse_labels('labels')
     self.assertEquals(sorted(expected), sorted(p.app_json))
Exemple #3
0
    def _parse_compose(self):
        """
        Parses the docker-compose file and returns the list of all deployments
        """
        all_deployments = []
        needs_ingress_controller = False
        for service_name, service_info in self.compose_data['services'].items(
        ):
            service_parser = serviceparser.Parser(self.group_info,
                                                  self.registry_info,
                                                  service_name, service_info)
            deployment_json = service_parser.get_deployment_json()
            service_json = service_parser.get_service_json()
            ingress_json = service_parser.get_ingress_json()

            # Check if need to deploy ingress controller or not
            if not needs_ingress_controller:
                needs_ingress_controller = service_parser.needs_ingress_controller

            all_deployments.append({
                'service_name': service_name,
                'deployment': {
                    'json': deployment_json
                },
                'service': {
                    'json': service_json
                },
                'ingress': {
                    'json': ingress_json
                }
            })

        return needs_ingress_controller, all_deployments
    def _parse_compose(self):
        """
        Parses the docker-compose file and returns the initial marathon.json file
        """
        group_name = self._get_group_id()
        all_apps = {'id': group_name, 'apps': []}

        self.nginx_helper.ensure_exists(self.compose_data)
        docker_registry = dockerregistry.DockerRegistry(
            self.registry_host, self.registry_username, self.registry_password,
            self.marathon_helper)

        for service_name, service_info in self.compose_data['services'].items(
        ):
            # Get the app_json for the service
            service_parser = serviceparser.Parser(group_name, service_name,
                                                  service_info)
            app_json = service_parser.get_app_json()

            # Add the registry auth URL if needed
            registry_auth_url = docker_registry.get_registry_auth_url()
            if registry_auth_url:
                app_json['uris'] = [registry_auth_url]
            all_apps['apps'].append(app_json)

        return all_apps
 def test_parse_user(self):
     expected = {
         'container': {
             'docker': {
                 'parameters': [{
                     'key': 'user',
                     'value': 'admin'
                 }]
             }
         }
     }
     p = serviceparser.Parser('groupname', 'myservice', {'user': '******'})
     p._parse_user('user')
     self.assertEquals(expected, p.app_json)
 def test_parse_stop_signal(self):
     expected = {
         'container': {
             'docker': {
                 'parameters': [{
                     'key': 'stop-signal',
                     'value': 'SIGUSR1'
                 }]
             }
         }
     }
     p = serviceparser.Parser('groupname', 'myservice',
                              {'stop_signal': 'SIGUSR1'})
     p._parse_stop_signal('stop_signal')
     self.assertEquals(expected, p.app_json)
    def test_compose_file(self):
        test_root = os.path.dirname(os.path.realpath(__file__))
        with open(test_root + '/test_compose_1.yml') as stream:
            compose_data = yaml.load(stream)
            all_apps = {'id': 'mygroup', 'apps': []}
            for service_name, service_info in compose_data['services'].items():
                # Get the app_json for the service
                service_parser = serviceparser.Parser('mygroup', service_name,
                                                      service_info)
                all_apps['apps'].append(service_parser.get_app_json())

            with open(test_root +
                      '/test_compose_1_expected.json') as json_stream:
                expected_json = json.loads(json_stream.read())
                self.assertEquals(sorted(expected_json), sorted(all_apps))
 def test_parse_working_dir(self):
     expected = {
         'container': {
             'docker': {
                 'parameters': [{
                     'key': 'work-dir',
                     'value': '/bin/blah'
                 }]
             }
         }
     }
     p = serviceparser.Parser('groupname', 'myservice',
                              {'working_dir': '/bin/blah'})
     p._parse_working_dir('working_dir')
     self.assertEquals(sorted(expected), sorted(p.app_json))
 def test_parse_entrypoint(self):
     expected = {
         'container': {
             'docker': {
                 'parameters': [{
                     'key': 'entrypoint',
                     'value': '/code/entrypoint.sh'
                 }]
             }
         }
     }
     p = serviceparser.Parser('groupname', 'myservice',
                              {'entrypoint': '/code/entrypoint.sh'})
     p._parse_entrypoint('entrypoint')
     self.assertEquals(expected, p.app_json)
 def test_parse_environment_list(self):
     expected = {
         'env': {
             'RACK_ENV': 'development',
             'SESSION_SECRET': '',
             'SHOW': 'true'
         }
     }
     p = serviceparser.Parser(
         'groupname', 'myservice', {
             'environment':
             ['RACK_ENV=development', 'SHOW=true', 'SESSION_SECRETBLAH']
         })
     p._parse_environment('environment')
     self.assertEquals(sorted(expected), sorted(p.app_json))
 def test_parse_labels_healthcheck_tcp(self):
     expected = {
         'healthChecks': [{
             'portIndex': 0,
             'protocol': 'TCP',
             'timeoutSeconds': 20,
             'intervalSeconds': 5,
             'gracePeriodSeconds': 300,
             'maxConsecutiveFailures': 3
         }]
     }
     p = serviceparser.Parser(
         'groupname', 'myservice',
         {'labels': ['com.microsoft.acs.dcos.marathon.healthcheck=true']})
     p._parse_labels('labels')
     self.assertEquals(sorted(expected), sorted(p.app_json))
 def test_parse_labels_list(self):
     expected = {
         'labels': {
             'com.example.description': 'Accounting webapp',
             'com.example.department': 'Finance',
             'com.example.label-with-empty-value': ''
         }
     }
     p = serviceparser.Parser(
         'groupname', 'myservice', {
             'labels': [
                 'com.example.description=Accounting webapp',
                 'com.example.department=Finance',
                 'com.example.label-with-empty-value'
             ]
         })
     p._parse_labels('labels')
     self.assertEquals(sorted(expected), sorted(p.app_json))
 def test_parse_extra_hosts(self):
     expected = {
         'container': {
             'docker': {
                 'parameters': [{
                     'key': 'add-host',
                     'value': 'somehost:162.242.195.82'
                 }, {
                     'key': 'add-host',
                     'value': 'otherhost:50.31.209.229'
                 }]
             }
         }
     }
     p = serviceparser.Parser('groupname', 'myservice', {
         'extra_hosts':
         ['somehost:162.242.195.82', 'otherhost:50.31.209.229']
     })
     p._parse_extra_hosts('extra_hosts')
     self.assertEquals(expected, p.app_json)
 def test_parse_entrypoint_list(self):
     expected = {
         'container': {
             'docker': {
                 'parameters': [{
                     'value':
                     'php -d zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so -d memory_limit=-1 vendor/bin/phpunit',
                     'key': 'entrypoint'
                 }]
             }
         }
     }
     p = serviceparser.Parser(
         'groupname', 'myservice', {
             'entrypoint': [
                 'php', '-d',
                 'zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so',
                 '-d', 'memory_limit=-1', 'vendor/bin/phpunit'
             ]
         })
     p._parse_entrypoint('entrypoint')
     self.assertEquals(sorted(expected), sorted(p.app_json))
 def test_parse_labels_healthcheck_dict_cmd(self):
     expected = {
         'healthChecks': [{
             'portIndex': 0,
             'command': {
                 'value': '/bin/bash blah'
             },
             'protocol': 'COMMAND',
             'timeoutSeconds': 20,
             'intervalSeconds': 5,
             'gracePeriodSeconds': 300,
             'maxConsecutiveFailures': 3
         }]
     }
     p = serviceparser.Parser(
         'groupname', 'myservice', {
             'labels': {
                 'com.microsoft.acs.dcos.marathon.healthcheck.command':
                 '/bin/bash blah'
             }
         })
     p._parse_labels('labels')
     self.assertEquals(sorted(expected), sorted(p.app_json))
 def test_to_quoted_string_empty(self):
     p = serviceparser.Parser('groupname', 'myservice', {})
     actual = p._to_quoted_string('')
     self.assertEquals('', actual)
 def test_parse_command_string(self):
     expected = {'cmd': "'bundle exec thin -p 3000'"}
     p = serviceparser.Parser('groupname', 'myservice',
                              {'command': 'bundle exec thin -p 3000'})
     p._parse_command('command')
     self.assertEquals(expected, p.app_json)
 def test_parse_mem_limit_no_unit(self):
     expected = {'mem': 1.0}
     p = serviceparser.Parser('groupname', 'myservice',
                              {'mem_limit': 1048576})
     p._parse_mem_limit('mem_limit')
     self.assertEquals(expected, p.app_json)
 def test_parse_mem_limit_missing(self):
     p = serviceparser.Parser('groupname', 'myservice', {})
     p._parse_mem_limit('mem_limit')
     self.assertEquals({}, p.app_json)
 def test_parse_cpu_shares_2(self):
     expected = {'cpus': 0.5}
     p = serviceparser.Parser('groupname', 'myservice', {'cpu_shares': 512})
     p._parse_cpu_shares('cpu_shares')
     self.assertEquals(expected, p.app_json)
 def test_parse_cpu_shares_missing(self):
     p = serviceparser.Parser('groupname', 'myservice', {})
     p._parse_cpu_shares('cpu_shares')
     self.assertEquals({}, p.app_json)
 def test_parse_image_missing(self):
     expected = {'container': {'docker': {'image': 'myreg/image:blah'}}}
     p = serviceparser.Parser('groupname', 'myservice',
                              {'image': 'myreg/image:blah'})
     p._parse_image('image')
     self.assertEquals(expected, p.app_json)
 def test_parse_mem_limit_g_no_space(self):
     expected = {'mem': 512.0}
     p = serviceparser.Parser('groupname', 'myservice',
                              {'mem_limit': '0.5G'})
     p._parse_mem_limit('mem_limit')
     self.assertEquals(expected, p.app_json)
 def test_parse_mem_limit_zero(self):
     expected = {'mem': 0.0}
     p = serviceparser.Parser('groupname', 'myservice', {'mem_limit': '0'})
     p._parse_mem_limit('mem_limit')
     self.assertEquals(expected, p.app_json)
 def test_parse_image_missing(self):
     p = serviceparser.Parser('groupname', 'myservice', {})
     p._parse_image('image')
     self.assertEquals({}, p.app_json)
 def test_parse_working_dir_missing(self):
     p = serviceparser.Parser('groupname', 'myservice', {})
     p._parse_working_dir('working_dir')
     self.assertEquals({}, p.app_json)
 def test_parse_command_missing(self):
     p = serviceparser.Parser('groupname', 'myservice', {})
     p._parse_command('command')
     self.assertEquals({}, p.app_json)
 def test_parse_privileged(self):
     expected = {'container': {'docker': {'privileged': 'true'}}}
     p = serviceparser.Parser('groupname', 'myservice',
                              {'privileged': 'true'})
     p._parse_privileged('privileged')
     self.assertEquals(expected, p.app_json)
 def test_parse_privileged_missing(self):
     p = serviceparser.Parser('groupname', 'myservice', {})
     p._parse_privileged('privileged')
     self.assertEquals({}, p.app_json)
 def test_parse_stop_signal_missing(self):
     p = serviceparser.Parser('groupname', 'myservice', {})
     p._parse_stop_signal('stop_signal')
     self.assertEquals({}, p.app_json)