class CapistranoAwsAutodiscover
Constants
- Instance
- VERSION
Public Class Methods
define_servers()
click to toggle source
# File lib/capistrano-aws-autodiscover.rb, line 8 def self.define_servers instances = CapistranoAwsAutodiscover.new(fetch(:aws_key_id), fetch(:secret_access_key), fetch(:aws_region), fetch(:ec2_project), fetch(:ec2_env)).execute instances.each do |s| server s.dns, roles: s.roles, user: fetch(:user) end end
new(key, secret, aws_region, project, environment)
click to toggle source
# File lib/capistrano-aws-autodiscover.rb, line 15 def initialize(key, secret, aws_region, project, environment) @key = key @secret = secret @region = aws_region @project = project.to_s @environment = environment.to_s end
Public Instance Methods
execute()
click to toggle source
# File lib/capistrano-aws-autodiscover.rb, line 23 def execute instances = ec2.describe_instances(instance_ids: tagged_instances, filters: [ {name: "instance-state-name", values: ["running"]}, {name: "tag:Env", values: [@environment]}, {name: "tag:Project", values: [@project]}, {name: "tag-key", values: ["Roles"]} ] ) instances = instances.reservations.map {|r| r.instances }.flatten server_definitions(instances) end
Private Instance Methods
ec2()
click to toggle source
# File lib/capistrano-aws-autodiscover.rb, line 39 def ec2 @ec2 ||= begin Aws.config = { access_key_id: @key, secret_access_key: @secret, region: @region } Aws::EC2::Client.new end end
make_args(instance)
click to toggle source
# File lib/capistrano-aws-autodiscover.rb, line 61 def make_args(instance) dns = instance.public_dns_name roles_tag = instance.tags.find {|t| t.key == "Roles"}.value roles = roles_tag.split(/,|;/) Instance.new(dns, roles) end
server_definitions(instances)
click to toggle source
# File lib/capistrano-aws-autodiscover.rb, line 57 def server_definitions(instances) instances.map {|i| make_args(i)} end
tagged_instances()
click to toggle source
# File lib/capistrano-aws-autodiscover.rb, line 48 def tagged_instances tags = ec2.describe_tags({filters: [ {name: "resource-type", values: ["instance"]}, {name: "key", values: ["Project"]}] }) tags.tags.map(&:resource_id) end