vcloud-launcher 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.
- data/.gitignore +0 -5
- data/CHANGELOG.md +4 -0
- data/README.md +59 -49
- data/Rakefile +8 -22
- data/jenkins.sh +2 -5
- data/jenkins_integration_tests.sh +1 -4
- data/lib/vcloud/launcher/version.rb +1 -1
- data/spec/integration/launcher/data/storage_profile.yaml.erb +24 -0
- data/spec/integration/launcher/storage_profile_integration_spec.rb +13 -0
- data/tools/fog_credentials.rb +17 -0
- data/vcloud-launcher.gemspec +1 -1
- metadata +6 -6
- data/scripts/generate_fog_conf_file.sh +0 -6
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
vCloud Launcher
|
2
2
|
===============
|
3
|
-
A tool that takes a YAML or JSON configuration file describing a vDC, and
|
4
|
-
the vApps and VMs contained within.
|
3
|
+
A tool that takes a YAML or JSON configuration file describing a vDC, and
|
4
|
+
provisions the vApps and VMs contained within.
|
5
5
|
|
6
6
|
### Supports
|
7
7
|
|
@@ -14,10 +14,15 @@ the vApps and VMs contained within.
|
|
14
14
|
|
15
15
|
### Limitations
|
16
16
|
|
17
|
-
- Source vApp Template must contain a single VM. This is VMware's recommended
|
17
|
+
- Source vApp Template must contain a single VM. This is VMware's recommended
|
18
|
+
'simple' method of vApp creation. Complex multi-VM vApps are not supported.
|
18
19
|
- Org vDC Networks must be precreated.
|
19
|
-
- IP addresses are assigned manually (recommended) or via DHCP. VM IP pools are
|
20
|
-
|
20
|
+
- IP addresses are assigned manually (recommended) or via DHCP. VM IP pools are
|
21
|
+
not supported.
|
22
|
+
- vCloud has some interesting ideas about the size of potential 'guest
|
23
|
+
customisation scripts' (aka preambles). You may need to use an external minify
|
24
|
+
tool to reduce the size, or speak to your provider to up the limit. 2048 bytes
|
25
|
+
seems to be a practical default maximum.
|
21
26
|
|
22
27
|
## Installation
|
23
28
|
|
@@ -40,72 +45,70 @@ Or install it yourself as:
|
|
40
45
|
|
41
46
|
## Credentials
|
42
47
|
|
43
|
-
vCloud Launcher
|
48
|
+
vCloud Launcher is based around [fog](http://fog.io/). To use it you'll need to give it
|
49
|
+
credentials that allow it to talk to a vCloud Director environment.
|
44
50
|
|
45
|
-
|
51
|
+
1. Create a '.fog' file in your home directory.
|
46
52
|
|
47
|
-
|
53
|
+
For example:
|
48
54
|
|
49
|
-
|
55
|
+
test_credentials:
|
56
|
+
vcloud_director_host: 'host.api.example.com'
|
57
|
+
vcloud_director_username: 'username@org_name'
|
58
|
+
vcloud_director_password: ''
|
50
59
|
|
51
|
-
|
52
|
-
vcloud_director_username: 'username@org_name'
|
53
|
-
vcloud_director_password: 'password'
|
54
|
-
vcloud_director_host: 'host.api.example.com'
|
60
|
+
2. Obtain a session token. First, curl the API:
|
55
61
|
|
56
|
-
|
62
|
+
curl -D- -d '' \
|
63
|
+
-H 'Accept: application/*+xml;version=5.1' -u '<username>@<org_name>' \
|
64
|
+
https://<host.api.example.com>/api/sessions
|
57
65
|
|
58
|
-
|
59
|
-
vcloud_director_username: 'username@org_name'
|
60
|
-
vcloud_director_password: 'password'
|
61
|
-
vcloud_director_host: 'host.api.example.com'
|
66
|
+
This will prompt for your password.
|
62
67
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
vcloud_director_host: 'host.api.vendor.net'
|
68
|
+
From the headers returned, the value of the `x-vcloud-authorization` header is your
|
69
|
+
session token, and this will be valid for 30 minutes idle - any activity will extend
|
70
|
+
its life by another 30 minutes.
|
67
71
|
|
68
|
-
|
72
|
+
3. Specify your credentials and session token at the beginning of the command. For example:
|
69
73
|
|
70
|
-
|
74
|
+
FOG_CREDENTIAL=test_credentials \
|
75
|
+
FOG_VCLOUD_TOKEN=AAAABBBBBCCCCCCDDDDDDEEEEEEFFFFF= \
|
76
|
+
vcloud-launch node.yaml
|
71
77
|
|
72
|
-
|
78
|
+
You may find it easier to export one or both of the values as environment variables.
|
73
79
|
|
74
|
-
|
80
|
+
**NB** It is also possible to sidestep the need for the session token by saving your
|
81
|
+
password in the fog file. This is **not recommended**.
|
75
82
|
|
76
|
-
|
77
|
-
tool by setting the `FOG_VCLOUD_TOKEN` ENV variable. This option reduces the risk footprint by allowing the user to
|
78
|
-
store their credentials in safe storage. The default token lifetime is '30 minutes idle' - any activity extends the life by another 30 mins.
|
83
|
+
## Contributing
|
79
84
|
|
80
|
-
|
85
|
+
1. Fork it
|
86
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
87
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
88
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
89
|
+
5. Create new Pull Request
|
81
90
|
|
82
|
-
|
83
|
-
-D-
|
84
|
-
-d ''
|
85
|
-
-H 'Accept: application/*+xml;version=5.1' -u '<user>@<org>'
|
86
|
-
https://host.com/api/sessions
|
91
|
+
## Other settings
|
87
92
|
|
88
|
-
|
93
|
+
vCloud Launcher uses vCloud Core. If you want to use the latest version of
|
94
|
+
vCloud Core, or a local version, you can export some variables. See the Gemfile
|
95
|
+
for details.
|
89
96
|
|
90
|
-
|
97
|
+
## The vCloud API
|
91
98
|
|
92
|
-
|
99
|
+
vCloud Tools currently use version 5.1 of the [vCloud API](http://pubs.vmware.com/vcd-51/index.jsp?topic=%2Fcom.vmware.vcloud.api.doc_51%2FGUID-F4BF9D5D-EF66-4D36-A6EB-2086703F6E37.html). Version 5.5 may work but is not currently supported. You should be able to access the 5.1 API in a 5.5 environment, and this *is* currently supported.
|
93
100
|
|
94
|
-
|
101
|
+
The default version is defined in [Fog](https://github.com/fog/fog/blob/244a049918604eadbcebd3a8eaaf433424fe4617/lib/fog/vcloud_director/compute.rb#L32).
|
95
102
|
|
96
|
-
|
103
|
+
If you want to be sure you are pinning to 5.1, or use 5.5, you can set the API version to use in your fog file, e.g.
|
97
104
|
|
98
|
-
|
105
|
+
`vcloud_director_api_version: 5.1`
|
99
106
|
|
100
|
-
|
101
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
102
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
103
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
104
|
-
5. Create new Pull Request
|
107
|
+
## Debugging
|
105
108
|
|
106
|
-
|
109
|
+
`export EXCON_DEBUG=true` - this will print out the API requests and responses.
|
107
110
|
|
108
|
-
|
111
|
+
`export DEBUG=true` - this will show you the stack trace when there is an exception instead of just the message.
|
109
112
|
|
110
113
|
## Testing
|
111
114
|
|
@@ -113,9 +116,12 @@ Default target: `bundle exec rake`
|
|
113
116
|
Runs the unit and feature tests (pretty quick right now)
|
114
117
|
|
115
118
|
* Unit tests only: `bundle exec rake spec`
|
119
|
+
* Feature tests only: `bundle exec rake features`
|
116
120
|
* Integration tests ('quick' tests): `bundle exec rake integration:quick`
|
117
121
|
* Integration tests (all tests - takes 20mins+): `bundle exec rake integration:all`
|
118
122
|
|
123
|
+
NB. `bundle exec rake integration` is an alias for `bundle exec rake integration:all`.
|
124
|
+
|
119
125
|
You need access to a suitable vCloud Director organization to run the
|
120
126
|
integration tests. It is not necessarily safe to run them against an existing
|
121
127
|
environment, unless care is taken with the entities being tested.
|
@@ -140,7 +146,11 @@ Then run this before you run the integration tests.
|
|
140
146
|
|
141
147
|
#### Storage profile tests
|
142
148
|
|
143
|
-
There is an integration test to check storage profile behaviour, but it requires
|
149
|
+
There is an integration test to check storage profile behaviour, but it requires
|
150
|
+
a lot of set-up so it is not called by the rake task. If you wish to run it you
|
151
|
+
need access to an environment that has two VDCs, each one containing a storage
|
152
|
+
profile with the same name. This named storage profile needs to be different
|
153
|
+
from the default storage profile.
|
144
154
|
|
145
155
|
You will need to set the following environment variables:
|
146
156
|
|
data/Rakefile
CHANGED
@@ -1,25 +1,9 @@
|
|
1
|
-
require 'rake/clean'
|
2
|
-
require 'rake/testtask'
|
3
1
|
require 'cucumber/rake/task'
|
4
2
|
require 'rspec/core/rake_task'
|
3
|
+
require 'gem_publisher'
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
include Rake::DSL
|
9
|
-
|
10
|
-
Bundler::GemHelper.install_tasks
|
11
|
-
|
12
|
-
Rake::TestTask.new do |t|
|
13
|
-
t.pattern = 'test/tc_*.rb'
|
14
|
-
end
|
15
|
-
|
16
|
-
CUKE_RESULTS = 'results.html'
|
17
|
-
CLEAN << CUKE_RESULTS
|
18
|
-
|
19
|
-
Cucumber::Rake::Task.new(:features) do |t|
|
20
|
-
t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty --no-source -x"
|
21
|
-
t.fork = false
|
22
|
-
end
|
5
|
+
task :default => [:spec,:features]
|
6
|
+
task :integration => ['integration:all']
|
23
7
|
|
24
8
|
RSpec::Core::RakeTask.new(:spec) do |task|
|
25
9
|
# Set a bogus Fog credential, otherwise it's possible for the unit
|
@@ -29,6 +13,11 @@ RSpec::Core::RakeTask.new(:spec) do |task|
|
|
29
13
|
task.pattern = FileList['spec/vcloud/**/*_spec.rb']
|
30
14
|
end
|
31
15
|
|
16
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
17
|
+
t.cucumber_opts = "--format pretty --no-source"
|
18
|
+
t.fork = false
|
19
|
+
end
|
20
|
+
|
32
21
|
RSpec::Core::RakeTask.new('integration:quick') do |t|
|
33
22
|
t.rspec_opts = %w(--tag ~take_too_long)
|
34
23
|
t.pattern = FileList['spec/integration/**/*_spec.rb']
|
@@ -38,9 +27,6 @@ RSpec::Core::RakeTask.new('integration:all') do |t|
|
|
38
27
|
t.pattern = FileList['spec/integration/**/*_spec.rb']
|
39
28
|
end
|
40
29
|
|
41
|
-
task :default => [:spec,:features]
|
42
|
-
|
43
|
-
require "gem_publisher"
|
44
30
|
task :publish_gem do |t|
|
45
31
|
gem = GemPublisher.publish_if_updated("vcloud-launcher.gemspec", :rubygems)
|
46
32
|
puts "Published #{gem}" if gem
|
data/jenkins.sh
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
#!/bin/bash -x
|
2
2
|
set -e
|
3
3
|
bundle install --path "${HOME}/bundles/${JOB_NAME}"
|
4
|
-
bundle exec rake
|
4
|
+
bundle exec rake
|
5
5
|
|
6
|
-
./
|
7
|
-
export FOG_RC=fog_integration_test.config
|
8
|
-
bundle exec rake integration:all
|
9
|
-
rm fog_integration_test.config
|
6
|
+
RUBYOPT="-r ./tools/fog_credentials" bundle exec rake integration:all
|
10
7
|
|
11
8
|
bundle exec rake publish_gem
|
@@ -1,7 +1,4 @@
|
|
1
1
|
#!/bin/bash -x
|
2
2
|
set -e
|
3
3
|
bundle install --path "${HOME}/bundles/${JOB_NAME}"
|
4
|
-
./
|
5
|
-
export FOG_RC=fog_integration_test.config
|
6
|
-
bundle exec rake integration:all
|
7
|
-
rm fog_integration_test.config
|
4
|
+
RUBYOPT="-r ./tools/fog_credentials" bundle exec rake integration:all
|
@@ -5,20 +5,44 @@ vapps:
|
|
5
5
|
catalog: <%= catalog %>
|
6
6
|
catalog_item: <%= vapp_template %>
|
7
7
|
vm:
|
8
|
+
hardware_config: &hardware_config
|
9
|
+
memory: 4096
|
10
|
+
cpu: 2
|
11
|
+
bootstrap: &bootstrap
|
12
|
+
script_path: <%= bootstrap_script %>
|
13
|
+
vars:
|
14
|
+
message: hello world
|
8
15
|
storage_profile: <%= storage_profile %>
|
9
16
|
- name: <%= vapp_name_2 %>
|
10
17
|
vdc_name: <%= vdc_name_2 %>
|
11
18
|
catalog: <%= catalog %>
|
12
19
|
catalog_item: <%= vapp_template %>
|
13
20
|
vm:
|
21
|
+
hardware_config:
|
22
|
+
<<: *hardware_config
|
23
|
+
bootstrap:
|
24
|
+
<<: *bootstrap
|
14
25
|
storage_profile: <%= storage_profile %>
|
15
26
|
- name: <%= vapp_name_3 %>
|
16
27
|
vdc_name: <%= vdc_name_1 %>
|
17
28
|
catalog: <%= catalog %>
|
18
29
|
catalog_item: <%= vapp_template %>
|
30
|
+
vm:
|
31
|
+
hardware_config:
|
32
|
+
<<: *hardware_config
|
33
|
+
metadata:
|
34
|
+
storage_profile_test_vm: true
|
35
|
+
bootstrap:
|
36
|
+
<<: *bootstrap
|
19
37
|
- name: <%= vapp_name_4 %>
|
20
38
|
vdc_name: <%= vdc_name_1 %>
|
21
39
|
catalog: <%= catalog %>
|
22
40
|
catalog_item: <%= vapp_template %>
|
23
41
|
vm:
|
42
|
+
hardware_config:
|
43
|
+
<<: *hardware_config
|
44
|
+
metadata:
|
45
|
+
storage_profile_test_vm: true
|
46
|
+
bootstrap:
|
47
|
+
<<: *bootstrap
|
24
48
|
storage_profile: <%= nonsense_storage_profile %>
|
@@ -50,11 +50,24 @@ describe Vcloud::Launcher::Launch do
|
|
50
50
|
@vm_3[:StorageProfile][:href].should == @test_data[:default_storage_profile_href]
|
51
51
|
end
|
52
52
|
|
53
|
+
it "when a storage profile is not specified, customize continues with other customizations" do
|
54
|
+
@vm_3_id = @vm_3[:href].split('/').last
|
55
|
+
@vm_3_metadata = Vcloud::Core::Vm.get_metadata @vm_3_id
|
56
|
+
@vm_3_metadata[:storage_profile_test_vm].should == true
|
57
|
+
end
|
58
|
+
|
53
59
|
it "when a storage profile specified does not exist, vm uses the default" do
|
54
60
|
@vm_4[:StorageProfile][:name].should == @test_data[:default_storage_profile_name]
|
55
61
|
@vm_4[:StorageProfile][:href].should == @test_data[:default_storage_profile_href]
|
56
62
|
end
|
57
63
|
|
64
|
+
# This is a bug - if it has failed customization it should let the user know
|
65
|
+
it "when storage profile specified doesn't exist, it errors and continues" do
|
66
|
+
@vm_4_id = @vm_4[:href].split('/').last
|
67
|
+
@vm_4_metadata = Vcloud::Core::Vm.get_metadata @vm_4_id
|
68
|
+
@vm_4_metadata[:storage_profile_test_vm].should be_nil
|
69
|
+
end
|
70
|
+
|
58
71
|
after(:all) do
|
59
72
|
unless ENV['VCLOUD_TOOLS_RSPEC_NO_DELETE_VAPP']
|
60
73
|
File.delete @config_yaml
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Initialiser for getting vCloud credentials into Fog from Jenkins build
|
2
|
+
# parameters, without needing to write them to disk. To be used with:
|
3
|
+
#
|
4
|
+
# RUBYOPT="-r ./tools/fog_credentials" bundle exec integration
|
5
|
+
#
|
6
|
+
# Replace with FOG_VCLOUD_TOKEN support when we have a tool:
|
7
|
+
#
|
8
|
+
# https://www.pivotaltracker.com/story/show/68989754
|
9
|
+
#
|
10
|
+
require 'bundler/setup'
|
11
|
+
require 'fog'
|
12
|
+
|
13
|
+
Fog.credentials = {
|
14
|
+
:vcloud_director_host => ENV['API_HOST'],
|
15
|
+
:vcloud_director_username => ENV['API_USERNAME'],
|
16
|
+
:vcloud_director_password => ENV['API_PASSWORD'],
|
17
|
+
}
|
data/vcloud-launcher.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.required_ruby_version = '>= 1.9.2'
|
22
22
|
|
23
23
|
s.add_runtime_dependency 'methadone'
|
24
|
-
s.add_runtime_dependency 'vcloud-core', '
|
24
|
+
s.add_runtime_dependency 'vcloud-core', '~> 0.0.12'
|
25
25
|
s.add_development_dependency 'aruba', '~> 0.5.3'
|
26
26
|
s.add_development_dependency 'cucumber', '~> 1.3.10'
|
27
27
|
s.add_development_dependency 'gem_publisher', '1.2.0'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vcloud-launcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-05-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: methadone
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: 0.0.12
|
38
38
|
type: :runtime
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: 0.0.12
|
46
46
|
- !ruby/object:Gem::Dependency
|
@@ -155,7 +155,6 @@ files:
|
|
155
155
|
- lib/vcloud/launcher/version.rb
|
156
156
|
- lib/vcloud/launcher/vm_orchestrator.rb
|
157
157
|
- scripts/basic.erb
|
158
|
-
- scripts/generate_fog_conf_file.sh
|
159
158
|
- spec/erb_helper.rb
|
160
159
|
- spec/integration/launcher/data/basic_preamble_test.erb
|
161
160
|
- spec/integration/launcher/data/happy_path.yaml.erb
|
@@ -168,6 +167,7 @@ files:
|
|
168
167
|
- spec/vcloud/launcher/launch_spec.rb
|
169
168
|
- spec/vcloud/launcher/vapp_orchestrator_spec.rb
|
170
169
|
- spec/vcloud/launcher/vm_orchestrator_spec.rb
|
170
|
+
- tools/fog_credentials.rb
|
171
171
|
- vcloud-launcher.gemspec
|
172
172
|
homepage: https://github.com/alphagov/vcloud-launcher
|
173
173
|
licenses:
|
@@ -190,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
190
190
|
version: '0'
|
191
191
|
segments:
|
192
192
|
- 0
|
193
|
-
hash:
|
193
|
+
hash: -3318848198983750692
|
194
194
|
requirements: []
|
195
195
|
rubyforge_project:
|
196
196
|
rubygems_version: 1.8.23
|