dployr 0.0.3 → 0.0.4

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: 9e18de4be7a56b2227ef830bd0159a0fe9e675a9
4
- data.tar.gz: b2d9e30ad637839636e952069b43768d8476db1c
3
+ metadata.gz: 55e8744de1ada22c752a30e73a533774383b957a
4
+ data.tar.gz: 71bd763bd9e8de49200a57c9622f6c142de98aec
5
5
  SHA512:
6
- metadata.gz: 5151faf23cfdc2b09998a78a78d25aaaf00123b234275fc9a903fc5d72c0b11907142c9b046e49142f3fc9ccf3ba2c0e65abaee599adf53827e0535c2c4f4dc9
7
- data.tar.gz: 5fb7a5c245f56633f6759f12d22a5530ce8795b22fdc85a7ae3089de2f0fd6f07e2c82a177688a31abc13d65e634cb9bc5895265e93b4c9a3aeabfec71b8f99c
6
+ metadata.gz: 59247fbc73d154f5d8535adbc1e20584be2e5e243764260e033482f09b12f73f29513b7f2887f7676d5bd1706a733237c9257aed82533f5cf22aa4db00c4f1fc
7
+ data.tar.gz: 964b34cf57543d3db61b460147d920b539ac7e40202dd5194488354fd21e8f3d29842d1038910b4602bbe0e719fe71a1767265a6f00d7fcc92839e798c5721c6
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > Multicloud management and deployment made simple
4
4
 
5
- > **Spoiler! Alpha project. Funny work in progress**
5
+ > **Spoiler! Alpha project. Use it by your own risk**
6
6
 
7
7
  <table>
8
8
  <tr>
@@ -18,8 +18,8 @@
18
18
  **Dployr** is a Ruby utility that simplifies cloud management
19
19
  and deployment across different providers
20
20
 
21
- You can configure your infraestructure and deployment from a simple configuration file which support built-in
22
- rich features like templating and inheritance
21
+ You can configure your infraestructure and deployment from a
22
+ simple configuration file which support built-in rich features
23
23
 
24
24
  Dployr only works in Ruby >= `1.9.x`
25
25
 
@@ -29,12 +29,13 @@ Dployr only works in Ruby >= `1.9.x`
29
29
  $ gem install dployr
30
30
  ```
31
31
 
32
- Or add it as dependency in your `Gemfile` or `.gemspec` file
32
+ If you need to use it from another Ruby package,
33
+ add it as dependency in your `Gemfile` or `.gemspec` file
33
34
  ```ruby
34
35
  # gemspec
35
- spec.add_dependency 'dployr', '>= 0.0.1'
36
+ spec.add_dependency 'dployr', '>= 0.0.3'
36
37
  # Gemfile
37
- gem 'dployr', '>= 0.0.1'
38
+ gem 'dployr', '>= 0.0.3'
38
39
  ```
39
40
 
40
41
  ## Documentation
@@ -43,7 +44,18 @@ Dployr documentation and API is available from [RubyDoc][rubydoc]
43
44
 
44
45
  ## Features
45
46
 
46
- `To do! but all will be cool :)`
47
+ - Fully configurable from Ruby or YAML file with rich features like templating
48
+ - Supports deployment to multiple providers
49
+ - Built-in support for defailted instances configuration
50
+ - Local and remote scripts execution per stage phase (start, test, provision, update, stop...)
51
+ - Featured command-line and programmatic API
52
+
53
+ ## Supported providers
54
+
55
+ Note that as Dployr is still in alpha stage, there are only a few providers supported
56
+
57
+ - Amazon Web Services (`aws`)
58
+ - Google Compute Engine (`gce`)
47
59
 
48
60
  ## Configuration
49
61
 
@@ -76,9 +88,15 @@ Notation: `%{attribute-name}`
76
88
 
77
89
  ##### Iteration context variables
78
90
 
79
- You can reference to the current `provider` or `region` of the current iteration context
91
+ You can use references from config strings to specific iteration context values
80
92
 
81
- Notation: `${region}`
93
+ Notation: `${value}`
94
+
95
+ Supported values:
96
+
97
+ - **provider** - Current context provider name identifier
98
+ - **region** - Current context region name identifier
99
+ - **name** - Current context template name identifier
82
100
 
83
101
  ##### Environment variables
84
102
 
@@ -140,7 +158,6 @@ default:
140
158
  args: "%{name}"
141
159
  path: ./scripts/updatedns.sh
142
160
 
143
-
144
161
  custom:
145
162
  name: 1
146
163
  web-server:
@@ -159,23 +176,26 @@ custom:
159
176
  attributes:
160
177
  instance_type: m1.large
161
178
  scripts:
162
- post-start:
179
+ pre-start:
163
180
  -
164
181
  args:
165
182
  - "%{name}"
166
183
  - "%{type}"
167
184
  - "%{domain}"
168
- path: ./scripts/.sh
169
- -
170
- args:
171
- - "%{hydra}"
172
- path: ./scripts/configureListener.sh
173
- -
174
- args:
175
- - "%{$provider}-%{region}"
176
- - "%{type}"
177
- path: ./scripts/hydraProbe.sh
178
-
185
+ path: ./scripts/pre-start.sh
186
+ start:
187
+ -
188
+ args:
189
+ - "%{hydra}"
190
+ path: ./scripts/configure.sh
191
+ provision:
192
+ -
193
+ args:
194
+ - "%{$provider}-%{region}"
195
+ - "%{type}"
196
+ path: ./scripts/provision.sh
197
+ test:
198
+ - path: ./scripts/serverspec.sh
179
199
  ```
180
200
 
181
201
  ## Command-line interface
@@ -194,18 +214,35 @@ Commands
194
214
  provision instance provisioning
195
215
  config generate configuration in YAML from Dployrfile
196
216
  execute run custom stages
217
+ ssh ssh into machine
197
218
  init create a sample Dployrfile
198
219
 
199
220
  Options
200
221
 
201
222
  -n, --name NAME template name identifier to load
202
223
  -f, --file PATH custom config file path to load
203
- -a, --attributes ATTRS aditional attributes to pass to the configuration in matrix query format
224
+ -a, --attributes ATTRS aditional attributes to pass to the configuration in matrix query
204
225
  -p, --provider VALUES provider to use (allow multiple values comma-separated)
205
226
  -r, --region REGION region to use (allow multiple values comma-separated)
206
227
  -v, -V, --version version
207
228
  -h, --help help
