cloud-maker 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/bin/cloud-maker CHANGED
@@ -45,7 +45,14 @@ class CloudMakerCLI < Thor
45
45
  say "You can remove this authorization from the GitHub interface if needed."
46
46
  say "Your password will not be saved to disk.".green
47
47
  user = ask("What is your GitHub #{"username".cyan}?")
48
+ state = Termios.getattr(STDIN)
49
+ new_settings = state.dup
50
+ new_settings.c_lflag &= ~(Termios::ECHO | Termios::ICANON)
51
+ new_settings.c_cc[Termios::VMIN] = 1
52
+ Termios.setattr(STDIN, Termios::TCSANOW, new_settings)
48
53
  password = ask("What is your GitHub #{"password".cyan}?")
54
+ Termios.setattr(STDIN, Termios::TCSANOW, state)
55
+ puts
49
56
  begin
50
57
  response = JSON.parse(RestClient::Request.new(
51
58
  :method => "POST",
data/lib/cloud-maker.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'base64'
1
2
  require 'json'
2
3
  require 'yaml'
3
4
  require 'thor'
@@ -5,6 +6,7 @@ require 'colorize'
5
6
  require 'deep_merge'
6
7
  require 'aws-sdk'
7
8
  require 'rest-client'
9
+ require 'termios'
8
10
 
9
11
  require 'cloud_maker/config'
10
12
  require 'cloud_maker/ec2'
@@ -108,6 +108,20 @@ module CloudMaker
108
108
  self['tags']['cloud_maker_config'] = self.config_name
109
109
  end
110
110
 
111
+ def method_missing(method=nil, *args)
112
+ if method.to_s[-1] == "?"
113
+ key_name = method.to_s[0, method.to_s.length-1]
114
+ value = self[key_name]
115
+ if value.respond_to? :empty?
116
+ !value.empty?
117
+ else
118
+ !value.nil?
119
+ end
120
+ else
121
+ super
122
+ end
123
+ end
124
+
111
125
  def config_name
112
126
  files = self.imports.dup
113
127
  files.push self.extra_options['config_path'] if self.extra_options['config_path']
@@ -188,8 +202,9 @@ module CloudMaker
188
202
  env_run_cmds.push(set_environment_variable_cmd(key, properties["value"]))
189
203
  end
190
204
  end
205
+ env_run_cmds.push("touch /var/lib/cloud/cloud_init_complete")
191
206
 
192
- return "#cloud-boothook\n#!/bin/sh\n#{env_run_cmds.join("\n")}\n"
207
+ return "#cloud-boothook\n#!/bin/sh\nif [ ! -f /var/lib/cloud/cloud_init_complete ]; then\n#{env_run_cmds.join("\n")}\nfi\n"
193
208
  end
194
209
 
195
210
 
@@ -27,6 +27,7 @@ module CloudMaker
27
27
  'description' => "The name of an Amazon key pair, so you can actually login to the instance."
28
28
  },
29
29
  'elastic_ip' => {
30
+ 'default' => '',
30
31
  'description' => "An elastic IP address you control that you would like to associate to the instance."
31
32
  },
32
33
  'security_group' => {
@@ -37,6 +38,10 @@ module CloudMaker
37
38
  'iam_role' => {
38
39
  'default' => '',
39
40
  'description' => 'The IAM instance profile name or ARN you would like to use.'
41
+ },
42
+ 'cname' => {
43
+ 'default' => '',
44
+ 'description' => "A dns entry you would like to CNAME to this instance."
40
45
  }
41
46
  }
42
47
  }
@@ -114,11 +119,33 @@ module CloudMaker
114
119
 
115
120
  instance.tags.set(cloud_maker_config['tags']) if cloud_maker_config['tags']
116
121
 
117
- if cloud_maker_config["elastic_ip"]
122
+ if cloud_maker_config.elastic_ip? || cloud_maker_config.cname?
118
123
  while instance.status == :pending
119
124
  #wait
120
125
  end
121
- instance.associate_elastic_ip(cloud_maker_config["elastic_ip"])
126
+ instance.associate_elastic_ip(cloud_maker_config["elastic_ip"]) if cloud_maker_config.elastic_ip?
127
+
128
+ if cloud_maker_config.cname?
129
+ r53 = AWS::Route53::Client.new(:access_key_id => self.aws_access_key_id, :secret_access_key => self.aws_secret_access_key)
130
+
131
+ zone = r53.list_hosted_zones[:hosted_zones].select {|zone|
132
+ cloud_maker_config['cname'] + '.' =~ /#{Regexp.escape(zone[:name])}$/
133
+ }.first
134
+
135
+ r53.change_resource_record_sets(
136
+ :hosted_zone_id => zone[:id],
137
+ :change_batch => {
138
+ :comment => "CloudMaker initialization of #{instance.instance_id}.", :changes => [{
139
+ :action => "CREATE", :resource_record_set => {
140
+ :name => cloud_maker_config['cname'],
141
+ :type => 'CNAME',
142
+ :ttl => 60,
143
+ :resource_records => [{:value => instance.dns_name}]
144
+ }
145
+ }]
146
+ }
147
+ )
148
+ end
122
149
  end
123
150
 
124
151
  archiver = S3Archiver.new(
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloud-maker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-08-28 00:00:00.000000000 Z
13
+ date: 2012-08-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: colorize
@@ -92,6 +92,22 @@ dependencies:
92
92
  - - ~>
93
93
  - !ruby/object:Gem::Version
94
94
  version: '1.0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: ruby-termios
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ~>
101
+ - !ruby/object:Gem::Version
102
+ version: '0.9'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '0.9'
95
111
  - !ruby/object:Gem::Dependency
96
112
  name: pry
97
113
  requirement: !ruby/object:Gem::Requirement