opsicle 2.5.0 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bfb0c5b2df559b5e304081b7873a6b2a1cb54056
4
- data.tar.gz: 003e30c1669eaa33aca7fe4c98d9442099c30e4d
3
+ metadata.gz: 62234a4db3f58fa24aff77217786dd4be48d0763
4
+ data.tar.gz: ac69c2625a780fdd78ceaaf38e3299fe2c1807c0
5
5
  SHA512:
6
- metadata.gz: d94244b39e85e12301faa568330dae5a22fb937397fd55acee3f57fa0843e220d3bad89c1b3f45e08805dda16e609efd9d38a7792078ef5b313189242ddbf14c
7
- data.tar.gz: d46d043f5ef64d3f74580cb9645a6b733533dc49323922f16f51bdb8acd523e2711e63aef8ce4b47c71db5be0dd7edff72cccfd2d19e1573148b75791067746d
6
+ metadata.gz: c38462e8b4c1cc7205bc71a73936e6e9df19845cfed644ea18078339d872a7e132ee9be688e03ea587642b83ba0d2a4a8b23da5caa09a26a4dfa67752548fd26
7
+ data.tar.gz: 702c9a75c1e83385437d41a5603c62f7b0d57564228444f4e1a8e1e056793eb05bc4df66d10f10a4e8573c2f445526733484f777964717b80be567ef1ee25aba
@@ -34,9 +34,10 @@ module Opsicle
34
34
  new_instance_hostname = make_new_hostname(self.hostname)
35
35
  ami_id = verify_ami_id
36
36
  agent_version = verify_agent_version
37
+ subnet_id = verify_subnet_id
37
38
  instance_type = verify_instance_type
38
39
 
39
- create_new_instance(new_instance_hostname, instance_type, ami_id, agent_version)
40
+ create_new_instance(new_instance_hostname, instance_type, ami_id, agent_version, subnet_id)
40
41
  end
41
42
 
42
43
  def make_new_hostname(old_hostname)
@@ -49,8 +50,7 @@ module Opsicle
49
50
  end
50
51
 
51
52
  puts "\nAutomatically generated hostname: #{new_instance_hostname}\n"
52
- rewriting = @cli.ask("Do you wish to rewrite this hostname?\n1) Yes\n2) No", Integer)
53
- new_instance_hostname = @cli.ask("Please write in the new instance's hostname and press ENTER:") if rewriting == 1
53
+ new_instance_hostname = ask_for_new_option("instance's hostname") if ask_for_overriding_permission("hostname", false)
54
54
 
55
55
  new_instance_hostname
56
56
  end
@@ -71,8 +71,19 @@ module Opsicle
71
71
  ami_id = self.layer.ami_id
72
72
  else
73
73
  puts "\nCurrent AMI id is #{self.ami_id}"
74
- rewriting = @cli.ask("Do you wish to override this AMI? By overriding, you are choosing to override the current AMI for all instances you are cloning.\n1) Yes\n2) No", Integer)
75
- ami_id = rewriting == 1 ? @cli.ask("Please write in the new AMI id press ENTER:") : self.ami_id
74
+
75
+ if ask_for_overriding_permission("AMI ID", true)
76
+ instances = @opsworks.describe_instances(stack_id: self.stack_id).instances
77
+ ami_ids = instances.collect { |i| i.ami_id }.uniq
78
+ ami_ids << "Provide a different AMI ID."
79
+ ami_id = ask_for_possible_options(ami_ids, "AMI ID")
80
+
81
+ if ami_id == "Provide a different AMI ID."
82
+ ami_id = ask_for_new_option('AMI ID')
83
+ end
84
+ else
85
+ ami_id = self.ami_id
86
+ end
76
87
  end
77
88
 
78
89
  self.layer.ami_id = ami_id
@@ -84,35 +95,71 @@ module Opsicle
84
95
  agent_version = self.layer.agent_version
85
96
  else
86
97
  puts "\nCurrent agent version is #{self.agent_version}"
87
- rewriting = @cli.ask("Do you wish to override this version? By overriding, you are choosing to override the current agent version for all instances you are cloning.\n1) Yes\n2) No", Integer)
88
- agent_version = rewriting == 1 ? get_new_agent_version : self.agent_version
98
+
99
+ if ask_for_overriding_permission("agent version", true)
100
+ agents = @opsworks.describe_agent_versions(stack_id: self.stack_id).agent_versions
101
+ version_ids = agents.collect { |i| i.version }.uniq
102
+ agent_version = ask_for_possible_options(version_ids, "agent version")
103
+ else
104
+ agent_version = self.agent_version
105
+ end
89
106
  end
90
107
 
91
108
  self.layer.agent_version = agent_version
92
109
  agent_version
