tsudura 0.1.2 → 0.1.3

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: 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