ops_tasks 0.4.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d8c914d3d350acedc716cc953d07ed91ed85d8bd
4
- data.tar.gz: c6b3b7114f9ad10569be9bbd68b8f807378db224
3
+ metadata.gz: 2e39f0ee2347288b56686c499be7f2b052f7d18c
4
+ data.tar.gz: c7f98c34b1fef91db220d7227c584ea0d08fcce7
5
5
  SHA512:
6
- metadata.gz: 10e1c429b44a5d6529dc18189e843c80ee5e75266f6baacdcc392b5075d6c69d7ead5366ebe65b305f2be660f92bea23a7b39293af689c0f4b442e1da887cba7
7
- data.tar.gz: 53b95fe5cad439f774cb9de5253e094f2ac2b3753c82a7cbfd07544e5a571c83cc3bed2fbb315e0f600f14390522ce5b45a33673b2d9e384f5f92164ee4a24f5
6
+ metadata.gz: e1b664f7a3b5d2017de059e7725885b5fbfc124a8e803767a8eb355b7ddbda316c6e004b958d2ed9072d3fa185d711e71d7fbc45c4830fb8949214441fbdd6db
7
+ data.tar.gz: 152d54214e45fdfde17fe958c524bb9fb87ea959f741361f892bdf43ceaf8d90f440bb696b82a65515da59eb4af2dc05218a3499666fe7304b044af2afc40444
data/bin/ops_tasks CHANGED
@@ -25,6 +25,12 @@ elsif ARGV[0] == 'add'
25
25
  `echo "#{ARGV[1]}_layer_id=" >> .env`
26
26
  `echo "#{ARGV[1]}_project_name=" >> .env`
27
27
  `echo "#{ARGV[1]}_slack_channel=" >> .env`
28
+ elsif ARGV[0] == 'create_instance'
29
+ scale = OpsTasks::RakeHelper.create_scale
30
+ instance_id = scale.create_instance(ARGV[1] == 'true')
31
+ return false if ARGV[1] == 'true'
32
+ scale.start_instance(instance_id)
33
+ scale.wait_for_completion(instance_id)
28
34
  elsif ARGV.size.zero?
29
35
  puts "ops_tasks [deploy|update_cookbooks|setup|configure|init] <args>"
30
36
  else
@@ -10,6 +10,7 @@ module OpsTasks
10
10
  @stack_id = args[:stack_id]
11
11
  @slack_channel = args[:room]
12
12
  @project = args[:project]
13
+ @run_in_background = args[:background]
13
14
  end
14
15
 
15
16
  def instance_ids
@@ -70,23 +71,56 @@ module OpsTasks
70
71
  return id
71
72
  end
72
73
 
74
+ def log_url(deployment_id)
75
+ @client.describe_commands(
76
+ :deployment_ids => [deployment_id]
77
+ )[:log_url]
78
+ end
79
+
80
+
73
81
  def notifications_disabled?
74
82
  ENV["#{@project}_room_notifications"] == 'false'
75
83
  end
76
84
 
77
- def status(deployment_id)
78
- @client.describe_deployments(:deployment_ids => [deployment_id])[:deployments].first[:status]
85
+ # def status(deployment_id)
86
+ # @client.describe_deployments(:deployment_ids => [deployment_id])[:deployments].first[:status]
87
+ # end
88
+
89
+ def announce_status(task, deployment_id)
90
+ return false if notifications_disabled?
91
+ status = assess_status(deployment_id)
92
+ "Chef".says("#{@project} #{task} #{status}").to_channel(@slack_channel)
93
+ end
94
+
95
+ def assess_status(deployment_id)
96
+ @client.describe_deployments(
97
+ :deployment_ids => [deployment_id]
98
+ )[:deployments].first[:status]
99
+ end
100
+
101
+ def deployment_failed?(id)
102
+ assess_status(id) == 'failed'
103
+ end
104
+
105
+ def announce_log(id)
106
+ "Chef".
107
+ says("<a href='#{log_url(id)}'>failure log</a>").
108
+ to_channel(@slack_channel)
109
+ puts log_url(id)
110
+ end
111
+
112
+ def poll_api_for_status(deployment_id, running_status = 'running')
113
+ sleep 1 until assess_status(deployment_id) != running_status
114
+ puts assess_status(deployment_id)
79
115
  end
80
116
 
81
117
  def wait_for_completion(deployment_id, task="deployment")
82
118
  print "#{@project}: Running... "
