mirror of
https://github.com/fog/fog-aws.git
synced 2022-11-09 13:50:52 -05:00
d48d376e9c
* take the liberty of correcting Aws naming
145 lines
4.8 KiB
Ruby
145 lines
4.8 KiB
Ruby
require 'fog/core/model'
|
|
|
|
module Fog
|
|
module AWS
|
|
class ElasticBeanstalk
|
|
class Environment < Fog::Model
|
|
identity :name, :aliases => 'EnvironmentName'
|
|
attribute :id, :aliases => 'EnvironmentId'
|
|
|
|
attribute :application_name, :aliases => 'ApplicationName'
|
|
attribute :cname, :aliases => 'CNAME'
|
|
attribute :cname_prefix, :aliases => 'CNAMEPrefix'
|
|
attribute :created_at, :aliases => 'DateCreated'
|
|
attribute :updated_at, :aliases => 'DateUpdated'
|
|
attribute :updated_at, :aliases => 'DateUpdated'
|
|
attribute :description, :aliases => 'Description'
|
|
attribute :endpoint_url, :aliases => 'EndpointURL'
|
|
attribute :health, :aliases => 'Health'
|
|
attribute :resources, :aliases => 'Resources'
|
|
attribute :solution_stack_name, :aliases => 'SolutionStackName'
|
|
attribute :status, :aliases => 'Status'
|
|
attribute :template_name, :aliases => 'TemplateName'
|
|
attribute :version_label, :aliases => 'VersionLabel'
|
|
attribute :option_settings, :aliases => 'OptionSettings'
|
|
attribute :options_to_remove, :aliases => 'OptionsToRemove'
|
|
|
|
def healthy?
|
|
health == 'Green'
|
|
end
|
|
|
|
def ready?
|
|
status == 'Ready'
|
|
end
|
|
|
|
def terminated?
|
|
status == 'Terminated'
|
|
end
|
|
|
|
# Returns the current live resources for this environment
|
|
def live_resources
|
|
requires :id
|
|
data = service.describe_environment_resources({'EnvironmentId' => id}).body['DescribeEnvironmentResourcesResult']['EnvironmentResources']
|
|
data.delete('EnvironmentName') # Delete the environment name from the result, only return actual resources
|
|
data
|
|
end
|
|
|
|
# Returns the load balancer object associated with the environment.
|
|
def load_balancer(elb_connection = Fog::AWS[:elb])
|
|
if resources.nil?
|
|
elb_connection.load_balancers.get(live_resources['LoadBalancers'].first['Name'])
|
|
else
|
|
elb_connection.load_balancers.get(resources['LoadBalancer']['LoadBalancerName'])
|
|
end
|
|
end
|
|
|
|
# Return events related to this version
|
|
def events
|
|
requires :id
|
|
service.events.all({'EnvironmentId' => id})
|
|
end
|
|
|
|
# Restarts the app servers in this environment
|
|
def restart_app_server
|
|
requires :id
|
|
service.restart_app_server({'EnvironmentId' => id})
|
|
reload
|
|
end
|
|
|
|
# Rebuilds the environment
|
|
def rebuild
|
|
requires :id
|
|
service.rebuild_environment({'EnvironmentId' => id})
|
|
reload
|
|
end
|
|
|
|
def swap_cnames(source)
|
|
requires :name
|
|
service.swap_environment_cnames({
|
|
'SourceEnvironmentName' => source.name,
|
|
'DestinationEnvironmentName' => name
|
|
})
|
|
source.reload
|
|
reload
|
|
end
|
|
|
|
# Return the version object for this environment
|
|
def version
|
|
requires :application_name, :version_label
|
|
service.versions.get(application_name, version_label)
|
|
end
|
|
|
|
# Update the running version of this environment
|
|
def version=(new_version)
|
|
requires :id
|
|
if new_version.is_a?(String)
|
|
new_version_label = new_version
|
|
elsif new_version.is_a?(Fog::AWS::ElasticBeanstalk::Version)
|
|
new_version_label = new_version.label
|
|
else
|
|
raise "Unknown type for new_version, must be either String or Fog::AWS::ElasticBeanstalk::Version"
|
|
end
|
|
|
|
if new_version.nil?
|
|
raise "Version label not specified."
|
|
end
|
|
|
|
data = service.update_environment({
|
|
'EnvironmentId' => id,
|
|
'VersionLabel' => new_version_label
|
|
}).body['UpdateEnvironmentResult']
|
|
|
|
merge_attributes(data)
|
|
end
|
|
|
|
def destroy
|
|
requires :id
|
|
service.terminate_environment({'EnvironmentId' => id})
|
|
true
|
|
end
|
|
|
|
def save
|
|
requires :name, :application_name
|
|
requires_one :template_name, :solution_stack_name
|
|
|
|
options = {
|
|
'ApplicationName' => application_name,
|
|
'CNAMEPrefix' => cname_prefix,
|
|
'Description' => description,
|
|
'EnvironmentName' => name,
|
|
'OptionSettings' => option_settings,
|
|
'OptionsToRemove' => options_to_remove,
|
|
'SolutionStackName' => solution_stack_name,
|
|
'TemplateName' => template_name,
|
|
'VersionLabel' => version_label
|
|
}
|
|
options.delete_if {|key, value| value.nil?}
|
|
|
|
data = service.create_environment(options).body['CreateEnvironmentResult']
|
|
merge_attributes(data)
|
|
true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|