Class: Qops::Environment
- Inherits:
-
Object
show all
- Includes:
- Quandl::Configurable
- Defined in:
- lib/qops/environment.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(profile: nil, force_config: false, verbose: false) ⇒ Environment
Returns a new instance of Environment.
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/qops/environment.rb', line 38
def initialize(profile: nil, force_config: false, verbose: false)
@_aws_config = { region: configuration.region }
@_aws_config[:profile] = profile unless profile.nil?
@_force_config = force_config
@_verbose = verbose
if profile.nil?
opsworks.config.credentials.credentials
else
parsed_creds = Aws.shared_config.instance_variable_get('@parsed_credentials')[profile]
role_credentials = Aws::AssumeRoleCredentials.new(
role_arn: parsed_creds['role_arn'],
role_session_name: profile
)
@_aws_config[:credentials] = role_credentials
puts Rainbow("Using AWS profile #{profile}").bg(:black).green
end
Aws.config.update(@_aws_config)
puts Rainbow('Forcing Qops to read the opsworks parameter strictly from yaml') if force_config
%w[deploy_type region app_name].each do |v|
fail "Please configure #{v} before continuing." unless option?(v)
end
fail 'Please configure stack_id or stack_name before continuing' unless option?('stack_id') || option?('stack_name')
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_sym, *arguments, &block) ⇒ Object
rubocop:disable Style/MethodMissing
228
229
230
231
232
233
234
|
# File 'lib/qops/environment.rb', line 228
def method_missing(method_sym, *arguments, &block) if configuration.respond_to?(method_sym)
configuration.send(method_sym, *arguments, &block)
else
super
end
end
|
Class Method Details
.file_name ⇒ Object
9
10
11
|
# File 'lib/qops/environment.rb', line 9
def self.file_name
'opsworks'
end
|
.notifiers ⇒ Object
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/qops/environment.rb', line 13
def self.notifiers
return @_notifiers unless @_notifiers.nil?
if File.exist?('config/quandl/slack.yml')
@_notifiers ||= Quandl::Slack.autogenerate_notifiers
else
@_notifiers = false
print_with_colour('Slack notifications disabled. Could not find slack configuration at: config/quandl/slack.yml', :warning)
end
rescue NoMethodError => e
print_with_colour("Slack notifications disabled due to an error. #{e}", :warning)
end
|
.print_with_colour(message, level = :normal) ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/qops/environment.rb', line 25
def self.print_with_colour(message, level = :normal)
case level
when :error
puts Rainbow(message).bg(:black).red
when :warning
puts Rainbow(message).bg(:black).yellow
when :good
puts Rainbow(message).bg(:black).green
else
puts message
end
end
|
Instance Method Details
#application_id(options = {}) ⇒ Object
107
108
109
110
|
# File 'lib/qops/environment.rb', line 107
def application_id(options = {})
return configuration.application_id if force_config?
apps(options).first.app_id
end
|
#apps(_options = {}) ⇒ Object
103
104
105
|
# File 'lib/qops/environment.rb', line 103
def apps(_options = {})
opsworks.describe_apps(stack_id: stack_id).apps
end
|
#autoscale_type ⇒ Object
128
129
130
|
# File 'lib/qops/environment.rb', line 128
def autoscale_type
configuration.autoscale_type || nil
end
|
#chef_version(options = {}) ⇒ Object
99
100
101
|
# File 'lib/qops/environment.rb', line 99
def chef_version(options = {})
stack(options).configuration_manager.version.to_f
end
|
#clean_commands_to_ignore ⇒ Object
142
143
144
|
# File 'lib/qops/environment.rb', line 142
def clean_commands_to_ignore
configuration.clean_commands_to_ignore.present? ? configuration.clean_commands_to_ignore : %w[update_custom_cookbooks update_agent configure shutdown]
end
|
#command_log_lines ⇒ Object
116
117
118
|
# File 'lib/qops/environment.rb', line 116
def command_log_lines
configuration.command_log_lines || 100
end
|
#cookbook_json ⇒ Object
162
163
164
|
# File 'lib/qops/environment.rb', line 162
def cookbook_json
configuration.cookbook_json || 'custom.json'
end
|
#deploy_type ⇒ Object
112
113
114
|
# File 'lib/qops/environment.rb', line 112
def deploy_type
configuration.deploy_type.to_s
end
|
#ebs_optimize ⇒ Object
190
191
192
|
# File 'lib/qops/environment.rb', line 190
def ebs_optimize
!configuration.ebs_optimize.nil? ? configuration.ebs_optimize : !deploy_type !~ /production/
end
|
#ec2 ⇒ Object
154
155
156
|
# File 'lib/qops/environment.rb', line 154
def ec2
@_ec2_client ||= Aws::EC2::Client.new(**@_aws_config)
end
|
#elb ⇒ Object
158
159
160
|
# File 'lib/qops/environment.rb', line 158
def elb
@_elb_client ||= Aws::ElasticLoadBalancing::Client.new(**@_aws_config)
end
|
#file_name ⇒ Object
146
147
148
|
# File 'lib/qops/environment.rb', line 146
def file_name
self.class.file_name
end
|
#force_config? ⇒ Boolean
174
175
176
|
# File 'lib/qops/environment.rb', line 174
def force_config?
@_force_config
end
|
#hostname_prefix ⇒ Object
186
187
188
|
# File 'lib/qops/environment.rb', line 186
def hostname_prefix
configuration.hostname_prefix || ''
end
|
#layer_id(_options = {}) ⇒ Object
91
92
93
94
95
96
97
|
# File 'lib/qops/environment.rb', line 91
def layer_id(_options = {})
return configuration.layer_id if force_config?
name = configuration.layer_name
verbose_output("Searching for layer : #{name}")
layer = layers.find { |l| l.name.match(/#{name}/i) }
layer.layer_id
end
|
#layers(_options = {}) ⇒ Object
87
88
89
|
# File 'lib/qops/environment.rb', line 87
def layers(_options = {})
opsworks.describe_layers(stack_id: stack_id).layers
end
|
#max_instance_duration ⇒ Object
138
139
140
|
# File 'lib/qops/environment.rb', line 138
def max_instance_duration
configuration.max_instance_duration || 86_400
end
|
#opsworks ⇒ Object
150
151
152
|
# File 'lib/qops/environment.rb', line 150
def opsworks
@_opsworks_client ||= Aws::OpsWorks::Client.new(**@_aws_config)
end
|
#opsworks_os(options = {}) ⇒ Object
132
133
134
135
|
# File 'lib/qops/environment.rb', line 132
def opsworks_os(options = {})
return configuration.os if @_force_config
stack(options).default_os
end
|
#option?(key) ⇒ Boolean
178
179
180
|
# File 'lib/qops/environment.rb', line 178
def option?(key)
respond_to?(key.to_sym) || configuration.instance_variable_get(:@table).keys.include?(key.to_sym)
end
|
#root_volume_size ⇒ Object
182
183
184
|
# File 'lib/qops/environment.rb', line 182
def root_volume_size
configuration.root_volume_size || 30
end
|
#stack(options = {}) ⇒ Object
67
68
69
70
71
72
73
74
75
|
# File 'lib/qops/environment.rb', line 67
def stack(options = {})
return @_stack if @_stack
key = search_key(options)
value = options[key] || configuration.send(key)
key = :name if key == :stack_name
@_stack = search_stack(key, value)
end
|
#stack_id(options = {}) ⇒ Object
77
78
79
80
|
# File 'lib/qops/environment.rb', line 77
def stack_id(options = {})
return configuration.stack_id if force_config?
stack(options).stack_id
end
|
#subnet(options = {}) ⇒ Object
82
83
84
85
|
# File 'lib/qops/environment.rb', line 82
def subnet(options = {})
return configuration.subnet if force_config?
stack(options).default_subnet_id
end
|
#verbose? ⇒ Boolean
166
167
168
|
# File 'lib/qops/environment.rb', line 166
def verbose?
@_verbose
end
|
#verbose_output(text) ⇒ Object
170
171
172
|
# File 'lib/qops/environment.rb', line 170
def verbose_output(text)
self.class.print_with_colour(text, :warning) if verbose?
end
|
#wait_deploy ⇒ Object
124
125
126
|
# File 'lib/qops/environment.rb', line 124
def wait_deploy
configuration.wait_deploy || 180
end
|
#wait_iterations ⇒ Object
120
121
122
|
# File 'lib/qops/environment.rb', line 120
def wait_iterations
configuration.wait_iterations || 600
end
|