Exemple #1
0
def create(name, spec, inputs=None, tags=None):
    inputs = inputs or {}
    if isinstance(spec, provider.BaseProvider):
        spec = spec.directory

    # fullpath
    # TODO: (jnowak) find a better way to code this part
    if spec.startswith('/'):
        if os.path.isfile(spec):
            template = _compile_file(name, spec, inputs)
            yaml_template = yaml.load(StringIO(template))
            rs = apply_composer_file(spec, name, yaml_template, tags)
        else:
            r = create_resource(name, spec, inputs=inputs, tags=tags,)
            rs = [r]
        return rs

    repo, parsed_spec = Repository.parse(spec)

    if repo.is_composer_file(spec):
        path = repo.get_composer_file_path(spec)
        template = _compile_file(name, path, inputs)
        yaml_template = yaml.load(StringIO(template))
        rs = apply_composer_file(path, name, yaml_template, tags)
    else:
        r = create_resource(name, spec, inputs=inputs, tags=tags)
        rs = [r]
    return CreatedResources(rs)
Exemple #2
0
def create(name, spec, inputs=None, tags=None):
    inputs = inputs or {}
    if isinstance(spec, provider.BaseProvider):
        spec = spec.directory

    # fullpath
    # TODO: (jnowak) find a better way to code this part
    if spec.startswith('/'):
        if os.path.isfile(spec):
            template = _compile_file(name, spec, inputs)
            yaml_template = yaml.load(StringIO(template))
            rs = apply_composer_file(spec, name, yaml_template, tags)
        else:
            r = create_resource(name, spec, inputs=inputs, tags=tags,)
            rs = [r]
        return rs

    repo, parsed_spec = Repository.parse(spec)

    if repo.is_composer_file(spec):
        path = repo.get_composer_file_path(spec)
        template = _compile_file(name, path, inputs)
        yaml_template = yaml.load(StringIO(template))
        rs = apply_composer_file(path, name, yaml_template, tags)
    else:
        r = create_resource(name, spec, inputs=inputs, tags=tags)
        rs = [r]

    return CreatedResources(rs)
Exemple #3
0
    def create_from_spec(self, name, spec, args=None, tags=None):
        args = args or {}
        self.name = name
        if spec:
            if spec.startswith('/'):
                # it's full path, don't use repo
                self.base_path = spec
                metadata = read_meta(spec)
            else:
                repo, spec = Repository.parse(spec)
                metadata = repo.get_metadata(spec)
                self.base_path = repo.get_path(spec)
        else:
            metadata = deepcopy(self._metadata)
            self.base_path = spec  # TODO: remove this old method?

        if tags is None:
            tags = []
        m_tags = metadata.get('tags', [])
        tags.extend(m_tags)
        tags.append('resource={}'.format(name))

        inputs = metadata.get('input', {})

        self.auto_extend_inputs(inputs)
        self.db_obj = DBResource.from_dict(
            name,
            {
                'id': name,
                'name': name,
                'actions_path': metadata.get('actions_path', ''),
                'actions': metadata.get('actions', {}),
                'base_name': metadata.get('base_name', ''),
                'base_path': metadata.get('base_path', ''),
                'handler': metadata.get('handler', ''),
                'version': metadata.get('version', ''),
                'meta_inputs': inputs,
                'tags': tags,
                'state': RESOURCE_STATE.created.name,
                'managers': metadata.get('managers', [])
            })
        self.create_inputs(args)

        self.db_obj.save()
        LogItem.new({
            'resource': self.name,
            'action': 'run',
            'log': 'staged',
            'tags': self.tags}).save_lazy()
Exemple #4
0
    def create_from_spec(self, name, spec, args=None, tags=None):
        args = args or {}
        self.name = name
        if spec:
            if spec.startswith('/'):
                # it's full path, don't use repo
                self.base_path = spec
                metadata = read_meta(spec)
            else:
                repo, spec = Repository.parse(spec)
                metadata = repo.get_metadata(spec)
                self.base_path = repo.get_path(spec)
        else:
            metadata = deepcopy(self._metadata)
            self.base_path = spec  # TODO: remove this old method?

        if tags is None:
            tags = []
        m_tags = metadata.get('tags', [])
        tags.extend(m_tags)
        tags.append('resource={}'.format(name))

        inputs = metadata.get('input', {})

        self.auto_extend_inputs(inputs)
        self.db_obj = DBResource.from_dict(
            name, {
                'id': name,
                'name': name,
                'actions_path': metadata.get('actions_path', ''),
                'actions': metadata.get('actions', {}),
                'base_name': metadata.get('base_name', ''),
                'base_path': metadata.get('base_path', ''),
                'handler': metadata.get('handler', ''),
                'version': metadata.get('version', ''),
                'meta_inputs': inputs,
                'tags': tags,
                'state': RESOURCE_STATE.created.name,
                'managers': metadata.get('managers', [])
            })
        self.create_inputs(args)

        self.db_obj.save()
        LogItem.new({
            'resource': self.name,
            'action': 'run',
            'log': 'staged',
            'tags': self.tags
        }).save_lazy()