93
110
  end
94
111
 
95
- def get_new_agent_version
96
- agents = @opsworks.describe_agent_versions(stack_id: self.stack_id).agent_versions
97
-
98
- version_ids = []
99
- agents.each do |agent|
100
- version_ids << agent.version
112
+ def verify_subnet_id
113
+ if self.layer.subnet_id
114
+ subnet_id = self.layer.subnet_id
115
+ else
116
+ puts "\nCurrent subnet id is #{self.subnet_id}"
117
+
118
+ if ask_for_overriding_permission("subnet ID", true)
119
+ instances = @opsworks.describe_instances(stack_id: self.stack_id).instances
120
+ subnet_ids = instances.collect { |i| i.subnet_id }.uniq
121
+ subnet_ids << "Provide a different subnet ID."
122
+ subnet_id = ask_for_possible_options(subnet_ids, "subnet ID")
123
+
124
+ if subnet_id == "Provide a different subnet ID."
125
+ subnet_id = ask_for_new_option('subnet ID')
126
+ end
127
+ else
128
+ subnet_id = self.subnet_id
129
+ end
101
130
  end
102
131
 
103
- version_ids.each_with_index { |id, index| puts "#{index.to_i + 1}) #{id}"}
104
- id_index = @cli.ask("Which agent version ID?\n", Integer) { |q| q.in = 1..version_ids.length.to_i } - 1
105
- version_ids[id_index]
132
+ self.layer.subnet_id = subnet_id
133
+ subnet_id
106
134
  end
107
135
 
108
136
  def verify_instance_type
109
137
  puts "\nCurrent instance type is #{self.instance_type}"
110
- rewriting = @cli.ask("Do you wish to override this instance type?\n1) Yes\n2) No", Integer)
111
- instance_type = rewriting == 1 ? @cli.ask("Please write in the new instance type press ENTER:") : self.instance_type
138
+ rewriting = ask_for_overriding_permission("instance type", false)
139
+ instance_type = rewriting ? ask_for_new_option('instance type') : self.instance_type
112
140
  instance_type
113
141
  end
114
142
 
