tsudura 0.1.2 → 0.1.3

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: 9b155f3cd929cb971a844a1144bc7b7b45544d0c
4
- data.tar.gz: d111161888b3a74e9b93a53acced7543d7ea11fb
3
+ metadata.gz: 0a0470a3c4aa12624b45c467c4db3780c8d68992
4
+ data.tar.gz: e4915ac392c3cf88bef730316c755e57a66bdb5f
5
5
  SHA512:
6
- metadata.gz: e1b7bc3593e82f7738db39423c0b1c71a455dad03b3fae63cebb0a8423e02a4c34b6272b920443471ce9a656cdd33c3d062733b5da15763a3cc195d2307e4aba
7
- data.tar.gz: c21e571f73d94468938653a4f1ccedd6f6d75e2fac587cff453a71c0d98e0cdd6e539927d25927462080fdb955119635b1ccd2041707ee36932cdadf89ce742f
6
+ metadata.gz: c8806a7f55ff2b141f035fae551536bc31def8581535705836aa944efb841559d76c36c6c6769ac05854bb4edf06bdb5df9021577c8b043b9c9ba85016eec1b4
7
+ data.tar.gz: 0faaf307e0dd09e71a2128b03897b3e55494d880284f234231515125313c989dc292ced44a69ab88e716fc46e155a722e4af3fdc07a095f0e8d4d2aea94293a3
data/README.md CHANGED
@@ -3,10 +3,12 @@
3
3
  # WARNING
4
4
 
5
5
  This gem is alpha version.
6
+ このgemはまだアルファ版です。
6
7
 
7
8
  # Tsudura
8
9
 
