diff --git a/devops-service/db/mongo/models/stack_template/stack_template_base.rb b/devops-service/db/mongo/models/stack_template/stack_template_base.rb index 910d824..45cd14e 100644 --- a/devops-service/db/mongo/models/stack_template/stack_template_base.rb +++ b/devops-service/db/mongo/models/stack_template/stack_template_base.rb @@ -1,16 +1,21 @@ require 'tempfile' require 'securerandom' +require "db/mongo/models/model_with_provider" module Devops module Model class StackTemplateBase < MongoModel + include ModelWithProvider + attr_accessor :id, :template_body, :provider types id: {type: String, empty: false}, provider: {type: String, empty: false}, template_body: {type: String, empty: false} + set_validators ::Validators::StackTemplate::TemplateContent + def initialize(attrs) self.id = attrs['id'] self.template_body = attrs['template_body'] diff --git a/devops-service/db/validators/stack_template/template_content.rb b/devops-service/db/validators/stack_template/template_content.rb new file mode 100644 index 0000000..10b9077 --- /dev/null +++ b/devops-service/db/validators/stack_template/template_content.rb @@ -0,0 +1,15 @@ +module Validators + class StackTemplate::TemplateContent < Base + + def valid? + @model.provider_instance.validate_template(@model.template_body) + true + end + + def message + "Invalid groups '#{@invalid_groups.join("', '")}'." + end + + end +end + diff --git a/devops-service/providers/ec2.rb b/devops-service/providers/ec2.rb index 4c609f0..64fbd9d 100644 --- a/devops-service/providers/ec2.rb +++ b/devops-service/providers/ec2.rb @@ -237,6 +237,11 @@ module Provider end end + def validate_stack_template template + r = cloud_formation.validate_template({'TemplateBody' => template}) + pp r.body + end + def delete_stack(stack) cloud_formation.delete_stack(stack.name) end diff --git a/devops-service/providers/openstack.rb b/devops-service/providers/openstack.rb index f4119e8..b551693 100644 --- a/devops-service/providers/openstack.rb +++ b/devops-service/providers/openstack.rb @@ -224,6 +224,11 @@ module Provider end end + def validate_stack_template template + r = orchestration.validate_template({'template' => template}) + pp r.body + end + def delete_stack(stack) orchestration.delete_stack(Fog::Orchestration::OpenStack::Stack.new({'id' => stack.id, 'stack_name' => stack.name})) end