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)
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)
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()
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()
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'))
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'))
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
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
def remove(spec): repo, spec = Repository.parse(spec) repo.remove_single(spec)
def remove(spec): repo, spec = Repository.parse(spec) repo.remove_single(spec)