2015-03-06 12:20:30 +03:00
|
|
|
module Devops
|
|
|
|
|
module Model
|
|
|
|
|
class StackBase < MongoModel
|
|
|
|
|
|
2015-07-14 16:51:40 +03:00
|
|
|
attr_accessor :id, :project, :deploy_env, :stack_template,
|
|
|
|
|
:cloud_stack_id, :provider, :parameters, :details
|
2015-03-06 12:20:30 +03:00
|
|
|
|
|
|
|
|
types id: {type: String, empty: false},
|
2015-04-16 17:54:40 +03:00
|
|
|
provider: {type: String, empty: false},
|
2015-07-13 20:26:13 +03:00
|
|
|
project: {type: String, nil: true},
|
|
|
|
|
deploy_env: {type: String, nil: true},
|
2015-07-14 16:51:40 +03:00
|
|
|
stack_template: {type: String, empty: false},
|
|
|
|
|
cloud_stack_id: {type: String, nil: true}
|
|
|
|
|
# details: {type: String, nil: true}
|
2015-03-06 12:20:30 +03:00
|
|
|
|
|
|
|
|
def initialize attrs={}
|
2015-07-14 16:51:40 +03:00
|
|
|
self.provider = self.class.provider
|
|
|
|
|
|
2015-03-06 12:20:30 +03:00
|
|
|
self.id = attrs['id']
|
|
|
|
|
self.project = attrs['project']
|
|
|
|
|
self.deploy_env = attrs['deploy_env']
|
|
|
|
|
self.stack_template = attrs['stack_template']
|
2015-07-14 16:51:40 +03:00
|
|
|
self.cloud_stack_id = attrs['cloud_stack_id']
|
2015-04-16 17:54:40 +03:00
|
|
|
self.parameters = attrs['parameters']
|
2015-07-14 16:51:40 +03:00
|
|
|
self.details = attrs['details']
|
2015-03-06 12:20:30 +03:00
|
|
|
self
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def to_hash_without_id
|
|
|
|
|
{
|
|
|
|
|
provider: provider,
|
2015-04-16 17:54:40 +03:00
|
|
|
project: project,
|
|
|
|
|
deploy_env: deploy_env,
|
|
|
|
|
stack_template: stack_template,
|
|
|
|
|
cloud_stack_id: cloud_stack_id,
|
2015-07-14 16:51:40 +03:00
|
|
|
parameters: parameters,
|
2015-07-15 16:25:06 +03:00
|
|
|
details: details,
|
|
|
|
|
stack_status: stack_status
|
2015-03-06 12:20:30 +03:00
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
2015-07-14 16:51:40 +03:00
|
|
|
def create_stack_in_cloud!
|
|
|
|
|
begin
|
|
|
|
|
self.cloud_stack_id = provider_class.create_stack(self)
|
|
|
|
|
rescue ProviderErrors::NameConflict
|
|
|
|
|
raise InvalidRecord.new "Duplicate key error: stack with name '#{id}' already exists in cloud"
|
|
|
|
|
end
|
|
|
|
|
end
|
2015-04-16 17:54:40 +03:00
|
|
|
|
2015-07-14 16:51:40 +03:00
|
|
|
def delete_stack_in_cloud!
|
|
|
|
|
provider_class.delete_stack(self)
|
2015-03-06 12:20:30 +03:00
|
|
|
end
|
|
|
|
|
|
2015-07-14 16:51:40 +03:00
|
|
|
def sync_details!
|
2015-07-15 18:37:27 +03:00
|
|
|
self.details = provider_class.stack_details(self)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def resources
|
|
|
|
|
provider_class.stack_resources(self)
|
2015-03-06 12:20:30 +03:00
|
|
|
end
|
|
|
|
|
|
2015-07-14 16:51:40 +03:00
|
|
|
def template_body
|
|
|
|
|
Devops::Api2.settings.mongo.stack_template(stack_template).template_body
|
2015-03-06 12:20:30 +03:00
|
|
|
end
|
|
|
|
|
|
2015-07-14 16:51:40 +03:00
|
|
|
class << self
|
|
|
|
|
attr_accessor :provider
|
|
|
|
|
|
|
|
|
|
# attrs should include:
|
|
|
|
|
# - id (String)
|
|
|
|
|
# - deploy_env (String)
|
|
|
|
|
# - stack_template (String)
|
|
|
|
|
def create(attrs)
|
|
|
|
|
model = new(attrs)
|
|
|
|
|
model.create_stack_in_cloud!
|
|
|
|
|
model
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def build_from_bson(attrs)
|
|
|
|
|
attrs['id'] = attrs["_id"]
|
|
|
|
|
self.new(attrs)
|
|
|
|
|
end
|
2015-04-16 17:54:40 +03:00
|
|
|
end
|
|
|
|
|
|
2015-07-14 16:51:40 +03:00
|
|
|
private
|
|
|
|
|
|
|
|
|
|
def provider_class
|
|
|
|
|
Provider::ProviderFactory.get(provider)
|
2015-04-16 17:54:40 +03:00
|
|
|
end
|
|
|
|
|
|
2015-03-06 12:20:30 +03:00
|
|
|
end
|
2015-02-12 13:01:05 +03:00
|
|
|
end
|
|
|
|
|
end
|