vagrant-openstack-illuin-provider 0.12.0
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 +7 -0
- data/.gitignore +22 -0
- data/.rubocop.yml +40 -0
- data/CHANGELOG.md +282 -0
- data/Gemfile +18 -0
- data/RELEASE.md +15 -0
- data/Rakefile +25 -0
- data/Vagrantfile +20 -0
- data/dummy.box +0 -0
- data/example_box/README.md +13 -0
- data/example_box/metadata.json +3 -0
- data/functional_tests/Vagrantfile +58 -0
- data/functional_tests/keys/vagrant-openstack +27 -0
- data/functional_tests/keys/vagrant-openstack.pub +1 -0
- data/functional_tests/run_tests.sh +142 -0
- data/lib/vagrant-openstack-illuin-provider.rb +29 -0
- data/lib/vagrant-openstack-illuin-provider/action.rb +344 -0
- data/lib/vagrant-openstack-illuin-provider/action/abstract_action.rb +22 -0
- data/lib/vagrant-openstack-illuin-provider/action/connect_openstack.rb +60 -0
- data/lib/vagrant-openstack-illuin-provider/action/create_server.rb +187 -0
- data/lib/vagrant-openstack-illuin-provider/action/create_stack.rb +76 -0
- data/lib/vagrant-openstack-illuin-provider/action/delete_server.rb +53 -0
- data/lib/vagrant-openstack-illuin-provider/action/delete_stack.rb +73 -0
- data/lib/vagrant-openstack-illuin-provider/action/message.rb +19 -0
- data/lib/vagrant-openstack-illuin-provider/action/provision.rb +60 -0
- data/lib/vagrant-openstack-illuin-provider/action/read_ssh_info.rb +74 -0
- data/lib/vagrant-openstack-illuin-provider/action/read_state.rb +43 -0
- data/lib/vagrant-openstack-illuin-provider/action/resume.rb +24 -0
- data/lib/vagrant-openstack-illuin-provider/action/snapshot_cleanup.rb +32 -0
- data/lib/vagrant-openstack-illuin-provider/action/snapshot_delete.rb +32 -0
- data/lib/vagrant-openstack-illuin-provider/action/snapshot_list.rb +22 -0
- data/lib/vagrant-openstack-illuin-provider/action/snapshot_restore.rb +29 -0
- data/lib/vagrant-openstack-illuin-provider/action/snapshot_save.rb +51 -0
- data/lib/vagrant-openstack-illuin-provider/action/start_server.rb +24 -0
- data/lib/vagrant-openstack-illuin-provider/action/stop_server.rb +25 -0
- data/lib/vagrant-openstack-illuin-provider/action/suspend.rb +24 -0
- data/lib/vagrant-openstack-illuin-provider/action/sync_folders.rb +138 -0
- data/lib/vagrant-openstack-illuin-provider/action/wait_active.rb +33 -0
- data/lib/vagrant-openstack-illuin-provider/action/wait_stop.rb +33 -0
- data/lib/vagrant-openstack-illuin-provider/cap/snapshot_list.rb +15 -0
- data/lib/vagrant-openstack-illuin-provider/catalog/openstack_catalog.rb +90 -0
- data/lib/vagrant-openstack-illuin-provider/client/cinder.rb +39 -0
- data/lib/vagrant-openstack-illuin-provider/client/domain.rb +163 -0
- data/lib/vagrant-openstack-illuin-provider/client/glance.rb +65 -0
- data/lib/vagrant-openstack-illuin-provider/client/heat.rb +49 -0
- data/lib/vagrant-openstack-illuin-provider/client/http_utils.rb +116 -0
- data/lib/vagrant-openstack-illuin-provider/client/keystone.rb +128 -0
- data/lib/vagrant-openstack-illuin-provider/client/neutron.rb +48 -0
- data/lib/vagrant-openstack-illuin-provider/client/nova.rb +303 -0
- data/lib/vagrant-openstack-illuin-provider/client/openstack.rb +59 -0
- data/lib/vagrant-openstack-illuin-provider/client/request_logger.rb +23 -0
- data/lib/vagrant-openstack-illuin-provider/client/rest_utils.rb +28 -0
- data/lib/vagrant-openstack-illuin-provider/command/abstract_command.rb +51 -0
- data/lib/vagrant-openstack-illuin-provider/command/flavor_list.rb +24 -0
- data/lib/vagrant-openstack-illuin-provider/command/floatingip_list.rb +32 -0
- data/lib/vagrant-openstack-illuin-provider/command/image_list.rb +29 -0
- data/lib/vagrant-openstack-illuin-provider/command/main.rb +52 -0
- data/lib/vagrant-openstack-illuin-provider/command/network_list.rb +25 -0
- data/lib/vagrant-openstack-illuin-provider/command/openstack_command.rb +16 -0
- data/lib/vagrant-openstack-illuin-provider/command/reset.rb +20 -0
- data/lib/vagrant-openstack-illuin-provider/command/subnet_list.rb +22 -0
- data/lib/vagrant-openstack-illuin-provider/command/utils.rb +22 -0
- data/lib/vagrant-openstack-illuin-provider/command/volume_list.rb +25 -0
- data/lib/vagrant-openstack-illuin-provider/config.rb +505 -0
- data/lib/vagrant-openstack-illuin-provider/config/http.rb +39 -0
- data/lib/vagrant-openstack-illuin-provider/config_resolver.rb +334 -0
- data/lib/vagrant-openstack-illuin-provider/errors.rb +187 -0
- data/lib/vagrant-openstack-illuin-provider/logging.rb +39 -0
- data/lib/vagrant-openstack-illuin-provider/plugin.rb +58 -0
- data/lib/vagrant-openstack-illuin-provider/provider.rb +50 -0
- data/lib/vagrant-openstack-illuin-provider/utils.rb +81 -0
- data/lib/vagrant-openstack-illuin-provider/version.rb +15 -0
- data/lib/vagrant-openstack-illuin-provider/version_checker.rb +76 -0
- data/locales/en.yml +412 -0
- data/spec/vagrant-openstack-illuin-provider/action/connect_openstack_spec.rb +770 -0
- data/spec/vagrant-openstack-illuin-provider/action/create_server_spec.rb +260 -0
- data/spec/vagrant-openstack-illuin-provider/action/create_stack_spec.rb +99 -0
- data/spec/vagrant-openstack-illuin-provider/action/delete_server_spec.rb +89 -0
- data/spec/vagrant-openstack-illuin-provider/action/delete_stack_spec.rb +63 -0
- data/spec/vagrant-openstack-illuin-provider/action/message_spec.rb +33 -0
- data/spec/vagrant-openstack-illuin-provider/action/provision_spec.rb +97 -0
- data/spec/vagrant-openstack-illuin-provider/action/read_ssh_info_spec.rb +202 -0
- data/spec/vagrant-openstack-illuin-provider/action/read_state_spec.rb +81 -0
- data/spec/vagrant-openstack-illuin-provider/action/resume_server_spec.rb +49 -0
- data/spec/vagrant-openstack-illuin-provider/action/start_server_spec.rb +49 -0
- data/spec/vagrant-openstack-illuin-provider/action/stop_server_spec.rb +49 -0
- data/spec/vagrant-openstack-illuin-provider/action/suspend_server_spec.rb +49 -0
- data/spec/vagrant-openstack-illuin-provider/action/sync_folders_spec.rb +155 -0
- data/spec/vagrant-openstack-illuin-provider/action/wait_active_spec.rb +53 -0
- data/spec/vagrant-openstack-illuin-provider/action/wait_stop_spec.rb +53 -0
- data/spec/vagrant-openstack-illuin-provider/action_spec.rb +120 -0
- data/spec/vagrant-openstack-illuin-provider/client/cinder_spec.rb +129 -0
- data/spec/vagrant-openstack-illuin-provider/client/glance_spec.rb +145 -0
- data/spec/vagrant-openstack-illuin-provider/client/heat_spec.rb +130 -0
- data/spec/vagrant-openstack-illuin-provider/client/keystone_spec.rb +226 -0
- data/spec/vagrant-openstack-illuin-provider/client/neutron_spec.rb +173 -0
- data/spec/vagrant-openstack-illuin-provider/client/nova_spec.rb +760 -0
- data/spec/vagrant-openstack-illuin-provider/client/utils_spec.rb +176 -0
- data/spec/vagrant-openstack-illuin-provider/command/flavor_list_spec.rb +43 -0
- data/spec/vagrant-openstack-illuin-provider/command/floatingip_list_spec.rb +74 -0
- data/spec/vagrant-openstack-illuin-provider/command/image_list_spec.rb +95 -0
- data/spec/vagrant-openstack-illuin-provider/command/network_list_spec.rb +65 -0
- data/spec/vagrant-openstack-illuin-provider/command/reset_spec.rb +24 -0
- data/spec/vagrant-openstack-illuin-provider/command/subnet_list_spec.rb +45 -0
- data/spec/vagrant-openstack-illuin-provider/command/volume_list_spec.rb +40 -0
- data/spec/vagrant-openstack-illuin-provider/config_resolver_spec.rb +879 -0
- data/spec/vagrant-openstack-illuin-provider/config_spec.rb +416 -0
- data/spec/vagrant-openstack-illuin-provider/e2e_spec.rb.save +27 -0
- data/spec/vagrant-openstack-illuin-provider/provider_spec.rb +13 -0
- data/spec/vagrant-openstack-illuin-provider/spec_helper.rb +37 -0
- data/spec/vagrant-openstack-illuin-provider/utils_spec.rb +197 -0
- data/spec/vagrant-openstack-illuin-provider/version_checker_spec.rb +39 -0
- data/stackrc +25 -0
- data/vagrant-openstack-illuin-provider.gemspec +35 -0
- metadata +379 -0
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
require 'vagrant'
|
|
2
|
+
require 'colorize'
|
|
3
|
+
require 'vagrant-openstack-illuin-provider/config/http'
|
|
4
|
+
|
|
5
|
+
module VagrantPlugins
|
|
6
|
+
module Openstack
|
|
7
|
+
class Config < Vagrant.plugin('2', :config)
|
|
8
|
+
# The API key to access Openstack.
|
|
9
|
+
#
|
|
10
|
+
attr_accessor :password
|
|
11
|
+
|
|
12
|
+
# The compute service url to access Openstack. If nil, it will read from hypermedia catalog form REST API
|
|
13
|
+
#
|
|
14
|
+
attr_accessor :openstack_compute_url
|
|
15
|
+
|
|
16
|
+
# The network service url to access Openstack. If nil, it will read from hypermedia catalog form REST API
|
|
17
|
+
#
|
|
18
|
+
attr_accessor :openstack_network_url
|
|
19
|
+
|
|
20
|
+
# The block storage service url to access Openstack. If nil, it will read from hypermedia catalog form REST API
|
|
21
|
+
#
|
|
22
|
+
attr_accessor :openstack_volume_url
|
|
23
|
+
|
|
24
|
+
# The orchestration service url to access Openstack. If nil, it will read from hypermedia catalog form REST API
|
|
25
|
+
#
|
|
26
|
+
attr_accessor :openstack_orchestration_url
|
|
27
|
+
|
|
28
|
+
# The image service url to access Openstack. If nil, it will read from hypermedia catalog form REST API
|
|
29
|
+
#
|
|
30
|
+
attr_accessor :openstack_image_url
|
|
31
|
+
|
|
32
|
+
# The authentication endpoint. This defaults to Openstack's global authentication endpoint.
|
|
33
|
+
attr_accessor :openstack_auth_url
|
|
34
|
+
|
|
35
|
+
# Openstack region
|
|
36
|
+
attr_accessor :region
|
|
37
|
+
|
|
38
|
+
# The flavor of server to launch, either the ID or name. This
|
|
39
|
+
# can also be a regular expression to partially match a name.
|
|
40
|
+
attr_accessor :flavor
|
|
41
|
+
|
|
42
|
+
# The name or ID of the image to use. This can also be a regular
|
|
43
|
+
# expression to partially match a name.
|
|
44
|
+
attr_accessor :image
|
|
45
|
+
|
|
46
|
+
# Volume to boot the vm from
|
|
47
|
+
#
|
|
48
|
+
attr_accessor :volume_boot
|
|
49
|
+
|
|
50
|
+
#
|
|
51
|
+
# The name of the openstack project on witch the vm will be created.
|
|
52
|
+
#
|
|
53
|
+
attr_accessor :tenant_name
|
|
54
|
+
|
|
55
|
+
#
|
|
56
|
+
# The name of the openstack project on witch the vm will be created, changed name in v3 identity API.
|
|
57
|
+
#
|
|
58
|
+
attr_accessor :project_name
|
|
59
|
+
|
|
60
|
+
# The name of the server. This defaults to the name of the machine
|
|
61
|
+
# defined by Vagrant (via `config.vm.define`), but can be overriden
|
|
62
|
+
# here.
|
|
63
|
+
attr_accessor :server_name
|
|
64
|
+
|
|
65
|
+
# The username to access Openstack.
|
|
66
|
+
#
|
|
67
|
+
# @return [String]
|
|
68
|
+
attr_accessor :username
|
|
69
|
+
|
|
70
|
+
# The domain name to access Openstack, this defaults to Default.
|
|
71
|
+
#
|
|
72
|
+
# @return [String]
|
|
73
|
+
attr_accessor :domain_name
|
|
74
|
+
|
|
75
|
+
# The name of the keypair to use.
|
|
76
|
+
#
|
|
77
|
+
# @return [String]
|
|
78
|
+
attr_accessor :keypair_name
|
|
79
|
+
|
|
80
|
+
# The SSH username to use with this OpenStack instance. This overrides
|
|
81
|
+
# the `config.ssh.username` variable.
|
|
82
|
+
#
|
|
83
|
+
# @return [String]
|
|
84
|
+
attr_accessor :ssh_username
|
|
85
|
+
|
|
86
|
+
# The SSH timeout use after server creation.
|
|
87
|
+
#
|
|
88
|
+
# Deprecated. Use config.vm.boot_timeout instead.
|
|
89
|
+
#
|
|
90
|
+
# @return [Integer]
|
|
91
|
+
attr_accessor :ssh_timeout
|
|
92
|
+
|
|
93
|
+
# Opt files/directories in to the rsync operation performed by this provider
|
|
94
|
+
#
|
|
95
|
+
# @deprecated Use standard Vagrant synced folders instead.
|
|
96
|
+
#
|
|
97
|
+
# @return [Array]
|
|
98
|
+
attr_accessor :rsync_includes
|
|
99
|
+
|
|
100
|
+
# The floating IP address from the IP pool which will be assigned to the instance.
|
|
101
|
+
#
|
|
102
|
+
# @return [String]
|
|
103
|
+
attr_accessor :floating_ip
|
|
104
|
+
|
|
105
|
+
# The floating IP pool from where new IPs will be allocated
|
|
106
|
+
#
|
|
107
|
+
# @return [String]
|
|
108
|
+
attr_accessor :floating_ip_pool
|
|
109
|
+
|
|
110
|
+
# if set to true, vagrant will always allocate floating ip instead of trying to reuse unassigned ones
|
|
111
|
+
# default to false
|
|
112
|
+
#
|
|
113
|
+
# @return [Boolean]
|
|
114
|
+
attr_accessor :floating_ip_pool_always_allocate
|
|
115
|
+
|
|
116
|
+
# Sync folder method. Can be either "rsync" or "none"
|
|
117
|
+
#
|
|
118
|
+
# @deprecated Use standard Vagrant synced folders instead.
|
|
119
|
+
#
|
|
120
|
+
# @return [String]
|
|
121
|
+
attr_accessor :sync_method
|
|
122
|
+
|
|
123
|
+
# Sync folder ignore files. A list of files containing exclude patterns to ignore in the rsync operation
|
|
124
|
+
# performed by this provider
|
|
125
|
+
#
|
|
126
|
+
# @deprecated Use standard Vagrant synced folders instead.
|
|
127
|
+
#
|
|
128
|
+
# @return [Array]
|
|
129
|
+
attr_accessor :rsync_ignore_files
|
|
130
|
+
|
|
131
|
+
# Network list the VM will be connected to
|
|
132
|
+
#
|
|
133
|
+
# @return [Array]
|
|
134
|
+
attr_accessor :networks
|
|
135
|
+
|
|
136
|
+
# Volumes list that will be attached to the VM
|
|
137
|
+
#
|
|
138
|
+
# @return [Array]
|
|
139
|
+
attr_accessor :volumes
|
|
140
|
+
|
|
141
|
+
# Stack that will be created and associated to the instances
|
|
142
|
+
#
|
|
143
|
+
# @return [Array]
|
|
144
|
+
attr_accessor :stacks
|
|
145
|
+
|
|
146
|
+
# Public key path to create OpenStack keypair
|
|
147
|
+
#
|
|
148
|
+
# @return [Array]
|
|
149
|
+
attr_accessor :public_key_path
|
|
150
|
+
|
|
151
|
+
# Availability Zone
|
|
152
|
+
#
|
|
153
|
+
# @return [String]
|
|
154
|
+
attr_accessor :availability_zone
|
|
155
|
+
|
|
156
|
+
# Pass hints to the OpenStack scheduler, e.g. { "cell": "some cell name" }
|
|
157
|
+
attr_accessor :scheduler_hints
|
|
158
|
+
|
|
159
|
+
# List of strings representing the security groups to apply.
|
|
160
|
+
# e.g. ['ssh', 'http']
|
|
161
|
+
#
|
|
162
|
+
# @return [Array[String]]
|
|
163
|
+
attr_accessor :security_groups
|
|
164
|
+
|
|
165
|
+
# User data to be sent to the newly created OpenStack instance. Use this
|
|
166
|
+
# e.g. to inject a script at boot time.
|
|
167
|
+
#
|
|
168
|
+
# @return [String]
|
|
169
|
+
attr_accessor :user_data
|
|
170
|
+
|
|
171
|
+
# A Hash of metadata that will be sent to the instance for configuration
|
|
172
|
+
#
|
|
173
|
+
# @return [Hash]
|
|
174
|
+
attr_accessor :metadata
|
|
175
|
+
|
|
176
|
+
# Flag to enable/disable all SSH actions (to use for instance on private networks)
|
|
177
|
+
#
|
|
178
|
+
# @return [Boolean]
|
|
179
|
+
attr_accessor :ssh_disabled
|
|
180
|
+
|
|
181
|
+
# Specify the endpoint_type to use : publicURL, adminURL, or internalURL (default is publicURL)
|
|
182
|
+
#
|
|
183
|
+
# @return [String]
|
|
184
|
+
attr_accessor :endpoint_type
|
|
185
|
+
|
|
186
|
+
# Specify the endpoint_type to use : publicL, admin, or internal (default is public)
|
|
187
|
+
#
|
|
188
|
+
# @return [String]
|
|
189
|
+
attr_accessor :interface_type
|
|
190
|
+
|
|
191
|
+
# Specify the authentication version to use : 2 or 3 (ddefault is 2()
|
|
192
|
+
#
|
|
193
|
+
# @return [String]
|
|
194
|
+
attr_accessor :identity_api_version
|
|
195
|
+
|
|
196
|
+
#
|
|
197
|
+
# @return [Integer]
|
|
198
|
+
attr_accessor :server_create_timeout
|
|
199
|
+
|
|
200
|
+
#
|
|
201
|
+
# @return [Integer]
|
|
202
|
+
attr_accessor :server_active_timeout
|
|
203
|
+
|
|
204
|
+
#
|
|
205
|
+
# @return [Integer]
|
|
206
|
+
attr_accessor :server_stop_timeout
|
|
207
|
+
|
|
208
|
+
#
|
|
209
|
+
# @return [Integer]
|
|
210
|
+
attr_accessor :server_delete_timeout
|
|
211
|
+
|
|
212
|
+
#
|
|
213
|
+
# @return [Integer]
|
|
214
|
+
attr_accessor :stack_create_timeout
|
|
215
|
+
|
|
216
|
+
#
|
|
217
|
+
# @return [Integer]
|
|
218
|
+
attr_accessor :stack_delete_timeout
|
|
219
|
+
|
|
220
|
+
#
|
|
221
|
+
# @return [Integer]
|
|
222
|
+
attr_accessor :floating_ip_assign_timeout
|
|
223
|
+
|
|
224
|
+
#
|
|
225
|
+
# @return [HttpConfig]
|
|
226
|
+
attr_accessor :http
|
|
227
|
+
|
|
228
|
+
#
|
|
229
|
+
# @return [Boolean]
|
|
230
|
+
attr_accessor :meta_args_support
|
|
231
|
+
|
|
232
|
+
# A switch for enabling the legacy synced folders implementation.
|
|
233
|
+
#
|
|
234
|
+
# This defaults to false, but is automatically set to true if any of the
|
|
235
|
+
# legacy synced folder options are used:
|
|
236
|
+
#
|
|
237
|
+
# - {#rsync_includes}
|
|
238
|
+
# - {#rsync_ignore_files}
|
|
239
|
+
# - {#sync_method}
|
|
240
|
+
#
|
|
241
|
+
# @deprecated Use standard Vagrant synced folders instead.
|
|
242
|
+
#
|
|
243
|
+
# @return [Boolean]
|
|
244
|
+
attr_accessor :use_legacy_synced_folders
|
|
245
|
+
|
|
246
|
+
# Specify the certificate to use.
|
|
247
|
+
#
|
|
248
|
+
# @return [String]
|
|
249
|
+
attr_accessor :ssl_ca_file
|
|
250
|
+
|
|
251
|
+
# Verify ssl peer certificate when connecting. Set to false (! unsecure) to disable
|
|
252
|
+
#
|
|
253
|
+
# @return [Boolean]
|
|
254
|
+
attr_accessor :ssl_verify_peer
|
|
255
|
+
|
|
256
|
+
# Specify the version of ip that should be used to connect to the machine
|
|
257
|
+
#
|
|
258
|
+
# @return [Integer]
|
|
259
|
+
attr_accessor :ip_version
|
|
260
|
+
|
|
261
|
+
def initialize
|
|
262
|
+
@password = UNSET_VALUE
|
|
263
|
+
@openstack_compute_url = UNSET_VALUE
|
|
264
|
+
@openstack_network_url = UNSET_VALUE
|
|
265
|
+
@openstack_volume_url = UNSET_VALUE
|
|
266
|
+
@openstack_orchestration_url = UNSET_VALUE
|
|
267
|
+
@openstack_image_url = UNSET_VALUE
|
|
268
|
+
@openstack_auth_url = UNSET_VALUE
|
|
269
|
+
@endpoint_type = UNSET_VALUE
|
|
270
|
+
@interface_type = UNSET_VALUE
|
|
271
|
+
@identity_api_version = UNSET_VALUE
|
|
272
|
+
@region = UNSET_VALUE
|
|
273
|
+
@flavor = UNSET_VALUE
|
|
274
|
+
@image = UNSET_VALUE
|
|
275
|
+
@volume_boot = UNSET_VALUE
|
|
276
|
+
@tenant_name = UNSET_VALUE
|
|
277
|
+
@server_name = UNSET_VALUE
|
|
278
|
+
@username = UNSET_VALUE
|
|
279
|
+
@rsync_includes = []
|
|
280
|
+
@rsync_ignore_files = []
|
|
281
|
+
@keypair_name = UNSET_VALUE
|
|
282
|
+
@ssh_username = UNSET_VALUE
|
|
283
|
+
@ssh_timeout = UNSET_VALUE
|
|
284
|
+
@floating_ip = UNSET_VALUE
|
|
285
|
+
@floating_ip_pool = []
|
|
286
|
+
@floating_ip_pool_always_allocate = UNSET_VALUE
|
|
287
|
+
@sync_method = UNSET_VALUE
|
|
288
|
+
@availability_zone = UNSET_VALUE
|
|
289
|
+
@networks = []
|
|
290
|
+
@stacks = []
|
|
291
|
+
@volumes = []
|
|
292
|
+
@public_key_path = UNSET_VALUE
|
|
293
|
+
@scheduler_hints = UNSET_VALUE
|
|
294
|
+
@security_groups = UNSET_VALUE
|
|
295
|
+
@user_data = UNSET_VALUE
|
|
296
|
+
@metadata = UNSET_VALUE
|
|
297
|
+
@ssh_disabled = UNSET_VALUE
|
|
298
|
+
@server_create_timeout = UNSET_VALUE
|
|
299
|
+
@server_active_timeout = UNSET_VALUE
|
|
300
|
+
@server_stop_timeout = UNSET_VALUE
|
|
301
|
+
@server_delete_timeout = UNSET_VALUE
|
|
302
|
+
@stack_create_timeout = UNSET_VALUE
|
|
303
|
+
@stack_delete_timeout = UNSET_VALUE
|
|
304
|
+
@floating_ip_assign_timeout = UNSET_VALUE
|
|
305
|
+
@meta_args_support = UNSET_VALUE
|
|
306
|
+
@http = HttpConfig.new
|
|
307
|
+
@use_legacy_synced_folders = UNSET_VALUE
|
|
308
|
+
@ssl_ca_file = UNSET_VALUE
|
|
309
|
+
@ssl_verify_peer = UNSET_VALUE
|
|
310
|
+
@ip_version = UNSET_VALUE
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
def merge(other)
|
|
314
|
+
result = self.class.new
|
|
315
|
+
|
|
316
|
+
# Set all of our instance variables on the new class
|
|
317
|
+
[self, other].each do |obj|
|
|
318
|
+
obj.instance_variables.each do |key|
|
|
319
|
+
# Ignore keys that start with a double underscore. This allows
|
|
320
|
+
# configuration classes to still hold around internal state
|
|
321
|
+
# that isn't propagated.
|
|
322
|
+
next if key.to_s.start_with?('@__')
|
|
323
|
+
|
|
324
|
+
# Let user inputs a string or an array for floating ip pool attribute
|
|
325
|
+
obj.floating_ip_pool = [obj.floating_ip_pool].flatten if key.eql?(:@floating_ip_pool) && !obj.floating_ip_pool.nil?
|
|
326
|
+
|
|
327
|
+
# Let user inputs a string or an array for networks attribute
|
|
328
|
+
obj.networks = [obj.networks].flatten if key.eql?(:@networks) && !obj.networks.nil?
|
|
329
|
+
|
|
330
|
+
# Don't set the value if it is the unset value, either.
|
|
331
|
+
value = obj.instance_variable_get(key)
|
|
332
|
+
|
|
333
|
+
if [:@networks, :@volumes, :@rsync_includes, :@rsync_ignore_files, :@floating_ip_pool, :@stacks].include? key
|
|
334
|
+
result.instance_variable_set(key, value) unless value.empty?
|
|
335
|
+
elsif [:@http].include? key
|
|
336
|
+
result.instance_variable_set(key, instance_variable_get(key).merge(other.instance_variable_get(key))) if value != UNSET_VALUE
|
|
337
|
+
else
|
|
338
|
+
result.instance_variable_set(key, value) if value != UNSET_VALUE
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
# Persist through the set of invalid methods
|
|
344
|
+
this_invalid = @__invalid_methods || Set.new
|
|
345
|
+
other_invalid = other.instance_variable_get(:"@__invalid_methods") || Set.new
|
|
346
|
+
result.instance_variable_set(:"@__invalid_methods", this_invalid + other_invalid)
|
|
347
|
+
|
|
348
|
+
result
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
# rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
|
352
|
+
def finalize!
|
|
353
|
+
@password = nil if @password == UNSET_VALUE
|
|
354
|
+
@openstack_compute_url = nil if @openstack_compute_url == UNSET_VALUE
|
|
355
|
+
@openstack_network_url = nil if @openstack_network_url == UNSET_VALUE
|
|
356
|
+
@openstack_orchestration_url = nil if @openstack_orchestration_url == UNSET_VALUE
|
|
357
|
+
@openstack_volume_url = nil if @openstack_volume_url == UNSET_VALUE
|
|
358
|
+
@openstack_image_url = nil if @openstack_image_url == UNSET_VALUE
|
|
359
|
+
@openstack_auth_url = nil if @openstack_auth_url == UNSET_VALUE
|
|
360
|
+
@endpoint_type = 'publicURL' if @endpoint_type == UNSET_VALUE
|
|
361
|
+
@interface_type = 'public' if @interface_type == UNSET_VALUE
|
|
362
|
+
@identity_api_version = '2' if @identity_api_version == UNSET_VALUE
|
|
363
|
+
@region = nil if @region == UNSET_VALUE
|
|
364
|
+
@flavor = nil if @flavor == UNSET_VALUE
|
|
365
|
+
@image = nil if @image == UNSET_VALUE
|
|
366
|
+
@volume_boot = nil if @volume_boot == UNSET_VALUE
|
|
367
|
+
@tenant_name = nil if @tenant_name == UNSET_VALUE
|
|
368
|
+
@project_name = nil if @project_name == UNSET_VALUE
|
|
369
|
+
@server_name = nil if @server_name == UNSET_VALUE
|
|
370
|
+
@username = nil if @username == UNSET_VALUE
|
|
371
|
+
@domain_name = 'Default' if @domain_name == UNSET_VALUE
|
|
372
|
+
@floating_ip = nil if @floating_ip == UNSET_VALUE
|
|
373
|
+
@floating_ip_pool = nil if @floating_ip_pool == UNSET_VALUE
|
|
374
|
+
@floating_ip_pool_always_allocate = false if floating_ip_pool_always_allocate == UNSET_VALUE
|
|
375
|
+
@keypair_name = nil if @keypair_name == UNSET_VALUE
|
|
376
|
+
@public_key_path = nil if @public_key_path == UNSET_VALUE
|
|
377
|
+
@availability_zone = nil if @availability_zone == UNSET_VALUE
|
|
378
|
+
@scheduler_hints = nil if @scheduler_hints == UNSET_VALUE
|
|
379
|
+
@security_groups = nil if @security_groups == UNSET_VALUE
|
|
380
|
+
@user_data = nil if @user_data == UNSET_VALUE
|
|
381
|
+
@metadata = nil if @metadata == UNSET_VALUE
|
|
382
|
+
@ssh_disabled = false if @ssh_disabled == UNSET_VALUE
|
|
383
|
+
@ip_version = nil if @ip_version == UNSET_VALUE
|
|
384
|
+
|
|
385
|
+
# The value of use_legacy_synced_folders is used by action chains
|
|
386
|
+
# to determine which synced folder implementation to run.
|
|
387
|
+
if @use_legacy_synced_folders == UNSET_VALUE
|
|
388
|
+
@use_legacy_synced_folders = !(
|
|
389
|
+
(@rsync_includes.nil? || @rsync_includes.empty?) &&
|
|
390
|
+
(@rsync_ignore_files.nil? || @rsync_ignore_files.empty?) &&
|
|
391
|
+
(@sync_method.nil? || @sync_method == UNSET_VALUE))
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
if @use_legacy_synced_folders
|
|
395
|
+
# Original defaults.
|
|
396
|
+
@rsync_includes = nil if @rsync_includes.empty?
|
|
397
|
+
@rsync_ignore_files = nil if @rsync_ignore_files.empty?
|
|
398
|
+
@sync_method = 'rsync' if @sync_method == UNSET_VALUE
|
|
399
|
+
else
|
|
400
|
+
# Disable all sync settings.
|
|
401
|
+
@rsync_includes = nil
|
|
402
|
+
@rsync_ignore_files = nil
|
|
403
|
+
@sync_method = nil
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
# The SSH values by default are nil, and the top-level config
|
|
407
|
+
# `config.ssh` and `config.vm.boot_timeout` values are used.
|
|
408
|
+
@ssh_username = nil if @ssh_username == UNSET_VALUE
|
|
409
|
+
@ssh_timeout = nil if @ssh_timeout == UNSET_VALUE
|
|
410
|
+
|
|
411
|
+
@server_create_timeout = 200 if @server_create_timeout == UNSET_VALUE
|
|
412
|
+
@server_active_timeout = 200 if @server_active_timeout == UNSET_VALUE
|
|
413
|
+
@server_stop_timeout = 200 if @server_stop_timeout == UNSET_VALUE
|
|
414
|
+
@server_delete_timeout = 200 if @server_delete_timeout == UNSET_VALUE
|
|
415
|
+
@stack_create_timeout = 200 if @stack_create_timeout == UNSET_VALUE
|
|
416
|
+
@stack_delete_timeout = 200 if @stack_delete_timeout == UNSET_VALUE
|
|
417
|
+
@floating_ip_assign_timeout = 200 if @floating_ip_assign_timeout == UNSET_VALUE
|
|
418
|
+
@meta_args_support = false if @meta_args_support == UNSET_VALUE
|
|
419
|
+
@networks = nil if @networks.empty?
|
|
420
|
+
@volumes = nil if @volumes.empty?
|
|
421
|
+
@stacks = nil if @stacks.empty?
|
|
422
|
+
@http.finalize!
|
|
423
|
+
@ssl_ca_file = nil if @ssl_ca_file == UNSET_VALUE
|
|
424
|
+
@ssl_verify_peer = true if @ssl_verify_peer == UNSET_VALUE
|
|
425
|
+
end
|
|
426
|
+
# rubocop:enable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
|
427
|
+
|
|
428
|
+
#
|
|
429
|
+
# @deprecated Use standard Vagrant synced folders instead.
|
|
430
|
+
def rsync_include(inc)
|
|
431
|
+
@rsync_includes << inc
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
def validate(machine)
|
|
435
|
+
errors = _detected_errors
|
|
436
|
+
|
|
437
|
+
errors << I18n.t('vagrant_openstack.config.password_required') if @password.nil? || @password.empty?
|
|
438
|
+
errors << I18n.t('vagrant_openstack.config.username_required') if @username.nil? || @username.empty?
|
|
439
|
+
errors << I18n.t('vagrant_openstack.config.invalid_api_version') unless %w(2 3).include?(@identity_api_version)
|
|
440
|
+
|
|
441
|
+
validate_api_version(errors)
|
|
442
|
+
validate_ssh_username(machine, errors)
|
|
443
|
+
validate_stack_config(errors)
|
|
444
|
+
validate_ssh_timeout(errors)
|
|
445
|
+
|
|
446
|
+
if machine.config.ssh.insert_key
|
|
447
|
+
if machine.config.ssh.private_key_path
|
|
448
|
+
puts I18n.t('vagrant_openstack.config.keypair_name_required').yellow unless @keypair_name || @public_key_path
|
|
449
|
+
else
|
|
450
|
+
errors << I18n.t('vagrant_openstack.config.private_key_missing') if @keypair_name || @public_key_path
|
|
451
|
+
end
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
{
|
|
455
|
+
openstack_compute_url: @openstack_compute_url,
|
|
456
|
+
openstack_network_url: @openstack_network_url,
|
|
457
|
+
openstack_volume_url: @openstack_volume_url,
|
|
458
|
+
openstack_orchestration_url: @openstack_orchestration_url,
|
|
459
|
+
openstack_image_url: @openstack_image_url,
|
|
460
|
+
openstack_auth_url: @openstack_auth_url
|
|
461
|
+
}.each_pair do |key, value|
|
|
462
|
+
errors << I18n.t('vagrant_openstack.config.invalid_uri', key: key, uri: value) unless value.nil? || valid_uri?(value)
|
|
463
|
+
end
|
|
464
|
+
|
|
465
|
+
{ 'Openstack Provider' => errors }
|
|
466
|
+
end
|
|
467
|
+
|
|
468
|
+
private
|
|
469
|
+
|
|
470
|
+
def validate_api_version(errors)
|
|
471
|
+
if @identity_api_version == '2'
|
|
472
|
+
errors << I18n.t('vagrant_openstack.config.tenant_name_required') if @tenant_name.nil? || @tenant_name.empty?
|
|
473
|
+
errors << I18n.t('vagrant_openstack.config.invalid_endpoint_type') unless %w(publicURL adminURL internalURL).include?(@endpoint_type)
|
|
474
|
+
elsif @identity_api_version == '3'
|
|
475
|
+
errors << I18n.t('vagrant_openstack.config.domain_required') if @domain_name.nil? || @domain_name.empty?
|
|
476
|
+
errors << I18n.t('vagrant_openstack.config.project_name_required') if @project_name.nil? || @project_name.empty?
|
|
477
|
+
errors << I18n.t('vagrant_openstack.config.invalid_interface_type') unless %w(public admin internal).include?(@interface_type)
|
|
478
|
+
end
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
def validate_stack_config(errors)
|
|
482
|
+
@stacks.each do |stack|
|
|
483
|
+
errors << I18n.t('vagrant_openstack.config.invalid_stack') unless stack[:name] && stack[:template]
|
|
484
|
+
end unless @stacks.nil?
|
|
485
|
+
end
|
|
486
|
+
|
|
487
|
+
def validate_ssh_username(machine, errors)
|
|
488
|
+
puts I18n.t('vagrant_openstack.config.ssh_username_deprecated').yellow if @ssh_username
|
|
489
|
+
errors << I18n.t('vagrant_openstack.config.ssh_username_required') unless @ssh_username || machine.config.ssh.username
|
|
490
|
+
end
|
|
491
|
+
|
|
492
|
+
def validate_ssh_timeout(errors)
|
|
493
|
+
return if @ssh_timeout.nil? || @ssh_timeout == UNSET_VALUE
|
|
494
|
+
@ssh_timeout = Integer(@ssh_timeout) if @ssh_timeout.is_a? String
|
|
495
|
+
rescue ArgumentError
|
|
496
|
+
errors << I18n.t('vagrant_openstack.config.invalid_value_for_parameter', parameter: 'ssh_timeout', value: @ssh_timeout)
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
def valid_uri?(value)
|
|
500
|
+
uri = URI.parse value
|
|
501
|
+
uri.is_a?(URI::HTTP)
|
|
502
|
+
end
|
|
503
|
+
end
|
|
504
|
+
end
|
|
505
|
+
end
|