Exemple #5
0
def contains(spec, bool):
    repo, spec = Repository.parse(spec)
    if bool:
        result = Repository.contains(spec)
        if result:
            click.echo(click.style("Exists", fg='green'))
            return
    else:
        result_version = Repository.what_version(spec)
        if result_version:
            click.echo(click.style("Found: {}".format(result_version),
                                   fg='green'))
            return
    spec_data = yaml.safe_dump(spec, default_flow_style=False)
    click.echo(click.style("Not found: \n{}".format(spec_data),
                           fg='red'))
Exemple #6
0
def contains(spec, bool):
    repo, spec = Repository.parse(spec)
    if bool:
        result = Repository.contains(spec)
        if result:
            click.echo(click.style("Exists", fg='green'))
            return
    else:
        result_version = Repository.what_version(spec)
        if result_version:
            click.echo(click.style("Found: {}".format(result_version),
                                   fg='green'))
            return
    spec_data = yaml.safe_dump(spec, default_flow_style=False)
    click.echo(click.style("Not found: \n{}".format(spec_data),
                           fg='red'))
Exemple #7
0
def create_resources(base_path, resources, tags=None):
    add_tags = tags
    created_resources = []
    for r in resources:
        resource_name = r['id']
        inputs = r.get('input', {})
        node = r.get('location', None)
        values_from = r.get('values_from')
        spec = r.get('from', None)
        tags = r.get('tags', [])
        if add_tags:
            tags.extend(add_tags)
        is_composer_file = False
        if spec.startswith('./') or spec.endswith('.yaml'):
            spec = os.path.join(base_path, '..', spec)
            spec = os.path.abspath(os.path.normpath(spec))
            is_composer_file = True

        new_resources = create(resource_name, spec, inputs=inputs, tags=tags)
        created_resources += new_resources

        if not spec.startswith('/'):
            repo, parsed_spec = Repository.parse(spec)
            is_composer_file = repo.is_composer_file(spec)
        if not is_composer_file:
            if node:
                node = load_resource(node)
                r = new_resources[0]
                node.connect(r, mapping={})
                r.add_tags('location={}'.format(node.name))

            update_inputs(resource_name, inputs)

            if values_from:
                from_resource = load_resource(values_from)
                from_resource.connect_with_events(r, use_defaults=False)

    return created_resources
Exemple #8
0
def create_resources(base_path, resources, tags=None):
    add_tags = tags
    created_resources = []
    for r in resources:
        resource_name = r['id']
        inputs = r.get('input', {})
        node = r.get('location', None)
        values_from = r.get('values_from')
        spec = r.get('from', None)
        tags = r.get('tags', [])
        if add_tags:
            tags.extend(add_tags)
        is_composer_file = False
        if spec.startswith('./') or spec.endswith('.yaml'):
            spec = os.path.join(base_path, '..', spec)
            spec = os.path.abspath(os.path.normpath(spec))
            is_composer_file = True

        new_resources = create(resource_name, spec, inputs=inputs, tags=tags)
        created_resources += new_resources

        if not spec.startswith('/'):
            repo, parsed_spec = Repository.parse(spec)
            is_composer_file = repo.is_composer_file(spec)
        if not is_composer_file:
            if node:
                node = load_resource(node)
                r = new_resources[0]
                node.connect(r, mapping={})
                r.add_tags('location={}'.format(node.name))

            update_inputs(resource_name, inputs)

            if values_from:
                from_resource = load_resource(values_from)
                from_resource.connect_with_events(r, use_defaults=False)

    return created_resources
Exemple #9
0
def remove(spec):
    repo, spec = Repository.parse(spec)
    repo.remove_single(spec)
Exemple #10
0
def remove(spec):
    repo, spec = Repository.parse(spec)
    repo.remove_single(spec)