115
- def create_new_instance(new_instance_hostname, instance_type, ami_id, agent_version)
143
+ def ask_for_possible_options(arr, description)
144
+ arr.each_with_index { |id, index| puts "#{index.to_i + 1}) #{id}"}
145
+ id_index = @cli.ask("Which #{description}?\n", Integer) { |q| q.in = 1..arr.length.to_i } - 1
146
+ arr[id_index]
147
+ end
148
+
149
+ def ask_for_new_option(description)
150
+ @cli.ask("Please write in the new #{description} and press ENTER:")
151
+ end
152
+
153
+ def ask_for_overriding_permission(description, overriding_all)
154
+ if overriding_all
155
+ ans = @cli.ask("Do you wish to override this #{description}? By overriding, you are choosing to override the current #{description} for all instances you are cloning.\n1) Yes\n2) No", Integer)
156
+ else
157
+ ans = @cli.ask("Do you wish to override this #{description}?\n1) Yes\n2) No", Integer)
158
+ end
159
+ ans == 1
160
+ end
161
+
162
+ def create_new_instance(new_instance_hostname, instance_type, ami_id, agent_version, subnet_id)
116
163
  new_instance = @opsworks.create_instance({
117
164
  stack_id: self.stack_id, # required
118
165
  layer_ids: self.layer_ids, # required
@@ -124,7 +171,7 @@ module Opsicle
124
171
  ssh_key_name: self.ssh_key_name,
125
172
  availability_zone: self.availability_zone,
126
173
  virtualization_type: self.virtualization_type,
127
- subnet_id: self.subnet_id,
174
+ subnet_id: subnet_id,
128
175
  architecture: self.architecture, # accepts x86_64, i386
129
176
  root_device_type: self.root_device_type, # accepts ebs, instance-store
130
177
  install_updates_on_boot: self.install_updates_on_boot,
@@ -1,6 +1,6 @@
1
1
  module Opsicle
2
2
  class CloneableLayer
3
- attr_accessor :name, :layer_id, :instances, :opsworks, :cli, :agent_version, :ami_id
3
+ attr_accessor :name, :layer_id, :instances, :opsworks, :cli, :agent_version, :ami_id, :subnet_id
4
4
 
5
5
  def initialize(name, layer_id, opsworks, cli)
6
6
  self.name = name
@@ -1,3 +1,3 @@
1
1
  module Opsicle
2
- VERSION = "2.5.0"
2
+ VERSION = "2.6.0"
3
3
  end
@@ -21,8 +21,17 @@ module Opsicle
21
21
  allow(@layer).to receive(:agent_version=)
22
22
  allow(@layer).to receive(:agent_version)
23
23
  allow(@layer).to receive(:add_new_instance)
24
+ allow(@layer).to receive(:subnet_id=)
25
+ allow(@layer).to receive(:subnet_id)
24
26
  @new_instance = double('new_instance', :instance_id => 1029384756)
25
27
  @opsworks = double('opsworks', :create_instance => @new_instance)
28
+ @agent_version_1 = double('agent_version', :version => '3434-20160316181345')
29
+ @agent_version_2 = double('agent_version', :version => '3435-20160406115841')
30
+ @agent_version_3 = double('agent_version', :version => '3436-20160418214624')
31
+ @agent_versions = double('agent_versions', :agent_versions => [@agent_version_1, @agent_version_2, @agent_version_3])
32
+ allow(@opsworks).to receive(:describe_agent_versions).with({:stack_id=>1234567890}).and_return(@agent_versions)
33
+ @instances = double('instances', :instances => [@instance])
34
+ allow(@opsworks).to receive(:describe_instances).with({:stack_id=>1234567890}).and_return(@instances)
26
35
  @cli = double('cli', :ask => 2)
27
36
  end
28
37
 
@@ -51,6 +60,7 @@ module Opsicle
51
60
  it "should increment the hostname" do
52
61
  instance = CloneableInstance.new(@instance, @layer, @opsworks, @cli)
53
62
  expect(instance).to receive(:hostname_unique?).and_return('example-hostname-03')
63
+ allow(@opsworks).to receive(:describe_agent_version).with({})
54
64
  instance.increment_hostname('example-hostname-01', ['example-hostname-01', 'example-hostname-02'])
55
65
  end
56
66
  end
@@ -67,6 +77,7 @@ module Opsicle
67
77
  expect(instance).to receive(:verify_ami_id)
68
78
  expect(instance).to receive(:verify_agent_version)
69
79
  expect(instance).to receive(:verify_instance_type)
80
+ expect(instance).to receive(:verify_subnet_id)
70
81
  instance.clone({})
71
82
  end
72
83
 
@@ -83,7 +94,7 @@ module Opsicle
83
94
  instance = CloneableInstance.new(@instance, @layer, @opsworks, @cli)
84
95
  allow(@layer).to receive(:agent_version).and_return(nil)
85
96
  allow_any_instance_of(HighLine).to receive(:ask).with("Do you wish to override this version? By overriding, you are choosing to override the current agent version for all instances you are cloning.\n1) Yes\n2) No", Integer).and_return(1)
86
- expect(instance).to receive(:get_new_agent_version)
97
+ expect(instance).to receive(:ask_for_possible_options)
87
98
  instance.verify_agent_version
88
99
  end
89
100
 
@@ -94,13 +105,31 @@ module Opsicle
94
105
  end
95
106
  end
96
107
 
108
+ context '#verify_subnet_id' do
109
+ it "should check the subnet id and ask if the user wants a new subnet id" do
110
+ @cli = double('cli', :ask => 1)
111
+ instance = CloneableInstance.new(@instance, @layer, @opsworks, @cli)
112
+ allow(@layer).to receive(:subnet_id).and_return(nil)
113
+ allow_any_instance_of(HighLine).to receive(:ask).with("Do you wish to override this id? By overriding, you are choosing to override the current agent version for all instances you are cloning.\n1) Yes\n2) No", Integer).and_return(1)
114
+ expect(instance).to receive(:ask_for_possible_options)
115
+ instance.verify_subnet_id
116
+ end
117
+
118
+ it "should see if the layer already has overwritten the subnet id" do
119
+ instance = CloneableInstance.new(@instance, @layer, @opsworks, @cli)
120
+ expect(@layer).to receive(:subnet_id)
121
+ instance.verify_subnet_id
122
+ end
123
+ end
124
+
97
125
  context '#verify_ami_id' do
98
126
  it "should check the ami id and ask if the user wants a new ami" do
99
127
  @cli = double('cli', :ask => 1)
100
128
  instance = CloneableInstance.new(@instance, @layer, @opsworks, @cli)
101
129
  allow(@layer).to receive(:ami_id).and_return(nil)
102
130
  allow_any_instance_of(HighLine).to receive(:ask).with("Do you wish to override this AMI? By overriding, you are choosing to override the current AMI for all instances you are cloning.\n1) Yes\n2) No", Integer).and_return(1)
103
- expect(@cli).to receive(:ask).twice
131
+ expect(@cli).to receive(:ask)
132
+ expect(instance).to receive(:ask_for_possible_options)
104
133
  instance.verify_ami_id
105
134
  end
106
135
 
@@ -126,7 +155,7 @@ module Opsicle
126
155
  it "should create an instance" do
127
156
  instance = CloneableInstance.new(@instance, @layer, @opsworks, @cli)
128
157
  expect(@opsworks).to receive(:create_instance)
129
- instance.create_new_instance('hostname', 'type', 'ami', 'agent_version')
158
+ instance.create_new_instance('hostname', 'type', 'ami', 'agent_version', 'subnet_id')
130
159
  end
131
160
 
132
161
  it "should take information from old instance" do
@@ -138,8 +167,7 @@ module Opsicle
138
167
  expect(instance).to receive(:ssh_key_name)
139
168
  expect(instance).to receive(:availability_zone)
140
169
  expect(instance).to receive(:virtualization_type)
141
- expect(instance).to receive(:subnet_id)
142
- instance.create_new_instance('hostname', 'type', 'ami', 'agent_version')
170
+ instance.create_new_instance('hostname', 'type', 'ami', 'agent_version', 'subnet_id')
143
171
  end
144
172
  end
145
173
  end
@@ -37,16 +37,23 @@ module Opsicle
37
37
  @client = double('client', :config => @config, :opsworks => @opsworks)
38
38
  allow(Client).to receive(:new).with(:environment).and_return(@client)
39
39
  allow(@instances).to receive(:each_with_index)
40
+ @agent_version_1 = double('agent_version', :version => '3434-20160316181345')
41
+ @agent_version_2 = double('agent_version', :version => '3435-20160406115841')
42
+ @agent_version_3 = double('agent_version', :version => '3436-20160418214624')
43
+ @agent_versions = double('agent_versions', :agent_versions => [@agent_version_1, @agent_version_2, @agent_version_3])
44
+ allow(@opsworks).to receive(:describe_agent_versions).and_return(@agent_versions)
40
45
  allow_any_instance_of(HighLine).to receive(:ask).with("Layer?\n", Integer).and_return(2)
41
46
  allow_any_instance_of(HighLine).to receive(:ask).with("Instances? (enter as a comma separated list)\n", String).and_return('2')
42
- allow_any_instance_of(HighLine).to receive(:ask).with("Do you wish to rewrite this hostname?\n1) Yes\n2) No", Integer).and_return(2)
47
+ allow_any_instance_of(HighLine).to receive(:ask).with("Do you wish to override this hostname?\n1) Yes\n2) No", Integer).and_return(2)
43
48
  allow_any_instance_of(HighLine).to receive(:ask).with("Please write in the new instance's hostname and press ENTER:").and_return('example-hostname')
44
- allow_any_instance_of(HighLine).to receive(:ask).with("Do you wish to override this AMI? By overriding, you are choosing to override the current AMI for all instances you are cloning.\n1) Yes\n2) No", Integer).and_return(2)
45
- allow_any_instance_of(HighLine).to receive(:ask).with("Please write in the new AMI id press ENTER:").and_return('example-ami')
46
- allow_any_instance_of(HighLine).to receive(:ask).with("Do you wish to override this version? By overriding, you are choosing to override the current agent version for all instances you are cloning.\n1) Yes\n2) No", Integer).and_return(2)
47
- allow_any_instance_of(HighLine).to receive(:ask).with("Which agent version ID?\n", Integer).and_return(1)
49
+ allow_any_instance_of(HighLine).to receive(:ask).with("Do you wish to override this AMI ID? By overriding, you are choosing to override the current AMI ID for all instances you are cloning.\n1) Yes\n2) No", Integer).and_return(2)
50
+ allow_any_instance_of(HighLine).to receive(:ask).with("Which AMI ID?\n", Integer).and_return(1)
51
+ allow_any_instance_of(HighLine).to receive(:ask).with("Do you wish to override this agent version? By overriding, you are choosing to override the current agent version for all instances you are cloning.\n1) Yes\n2) No", Integer).and_return(2)
52
+ allow_any_instance_of(HighLine).to receive(:ask).with("Which agent version?\n", Integer).and_return(1)
48
53
  allow_any_instance_of(HighLine).to receive(:ask).with("Do you wish to override this instance type?\n1) Yes\n2) No", Integer).and_return(2)
49
54
  allow_any_instance_of(HighLine).to receive(:ask).with("Please write in the new instance type press ENTER:").and_return('t2.micro')
55
+ allow_any_instance_of(HighLine).to receive(:ask).with("Do you wish to override this subnet ID? By overriding, you are choosing to override the current subnet ID for all instances you are cloning.\n1) Yes\n2) No", Integer).and_return(2)
56
+ allow_any_instance_of(HighLine).to receive(:ask).with("Which subnet ID?\n", Integer).and_return(1)
50
57
  end
51
58
 
52
59
  context "#execute" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opsicle
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Fleener
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-04-26 00:00:00.000000000 Z
12
+ date: 2017-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk