def update(cls, instance, data): # Plugin name can't be changed. Plugins sync operation uses # name for searching plugin data on the file system. new_name = data.get('name') if new_name is not None and instance.name != new_name: raise errors.InvalidData( "Plugin can't be renamed. Trying to change name " "of the plugin {0} to {1}".format(instance.name, new_name)) graphs = {} data_graphs = data.pop("graphs", []) for graph in data_graphs: graphs[graph.pop('type')] = graph data.pop("deployment_tasks", []) # could not be updated # We must save tags info in the roles_metadata on the update data = cls._process_tags(data) super(Plugin, cls).update(instance, data) for graph_type, graph_data in six.iteritems(graphs): existing_graph = DeploymentGraph.get_for_model( instance, graph_type=graph_type) if existing_graph: DeploymentGraph.update(existing_graph, graph_data) else: DeploymentGraph.create_for_model(graph_data, instance, graph_type)
def update(cls, instance, data): """Update existing Release instance with specified parameters. :param instance: Release instance :param data: dictionary of key-value pairs as object fields :returns: Release instance """ # in order to be compatible with old API, let's drop input # roles array. since fuel 7.0 we don't use it anymore, and # we don't require it even for old releases. data.pop("roles", None) graphs = data.pop("graphs", {}) deployment_tasks = data.pop("deployment_tasks", []) existing_default_graph = DeploymentGraph.get_for_model( instance, consts.DEFAULT_DEPLOYMENT_GRAPH_TYPE) if (existing_default_graph and len(deployment_tasks)) \ or not existing_default_graph: graphs[consts.DEFAULT_DEPLOYMENT_GRAPH_TYPE] = \ {'tasks': deployment_tasks} release_obj = super(Release, cls).update(instance, data) for graph_type, graph_data in six.iteritems(graphs): g = DeploymentGraph.get_for_model(instance, graph_type) if g: DeploymentGraph.update(g, graph_data) else: DeploymentGraph.create_for_model( graph_data, instance, graph_type) return release_obj
def test_get_deployment_tasks(self): dg = DeploymentGraph.get_for_model(self.plugin_adapter.plugin) DeploymentGraph.update( dg, {'tasks': self.env.get_default_plugin_deployment_tasks()}) depl_task = self.plugin_adapter.get_deployment_tasks()[0] self.assertEqual(depl_task['parameters'].get('cwd'), self.plugin_adapter.slaves_scripts_path)
def test_get_deployment_tasks_params_not_changed(self): expected = 'path/to/some/dir' dg = DeploymentGraph.get_for_model(self.plugin_adapter.plugin) DeploymentGraph.update( dg, { 'tasks': self.env.get_default_plugin_deployment_tasks( parameters={'cwd': expected}) }) depl_task = self.plugin_adapter.get_deployment_tasks()[0] self.assertEqual(depl_task['parameters'].get('cwd'), expected)
def test_get_deployment_tasks_params_not_changed(self): expected = 'path/to/some/dir' dg = DeploymentGraph.get_for_model(self.plugin_adapter.plugin) DeploymentGraph.update( dg, { 'tasks': self.env.get_default_plugin_deployment_tasks( parameters={'cwd': expected}) } ) depl_task = self.plugin_adapter.get_deployment_tasks()[0] self.assertEqual(depl_task['parameters'].get('cwd'), expected)
def test_get_deployment_tasks(self): dg = DeploymentGraph.get_for_model(self.plugin_adapter.plugin) DeploymentGraph.update( dg, { 'tasks': self.env.get_default_plugin_deployment_tasks() } ) depl_task = self.plugin_adapter.get_deployment_tasks()[0] self.assertEqual(depl_task['parameters'].get('cwd'), self.plugin_adapter.slaves_scripts_path)
def get_deployment_graph(cls, instance, graph_type=None): """Get deployment graph based on release version. :param instance: Release instance :type instance: models.Release :param graph_type: deployment graph type :type graph_type: basestring|None :returns: list of deployment tasks :rtype: list """ if graph_type is None: graph_type = consts.DEFAULT_DEPLOYMENT_GRAPH_TYPE env_version = instance.environment_version deployment_graph = DeploymentGraph.get_for_model(instance, graph_type) if deployment_graph: deployment_tasks = DeploymentGraph.get_tasks(deployment_graph) else: # deployment tasks list should always be returned deployment_tasks = [] if graph_type == consts.DEFAULT_DEPLOYMENT_GRAPH_TYPE and \ not deployment_tasks: # upload default legacy graphs if env_version.startswith('5.0'): deployment_tasks = yaml.load( graph_configuration.DEPLOYMENT_50) elif env_version.startswith('5.1') \ or env_version.startswith('6.0'): deployment_tasks = yaml.load( graph_configuration.DEPLOYMENT_51_60) if deployment_graph: if deployment_tasks: DeploymentGraph.update( deployment_graph, {'tasks': deployment_tasks}) else: # create graph anyway deployment_graph = DeploymentGraph.create_for_model( {'tasks': deployment_tasks}, instance) if deployment_graph: metadata = DeploymentGraph.get_metadata(deployment_graph) else: metadata = {} metadata['tasks'] = deployment_tasks return metadata
def get_deployment_graph(cls, instance, graph_type=None): """Get deployment graph based on release version. :param instance: Release instance :type instance: models.Release :param graph_type: deployment graph type :type graph_type: basestring|None :returns: list of deployment tasks :rtype: list """ if graph_type is None: graph_type = consts.DEFAULT_DEPLOYMENT_GRAPH_TYPE env_version = instance.environment_version deployment_graph = DeploymentGraph.get_for_model(instance, graph_type) if deployment_graph: deployment_tasks = DeploymentGraph.get_tasks(deployment_graph) else: # deployment tasks list should always be returned deployment_tasks = [] if graph_type == consts.DEFAULT_DEPLOYMENT_GRAPH_TYPE and \ not deployment_tasks: # upload default legacy graphs if env_version.startswith('5.0'): deployment_tasks = yaml.load(graph_configuration.DEPLOYMENT_50) elif env_version.startswith('5.1') \ or env_version.startswith('6.0'): deployment_tasks = yaml.load( graph_configuration.DEPLOYMENT_51_60) if deployment_graph: if deployment_tasks: DeploymentGraph.update(deployment_graph, {'tasks': deployment_tasks}) else: # create graph anyway deployment_graph = DeploymentGraph.create_for_model( {'tasks': deployment_tasks}, instance) if deployment_graph: metadata = DeploymentGraph.get_metadata(deployment_graph) else: metadata = {} metadata['tasks'] = deployment_tasks return metadata
def update(cls, instance, data): graphs = {} data_graphs = data.pop("graphs", []) for graph in data_graphs: graphs[graph.pop('type')] = graph data.pop("deployment_tasks", []) # could not be updated super(Plugin, cls).update(instance, data) for graph_type, graph_data in six.iteritems(graphs): existing_graph = DeploymentGraph.get_for_model( instance, graph_type=graph_type) if existing_graph: DeploymentGraph.update(existing_graph, graph_data) else: DeploymentGraph.create_for_model( graph_data, instance, graph_type)
def update(cls, instance, data): graphs = {} data_graphs = data.pop("graphs", []) for graph in data_graphs: graphs[graph.pop('type')] = graph data.pop("deployment_tasks", []) # could not be updated super(Plugin, cls).update(instance, data) for graph_type, graph_data in six.iteritems(graphs): existing_graph = DeploymentGraph.get_for_model( instance, graph_type=graph_type) if existing_graph: DeploymentGraph.update(existing_graph, graph_data) else: DeploymentGraph.create_for_model(graph_data, instance, graph_type)
def update(cls, instance, data): """Update existing Release instance with specified parameters. :param instance: Release instance :param data: dictionary of key-value pairs as object fields :returns: Release instance """ # in order to be compatible with old API, let's drop input # roles array. since fuel 7.0 we don't use it anymore, and # we don't require it even for old releases. data.pop("roles", None) deployment_tasks = data.pop("deployment_tasks", None) release_obj = super(Release, cls).update(instance, data) if deployment_tasks: deployment_graph_instance = DeploymentGraph.get_for_model(instance) DeploymentGraph.update(deployment_graph_instance, {'tasks': deployment_tasks}) return release_obj
def update(cls, instance, data): """Update existing Release instance with specified parameters. :param instance: Release instance :param data: dictionary of key-value pairs as object fields :returns: Release instance """ # in order to be compatible with old API, let's drop input # roles array. since fuel 7.0 we don't use it anymore, and # we don't require it even for old releases. data.pop("roles", None) graphs = {} graphs_list = data.pop('graphs', []) for graph in graphs_list: graphs[graph.pop('type')] = graph deployment_tasks = data.pop("deployment_tasks", []) existing_default_graph = DeploymentGraph.get_for_model( instance, consts.DEFAULT_DEPLOYMENT_GRAPH_TYPE) if (existing_default_graph and len(deployment_tasks)) \ or not existing_default_graph: graphs[consts.DEFAULT_DEPLOYMENT_GRAPH_TYPE] = \ {'tasks': deployment_tasks} release_obj = super(Release, cls).update(instance, data) for graph_type, graph_data in six.iteritems(graphs): g = DeploymentGraph.get_for_model(instance, graph_type) if g: DeploymentGraph.update(g, graph_data) else: DeploymentGraph.create_for_model(graph_data, instance, graph_type) return release_obj