83
- status = @client.describe_deployments(:deployment_ids => [deployment_id])[:deployments].first[:status]
84
- "Chef".says("#{@project} #{task} #{status}").to_channel(@slack_channel) unless notifications_disabled?
85
- until status != "running"
86
- status = @client.describe_deployments(:deployment_ids => [deployment_id])[:deployments].first[:status]
87
- end
88
- puts status
89
- "Chef".says("#{@project} #{task} #{status}").to_channel(@slack_channel) unless notifications_disabled?
119
+ announce_status(task, deployment_id)
120
+ poll_api_for_status(deployment_id)
121
+ announce_status(task, deployment_id)
122
+ announce_log(deployment_id) if deployment_failed?(deployment_id)
123
+ Process.daemon if @run_in_background
90
124
  end
91
125
  end
92
126
  end
@@ -46,5 +46,16 @@ module OpsTasks
46
46
  room: ENV["#{server_type}_slack_channel"]
47
47
  )
48
48
  end
49
+
50
+ def self.create_scale
51
+ server_type = select_server_type
52
+ return OpsTasks::Scale.new(
53
+ layer_id: ENV["#{server_type}_layer_id"],
54
+ stack_id: ENV["#{server_type}_stack_id"],
55
+ instance_type: ENV["#{server_type}_instance_type"],
56
+ project: ENV["#{server_type}_project_name"],
57
+ room: ENV["#{server_type}_slack_channel"]
58
+ )
59
+ end
49
60
  end
50
61
  end
@@ -0,0 +1,48 @@
1
+ module OpsTasks
2
+ class Scale < OpsTasks::Deployment
3
+ def initialize(args)
4
+ @instance_type = args[:instance_type]
5
+ super
6
+ end
7
+
8
+ def create_instance(auto_scale = false)
9
+ args = { :stack_id => @stack_id,
10
+ :layer_ids => [@layer_id],
11
+ :instance_type => @instance_type }
12
+ args[:auto_scale] = 'load' if auto_scale
13
+ @client.create_instance(args)[:instance_id]
14
+ end
15
+
16
+ def start_instance(instance_id)
17
+ @client.start_instance(
18
+ :instance_id => instance_id
19
+ )
20
+ end
21
+
22
+ def assess_status(instance_id)
23
+ @client.describe_instances(
24
+ :instance_ids => [instance_id]
25
+ )[:instances].first[:status]
26
+ end
27
+
28
+ def deployment_failed?(instance_id)
29
+ @client.describe_instances(
30
+ :instance_ids => [instance_id]
31
+ )[:instances].first[:status] == 'failed'
32
+ end
33
+
34
+ def poll_api_for_status(deployment_id)
35
+ sleep 1 until assess_status(deployment_id) == 'online'
36
+ puts assess_status(deployment_id)
37
+ end
38
+
39
+ def wait_for_completion(instance_id, task="create instance")
40
+ print "#{@project}: Running... "
41
+ announce_status(task, instance_id)
42
+ poll_api_for_status(instance_id)
43
+ announce_status(task, instance_id)
44
+ announce_log(instance_id) if deployment_failed?(instance_id)
45
+ Process.daemon if @run_in_background
46
+ end
47
+ end
48
+ end
@@ -1,3 +1,3 @@
1
1
  module OpsTasks
2
- VERSION = "0.4.4"
2
+ VERSION = "0.5.0"
3
3
  end
data/lib/ops_tasks.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module OpsTasks
2
2
  require 'ops_tasks/railtie' if defined?(Rails)
3
3
  require 'ops_tasks/deployment'
4
+ require 'ops_tasks/scale'
4
5
  require 'ops_tasks/rake_helper'
5
6
  require 'ops_tasks/cli_helper'
6
7
  require 'ops_tasks/version'
@@ -31,4 +31,18 @@ namespace :ops_tasks do
31
31
  deploy_id = deployment.configure
32
32
  deployment.wait_for_completion(deploy_id, "configure")
33
33
  end
34
+
35
+ desc "create new instance"
36
+ task :create_instance => :environment do
37
+ scale = OpsTasks::RakeHelper.create_scale
38
+ instance_id = scale.create_instance
39
+ scale.start_instance(instance_id)
40
+ scale.wait_for_completion(instance_id)
41
+ end
42
+
43
+ desc "create new load-based instance"
44
+ task :create_load_based_instance => :environment do
45
+ scale = OpsTasks::RakeHelper.create_scale
46
+ instance_id = scale.create_instance(true)
47
+ end
34
48
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ops_tasks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Prokesch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-10 00:00:00.000000000 Z
11
+ date: 2015-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -102,6 +102,7 @@ files:
102
102
  - lib/ops_tasks/deployment.rb
103
103
  - lib/ops_tasks/railtie.rb
104
104
  - lib/ops_tasks/rake_helper.rb
105
+ - lib/ops_tasks/scale.rb
105
106
  - lib/ops_tasks/version.rb
106
107
  - lib/tasks/ops_tasks.rake
107
108
  - ops_tasks.gemspec