9
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/tsudura`. To experiment with that code, run `bin/console` for an interactive prompt.
10
+ Yamlに記述した設定を元にAnsible Playbookをsshで実行し、AWSのAmiの作成、LaunchConfigの作成、AutoScalingGroupに紐づくLaunchConfigの入れ替えを行うコマンドラインツールです。
11
+ Packer + Ansibleを使い、自分が足りないと思った機能を埋めるために作成しました。
10
12
 
11
13
  ## Installation
12
14
 
@@ -16,7 +18,68 @@ install it yourself as:
16
18
 
17
19
  ## Usage
18
20
 
19
- TODO: Write usage instructions here
21
+ `build`コマンドを使用します。
22
+
23
+ ```sh
24
+ $ tsudura build example.yml
25
+ ```
26
+
27
+ ### 設定ファイル
28
+
29
+ packerで言う設定を記述するjsonをtsuduraではyamlに記述します。
30
+ [spec/samples/yamls](https://github.com/onigra/tsudura/tree/master/spec/samples/yamls)にテストで使用しているサンプルのyamlがありますので、参考になると思います。
31
+ また、yamlはERBの記法が使用できるようにしてあります。
32
+
33
+ #### required
34
+
35
+ - `service`: 扱うリソースの名前空間です。作成されたリソースにprefixとして付与されます。
36
+ - `region`: インスタンスを作成するRegionを指定します。
37
+ - `security_group_id`: インスタンスに設定するSecurityGroupIDを指定します。
38
+ - `subnet_id`: インスタンスに設定するSubnetIDを指定します。
39
+ - `image_id`: インスタンスを作成する際のAmiのIDを指定します。
40
+ - `key_name`: インスタンスを作成する際のKeyPairの名前を指定します。
41
+ - `instance_type`: インスタンスを作成、LaunchConfigを作成する際のInstanceTypeを指定します。
42
+ - `playbook_path`: 実行するAnsiblePlaybookのPathを指定します。
43
+ - `inventory_file`: Ansibleを実行する際のInventoryFileのPathを指定します。
44
+ - `owner`: Amiを作成する際に指定するOwnerのIDを指定します。
45
+
46
+ #### options
47
+
48
+ - `vault_password`: AnsibleVaultを使用していた場合、実行する際のVaultPasswordを指定します。
49
+ - `mode`: 後述する実行モードを指定します。
50
+ - `user_data_script`: LaunchConfigを作成する際にUserDataScriptを指定します。
51
+ - `auto_scaling_group_name`: 新しく作成したLaunchConfigを紐づけるAutoScalingGroupを指定します。
52
+
53
+ ### モードについて
54
+
55
+ #### NormalMode
56
+
57
+ デフォルト。何も指定しないとこれになる。
58
+
59
+ - Amiの作成
60
+ - LaunchConfigの作成
61
+ - AutoScalingGroupの更新
62
+
63
+ ```yaml
64
+ mode: normal
65
+ ```
66
+
67
+ #### PackerMode
68
+
69
+ - Amiの作成
70
+
71
+ ```yaml
72
+ mode: packer
73
+ ```
74
+
75
+ #### PackerPlusMode
76
+
77
+ - Amiの作成
78
+ - LaunchConfigの作成
79
+
80
+ ```yaml
81
+ mode: packer_plus
82
+ ```
20
83
 
21
84
  ## Development
22
85
 
@@ -15,19 +15,13 @@ module Tsudura::Aws
15
15
  end
16
16
 
17
17
  def deregister
18
- ec2.deregister_image(image_id: get_old_image(describe_service_images))
19
- end
20
-
21
- def describe_service_images
22
- ec2.describe_images(owners: ["#{@config[:owner]}"], filters: [ { name: "name", values: ["#{@config[:service]}-#{short_env}*"] }])
18
+ unless not_use_images.empty?
19
+ not_use_images.each do |image_id|
20
+ ec2.deregister_image(image_id: image_id)
21
+ end
22
+ end
23
23
  end
24
24
 
25
- def get_old_image(images)
26
- old_image_id = nil
27
- images.each_page { |i| old_image_id = i.images.map(&:image_id).reject { |id| id == @new_image_id }.first }
28
- old_image_id
29
- end
30
-
31
25
  private
32
26
 
33
27
  def create_ami
@@ -52,5 +46,26 @@ module Tsudura::Aws
52
46
  def ec2
53
47
  @ec2 ||= ::Aws::EC2::Client.new(region: @config[:region])
54
48
  end
49
+
50
+ def launch_config
51
+ @launch_config ||= ::Aws::AutoScaling::Client.new(region: @config[:region])
52
+ end
53
+
54
+ def not_use_images
55
+ @not_use_images ||= all_images - available_images
56
+ end
57
+
58
+ def all_images
59
+ ec2.describe_images(
60
+ owners: ["#{@config[:owner]}"],
61
+ filters: [ { name: "name", values: ["#{@config[:service]}-#{short_env}*"] }]
62
+ )[:images].map(&:image_id)
63
+ end
64
+
65
+ def available_images
66
+ launch_config.describe_launch_configurations[:launch_configurations]
67
+ .select { |i| i[:launch_configuration_name] =~ /#{@config[:service]}-#{short_env}/ }
68
+ .map(&:image_id).uniq
69
+ end
55
70
  end
56
71
  end
@@ -9,7 +9,7 @@ module Tsudura::Aws
9
9
 
10
10
  def update
11
11
  autoscaling.update_auto_scaling_group(
12
- auto_scaling_group_name: "#{@config[:service]}-#{short_env}-group",
12
+ auto_scaling_group_name: @config[:auto_scaling_group_name],
13
13
  launch_configuration_name: "#{@config[:service]}-#{short_env}-#{@timestamp}",
14
14
  )
15
15
  end
@@ -20,23 +20,33 @@ module Tsudura::Aws
20
20
  end
21
21
 
22
22
  def delete
23
- autoscaling.delete_launch_configuration(launch_configuration_name: old_launch_config_name)
24
- end
25
-
26
- def old_launch_config_name
27
- tmp = []
28
-
29
- autoscaling.describe_launch_configurations.each_page do |i|
30
- tmp << i.launch_configurations.select { |item| item.launch_configuration_name =~ /#{@config[:service]}-#{short_env}/ }
23
+ unless unavailable_launch_configurations.empty?
24
+ unavailable_launch_configurations.each do |launch_configuration_name|
25
+ autoscaling.delete_launch_configuration(launch_configuration_name: launch_configuration_name)
26
+ end
31
27
  end
32
-
33
- tmp.flatten.reject { |obj| obj.launch_configuration_name == @new_launch_config }.map(&:launch_configuration_name).first
34
28
  end
35
29
 
36
30
  private
37
-
31
+
38
32
  def autoscaling
39
33
  @autoscaling ||= ::Aws::AutoScaling::Client.new(region: @config[:region])
40
34
  end
35
+
36
+ def unavailable_launch_configurations
37
+ @unavailable_launch_configurations ||= all_launch_configurations - available_launch_configurations
38
+ end
39
+
40
+ def available_launch_configurations
41
+ autoscaling.describe_auto_scaling_groups[:auto_scaling_groups]
42
+ .select { |i| i[:launch_configuration_name] =~ /#{@config[:service]}-#{short_env}/ }
43
+ .map(&:launch_configuration_name).uniq
44
+ end
45
+
46
+ def all_launch_configurations
47
+ autoscaling.describe_launch_configurations[:launch_configurations]
48
+ .select { |i| i[:launch_configuration_name] =~ /#{@config[:service]}-#{short_env}/ }
49
+ .map(&:launch_configuration_name)
50
+ end
41
51
  end
42
52
  end
@@ -28,8 +28,8 @@ module Tsudura::Runners
28
28
 
29
29
  def destroy_temp_objects
30
30
  terminate_tmp_ec2_instance
31
- deregister_old_ami
32
31
  delete_old_launch_config
32
+ deregister_old_ami
33
33
  end
34
34
 
35
35
  def terminate_tmp_ec2_instance
@@ -1,3 +1,3 @@
1
1
  module Tsudura
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tsudura
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - onigra
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-06-09 00:00:00.000000000 Z
11
+ date: 2015-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler