dployr 0.0.6 → 0.0.7

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: c470db55ac45d9fd7194b76fda8213aec26cbbd6
4
- data.tar.gz: ba15cc25e47219751fc78170796b7c3c0014a6ec
3
+ metadata.gz: 84dbc231d29673da035d182bf6198848a4b0bbe1
4
+ data.tar.gz: 504c80fb2ea79996efa2b155affc7f1fcced00a6
5
5
  SHA512:
6
- metadata.gz: 812edd49fc33adeb9416e23040b7bf11c1057583e8019f708f8848eceed131405579c4cc5e8a80e242274f06209ae77bb3ecade5254d1687248b6ecefb734944
7
- data.tar.gz: b34bb3786b51d1442a0034db7836c3092d77c08359ed91f90e9acc686b20e797ea9dbbacc597b97cef9d83a1ea35653c81f777bfaf05a893e3e9db6e32308c5b
6
+ metadata.gz: 8d1d4eb41cf77fc668a7e785a4c6228f9f15ce64add9cc1c434a10311964fe789b21031ef9a09c4930b932878a6962897732f1f3f03d18746e361c155ac90fb2
7
+ data.tar.gz: 102f3eb0359b547f595fc64e13cb3ba9db54b27a26101eef0eb27dc2113c75e15d1af101119f1affb0d797fc8f8ab8075bc5663c05307b9ead3e32c2f1c38cee
data/dployr.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.add_dependency "fog", "~> 1.21"
23
23
  s.add_dependency "deep_merge", "~> 1.0"
24
- s.add_dependency "net-ssh", "~> 2.8.0"
24
+ s.add_dependency "net-ssh", "~> 2.9.0"
25
25
  s.add_dependency "net-scp", "~> 1.2.0"
26
26
  s.add_dependency "colorize", "~> 0.7.2"
27
27
 
data/lib/dployr/cli.rb CHANGED
@@ -45,11 +45,15 @@ opt_parser = OptionParser.new do |opt|
45
45
  opt.on("-r", "--region REGION", "region to use (allow multiple values comma-separated)") do |v|
46
46
  options[:region] = v
47
47
  end
48
-
48
+
49
49
  opt.on("-i", "--public-ip", "use public ip instead of private ip to when access instances") do |v|
50
50
  options[:public_ip] = v
51
51
  end
52
52
 
53
+ opt.on("--debug", "enable debug mode") do
54
+ options[:debug] = true
55
+ end
56
+
53
57
  opt.on("-v", "-V", "--version", "version") do
54
58
  puts Dployr::VERSION
55
59
  exit 0
@@ -65,31 +69,47 @@ end
65
69
 
66
70
  opt_parser.parse!
67
71
 
72
+ def run(command, options, arg = nil)
73
+ begin
74
+ cmd = Dployr::Commands.const_get command
75
+ raise "Command not supported: #{command}" unless cmd
76
+ if arg
77
+ cmd.new options, arg
78
+ else
79
+ cmd.new options
80
+ end
81
+ rescue => e
82
+ puts "Error: #{e}".red
83
+ puts e.backtrace if e.backtrace and options[:debug]
84
+ exit 1
85
+ end
86
+ end
87
+
68
88
  case command
69
89
  when "start"
70
- Dployr::Commands::Start.new options
90
+ run :Start, options
71
91
  when "halt"
72
- Dployr::Commands::StopDestroy.new options, "halt"
92
+ run :StopDestroy, options, "halt"
73
93
  when "destroy"
74
- Dployr::Commands::StopDestroy.new options, "destroy"
94
+ run :StopDestroy, options, "destroy"
75
95
  when "status"
76
96
  puts "Command currently not available"
77
97
  when "info"
78
- Dployr::Commands::Info.new options
98
+ run :Info, options
79
99
  when "provision"
80
- Dployr::Commands::ProvisionTest.new options, "provision"
100
+ run :ProvisionTest, options, "provision"
81
101
  when "test"
82
- Dployr::Commands::ProvisionTest.new options, "test"
102
+ run :ProvisionTest, options, "test"
83
103
  when "deploy"
84
- Dployr::Commands::Start.new options
85
- Dployr::Commands::ProvisionTest.new options, "provision"
86
- Dployr::Commands::ProvisionTest.new options, "test"
104
+ run :Start, options
105
+ run :ProvisionTest, options, "provision"
106
+ run :ProvisionTest, options, "test"
87
107
  when "execute"
88
- Dployr::Commands::Execute.new options, ARGV[1..-1]
108
+ run :Execute, options, ARGV[1..-1]
89
109
  when "ssh"
90
- Dployr::Commands::Ssh.new options
110
+ run :Ssh, options
91
111
  when "config"
92
- Dployr::Commands::Config.new options
112
+ run :Config, options
93
113
  when "init"
94
114
  Dployr::Config::Create.write_file
95
115
  else
@@ -11,27 +11,22 @@ module Dployr
11
11
 
12
12
  include Dployr::Commands::Utils
13
13
 
14
- attr_reader :options, :name, :log, :attrs, :dployr
15
-
16
14
  def initialize(options)
17
15
  @options = options
18
16
  @name = options[:name]
19
17
  @log = Logger.new STDOUT
20
18
  @attrs = parse_attributes @options[:attributes]
21
- if !options[:public_ip]
22
- options[:public_ip] = false
23
- end
19
+ @options[:public_ip] = false if !options[:public_ip]
24
20
  @provider = options[:provider].upcase
25
21
  create
26
- @config = get_region_config options
27
- @p_attrs = @config[:attributes]
22
+ get_config
28
23
  end
29
24
 
30
25
  def create
31
26
  begin
32
27
  @dployr = Dployr::Init.new @attrs
33
28
  @dployr.load_config @options[:file]
34
- rescue Exception => e
29
+ rescue => e
35
30
  raise "Cannot load the config: #{e}"
36
31
  end
37
32
  end
@@ -48,6 +43,13 @@ module Dployr
48
43
  @dployr.config.get_region options[:name], options[:provider], options[:region]
49
44
  end
50
45
 
46
+ private
47
+
48
+ def get_config
49
+ @config = get_region_config @options
50
+ @p_attrs = @config[:attributes]
51
+ end
52
+
51
53
  end
52
54
  end
53
55
  end
@@ -6,12 +6,7 @@ module Dployr
6
6
 
7
7
  def initialize(options)
8
8
  super options
9
- begin
10
- render_file
11
- rescue Exception => e
12
- @log.error e
13
- exit 1
14
- end
9
+ render_file
15
10
  end
16
11
 
17
12
  private
@@ -19,13 +14,7 @@ module Dployr
19
14
  def render_file
20
15
  raise "Dployrfile was not found" if @dployr.file_path.nil?
21
16
  raise "Configuration is missing" unless @dployr.config.exists?
22
-
23
- begin
24
- print_config
25
- rescue Exception => e
26
- puts "Cannot generate the config: #{e}"
27
- exit 1
28
- end
17
+ print_config
29
18
  end
30
19
 
31
20
  def print_config
@@ -15,7 +15,6 @@ module Dployr
15
15
  else
16
16
  raise "#{@p_attrs["name"]} not found"
17
17
  end
18
-
19
18
  rescue Exception => e
20
19
  self.log.error e
21
20
  exit 1
@@ -5,42 +5,42 @@ require 'ostruct'
5
5
  module Dployr
6
6
  module Compute
7
7
  class BAREMETAL
8
-
8
+
9
9
  include Dployr::Compute::Common
10
-
10
+
11
11
  def initialize(options, attrs)
12
12
  @options = options
13
13
  @attrs = attrs
14
14
  end
15
15
 
16
- def get_ip()
16
+ def get_ip
17
17
  if @options["public_ip"]
18
- return @attrs["public_ip"]
18
+ @attrs["public_ip"]
19
19
  else
20
- return @attrs["private_ip"]
20
+ @attrs["private_ip"]
21
21
  end
22
22
  end
23
-
24
- def get_info()
23
+
24
+ def get_info
25
25
  result = OpenStruct.new
26
26
  result.attributes = {
27
27
  public_ip: @attrs["public_ip"],
28
28
  private_ip: @attrs["private_ip"],
29
29
  }
30
- return result
30
+ result
31
31
  end
32
32
 
33
- def destroy()
33
+ def destroy
34
34
  puts "Could not destroy baremetal machine".yellow
35
35
  end
36
36
 
37
- def halt()
37
+ def halt
38
38
  puts "Could not halt baremetal machine".yellow
39
39
  end
40
40
 
41
- def start()
41
+ def start
42
42
  puts "Could not start baremetal machine".yellow
43
- wait_ssh(attributes, server, @options["public_ip"])
43
+ wait_ssh attributes, server, @options["public_ip"]
44
44
  end
45
45
 
46
46
  end
@@ -37,7 +37,7 @@ module Dployr
37
37
  def get_config(name, attributes = {})
38
38
  instance = get_instance name
39
39
  attributes = @attributes.merge (attributes or {})
40
- raise Error.new "Instance '#{name.to_s}' do not exists" if instance.nil?
40
+ raise "Instance do not exists" if instance.nil?
41
41
  render_config name, instance, attributes
42
42
  end
43
43
 
@@ -54,7 +54,9 @@ module Dployr
54
54
  if config.is_a? Hash
55
55
  config = config[get_real_key(config, :providers)]
56
56
  if config.is_a? Hash
57
- return config[get_real_key(config, provider)]
57
+ provider_data = config[get_real_key(config, provider)]
58
+ raise "Provider #{provider} for #{name} do not exists" unless provider_data
59
+ provider_data
58
60
  end
59
61
  end
60
62
  end
@@ -63,7 +65,9 @@ module Dployr
63
65
  provider = get_provider name, provider, attributes
64
66
  if provider.is_a? Hash
65
67
  regions = get_by_key provider, :regions
66
- return get_by_key regions, region
68
+ region_data = get_by_key regions, region
69
+ raise "Region #{region} for #{name} do not exists" unless region_data
70
+ region_data
67
71
  end
68
72
  end
69
73
 
@@ -75,17 +79,12 @@ module Dployr
75
79
  private
76
80
 
77
81
  def render_config(name, instance, attributes)
78
- attributes = replace_variables attributes
79
82
  config = merge_config instance, attributes
80
83
  config = replace_name name, config
81
84
  config = replace_variables config, attributes
82
85
  config
83
86
  end
84
87
 
85
- def replace_name(name, config)
86
- replace_keywords 'name', name, config
87
- end
88
-
89
88
  def create_instance(name = 'unnamed', config)
90
89
  Dployr::Config::Instance.new do |i|
91
90
  i.name = name
@@ -93,17 +92,26 @@ module Dployr
93
92
  end if config.is_a? Hash
94
93
  end
95
94
 
95
+ def replace_name(name, config)
96
+ replace_keywords 'name', name, config
97
+ end
98
+
96
99
  def replace_variables(config, attributes = {})
97
100
  if config.is_a? Hash
98
101
  attrs = get_all_attributes config
99
102
  attrs.merge! attributes if attributes.is_a? Hash
100
- traverse_map config do |str, key|
101
- replace_env_vars template(str, attrs)
102
- end
103
+ config = replace config, attrs
103
104
  end
104
105
  config
105
106
  end
106
107
 
108
+ def replace(hash, origin)
109
+ traverse_map hash do |str|
110
+ replace_env_vars template(str, origin)
111
+ end
112
+ hash
113
+ end
114
+
107
115
  def get_all_attributes(config)
108
116
  attrs = {}
109
117
  config.each do |key, value|
@@ -113,6 +121,7 @@ module Dployr
113
121
  attrs.merge! get_all_attributes value
114
122
  end
115
123
  end if config.is_a? Hash
124
+ attrs = replace attrs, attrs
116
125
  attrs
117
126
  end
118
127
 
data/lib/dployr/utils.rb CHANGED
@@ -13,7 +13,7 @@ module Dployr
13
13
  end
14
14
 
15
15
  def get_by_key(hash, key)
16
- if hash.is_a? Hash
16
+ if hash.is_a? Hash and key
17
17
  hash[key] or hash[key.to_sym] or hash[key.to_s]
18
18
  end
19
19
  end
@@ -1,3 +1,3 @@
1
1
  module Dployr
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
@@ -14,37 +14,39 @@ describe Dployr::Configuration do
14
14
  end
15
15
 
16
16
  describe "default values" do