229
+ ```
208
230
 
231
+ ### Examples
232
+
233
+ Start a new instance. If it don't exists, it will be created
234
+ ```bash
235
+ $ dployr start -n name -p aws -r eu-west-1 -a 'env=dev'
236
+ ```
237
+
238
+ Provision an existent working instance
239
+ ```bash
240
+ $ dployr provision -n name -p aws -r eu-west-1 -a 'env=dev'
241
+ ```
242
+
243
+ Test a working instance
244
+ ```bash
245
+ $ dployr test -n name -p aws -r eu-west-1 -a 'env=dev'
209
246
  ```
210
247
 
211
248
  ## Programmatic API
data/lib/dployr/cli.rb CHANGED
@@ -47,6 +47,7 @@ opt_parser = OptionParser.new do |opt|
47
47
 
48
48
  opt.on("-v", "-V", "--version", "version") do
49
49
  puts Dployr::VERSION
50
+ exit 0
50
51
  end
51
52
 
52
53
  opt.on("-h", "--help", "help") do
@@ -15,24 +15,32 @@ module Dployr
15
15
  end
16
16
  end
17
17
 
18
+ private
19
+
18
20
  def render_file
19
21
  raise "Dployrfile was not found" if @dployr.file_path.nil?
20
22
  raise "Configuration is missing" unless @dployr.config.exists?
23
+
21
24
  begin
22
- if @name and options[:provider] and options[:region]
23
- config = get_region_config options
24
- elsif @name
25
- config = @dployr.config.get_config @name, @attrs
26
- else
27
- config = @dployr.config.get_config_all @attrs
28
- end
29
- unless config.nil?
30
- puts config.to_yaml
31
- else
32
- @log.info "Missing configuration data"
33
- end
25
+ print_config
34
26
  rescue Exception => e
35
- raise "Cannot generate the config: #{e}"
27
+ puts "Cannot generate the config: #{e}"
28
+ exit 1
29
+ end
30
+ end
31
+
32
+ def print_config
33
+ if @name and @options[:provider] and @options[:region]
34
+ config = get_region_config @options
35
+ elsif @name
36
+ config = @dployr.config.get_config @name, @attrs
37
+ else
38
+ config = @dployr.config.get_config_all @attrs
39
+ end
40
+ unless config.nil?
41
+ puts config.to_yaml
42
+ else
43
+ raise "Missing configuration data"
36
44
  end
37
45
  end
38
46
 
@@ -1,10 +1,12 @@
1
1
  require 'fog'
2
- require 'net/ssh'
2
+ require 'dployr/compute/common'
3
3
 
4
4
  module Dployr
5
5
  module Compute
6
6
  class AWS
7
-
7
+
8
+ include Dployr::Compute::Common
9
+
8
10
  def initialize(region)
9
11
  @options = {
10
12
  region: region[0..-2],
@@ -15,16 +17,6 @@ module Dployr
15
17
  @compute = Fog::Compute.new @options
16
18
  end
17
19
 
18
- def get_instance(name, states)
19
- servers = @compute.servers.all
20
- servers.each do |instance|
21
- if instance.tags["Name"] == name and states.include? instance.state
22
- return instance
23
- end
24
- end
25
- nil
26
- end
27
-
28
20
  def get_ip(name)
29
21
  instance = get_instance(name, ["running"])
30
22
  instance.private_ip_address if instance
@@ -63,36 +55,45 @@ module Dployr
63
55
  subnet_id: attributes["subnet_id"],
64
56
  security_group_ids: attributes["security_groups"],
65
57
  tags: { Name: attributes["name"] }
66
- #private_ip_address : private_ip_address,
67
- #user_data : user_data,
68
- #elastic_ip : elastic_ip,
69
- #allocate_elastic_ip : allocate_elastic_ip,
70
- #block_device_mapping : block_device_mapping,
71
- #instance_initiated_shutdown_behavior : terminate_on_shutdown == true ? "terminate" : nil,
72
- #monitoring : monitoring,
73
- #ebs_optimized : ebs_optimized
74
58
  }
75
59
  puts options.to_yaml
76
60
  server = @compute.servers.create(options)
77
61
  end
78
62
  print "Wait for instance to get online".yellow
79
63
  server.wait_for { print ".".yellow; ready? }
80
-
81
- print "\nWait for ssh to get ready...".yellow
82
- while true
83
- begin
84
- Net::SSH.start(server.private_ip_address, attributes["username"], :keys => attributes["private_key_path"]) do |ssh|
85
- print "\n"
86
- return server.private_ip_address
87
- end
88
- rescue Exception => e
89
- print ".".yellow
90
- sleep 2
64
+ print "\n"
65
+ elastic_ip(attributes, server)
66
+ wait_ssh(attributes, server)
67
+ end
68
+
69
+ private
70
+
71
+ def get_instance(name, states)
72
+ servers = @compute.servers.all
73
+ servers.each do |instance|
74
+ if instance.tags["Name"] == name and states.include? instance.state
75
+ return instance
91
76
  end
92
77
  end
93
- print "\n"
94
78
  nil
95
79
  end
80
+
81
+ def elastic_ip(attributes, server)
82
+ if attributes["public_ip"]
83
+ if attributes["public_ip"] == "new"
84
+ puts "Creating new elastic ip...".yellow
85
+ response = @compute.allocate_address(server.vpc_id)
86
+ allocation_id = response[:body]["allocationId"]
87
+ attributes["public_ip"] = response[:body]["publicIp"]
88
+ else
89
+ puts "Looking for elastic ip #{attributes["public_ip"]}...".yellow
90
+ eip = @compute.addresses.get(attributes["public_ip"])
91
+ allocation_id = eip.allocation_id
92
+ end
93
+ puts "Associating elastic ip #{attributes["public_ip"]}...".yellow
94
+ @compute.associate_address(server.id,nil,nil,allocation_id)
95
+ end
96
+ end
96
97
 
97
98
  end
98
99
  end
@@ -0,0 +1,28 @@
1
+ require 'net/ssh'
2
+
3
+ module Dployr
4
+ module Compute
5
+ module Common
6
+
7
+ module_function
8
+
9
+ def wait_ssh(attributes, server)
10
+ print "Wait for ssh to get ready...".yellow
11
+ while true
12
+ begin
13
+ Net::SSH.start(server.private_ip_address, attributes["username"], :keys => attributes["private_key_path"]) do |ssh|
14
+ print "\n"
15
+ return server.private_ip_address
16
+ end
17
+ rescue Exception => e
18
+ print ".".yellow
19
+ sleep 2
20
+ end
21
+ end
22
+ print "\n"
23
+ end
24
+
25
+
26
+ end
27
+ end
28
+ end
@@ -1,10 +1,12 @@
1
1
  require 'fog'
2
- require 'net/ssh'
2
+ require 'dployr/compute/common'
3
3
 
4
4
  module Dployr
5
5
  module Compute
6
6
  class GCE
7
7
 
8
+ include Dployr::Compute::Common
9
+
8
10
  def initialize(region)
9
11
  @options = {
10
12
  provider: 'Google',
@@ -85,11 +87,13 @@ module Dployr
85
87
  end
86
88
 
87
89
  def start(attributes, region)
90
+ external_ip(attributes, region)
88
91
  server = get_instance(attributes["name"], ["stopped", "stopping"])
89
92
  if server
90
93
  puts "Starting stopped instance for #{attributes["name"]} in #{region}...".yellow
91
94
  server.start
92
95
  else
96
+ puts "Creating boot disk...".yellow
93
97
  disks = create_disk(attributes["name"], 10, region, attributes["image_name"])
94
98
  if defined? attributes["autodelete_disk"]
95
99
  autodelete_disk = attributes["autodelete_disk"]
@@ -105,6 +109,7 @@ module Dployr
105
109
  machine_type: attributes["instance_type"],
106
110
  network: attributes["network"],
107
111
  disks: [disks.get_as_boot_disk(true, autodelete_disk)],
112
+ external_ip: attributes["public_ip"]
108
113
  }
109
114
 
110
115
  puts options.to_yaml
@@ -112,21 +117,27 @@ module Dployr
112
117
  end
113
118
  print "Wait for instance to get online".yellow
114
119
  server.wait_for { print ".".yellow; ready? }
115
-
116
- print "\nWait for ssh to get ready...".yellow
117
- while true
118
- begin
119
- Net::SSH.start(server.private_ip_address, attributes["username"], :keys => attributes["private_key_path"]) do |ssh|
120
- print "\n"
121
- return server.private_ip_address
120
+ print "\n"
121
+ wait_ssh(attributes, server)
122
+ end
123
+
124
+ private
125
+
126
+ def external_ip(attributes, region)
127
+ if attributes["public_ip"] == "new"
128
+ puts "Looking for previous public_ip...".yellow
129
+ ip = @compute.insert_address(attributes["name"], region[0..-3])
130
+ while true
131
+ ip = @compute.get_address(attributes["name"], region[0..-3])
132
+ if ip[:body]["address"]
133
+ attributes["public_ip"].replace ip[:body]["address"]
134
+ puts "Using public_ip #{attributes["public_ip"]}".yellow
135
+ break
122
136
  end
123
- rescue Exception => e
124
- print ".".yellow
125
- sleep 2
137
+ puts "Waiting for ip to be ready...".yellow
138
+ sleep 1
126
139
  end
127
140
  end
128
- print "\n"
129
- return nil
130
141
  end
131
142
 
132
143
  end
@@ -37,8 +37,8 @@ module Dployr
37
37
  def get_config(name, attributes = {})
38
38
  instance = get_instance name
39
39
  attributes = @attributes.merge (attributes or {})
40
- raise ArgumentError.new "Instance '#{name.to_s}' do not exists" if instance.nil?
41
- replace_variables merge_config(instance), replace_variables(attributes)
40
+ raise Error.new "Instance '#{name.to_s}' do not exists" if instance.nil?
41
+ render_config name, instance, attributes
42
42
  end
43
43
 
44
44
  def get_config_all(attributes = {})
@@ -74,6 +74,18 @@ module Dployr
74
74
 
75
75
  private
76
76
 
77
+ def render_config(name, instance, attributes)
78
+ attributes = replace_variables attributes
79
+ config = merge_config instance, attributes
80
+ config = replace_name name, config
81
+ config = replace_variables config, attributes
82
+ config
83
+ end
84
+
85
+ def replace_name(name, config)
86
+ replace_keywords 'name', name, config
87
+ end
88
+
77
89
  def create_instance(name = 'unnamed', config)
78
90
  Dployr::Config::Instance.new do |i|
79
91
  i.name = name
@@ -104,8 +116,11 @@ module Dployr
104
116
  attrs
105
117
  end
106
118
 
107
- def merge_config(instance)
108
- merge_providers merge_parents merge_defaults instance.get_values
119
+ def merge_config(instance, attributes = {})
120
+ config = merge_defaults instance.get_values
121
+ config[:attributes] =
122
+ (get_by_key(config, :attributes) or {}).merge attributes if attributes
123
+ merge_providers merge_parents config
109
124
  end
110
125
 
111
126
  def merge_defaults(config)
@@ -1,3 +1,3 @@
1
1
  module Dployr
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+ require 'dployr/commands/config'
3
+
4
+ describe Dployr::Commands::Config do
5
+
6
+ dployrfile = "spec/fixtures/basic/Dployrfile.yml"
7
+ arguments = "config -f #{dployrfile} -n dployr -p aws -r sa-east-1a -a 'index=100'"
8
+
9
+ before :all do
10
+ @result = `bin/dployr #{arguments}`
11
+ @exit_code = $?.exitstatus
12
+ end
13
+
14
+ it "should have a valid exit code" do
15
+ @result.should be_a String
16
+ @exit_code.should be 0
17
+ end
18
+
19
+ describe "attributes" do
20
+ it "should have a valid attribute name" do
21
+ @result.should include "name: dployr"
22
+ end
23
+
24
+ it "should have a valid attribute index" do
25
+ @result.should match /index: [']?100[']?/
26
+ end
27
+
28
+ it "should have a valid attribute prefix" do
29
+ @result.should include "prefix: dev"
30
+ end
31
+
32
+ it "should have a valid attribute private_key_path" do
33
+ @result.should match /private_key_path: [\"]?~\/pems\/innotechdev.pem[\"]?/
34
+ end
35
+
36
+ it "should have a valid attribute username" do
37
+ @result.should include "username: innotechdev"
38
+ end
39
+
40
+ it "should have a valid attribute instance_type" do
41
+ @result.should include "instance_type: t1.micro"
42
+ end
43
+
44
+ it "should have a valid attribute ami" do
45
+ @result.should include "ami: ami-370daf2a"
46
+ end
47
+
48
+ it "should have a valid attribute username" do
49
+ @result.should include "username: innotechdev"
50
+ end
51
+
52
+ it "should have a valid attribute keypair" do
53
+ @result.should include "keypair: vagrant-aws-saopaulo"
54
+ end
55
+
56
+ it "should have a valid attribute security_groups" do
57
+ @result.should include "security_groups:\n - sg-3cf3e45e"
58
+ end
59
+
60
+ it "should have a valid attribute subnet_id" do
61
+ @result.should include "subnet_id: subnet-1eebe07c"
62
+ end
63
+ end
64
+
65
+ describe "scripts" do
66
+ it "should have a valid script in pre-provision stage" do
67
+ @result.should match /:scripts:\n pre-provision:\n - source: [\"]?.\/hello[\"]?\n target: [\"]?\/tmp[\"]?/
68
+ end
69
+
70
+ it "should have a valid script in provision stage" do
71
+ @result.should match /provision:\n - remote_path: [\"]?\/tmp\/hello\/jetty.sh[\"]?\n args: ''/
72
+ end
73
+
74
+ it "should have a valid script in provision stage with template value" do
75
+ @result.should match /- remote_path: [\"]?\/tmp\/test.sh 100[\"]?\n/
76
+ end
77
+
78
+ it "should have a valid script in stop stage with template value" do
79
+ @result.should match /stop:\n - remote_path: [\"]?\/tmp\/stop.sh 100[\"]?\n/
80
+ end
81
+ end
82
+
83
+ end
@@ -110,7 +110,7 @@ describe Dployr::Configuration do
110
110
  key_path: "path/to/key.pem"
111
111
  },
112
112
  scripts: [
113
- { path: "setup.sh", args: ["--id ${index}"], remote: true }
113
+ { path: "setup.sh", args: ["--id ${index}", "--name ${name}"], remote: true }
114
114
  ],
115
115
  providers: {
116
116
  aws: {
@@ -327,6 +327,14 @@ describe Dployr::Configuration do
327
327
  zeus[:providers][:aws][:scripts][1][:path].should eql "setup.sh"
328
328
  end
329
329
 
330
+ it "should have a valid number of arguments" do
331
+ zeus[:providers][:aws][:scripts][1][:args].should have(2).items
332
+ end
333
+
334
+ it "should have a remote property" do
335
+ zeus[:providers][:aws][:scripts][1][:remote].should eql true
336
+ end
337
+
330
338
  it "should have a valid path" do
331
339
  zeus[:providers][:aws][:scripts][2][:path].should eql "router.sh"
332
340
  end
@@ -335,6 +343,10 @@ describe Dployr::Configuration do
335
343
  it "should replace the argument with the instance name" do
336
344
  zeus[:providers][:aws][:scripts][2][:args][0].should eql "zeus"
337
345
  end
346
+
347
+ it "should replace the name context value" do
348
+ zeus[:providers][:aws][:scripts][1][:args][1].should eql "--name zeus"
349
+ end
338
350
  end
339
351
  end
340
352
 
@@ -471,7 +483,7 @@ describe Dployr::Configuration do
471
483
  end
472
484
 
473
485
  it "should have a valid name" do
474
- @config[:attributes][:name].should eql "zeus"
486
+ @config[:attributes][:name].should eql "hera"
475
487
  end
476
488
  end
477
489
 
@@ -0,0 +1,41 @@
1
+ default:
2
+ attributes:
3
+ index: 1
4
+
5
+ dployr:
6
+ attributes:
7
+ name: dployr-test
8
+ prefix: dev
9
+ private_key_path: ~/pems/innotechdev.pem
10
+ username: innotechdev
11
+ scripts:
12
+ pre-provision:
13
+ - source: ./hello
14
+ target: /tmp
15
+ provision:
16
+ - remote_path: /tmp/hello/jetty.sh
17
+ args: ""
18
+ - remote_path: "/tmp/test.sh %{index}"
19
+ providers:
20
+ aws:
21
+ attributes:
22
+ instance_type: t1.micro
23
+ regions:
24
+ sa-east-1a:
25
+ attributes:
26
+ ami: ami-370daf2a # centos-base-v7
27
+ keypair: vagrant-aws-saopaulo
28
+ security_groups:
29
+ - sg-3cf3e45e # lib_aws_saopaulo
30
+ subnet_id: subnet-1eebe07c
31
+ scripts:
32
+ stop:
33
+ - remote_path: "/tmp/stop.sh %{index}"
34
+ gce:
35
+ attributes:
36
+ instance_type: f1-micro
37
+ regions:
38
+ europe-west1-a:
39
+ attributes:
40
+ image_name: centos-base-v7 # centos-base-v7
41
+ network: liberty-gce
@@ -1,4 +1,4 @@
1
- german-dployr:
1
+ german-template:
2
2
  attributes:
3
3
  name: "german-dployr"
4
4
  prefix: dev
@@ -9,16 +9,8 @@ german-dployr:
9
9
  - source: ./hello
10
10
  target: /tmp
11
11
  provision:
12
- # -
13
- # args: ""
14
- # remote_path: "/tmp/hello/hello.sh"
15
- # -
16
- # args: ""
17
- # local_path: "ls -l /tmp/"
18
- # - args: ""
19
- # remote_path: "sudo service jetty restart"
20
- - args: ""
21
- remote_path: "/tmp/hello/jetty.sh"
12
+ - remote_path: /tmp/hello/jetty.sh
13
+ args: ""
22
14
  providers:
23
15
  aws:
24
16
  attributes:
@@ -31,6 +23,7 @@ german-dployr:
31
23
  security_groups:
32
24
  - sg-3cf3e45e # lib_aws_saopaulo
33
25
  subnet_id: subnet-1eebe07c
26
+ #public_ip: new
34
27
  gce:
35
28
  attributes:
36
29
  instance_type: f1-micro
@@ -39,3 +32,4 @@ german-dployr:
39
32
  attributes:
40
33
  image_name: centos-base-v7 # centos-base-v7
41
34
  network: liberty-gce
35
+ #public_ip: 146.148.27.56
@@ -0,0 +1,18 @@
1
+ #!/bin/sh
2
+
3
+ createExecUser() {
4
+ USERNAME=$1
5
+ shift
6
+ DIRECTORIES=$@
7
+
8
+ NOLOGIN_PATH=$(which nologin)
9
+ sudo useradd -M -U -s $NOLOGIN_PATH $USERNAME
10
+ for dir in $DIRECTORIES; do
11
+ if [ ! -d $dir ]
12
+ then
13
+ sudo mkdir $dir
14
+ fi
15
+ echo "Change owner to $dir ..."
16
+ sudo chown -R ${USERNAME}:${USERNAME} $dir
17
+ done
18
+ }
@@ -0,0 +1,562 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Startup script for jetty under *nix systems (it works under NT/cygwin too).
4
+
5
+ ##################################################
6
+ # Set the name which is used by other variables.
7
+ # Defaults to the file name without extension.
8
+ ##################################################
9
+ NAME=$(echo $(basename $0) | sed -e 's/^[SK][0-9]+//' -e 's/\.sh$//')
10
+
11
+ # To get the service to restart correctly on reboot, uncomment below (3 lines):
12
+ # ========================
13
+ # chkconfig: 3 99 99
14
+ # description: Jetty 9 webserver
15
+ # processname: jetty
16
+ # ========================
17
+
18
+ # Configuration files
19
+ #
20
+ # /etc/default/$NAME
21
+ # If it exists, this is read at the start of script. It may perform any
22
+ # sequence of shell commands, like setting relevant environment variables.
23
+ #
24
+ # $HOME/.$NAMErc (e.g. $HOME/.jettyrc)
25
+ # If it exists, this is read at the start of script. It may perform any
26
+ # sequence of shell commands, like setting relevant environment variables.
27
+ #
28
+ # /etc/$NAME.conf
29
+ # If found, and no configurations were given on the command line,
30
+ # the file will be used as this script's configuration.
31
+ # Each line in the file may contain:
32
+ # - A comment denoted by the pound (#) sign as first non-blank character.
33
+ # - The path to a regular file, which will be passed to jetty as a
34
+ # config.xml file.
35
+ # - The path to a directory. Each *.xml file in the directory will be
36
+ # passed to jetty as a config.xml file.
37
+ # - All other lines will be passed, as-is to the start.jar
38
+ #
39
+ # The files will be checked for existence before being passed to jetty.
40
+ #
41
+ # Configuration variables
42
+ #
43
+ # JAVA
44
+ # Command to invoke Java. If not set, java (from the PATH) will be used.
45
+ #
46
+ # JAVA_OPTIONS
47
+ # Extra options to pass to the JVM
48
+ #
49
+ # JETTY_HOME
50
+ # Where Jetty is installed. If not set, the script will try go
51
+ # guess it by first looking at the invocation path for the script,
52
+ # and then by looking in standard locations as $HOME/opt/jetty
53
+ # and /opt/jetty. The java system property "jetty.home" will be
54
+ # set to this value for use by configure.xml files, f.e.:
55
+ #
56
+ # <Arg><Property name="jetty.home" default="."/>/webapps/jetty.war</Arg>
57
+ #
58
+ # JETTY_BASE
59
+ # Where your Jetty base directory is. If not set, the value from
60
+ # $JETTY_HOME will be used.
61
+ #
62
+ # JETTY_RUN
63
+ # Where the $NAME.pid file should be stored. It defaults to the
64
+ # first available of /var/run, /usr/var/run, JETTY_BASE and /tmp
65
+ # if not set.
66
+ #
67
+ # JETTY_PID
68
+ # The Jetty PID file, defaults to $JETTY_RUN/$NAME.pid
69
+ #
70
+ # JETTY_ARGS
71
+ # The default arguments to pass to jetty.
72
+ # For example
73
+ # JETTY_ARGS=jetty.host=0.0.0.0 jetty.port=8080 jetty.spdy.port=8443 jetty.secure.port=443
74
+ #
75
+ # JETTY_USER
76
+ # if set, then used as a username to run the server as
77
+
78
+ JETTY_HOME=/opt/jetty
79
+ JETTY_USER=jetty
80
+ JETTY_PORT=8080
81
+ JETTY_LOGS=/var/log/jetty/
82
+
83
+ usage()
84
+ {
85
+ echo "Usage: ${0##*/} [-d] {start|stop|run|restart|check|supervise} [ CONFIGS ... ] "
86
+ exit 1
87
+ }
88
+
89
+ [ $# -gt 0 ] || usage
90
+
91
+
92
+ ##################################################
93
+ # Some utility functions
94
+ ##################################################
95
+ findDirectory()
96
+ {
97
+ local L OP=$1
98
+ shift
99
+ for L in "$@"; do
100
+ [ "$OP" "$L" ] || continue
101
+ printf %s "$L"
102
+ break
103
+ done
104
+ }
105
+
106
+ running()
107
+ {
108
+ local PID=$(cat "$1" 2>/dev/null) || return 1
109
+ kill -0 "$PID" 2>/dev/null
110
+ }
111
+
112
+ started()
113
+ {
114
+ # wait for 60s to see "STARTED" in PID file, needs jetty-started.xml as argument
115
+ for T in 1 2 3 4 5 6 7 9 10 11 12 13 14 15
116
+ do
117
+ sleep 4
118
+ [ -z "$(grep STARTED $1 2>/dev/null)" ] || return 0
119
+ [ -z "$(grep STOPPED $1 2>/dev/null)" ] || return 1
120
+ [ -z "$(grep FAILED $1 2>/dev/null)" ] || return 1
121
+ local PID=$(cat "$2" 2>/dev/null) || return 1
122
+ kill -0 "$PID" 2>/dev/null || return 1
123
+ echo -n ". "
124
+ done
125
+
126
+ return 1;
127
+ }
128
+
129
+
130
+ readConfig()
131
+ {
132
+ (( DEBUG )) && echo "Reading $1.."
133
+ source "$1"
134
+ }
135
+
136
+
137
+
138
+ ##################################################
139
+ # Get the action & configs
140
+ ##################################################
141
+ CONFIGS=()
142
+ NO_START=0
143
+ DEBUG=0
144
+
145
+ while [[ $1 = -* ]]; do
146
+ case $1 in
147
+ -d) DEBUG=1 ;;
148
+ esac
149
+ shift
150
+ done
151
+ ACTION=$1
152
+ shift
153
+
154
+ ##################################################
155
+ # Read any configuration files
156
+ ##################################################
157
+ ETC=/etc
158
+ if [ $UID != 0 ]
159
+ then
160
+ ETC=$HOME/etc
161
+ fi
162
+
163
+ for CONFIG in $ETC/default/${NAME}{,9} $HOME/.${NAME}rc; do
164
+ if [ -f "$CONFIG" ] ; then
165
+ readConfig "$CONFIG"
166
+ fi
167
+ done
168
+
169
+
170
+ ##################################################
171
+ # Set tmp if not already set.
172
+ ##################################################
173
+ TMPDIR=${TMPDIR:-/tmp}
174
+
175
+ ##################################################
176
+ # Jetty's hallmark
177
+ ##################################################
178
+ JETTY_INSTALL_TRACE_FILE="start.jar"
179
+
180
+
181
+ ##################################################
182
+ # Try to determine JETTY_HOME if not set
183
+ ##################################################
184
+ if [ -z "$JETTY_HOME" ]
185
+ then
186
+ JETTY_SH=$0
187
+ case "$JETTY_SH" in
188
+ /*) JETTY_HOME=${JETTY_SH%/*/*} ;;
189
+ ./*/*) JETTY_HOME=${JETTY_SH%/*/*} ;;
190
+ ./*) JETTY_HOME=.. ;;
191
+ */*/*) JETTY_HOME=./${JETTY_SH%/*/*} ;;
192
+ */*) JETTY_HOME=. ;;
193
+ *) JETTY_HOME=.. ;;
194
+ esac
195
+
196
+ if [ ! -f "$JETTY_HOME/$JETTY_INSTALL_TRACE_FILE" ]
197
+ then
198
+ JETTY_HOME=
199
+ fi
200
+ fi
201
+
202
+
203
+ ##################################################
204
+ # No JETTY_HOME yet? We're out of luck!
205
+ ##################################################
206
+ if [ -z "$JETTY_HOME" ]; then
207
+ echo "** ERROR: JETTY_HOME not set, you need to set it or install in a standard location"
208
+ exit 1
209
+ fi
210
+
211
+ cd "$JETTY_HOME"
212
+ JETTY_HOME=$PWD
213
+
214
+
215
+ ##################################################
216
+ # Set JETTY_BASE
217
+ ##################################################
218
+ if [ -z "$JETTY_BASE" ]; then
219
+ JETTY_BASE=$JETTY_HOME
220
+ fi
221
+
222
+ cd "$JETTY_BASE"
223
+ JETTY_BASE=$PWD
224
+
225
+
226
+ #####################################################
227
+ # Check that jetty is where we think it is
228
+ #####################################################
229
+ if [ ! -r "$JETTY_HOME/$JETTY_INSTALL_TRACE_FILE" ]
230
+ then
231
+ echo "** ERROR: Oops! Jetty doesn't appear to be installed in $JETTY_HOME"
232
+ echo "** ERROR: $JETTY_HOME/$JETTY_INSTALL_TRACE_FILE is not readable!"
233
+ exit 1
234
+ fi
235
+
236
+ ##################################################
237
+ # Try to find this script's configuration file,
238
+ # but only if no configurations were given on the
239
+ # command line.
240
+ ##################################################
241
+ if [ -z "$JETTY_CONF" ]
242
+ then
243
+ if [ -f $ETC/${NAME}.conf ]
244
+ then
245
+ JETTY_CONF=$ETC/${NAME}.conf
246
+ elif [ -f "$JETTY_BASE/etc/jetty.conf" ]
247
+ then
248
+ JETTY_CONF=$JETTY_BASE/etc/jetty.conf
249
+ elif [ -f "$JETTY_HOME/etc/jetty.conf" ]
250
+ then
251
+ JETTY_CONF=$JETTY_HOME/etc/jetty.conf
252
+ fi
253
+ fi
254
+
255
+ ##################################################
256
+ # Get the list of config.xml files from jetty.conf
257
+ ##################################################
258
+ if [ -f "$JETTY_CONF" ] && [ -r "$JETTY_CONF" ]
259
+ then
260
+ while read -r CONF
261
+ do
262
+ if expr "$CONF" : '#' >/dev/null ; then
263
+ continue
264
+ fi
265
+
266
+ if [ -d "$CONF" ]
267
+ then
268
+ # assume it's a directory with configure.xml files
269
+ # for example: /etc/jetty.d/
270
+ # sort the files before adding them to the list of JETTY_ARGS
271
+ for XMLFILE in "$CONF/"*.xml
272
+ do
273
+ if [ -r "$XMLFILE" ] && [ -f "$XMLFILE" ]
274
+ then
275
+ JETTY_ARGS+=("$XMLFILE")
276
+ else
277
+ echo "** WARNING: Cannot read '$XMLFILE' specified in '$JETTY_CONF'"
278
+ fi
279
+ done
280
+ else
281
+ # assume it's a command line parameter (let start.jar deal with its validity)
282
+ JETTY_ARGS+=("$CONF")
283
+ fi
284
+ done < "$JETTY_CONF"
285
+ fi
286
+
287
+ #####################################################
288
+ # Find a location for the pid file
289
+ #####################################################
290
+ if [ -z "$JETTY_RUN" ]
291
+ then
292
+ JETTY_RUN=$(findDirectory -w /var/run /usr/var/run $JETTY_BASE /tmp)
293
+ fi
294
+
295
+ #####################################################
296
+ # Find a pid and state file
297
+ #####################################################
298
+ if [ -z "$JETTY_PID" ]
299
+ then
300
+ JETTY_PID="$JETTY_RUN/${NAME}.pid"
301
+ fi
302
+
303
+ if [ -z "$JETTY_STATE" ]
304
+ then
305
+ JETTY_STATE=$JETTY_BASE/${NAME}.state
306
+ fi
307
+ JAVA_OPTIONS+=("-Djetty.state=$JETTY_STATE")
308
+ rm -f $JETTY_STATE
309
+
310
+ ##################################################
311
+ # Setup JAVA if unset
312
+ ##################################################
313
+ if [ -z "$JAVA" ]
314
+ then
315
+ JAVA=$(which java)
316
+ fi
317
+
318
+ if [ -z "$JAVA" ]
319
+ then
320
+ echo "Cannot find a Java JDK. Please set either set JAVA or put java (>=1.5) in your PATH." 2>&2
321
+ exit 1
322
+ fi
323
+
324
+ #####################################################
325
+ # See if JETTY_LOGS is defined
326
+ #####################################################
327
+ if [ -z "$JETTY_LOGS" ] && [ -d $JETTY_BASE/logs ]
328
+ then
329
+ JETTY_LOGS=$JETTY_BASE/logs
330
+ fi
331
+ if [ -z "$JETTY_LOGS" ] && [ -d $JETTY_HOME/logs ]
332
+ then
333
+ JETTY_LOGS=$JETTY_HOME/logs
334
+ fi
335
+ if [ "$JETTY_LOGS" ]
336
+ then
337
+ JAVA_OPTIONS+=("-Djetty.logs=$JETTY_LOGS")
338
+ fi
339
+
340
+ #####################################################
341
+ # Are we running on Windows? Could be, with Cygwin/NT.
342
+ #####################################################
343
+ case "`uname`" in
344
+ CYGWIN*) PATH_SEPARATOR=";";;
345
+ *) PATH_SEPARATOR=":";;
346
+ esac
347
+
348
+
349
+ #####################################################
350
+ # Add jetty properties to Java VM options.
351
+ #####################################################
352
+ JAVA_OPTIONS+=("-Djetty.home=$JETTY_HOME" "-Djetty.base=$JETTY_BASE" "-Djava.io.tmpdir=$TMPDIR")
353
+
354
+ #####################################################
355
+ # This is how the Jetty server will be started
356
+ #####################################################
357
+
358
+ JETTY_START=$JETTY_HOME/start.jar
359
+ START_INI=$JETTY_BASE/start.ini
360
+ if [ ! -f "$START_INI" ]
361
+ then
362
+ echo "Cannot find a start.ini in your JETTY_BASE directory: $JETTY_BASE" 2>&2
363
+ exit 1
364
+ fi
365
+
366
+ RUN_ARGS=(${JAVA_OPTIONS[@]} -jar "$JETTY_START" ${JETTY_ARGS[*]})
367
+ RUN_CMD=("$JAVA" ${RUN_ARGS[@]})
368
+
369
+ #####################################################
370
+ # Comment these out after you're happy with what
371
+ # the script is doing.
372
+ #####################################################
373
+ if (( DEBUG ))
374
+ then
375
+ echo "START_INI = $START_INI"
376
+ echo "JETTY_HOME = $JETTY_HOME"
377
+ echo "JETTY_BASE = $JETTY_BASE"
378
+ echo "JETTY_CONF = $JETTY_CONF"
379
+ echo "JETTY_PID = $JETTY_PID"
380
+ echo "JETTY_START = $JETTY_START"
381
+ echo "JETTY_ARGS = ${JETTY_ARGS[*]}"
382
+ echo "JAVA_OPTIONS = ${JAVA_OPTIONS[*]}"
383
+ echo "JAVA = $JAVA"
384
+ echo "RUN_CMD = ${RUN_CMD}"
385
+ fi
386
+
387
+ ##################################################
388
+ # Do the action
389
+ ##################################################
390
+ case "$ACTION" in
391
+ start)
392
+ echo -n "Starting Jetty: "
393
+
394
+ if (( NO_START )); then
395
+ echo "Not starting ${NAME} - NO_START=1";
396
+ exit
397
+ fi
398
+
399
+ if [ $UID -eq 0 ] && type start-stop-daemon > /dev/null 2>&1
400
+ then
401
+ unset CH_USER
402
+ if [ -n "$JETTY_USER" ]
403
+ then
404
+ CH_USER="-c$JETTY_USER"
405
+ fi
406
+
407
+ start-stop-daemon -S -p"$JETTY_PID" $CH_USER -d"$JETTY_HOME" -b -m -a "$JAVA" -- "${RUN_ARGS[@]}" --daemon
408
+
409
+ else
410
+
411
+ if [ -f "$JETTY_PID" ]
412
+ then
413
+ if running $JETTY_PID
414
+ then
415
+ echo "Already Running!"
416
+ exit 1
417
+ else
418
+ # dead pid file - remove
419
+ rm -f "$JETTY_PID"
420
+ fi
421
+ fi
422
+
423
+ if [ "$JETTY_USER" ]
424
+ then
425
+ touch "$JETTY_PID"
426
+ chown "$JETTY_USER" "$JETTY_PID"
427
+ # FIXME: Broken solution: wordsplitting, pathname expansion, arbitrary command execution, etc.
428
+ su - "$JETTY_USER" -c "
429
+ exec ${RUN_CMD[*]} --daemon &
430
+ disown \$!
431
+ echo \$! > '$JETTY_PID'"
432
+ else
433
+ "${RUN_CMD[@]}" &
434
+ disown $!
435
+ echo $! > "$JETTY_PID"
436
+ fi
437
+
438
+ fi
439
+
440
+ if expr "${JETTY_ARGS[*]}" : '.*jetty-started.xml.*' >/dev/null
441
+ then
442
+ if started "$JETTY_STATE" "$JETTY_PID"
443
+ then
444
+ echo "OK `date`"
445
+ else
446
+ echo "FAILED `date`"
447
+ fi
448
+ else
449
+ echo "ok `date`"
450
+ fi
451
+
452
+ ;;
453
+
454
+ stop)
455
+ echo -n "Stopping Jetty: "
456
+ if [ $UID -eq 0 ] && type start-stop-daemon > /dev/null 2>&1; then
457
+ start-stop-daemon -K -p"$JETTY_PID" -d"$JETTY_HOME" -a "$JAVA" -s HUP
458
+
459
+ TIMEOUT=30
460
+ while running "$JETTY_PID"; do
461
+ if (( TIMEOUT-- == 0 )); then
462
+ start-stop-daemon -K -p"$JETTY_PID" -d"$JETTY_HOME" -a "$JAVA" -s KILL
463
+ fi
464
+
465
+ sleep 1
466
+ done
467
+
468
+ rm -f "$JETTY_PID"
469
+ echo OK
470
+ else
471
+ PID=$(cat "$JETTY_PID" 2>/dev/null)
472
+ kill "$PID" 2>/dev/null
473
+
474
+ TIMEOUT=30
475
+ while running $JETTY_PID; do
476
+ if (( TIMEOUT-- == 0 )); then
477
+ kill -KILL "$PID" 2>/dev/null
478
+ fi
479
+
480
+ sleep 1
481
+ done
482
+
483
+ rm -f "$JETTY_PID"
484
+ echo OK
485
+ fi
486
+
487
+ ;;
488
+
489
+ restart)
490
+ JETTY_SH=$0
491
+ if [ ! -f $JETTY_SH ]; then
492
+ if [ ! -f $JETTY_HOME/bin/jetty.sh ]; then
493
+ echo "$JETTY_HOME/bin/jetty.sh does not exist."
494
+ exit 1
495
+ fi
496
+ JETTY_SH=$JETTY_HOME/bin/jetty.sh
497
+ fi
498
+
499
+ "$JETTY_SH" stop "$@"
500
+ "$JETTY_SH" start "$@"
501
+
502
+ ;;
503
+
504
+ supervise)
505
+ #
506
+ # Under control of daemontools supervise monitor which
507
+ # handles restarts and shutdowns via the svc program.
508
+ #
509
+ exec "${RUN_CMD[@]}"
510
+
511
+ ;;
512
+
513
+ run|demo)
514
+ echo "Running Jetty: "
515
+
516
+ if [ -f "$JETTY_PID" ]
517
+ then
518
+ if running "$JETTY_PID"
519
+ then
520
+ echo "Already Running!"
521
+ exit 1
522
+ else
523
+ # dead pid file - remove
524
+ rm -f "$JETTY_PID"
525
+ fi
526
+ fi
527
+
528
+ exec "${RUN_CMD[@]}"
529
+ ;;
530
+
531
+ check|status)
532
+ echo "Checking arguments to Jetty: "
533
+ echo "START_INI = $START_INI"
534
+ echo "JETTY_HOME = $JETTY_HOME"
535
+ echo "JETTY_BASE = $JETTY_BASE"
536
+ echo "JETTY_CONF = $JETTY_CONF"
537
+ echo "JETTY_PID = $JETTY_PID"
538
+ echo "JETTY_START = $JETTY_START"
539
+ echo "JETTY_LOGS = $JETTY_LOGS"
540
+ echo "CLASSPATH = $CLASSPATH"
541
+ echo "JAVA = $JAVA"
542
+ echo "JAVA_OPTIONS = ${JAVA_OPTIONS[*]}"
543
+ echo "JETTY_ARGS = ${JETTY_ARGS[*]}"
544
+ echo "RUN_CMD = ${RUN_CMD[*]}"
545
+ echo
546
+
547
+ if [ -f "$JETTY_PID" ]
548
+ then
549
+ echo "Jetty running pid=$(< "$JETTY_PID")"
550
+ exit 0
551
+ fi
552
+ exit 1
553
+
554
+ ;;
555
+
556
+ *)
557
+ usage
558
+
559
+ ;;
560
+ esac
561
+
562
+ exit 0
@@ -0,0 +1,28 @@
1
+ #!/bin/sh
2
+ source /tmp/hello/createExecUser.sh
3
+
4
+ # Install JRE 1.7
5
+ # sudo yum install java-1.7.0-openjdk.x86_64 -y
6
+ # sudo alternatives --set java /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
7
+
8
+ # Install & Run Jetty
9
+ if [ ! -d /opt/jetty ]
10
+ then
11
+ #wget http://download.eclipse.org/jetty/9.1.1.v20140108/dist/jetty-distribution-9.1.1.v20140108.tar.gz -O jetty.tar.gz
12
+ #wget http://cdn.mirror.garr.it/mirror3/mirrors/eclipse//jetty/9.1.0.v20131115/dist/jetty-distribution-9.1.0.v20131115.tar.gz -O jetty.tar.gz
13
+ wget http://eclipse.mirror.triple-it.nl/jetty/stable-9/dist/jetty-distribution-9.1.4.v20140401.tar.gz -O jetty.tar.gz
14
+ tar -xf jetty.tar.gz
15
+ rm jetty.tar.gz
16
+ mv jetty-* jetty
17
+ sudo mv jetty /opt/
18
+ sudo /usr/sbin/useradd jetty
19
+ sudo mkdir /var/log/jetty
20
+ sudo chown -R jetty:jetty /var/log/jetty /opt/jetty
21
+ fi
22
+
23
+ sudo cp /tmp/hello/jetty /etc/init.d
24
+ sudo chmod a+x /etc/init.d/jetty
25
+ sudo chkconfig --add jetty
26
+ sudo chkconfig jetty on
27
+ sudo service jetty restart
28
+
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.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Aparicio
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-04-28 00:00:00.000000000 Z
12
+ date: 2014-04-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
@@ -139,6 +139,7 @@ files:
139
139
  - lib/dployr/commands/stop_destroy.rb
140
140
  - lib/dployr/commands/utils.rb
141
141
  - lib/dployr/compute/aws.rb
142
+ - lib/dployr/compute/common.rb
142
143
  - lib/dployr/compute/gce.rb
143
144
  - lib/dployr/config/constants.rb
144
145
  - lib/dployr/config/create.rb
@@ -155,14 +156,19 @@ files:
155
156
  - lib/dployr/scripts/ssh.rb
156
157
  - lib/dployr/utils.rb
157
158
  - lib/dployr/version.rb
159
+ - spec/commands_config_spec.rb
158
160
  - spec/commands_util_spec.rb
159
161
  - spec/config_file_utils_spec.rb
160
162
  - spec/config_instance_spec.rb
161
163
  - spec/configuration_spec.rb
162
164
  - spec/fixtures/Dployrfile
163
165
  - spec/fixtures/Dployrfile.yml
164
- - spec/fixtures/config/Dployrfile.yml
165
- - spec/fixtures/config/hello/hello.sh
166
+ - spec/fixtures/basic/Dployrfile.yml
167
+ - spec/fixtures/german/Dployrfile.yml
168
+ - spec/fixtures/hello/createExecUser.sh
169
+ - spec/fixtures/hello/hello.sh
170
+ - spec/fixtures/hello/jetty
171
+ - spec/fixtures/hello/jetty.sh
166
172
  - spec/fog_spec_.rb
167
173
  - spec/init_spec.rb
168
174
  - spec/spec_helper.rb
@@ -188,19 +194,24 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
194
  version: '0'
189
195
  requirements: []
190
196
  rubyforge_project: dployr
191
- rubygems_version: 2.0.3
197
+ rubygems_version: 2.0.6
192
198
  signing_key:
193
199
  specification_version: 4
194
200
  summary: Multicloud management and deployment with asteroids made simple
195
201
  test_files:
202
+ - spec/commands_config_spec.rb
196
203
  - spec/commands_util_spec.rb
197
204
  - spec/config_file_utils_spec.rb
198
205
  - spec/config_instance_spec.rb
199
206
  - spec/configuration_spec.rb
200
207
  - spec/fixtures/Dployrfile
201
208
  - spec/fixtures/Dployrfile.yml
202
- - spec/fixtures/config/Dployrfile.yml
203
- - spec/fixtures/config/hello/hello.sh
209
+ - spec/fixtures/basic/Dployrfile.yml
210
+ - spec/fixtures/german/Dployrfile.yml
211
+ - spec/fixtures/hello/createExecUser.sh
212
+ - spec/fixtures/hello/hello.sh
213
+ - spec/fixtures/hello/jetty
214
+ - spec/fixtures/hello/jetty.sh
204
215
  - spec/fog_spec_.rb
205
216
  - spec/init_spec.rb
206
217
  - spec/spec_helper.rb
File without changes