Class: Elba::Cli

Inherits:
Thor
  • Object
show all
Includes:
Thor::Actions
Defined in:
lib/elba/cli.rb

Overview

The Command Line Interface for Elba.

Instance Method Summary collapse

Instance Method Details

#attach(*instances) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/elba/cli.rb', line 104

def attach(*instances)
  elb = if options[:to]
    find_elb(name: options[:to])
  else
    case
    when elbs.size == 0
      error "No load balancer available"
      return
    when elbs.size == 1
      warn "Using default load balancer: #{elbs.first.id}"
      elbs.first
    when elbs.size > 1
      warn "You must specify an ELB"
      print_table elbs_with_index
      choice = ask("Use:", :yellow, limited_to: for_choice).to_i
      find_elb(choice: choice)
    end
  end

  instances.map do |instance|
    client.attach(instance, elb,
      on_success: -> { success "#{instance} successfully attached to #{elb.id}" },
      on_failure: ->(reason) {
        error "Unable to attach #{instance} to #{elb.id}"
        warn "Reason: #{reason}"
      }
    )
  end
end

#attached(balancer_name = nil, porcelain = ) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/elba/cli.rb', line 76

def attached(balancer_name = nil, porcelain = options[:porcelain])
  unless balancer_name
    error "You must specify an ELB"
    return
  end

  elb = find_elb(name: balancer_name)

  unless elb
    error "Could not find balancer"
    return
  end

  instances = elb.reload.instances

  if porcelain
    say instances.join(' ')
  else
    say " * #{elb.id}"
    instances.each do |instance_id|
      success "   - #{instance_id}"
    end
  end
end

#detach(*instances) ⇒ Object



136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/elba/cli.rb', line 136

def detach(*instances)
  elbs.reload.select { |elb| (elb.instances & instances).any? }.tap do |lbs|
    warn "Unable to find any ELB to detach #{instances.join(', ')}" if lbs.empty?
    lbs.map do |elb|
      target_instances = elb.instances & instances
      client.detach(target_instances, elb,
        on_success: -> { success "#{target_instances.join(', ')} successfully detached from #{elb.id}" },
        on_failure: ->(reason) {
          error "Unable to detach #{target_instances.join(', ')} from #{elb.id}"
          warn "Reason: #{reason}"
        }
      )
    end
  end
end

#list(with_instances = ) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/elba/cli.rb', line 65

def list(with_instances = options[:instances])
  say "#{elbs.size} ELB found:"
  elbs.map do |elb|
    say " * #{elb.id}"
    elb.instances.map { |i| success "   - #{i}" } if with_instances
  end
end