예제 #1
0
    def get_configuration(self):
        """Returns the job configuration represented by this JSON

        :returns: The job configuration
        :rtype: :class:`job.configuration.configuration.JobConfiguration`:
        """
        config = JobConfiguration()

        for name, mount_dict in self._config['mounts'].items():
            if mount_dict['type'] == 'host':
                config.add_mount(HostMountConfig(name,
                                                 mount_dict['host_path']))
            elif mount_dict['type'] == 'volume':
                config.add_mount(
                    VolumeMountConfig(name, mount_dict['driver'],
                                      mount_dict['driver_opts']))

        default_workspace = self._config['output_workspaces']['default']
        if default_workspace:
            config.default_output_workspace = default_workspace
        for output, workspace in self._config['output_workspaces'][
                'outputs'].items():
            config.add_output_workspace(output, workspace)

        config.priority = self._config['priority']

        for name, value in self._config['settings'].items():
            config.add_setting(name, value)

        return config
예제 #2
0
    def test_convert_config_to_v6_json(self):
        """Tests calling convert_config_to_v6_json()"""

        # Try configuration with nothing set
        config = RecipeConfiguration()
        json = convert_config_to_v6_json(config)
        RecipeConfigurationV6(config=json.get_dict(),
                              do_validate=True)  # Revalidate

        # Try configuration with a variety of values
        config = RecipeConfiguration()
        config.add_mount(HostMountConfig('mount_1', '/the/host/path'))
        config.add_mount(
            VolumeMountConfig('mount_2', 'driver', {
                'opt_1': 'foo',
                'opt_2': 'bar'
            }))
        config.default_output_workspace = 'workspace_1'
        config.add_output_workspace('output_2', 'workspace_2')
        config.priority = 999
        config.add_setting('setting_1', 'Hello')
        config.add_setting('setting_2', 'Scale!')
        json = convert_config_to_v6_json(config)
        RecipeConfigurationV6(config=json.get_dict(),
                              do_validate=True)  # Revalidate
        self.assertSetEqual(set(json.get_dict()['mounts'].keys()),
                            {'mount_1', 'mount_2'})
        self.assertEqual(json.get_dict()['priority'], 999)
        self.assertSetEqual(set(json.get_dict()['settings'].keys()),
                            {'setting_1', 'setting_2'})
예제 #3
0
    def test_add_mount(self):
        """Tests calling RecipeConfiguration.add_mount()"""

        configuration = RecipeConfiguration()
        host_mount = HostMountConfig('mount_1', '/the/host/path')
        configuration.add_mount(host_mount)

        vol_mount = VolumeMountConfig('mount_1', driver='driver', driver_opts={})
        with self.assertRaises(InvalidRecipeConfiguration) as context:
            configuration.add_mount(vol_mount)
        self.assertEqual(context.exception.error.name, 'DUPLICATE_MOUNT')