bosh_vcloud_cpi 0.4.8
Sign up to get free protection for your applications and to get access to all the features.
- data/README +26 -0
- data/Rakefile +50 -0
- data/lib/cloud/vcloud/cloud.rb +633 -0
- data/lib/cloud/vcloud/const.rb +27 -0
- data/lib/cloud/vcloud/util.rb +21 -0
- data/lib/cloud/vcloud/version.rb +7 -0
- data/lib/cloud/vcloud.rb +30 -0
- data/spec/assets/test-deployment-manifest.yml +183 -0
- data/spec/assets/test-director-config.yml +73 -0
- data/spec/assets/valid_stemcell.tgz +0 -0
- data/spec/spec_helper.rb +135 -0
- data/spec/unit/cloud_spec.rb +506 -0
- metadata +131 -0
data/lib/cloud/vcloud.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require "common/thread_pool"
|
2
|
+
require "common/thread_formatter"
|
3
|
+
require "uuidtools"
|
4
|
+
require "forwardable"
|
5
|
+
|
6
|
+
autoload :VCloudCloud, "cloud/vcloud/cloud"
|
7
|
+
|
8
|
+
module Bosh
|
9
|
+
module Clouds
|
10
|
+
|
11
|
+
class VCloud
|
12
|
+
extend Forwardable
|
13
|
+
|
14
|
+
def_delegators :@delegate,
|
15
|
+
:create_stemcell, :delete_stemcell,
|
16
|
+
:create_vm, :delete_vm, :reboot_vm,
|
17
|
+
:configure_networks,
|
18
|
+
:create_disk, :delete_disk,
|
19
|
+
:attach_disk, :detach_disk,
|
20
|
+
:validate_deployment
|
21
|
+
|
22
|
+
def initialize(options)
|
23
|
+
@delegate = VCloudCloud::Cloud.new(options)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Vcloud = VCloud # alias name for dynamic plugin loading
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,183 @@
|
|
1
|
+
---
|
2
|
+
name: appcloud-17
|
3
|
+
target: http://localhost:25555
|
4
|
+
release:
|
5
|
+
name: appcloud
|
6
|
+
version: 17
|
7
|
+
|
8
|
+
network:
|
9
|
+
default:
|
10
|
+
ip: 192.168.130.66
|
11
|
+
netmask: 255.255.255.192
|
12
|
+
cloud_properties:
|
13
|
+
name: vcd-org-network
|
14
|
+
default:
|
15
|
+
- dns
|
16
|
+
- gateway
|
17
|
+
dns:
|
18
|
+
- 192.168.115.1
|
19
|
+
- 192.168.115.2
|
20
|
+
gateway: 192.168.130.126
|
21
|
+
|
22
|
+
networks:
|
23
|
+
- name: default
|
24
|
+
subnets:
|
25
|
+
- reserved:
|
26
|
+
- 192.168.130.90 - 192.168.130.94
|
27
|
+
static:
|
28
|
+
- 192.168.130.95 - 192.168.130.99
|
29
|
+
range: 192.168.130.64/26
|
30
|
+
gateway: 192.168.130.126
|
31
|
+
dns:
|
32
|
+
- 192.168.115.1
|
33
|
+
- 192.168.115.2
|
34
|
+
cloud_properties:
|
35
|
+
name: vcd-org-network
|
36
|
+
- name: dmz
|
37
|
+
subnets:
|
38
|
+
- static:
|
39
|
+
- 192.168.130.100 - 192.168.130.104
|
40
|
+
range: 192.168.130.64/26
|
41
|
+
dns:
|
42
|
+
- 192.168.115.1
|
43
|
+
- 192.168.115.2
|
44
|
+
cloud_properties:
|
45
|
+
name: vcd-org-network
|
46
|
+
|
47
|
+
resource_pools:
|
48
|
+
- name: small
|
49
|
+
stemcell:
|
50
|
+
name: bosh-stemcell
|
51
|
+
version: 0.2.24
|
52
|
+
network: default
|
53
|
+
size: 0
|
54
|
+
cloud_properties:
|
55
|
+
ram: 1024
|
56
|
+
disk: 4096
|
57
|
+
cpu: 1
|
58
|
+
- name: medium
|
59
|
+
stemcell:
|
60
|
+
name: bosh-stemcell
|
61
|
+
version: 0.2.24
|
62
|
+
network: default
|
63
|
+
size: 0
|
64
|
+
cloud_properties:
|
65
|
+
ram: 2048
|
66
|
+
disk: 4096
|
67
|
+
cpu: 2
|
68
|
+
- name: large
|
69
|
+
stemcell:
|
70
|
+
name: bosh-stemcell
|
71
|
+
version: 0.2.24
|
72
|
+
network: default
|
73
|
+
size: 0
|
74
|
+
cloud_properties:
|
75
|
+
ram: 8192
|
76
|
+
disk: 16384
|
77
|
+
cpu: 4
|
78
|
+
- name: deas
|
79
|
+
stemcell:
|
80
|
+
name: bosh-stemcell
|
81
|
+
version: 0.2.24
|
82
|
+
network: default
|
83
|
+
size: 1
|
84
|
+
cloud_properties:
|
85
|
+
ram: 16384
|
86
|
+
disk: 32768
|
87
|
+
cpu: 4
|
88
|
+
|
89
|
+
compilation:
|
90
|
+
workers: 1
|
91
|
+
network: default
|
92
|
+
cloud_properties:
|
93
|
+
ram: 2048
|
94
|
+
disk: 4048
|
95
|
+
cpu: 4
|
96
|
+
|
97
|
+
update:
|
98
|
+
canaries: 1
|
99
|
+
canary_watch_time: 60000
|
100
|
+
update_watch_time: 60000
|
101
|
+
max_in_flight: 1
|
102
|
+
max_errors: 1
|
103
|
+
|
104
|
+
jobs:
|
105
|
+
|
106
|
+
- name: dea
|
107
|
+
template: dea
|
108
|
+
instances: 1
|
109
|
+
resource_pool: deas
|
110
|
+
update:
|
111
|
+
max_in_flight: 2
|
112
|
+
networks:
|
113
|
+
- name: default
|
114
|
+
|
115
|
+
properties:
|
116
|
+
domain: ud-03.eng.vmware.com
|
117
|
+
|
118
|
+
env:
|
119
|
+
http_proxy: "http://10.16.67.187:3128"
|
120
|
+
https_proxy: "http://10.16.67.187:3128"
|
121
|
+
no_proxy: "localhost, 127.0.0.1"
|
122
|
+
|
123
|
+
networks:
|
124
|
+
apps: default
|
125
|
+
management: default
|
126
|
+
|
127
|
+
nats:
|
128
|
+
user: nats
|
129
|
+
password: 0b450ada9f830085e2cdeff6
|
130
|
+
address: 192.168.130.68
|
131
|
+
port: 4222
|
132
|
+
|
133
|
+
ccdb:
|
134
|
+
user: root
|
135
|
+
password: a7a33139c8e3f34bc201351b
|
136
|
+
address: 192.168.130.105
|
137
|
+
port: 2544
|
138
|
+
dbname: appcloud
|
139
|
+
|
140
|
+
cc:
|
141
|
+
srv_api_uri: http://localhost
|
142
|
+
password: 34d39fe37c9933d46d1d294e6233195b55838871a59287fd534b6ea7ed77
|
143
|
+
token: 67d1269e92783716cc9d63703cf6451287540d60014b457243fedf4e0f68
|
144
|
+
local_register_only: false
|
145
|
+
admins:
|
146
|
+
- foo@eng.vmware.com
|
147
|
+
|
148
|
+
dea:
|
149
|
+
max_memory: 8192
|
150
|
+
|
151
|
+
nfs_server:
|
152
|
+
address: 192.168.130.106
|
153
|
+
network: 192.168.130.64/26
|
154
|
+
|
155
|
+
mysql_gateway:
|
156
|
+
token: 63943e597947eba06b2f5cfa233c73099eb42bb390d93be2cf75f46f2bcb
|
157
|
+
mysql_node:
|
158
|
+
available_storage: 4096
|
159
|
+
max_db_size: 20
|
160
|
+
password: efcaa7bef3023e03f181b47b
|
161
|
+
production: true
|
162
|
+
|
163
|
+
rabbit_gateway:
|
164
|
+
token: 058e1a6398cbe0113e16c0f2f80251da03f46d5fb6fee1361913eda3e516
|
165
|
+
rabbit_node:
|
166
|
+
available_memory: 4096
|
167
|
+
max_memory: 4096
|
168
|
+
|
169
|
+
redis_gateway:
|
170
|
+
token: 2859854d27ecd84af53b05d2fe28515cafad6713d23a862832ab83acd967
|
171
|
+
redis_node:
|
172
|
+
available_memory: 4096
|
173
|
+
|
174
|
+
mongodb_gateway:
|
175
|
+
token: ed586c58cfb2fbb74f775ec00290965415e5097f68b2f50d2bcef7f09fc6
|
176
|
+
mongodb_node:
|
177
|
+
available_memory: 4096
|
178
|
+
|
179
|
+
rabbit_node:
|
180
|
+
available_memory: 4096
|
181
|
+
max_memory: 4096
|
182
|
+
rabbit_gateway:
|
183
|
+
token: e188ee08396cdf25ff04ea0b8aee49d3d0ceb1c041ddf7d44391d0c3b409
|
@@ -0,0 +1,73 @@
|
|
1
|
+
---
|
2
|
+
name: test-director
|
3
|
+
port: 25555
|
4
|
+
logging:
|
5
|
+
level: DEBUG
|
6
|
+
file: /var/vcap/deploy/bosh/director/shared/logs/director.debug.log
|
7
|
+
redis:
|
8
|
+
host: 10.147.0.0
|
9
|
+
port: 25255
|
10
|
+
password: R3d!S
|
11
|
+
mbus: nats://bosh:b0$H@10.147.0.0:4222
|
12
|
+
dir: /var/vcap/deploy/bosh/director/shared/system
|
13
|
+
max_tasks: 10
|
14
|
+
db:
|
15
|
+
database: postgres://bosh:b0$H@10.147.0.0/bosh
|
16
|
+
max_connections: 32
|
17
|
+
pool_timeout: 10
|
18
|
+
blobstore:
|
19
|
+
plugin: simple
|
20
|
+
properties:
|
21
|
+
endpoint: http://10.147.0.0:25250
|
22
|
+
user: director
|
23
|
+
password: d!r3ct0r
|
24
|
+
cloud:
|
25
|
+
plugin: vcd
|
26
|
+
properties:
|
27
|
+
agent:
|
28
|
+
ntp:
|
29
|
+
- ntp01.las01.emcatmos.com
|
30
|
+
blobstore:
|
31
|
+
plugin: simple
|
32
|
+
properties:
|
33
|
+
endpoint: http://10.147.0.0:25250
|
34
|
+
user: agent
|
35
|
+
password: Ag3Nt
|
36
|
+
mbus: nats://bosh:b0$H@10.147.0.0:4222
|
37
|
+
vcds:
|
38
|
+
- url: https://10.147.0.0:8443
|
39
|
+
user: cfadmin
|
40
|
+
password: akimbi
|
41
|
+
entities:
|
42
|
+
organization: cf-org
|
43
|
+
virtual_datacenter: cf-vdc
|
44
|
+
vapp_catalog: cf-catalog
|
45
|
+
media_catalog: cf-catalog
|
46
|
+
vm_metadata_key: cf-agent-env
|
47
|
+
description: vcd-cf
|
48
|
+
control:
|
49
|
+
retries:
|
50
|
+
default: 5
|
51
|
+
upload_vapp_files: 7
|
52
|
+
cpi: 1
|
53
|
+
delay: 1
|
54
|
+
time_limit_sec:
|
55
|
+
default: 120
|
56
|
+
delete_vapp_template: 120
|
57
|
+
delete_vapp: 120
|
58
|
+
delete_media: 120
|
59
|
+
instantiate_vapp_template: 300
|
60
|
+
power_on: 600
|
61
|
+
power_off: 600
|
62
|
+
undeploy: 720
|
63
|
+
process_descriptor_vapp_template: 300
|
64
|
+
http_request: 240
|
65
|
+
backoff: 2
|
66
|
+
rest_throttle:
|
67
|
+
min: 0
|
68
|
+
max: 1
|
69
|
+
debug:
|
70
|
+
delete_vapp: true
|
71
|
+
testing:
|
72
|
+
cookies: fake-cookie
|
73
|
+
log_file: /tmp/vcd-cpi-test/debug
|
Binary file
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
$:.unshift(File.expand_path("..", __FILE__))
|
2
|
+
$:.unshift(File.join(File.dirname(__FILE__), '.'))
|
3
|
+
$:.unshift(File.join(File.dirname(__FILE__), '../lib/cloud'))
|
4
|
+
$:.unshift(File.join(File.dirname(__FILE__), 'unit'))
|
5
|
+
|
6
|
+
require 'yaml'
|
7
|
+
require 'vcloud'
|
8
|
+
|
9
|
+
|
10
|
+
module VCloudCloud
|
11
|
+
module Test
|
12
|
+
class << self
|
13
|
+
def spec_asset(filename)
|
14
|
+
File.expand_path(File.join(File.dirname(__FILE__), "assets", filename))
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_configuration
|
18
|
+
@@test_config ||= YAML.load_file(spec_asset("test-director-config.yml"))
|
19
|
+
end
|
20
|
+
|
21
|
+
def vcd_settings
|
22
|
+
@@settings ||= get_vcd_settings
|
23
|
+
end
|
24
|
+
|
25
|
+
def director_cloud_properties
|
26
|
+
test_configuration["cloud"]["properties"]
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_vcd_settings
|
30
|
+
vcds = director_cloud_properties["vcds"]
|
31
|
+
raise "Invalid number of VCDs" unless vcds.size == 1
|
32
|
+
vcds[0]
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_deployment_manifest
|
36
|
+
@@test_manifest ||=
|
37
|
+
YAML.load_file(spec_asset("test-deployment-manifest.yml"))
|
38
|
+
end
|
39
|
+
|
40
|
+
def generate_unique_name
|
41
|
+
UUIDTools::UUID.random_create.to_s
|
42
|
+
end
|
43
|
+
|
44
|
+
def compare_xml(a, b)
|
45
|
+
a.diff(b) do |change, node|
|
46
|
+
# ' ' Means no difference. '+' means addition and '-' means deletion.
|
47
|
+
return false if change != ' ' && node.to_s.strip().length != 0
|
48
|
+
end
|
49
|
+
true
|
50
|
+
end
|
51
|
+
|
52
|
+
def rest_logger(logger)
|
53
|
+
rest_log_filename = File.join(File.dirname(
|
54
|
+
logger.instance_eval { @logdev }.dev.path), "rest")
|
55
|
+
log_file = File.open(rest_log_filename, "w")
|
56
|
+
log_file.sync = true
|
57
|
+
rest_logger = Logger.new(log_file || STDOUT)
|
58
|
+
rest_logger.level = logger.level
|
59
|
+
rest_logger.formatter = logger.formatter
|
60
|
+
def rest_logger.<<(str)
|
61
|
+
self.debug(str.chomp)
|
62
|
+
end
|
63
|
+
rest_logger
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
module VCloudSdk
|
74
|
+
class CloudError < RuntimeError; end
|
75
|
+
|
76
|
+
class VappSuspendedError < CloudError; end
|
77
|
+
class VmSuspendedError < CloudError; end
|
78
|
+
class VappPoweredOffError < CloudError; end
|
79
|
+
|
80
|
+
class ObjectNotFoundError < CloudError; end
|
81
|
+
|
82
|
+
class DiskNotFoundError < ObjectNotFoundError; end
|
83
|
+
class CatalogMediaNotFoundError < ObjectNotFoundError; end
|
84
|
+
|
85
|
+
class ApiError < CloudError; end
|
86
|
+
|
87
|
+
class ApiRequestError < ApiError; end
|
88
|
+
class ApiTimeoutError < ApiError; end
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
module VCloudSdk
|
93
|
+
class Config
|
94
|
+
class << self
|
95
|
+
def configure(config)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
module Kernel
|
104
|
+
|
105
|
+
def with_thread_name(name)
|
106
|
+
old_name = Thread.current[:name]
|
107
|
+
Thread.current[:name] = name
|
108
|
+
yield
|
109
|
+
ensure
|
110
|
+
Thread.current[:name] = old_name
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
RSpec.configure do |c|
|
116
|
+
c.treat_symbols_as_metadata_keys_with_true_values = true # for RSpec-3
|
117
|
+
c.filter_run :all
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
|
122
|
+
module Bosh
|
123
|
+
module Clouds
|
124
|
+
class Config
|
125
|
+
class << self
|
126
|
+
def logger()
|
127
|
+
logger = Logger.new(VCloudCloud::Test::test_configuration[
|
128
|
+
"cloud"]["properties"]["log_file"])
|
129
|
+
logger.level = Logger::DEBUG
|
130
|
+
logger
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|