17
- let(:defaults) do
18
- {
19
- attributes: {
20
- name: "example",
21
- instance_type: "m1.small",
22
- version: "${DPLOYR}"
23
- },
24
- scripts: [
25
- { path: "configure.sh" }
26
- ],
27
- providers: {
28
- aws: {
29
- attributes: {
30
- network_id: "be457fca",
31
- instance_type: "m1.small",
32
- "type-%{name}" => "small"
33
- },
34
- scripts: [
35
- { path: "router.sh", args: ["%{name}", "${region}", "${provider}"] }
36
- ],
37
- regions: {
38
- "eu-west-1a" => {
39
- attributes: {
40
- keypair: "vagrant-aws-ireland"
41
- }
17
+ defaults = {
18
+ attributes: {
19
+ name: "example",
20
+ instance_type: "m1.small",
21
+ version: "${DPLOYR}"
22
+ },
23
+ scripts: [
24
+ { path: "configure.sh" }
25
+ ],
26
+ providers: {
27
+ aws: {
28
+ attributes: {
29
+ network_id: "be457fca",
30
+ instance_type: "m1.small",
31
+ "type-%{name}" => "small",
32
+ mixed: "%{network_id}-%{instance_type}"
33
+ },
34
+ scripts: [
35
+ {
36
+ path: "router.sh",
37
+ args: [ "%{name}", "${region}", "${provider}" ]
38
+ }
39
+ ],
40
+ regions: {
41
+ "eu-west-1a" => {
42
+ attributes: {
43
+ keypair: "vagrant-aws-ireland"
42
44
  }
43
45
  }
44
46
  }
45
47
  }
46
48
  }
47
- end
49
+ }
48
50
 
49
51
  describe "add default values" do
50
52
  before do
@@ -105,12 +107,12 @@ describe Dployr::Configuration do
105
107
  attributes: {
106
108
  name: "zeus"
107
109
  },
108
- authentication: {
109
- user: "admin",
110
- key_path: "path/to/key.pem"
111
- },
112
110
  scripts: [
113
- { path: "setup.sh", args: ["--id ${index}", "--name ${name}"], remote: true }
111
+ {
112
+ path: "setup.sh",
113
+ args: ["--id ${index}", "--name ${name}", "%{name}-%{instance_type}-%{version}", "%{mixed}"],
114
+ remote: true
115
+ }
114
116
  ],
115
117
  providers: {
116
118
  aws: {
@@ -250,7 +252,6 @@ describe Dployr::Configuration do
250
252
  it "should have inherited scripts" do
251
253
  region[:scripts].should have(2).items
252
254
  end
253
-
254
255
  end
255
256
  end
256
257
 
@@ -267,7 +268,7 @@ describe Dployr::Configuration do
267
268
  end
268
269
 
269
270
  it "should have a valid number of attributes" do
270
- zeus[:providers][:aws][:attributes].should have(5).items
271
+ zeus[:providers][:aws][:attributes].should have(6).items
271
272
  end
272
273
 
273
274
  it "should have a valid instance_type" do
@@ -290,6 +291,10 @@ describe Dployr::Configuration do
290
291
  it "should have a type key with valid replacement" do
291
292
  zeus[:providers][:aws][:attributes]["type-zeus"].should eql "small"
292
293
  end
294
+
295
+ it "should have a mixed attribute with self-referenced values" do
296
+ zeus[:providers][:aws][:attributes][:mixed].should eql "be457fca-m1.small"
297
+ end
293
298
  end
294
299
  end
295
300
 
@@ -311,7 +316,7 @@ describe Dployr::Configuration do
311
316
  end
312
317
 
313
318
  it "should have a valid number of arguments" do
314
- zeus[:providers][:aws][:scripts][1][:args].should have(2).items
319
+ zeus[:providers][:aws][:scripts][1][:args].should have(4).items
315
320
  end
316
321
 
317
322
  it "should have a remote property" do
@@ -330,6 +335,14 @@ describe Dployr::Configuration do
330
335
  it "should replace the name context value" do
331
336
  zeus[:providers][:aws][:scripts][1][:args][1].should eql "--name zeus"
332
337
  end
338
+
339
+ it "should replace the multiple attributes" do
340
+ zeus[:providers][:aws][:scripts][1][:args][2].should eql "zeus-m1.small-0.1.0"
341
+ end
342
+
343
+ it "should replace the self-referenced attribute with other attributes" do
344
+ zeus[:providers][:aws][:scripts][1][:args][3].should eql "be457fca-m1.small"
345
+ end
333
346
  end
334
347
  end
335
348
 
@@ -416,7 +429,6 @@ describe Dployr::Configuration do
416
429
  end
417
430
  end
418
431
  end
419
-
420
432
  end
421
433
  end
422
434
  end
@@ -435,7 +447,7 @@ describe Dployr::Configuration do
435
447
  @config.should be_a Hash
436
448
  end
437
449
 
438
- it "should have one provider" do
450
+ it "should have a valid number of keys" do
439
451
  @config.should have(3).items
440
452
  end
441
453
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dployr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Aparicio
@@ -45,14 +45,14 @@ dependencies:
45
45
  requirements:
46
46
  - - ~>
47
47
  - !ruby/object:Gem::Version
48
- version: 2.8.0
48
+ version: 2.9.0
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - ~>
54
54
  - !ruby/object:Gem::Version
55
- version: 2.8.0
55
+ version: 2.9.0
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: net-scp
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -196,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
196
196
  version: '0'
197
197
  requirements: []
198
198
  rubyforge_project: dployr
199
- rubygems_version: 2.0.3
199
+ rubygems_version: 2.0.6
200
200
  signing_key:
201
201
  specification_version: 4
202
202
  summary: Multicloud management and deployment with asteroids made simple