diff --git a/devops-client/lib/devops-client/output/stack.rb b/devops-client/lib/devops-client/output/stack.rb index b38ad59..2cf9e09 100644 --- a/devops-client/lib/devops-client/output/stack.rb +++ b/devops-client/lib/devops-client/output/stack.rb @@ -10,6 +10,7 @@ module Output title = I18n.t("output.title.stack.list") headers, rows = create_list else + puts 'Details are not displayed in table view' title = I18n.t("output.title.stack.show", id: @data["id"]) headers, rows = create_show end @@ -30,14 +31,14 @@ module Output def create_list abort(I18n.t("output.not_found.stack.list")) if @data.empty? - fields_to_output = %w(id deploy_env stack_template) + fields_to_output = %w(id deploy_env stack_template cloud_stack_id stack_status) fields_to_output << 'provider' unless provider_given? headers_and_rows(@data, fields_to_output) end def create_show - headers_and_rows([@data], %w(id deploy_env stack_template cloud_stack_id details)) + headers_and_rows([@data], %w(id deploy_env stack_template cloud_stack_id stack_status)) end end diff --git a/devops-client/locales/en.yml b/devops-client/locales/en.yml index 502343e..a13f9cb 100644 --- a/devops-client/locales/en.yml +++ b/devops-client/locales/en.yml @@ -196,7 +196,7 @@ en: template_preset_body: "Template preset body" stack_template: "Stack Template" cloud_stack_id: "Cloud Stack id" - details: "Details are not displayed in table view" + stack_status: Stack status title: flavor: list: "Flavors" diff --git a/devops-service/db/mongo/connectors/stack_template.rb b/devops-service/db/mongo/connectors/stack_template.rb index dc0b2f0..d1202b0 100644 --- a/devops-service/db/mongo/connectors/stack_template.rb +++ b/devops-service/db/mongo/connectors/stack_template.rb @@ -3,7 +3,8 @@ module Connectors include Helpers::InsertCommand, Helpers::ShowCommand, Helpers::ListCommand, - Helpers::DeleteCommand + Helpers::DeleteCommand, + Helpers::UpdateCommand def initialize(db) self.collection = db.collection('stack_templates') diff --git a/devops-service/db/mongo/models/stack/stack_base.rb b/devops-service/db/mongo/models/stack/stack_base.rb index 2926ab3..e2b9189 100644 --- a/devops-service/db/mongo/models/stack/stack_base.rb +++ b/devops-service/db/mongo/models/stack/stack_base.rb @@ -34,7 +34,8 @@ module Devops stack_template: stack_template, cloud_stack_id: cloud_stack_id, parameters: parameters, - details: details + details: details, + stack_status: stack_status } end diff --git a/devops-service/db/mongo/models/stack/stack_openstack.rb b/devops-service/db/mongo/models/stack/stack_openstack.rb index 68bf213..a8e5bfd 100644 --- a/devops-service/db/mongo/models/stack/stack_openstack.rb +++ b/devops-service/db/mongo/models/stack/stack_openstack.rb @@ -2,6 +2,10 @@ module Devops module Model class StackOpenstack < StackBase self.provider = 'openstack' + + def stack_status + details[:body]['stack']['stack_status'] if details + end end end end diff --git a/devops-service/db/mongo/mongo_connector.rb b/devops-service/db/mongo/mongo_connector.rb index b1434bd..c92c2f5 100644 --- a/devops-service/db/mongo/mongo_connector.rb +++ b/devops-service/db/mongo/mongo_connector.rb @@ -12,7 +12,7 @@ class MongoConnector delegate( [:images, :image, :image_insert, :image_delete, :image_update] => :images_connector, - [:stack_templates, :stack_template, :stack_template_insert, :stack_template_delete] => :stack_templates_connector, + [:stack_templates, :stack_template, :stack_template_insert, :stack_template_delete, :stack_template_update] => :stack_templates_connector, [:stacks, :stack, :stack_insert, :stack_delete, :stack_update] => :stacks_connector, [:available_images, :add_available_images, :delete_available_images] => :filters_connector, [:project, :projects_all, :projects, :project_names_with_envs, diff --git a/devops-service/lib/stack_template_presets/base.rb b/devops-service/lib/stack_template_presets/base.rb index aa692f7..3914b62 100644 --- a/devops-service/lib/stack_template_presets/base.rb +++ b/devops-service/lib/stack_template_presets/base.rb @@ -14,18 +14,18 @@ module Devops end def create_stack_from_preset(provider, stack_id, parameters) - find_or_create_stack_template!(provider) + template_name = find_or_create_stack_template!(provider) + puts "Using #{template_name} stack_template to create new stack" Model::StackFactory.create(provider, { 'id' => stack_id, 'provider' => provider, 'parameters' => parameters, - 'stack_template' => stack_template_name(provider) + 'stack_template' => template_name }) end def template_body - file_name = File.join("lib/stack_template_presets/#{id}.#{template_file_extension}") - File.read(file_name) + @template_body ||= File.read("lib/stack_template_presets/#{id}.#{template_file_extension}") end # some templates may be YAML files @@ -38,21 +38,32 @@ module Devops def find_or_create_stack_template!(provider) name = stack_template_name(provider) begin - Devops::Api2.settings.mongo.stack_template(name) + stack_template = Devops::Api2.settings.mongo.stack_template(name) + update_stack_template(stack_template) if stack_template.template_body != template_body rescue RecordNotFound - template = Model::StackTemplateFactory.create(provider, { - 'id' => name, - 'provider' => provider, - 'template_body' => template_body - }) - Devops::Api2.settings.mongo.stack_template_insert(template) + create_stack_template(provider) end + name end def stack_template_name(provider) "#{id}_#{provider}_preset" end + def create_stack_template(provider) + stack_template = Model::StackTemplateFactory.create(provider, { + 'id' => stack_template_name(provider), + 'provider' => provider, + 'template_body' => template_body + }) + Devops::Api2.settings.mongo.stack_template_insert(stack_template) + end + + def update_stack_template(stack_template) + stack_template.template_body = template_body + Devops::Api2.settings.mongo.stack_template_update(stack_template) + end + end end end \ No newline at end of file diff --git a/devops-service/lib/stack_template_presets/postgres_cluster.yml b/devops-service/lib/stack_template_presets/postgres_cluster.yml index 7f97c80..e023231 100644 --- a/devops-service/lib/stack_template_presets/postgres_cluster.yml +++ b/devops-service/lib/stack_template_presets/postgres_cluster.yml @@ -14,4 +14,5 @@ resources: properties: key_name: { get_param: key_name } image: 227f4be7-be1c-498d-ab88-54f8b5df249f - flavor: m1.small \ No newline at end of file + flavor: m1.small + network: devops-net-1 \ No newline at end of file diff --git a/devops-service/providers/openstack.rb b/devops-service/providers/openstack.rb index ed65a9f..e96df6d 100644 --- a/devops-service/providers/openstack.rb +++ b/devops-service/providers/openstack.rb @@ -199,7 +199,6 @@ module Provider tenant_id: connection_options[:openstack_tenant], parameters: stack.parameters ) - # byebug response[:body]['stack']['id'] rescue Excon::Errors::Conflict => e raise ProviderErrors::NameConflict @@ -211,6 +210,7 @@ module Provider end def stack_details(stack) + puts "Fetching information about stack #{stack.id}/#{stack.cloud_stack_id}" orchestration.show_stack_details(stack.id, stack.cloud_stack_id).data end