vagrant-openstack-plugin-tom 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.travis.yml +11 -0
  4. data/Authors.txt +11 -0
  5. data/CHANGELOG.md +185 -0
  6. data/Gemfile +10 -0
  7. data/LICENSE.txt +23 -0
  8. data/README.md +278 -0
  9. data/Rakefile +21 -0
  10. data/dummy.box +0 -0
  11. data/example_box/README.md +13 -0
  12. data/example_box/metadata.json +3 -0
  13. data/example_vagrant_file +24 -0
  14. data/lib/vagrant-openstack-plugin.rb +53 -0
  15. data/lib/vagrant-openstack-plugin/action.rb +268 -0
  16. data/lib/vagrant-openstack-plugin/action/connect_openstack.rb +90 -0
  17. data/lib/vagrant-openstack-plugin/action/create_network_interfaces.rb +52 -0
  18. data/lib/vagrant-openstack-plugin/action/create_orchestration_stack.rb +97 -0
  19. data/lib/vagrant-openstack-plugin/action/create_server.rb +263 -0
  20. data/lib/vagrant-openstack-plugin/action/delete_orchestration_stack.rb +78 -0
  21. data/lib/vagrant-openstack-plugin/action/delete_server.rb +84 -0
  22. data/lib/vagrant-openstack-plugin/action/hard_reboot_server.rb +27 -0
  23. data/lib/vagrant-openstack-plugin/action/is_created.rb +16 -0
  24. data/lib/vagrant-openstack-plugin/action/is_paused.rb +16 -0
  25. data/lib/vagrant-openstack-plugin/action/is_snapshoting.rb +24 -0
  26. data/lib/vagrant-openstack-plugin/action/is_suspended.rb +16 -0
  27. data/lib/vagrant-openstack-plugin/action/message_already_created.rb +16 -0
  28. data/lib/vagrant-openstack-plugin/action/message_already_paused.rb +16 -0
  29. data/lib/vagrant-openstack-plugin/action/message_already_suspended.rb +16 -0
  30. data/lib/vagrant-openstack-plugin/action/message_not_created.rb +16 -0
  31. data/lib/vagrant-openstack-plugin/action/message_server_running.rb +16 -0
  32. data/lib/vagrant-openstack-plugin/action/message_snapshot_done.rb +16 -0
  33. data/lib/vagrant-openstack-plugin/action/message_snapshot_in_progress.rb +16 -0
  34. data/lib/vagrant-openstack-plugin/action/message_will_not_destroy.rb +16 -0
  35. data/lib/vagrant-openstack-plugin/action/pause_server.rb +27 -0
  36. data/lib/vagrant-openstack-plugin/action/read_ssh_info.rb +103 -0
  37. data/lib/vagrant-openstack-plugin/action/read_state.rb +39 -0
  38. data/lib/vagrant-openstack-plugin/action/reboot_server.rb +27 -0
  39. data/lib/vagrant-openstack-plugin/action/resume_server.rb +31 -0
  40. data/lib/vagrant-openstack-plugin/action/suspend_server.rb +27 -0
  41. data/lib/vagrant-openstack-plugin/action/sync_folders.rb +104 -0
  42. data/lib/vagrant-openstack-plugin/action/take_snapshot.rb +26 -0
  43. data/lib/vagrant-openstack-plugin/action/wait_for_state.rb +39 -0
  44. data/lib/vagrant-openstack-plugin/action/wait_for_task.rb +44 -0
  45. data/lib/vagrant-openstack-plugin/action/warn_networks.rb +19 -0
  46. data/lib/vagrant-openstack-plugin/command.rb +70 -0
  47. data/lib/vagrant-openstack-plugin/command/command_snapshot.rb +43 -0
  48. data/lib/vagrant-openstack-plugin/config.rb +246 -0
  49. data/lib/vagrant-openstack-plugin/errors.rb +71 -0
  50. data/lib/vagrant-openstack-plugin/plugin.rb +45 -0
  51. data/lib/vagrant-openstack-plugin/provider.rb +50 -0
  52. data/lib/vagrant-openstack-plugin/version.rb +5 -0
  53. data/locales/en.yml +154 -0
  54. data/spec/vagrant-openstack-plugin/config_spec.rb +152 -0
  55. data/vagrant-openstack-plugin.gemspec +24 -0
  56. metadata +142 -0
@@ -0,0 +1,246 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module OpenStack
5
+ class Config < Vagrant.plugin("2", :config)
6
+ # The API key to access OpenStack.
7
+ #
8
+ # @return [String]
9
+ attr_accessor :api_key
10
+
11
+ # The endpoint to access OpenStack. If nil, it will default
12
+ # to DFW.
13
+ #
14
+ # @return [String]
15
+ attr_accessor :endpoint
16
+
17
+ # The flavor of server to launch, either the ID or name. This
18
+ # can also be a regular expression to partially match a name.
19
+ attr_accessor :flavor
20
+
21
+ # The name or ID of the image to use. This can also be a regular
22
+ # expression to partially match a name.
23
+ attr_accessor :image
24
+
25
+ # The name of the server. This defaults to the name of the machine
26
+ # defined by Vagrant (via `config.vm.define`), but can be overriden
27
+ # here.
28
+ attr_accessor :server_name
29
+
30
+ # The username to access OpenStack.
31
+ #
32
+ # @return [String]
33
+ attr_accessor :username
34
+
35
+ # The name of the keypair to use.
36
+ #
37
+ # @return [String]
38
+ attr_accessor :keypair_name
39
+
40
+ # Network configurations for the instance
41
+ #
42
+ # @return [String]
43
+ attr_accessor :network
44
+
45
+ # @return [Array]
46
+ attr_accessor :networks
47
+
48
+ # A specific address identifier to use when connecting.
49
+ # Overrides `network` above if both are set.
50
+ #
51
+ attr_accessor :address_id
52
+
53
+ # Pass hints to the OpenStack scheduler, e.g. { "cell": "some cell name" }
54
+ attr_accessor :scheduler_hints
55
+
56
+ # Specify the availability zone in which to create the instance
57
+ attr_accessor :availability_zone
58
+
59
+ # List of strings representing the security groups to apply.
60
+ # e.g. ['ssh', 'http']
61
+ #
62
+ # @return [Array[String]]
63
+ attr_accessor :security_groups
64
+
65
+ # The SSH username to use with this OpenStack instance. This overrides
66
+ # the `config.ssh.username` variable.
67
+ #
68
+ # @return [String]
69
+ attr_accessor :ssh_username
70
+
71
+ # The IP address family that will be used to connect to the instance
72
+ #
73
+ # @return [String]
74
+ attr_accessor :ssh_ip_family
75
+
76
+ # A Hash of metadata that will be sent to the instance for configuration
77
+ #
78
+ # @return [Hash]
79
+ attr_accessor :metadata
80
+
81
+ # The tenant to use.
82
+ #
83
+ # @return [String]
84
+ attr_accessor :tenant
85
+
86
+ # User data to be sent to the newly created OpenStack instance. Use this
87
+ # e.g. to inject a script at boot time.
88
+ #
89
+ # @return [String]
90
+ attr_accessor :user_data
91
+
92
+ # The floating IP address from the IP pool which will be assigned to the instance.
93
+ #
94
+ # @return [String]
95
+ attr_accessor :floating_ip
96
+
97
+ # The floating IP pool from which IP addresses can be allocated
98
+ #
99
+ # @return [String]
100
+ attr_accessor :floating_ip_pool
101
+
102
+ # The region to specify when the OpenStack cloud has multiple regions
103
+ #
104
+ # @return [String]
105
+ attr_accessor :region
106
+
107
+ # The region to specify when the OpenStack cloud has multiple regions
108
+ #
109
+ # @return [String]
110
+ attr_accessor :project_name
111
+
112
+ # The region to specify when the OpenStack cloud has multiple regions
113
+ #
114
+ # @return [String]
115
+ attr_accessor :project_domain
116
+
117
+ # The region to specify when the OpenStack cloud has multiple regions
118
+ #
119
+ # @return [String]
120
+ attr_accessor :user_domain
121
+
122
+ # The proxy to specify when making connection to OpenStack API.
123
+ #
124
+ # @return [String]
125
+ attr_accessor :proxy
126
+
127
+ # The disks to create as OpenStack volumes.
128
+ #
129
+ # @return [Array]
130
+ attr_accessor :disks
131
+
132
+ # Value for SSL_VERIFY_PEER, defaults to true. Set to false for self
133
+ # signed ssl certificate
134
+ attr_accessor :ssl_verify_peer
135
+
136
+ # Heat orchestration configuration parameters.
137
+ attr_accessor :orchestration_stack_name
138
+ attr_accessor :orchestration_stack_destroy
139
+ attr_accessor :orchestration_cfn_template
140
+ attr_accessor :orchestration_cfn_template_file
141
+ attr_accessor :orchestration_cfn_template_url
142
+ attr_accessor :orchestration_cfn_template_parameters
143
+
144
+ def initialize
145
+ @api_key = UNSET_VALUE
146
+ @endpoint = UNSET_VALUE
147
+ @flavor = UNSET_VALUE
148
+ @image = UNSET_VALUE
149
+ @server_name = UNSET_VALUE
150
+ @metatdata = UNSET_VALUE
151
+ @username = UNSET_VALUE
152
+ @keypair_name = UNSET_VALUE
153
+ @network = UNSET_VALUE
154
+ @networks = UNSET_VALUE
155
+ @address_id = UNSET_VALUE
156
+ @scheduler_hints = UNSET_VALUE
157
+ @availability_zone = UNSET_VALUE
158
+ @security_groups = UNSET_VALUE
159
+ @ssh_username = UNSET_VALUE
160
+ @ssh_ip_family = UNSET_VALUE
161
+ @tenant = UNSET_VALUE
162
+ @user_data = UNSET_VALUE
163
+ @floating_ip = UNSET_VALUE
164
+ @floating_ip_pool = UNSET_VALUE
165
+ @region = UNSET_VALUE
166
+ @project_name = UNSET_VALUE
167
+ @project_domain = UNSET_VALUE
168
+ @user_domain = UNSET_VALUE
169
+ @proxy = UNSET_VALUE
170
+ @ssl_verify_peer = UNSET_VALUE
171
+ @disks = UNSET_VALUE
172
+ @orchestration_stack_name = UNSET_VALUE
173
+ @orchestration_stack_destroy = UNSET_VALUE
174
+ @orchestration_cfn_template = UNSET_VALUE
175
+ @orchestration_cfn_template_file = UNSET_VALUE
176
+ @orchestration_cfn_template_url = UNSET_VALUE
177
+ @orchestration_cfn_template_parameters = UNSET_VALUE
178
+ end
179
+
180
+ def finalize!
181
+ @api_key = nil if @api_key == UNSET_VALUE
182
+ @endpoint = nil if @endpoint == UNSET_VALUE
183
+ @flavor = /m1.tiny/ if @flavor == UNSET_VALUE
184
+ @image = /cirros/ if @image == UNSET_VALUE
185
+ @server_name = nil if @server_name == UNSET_VALUE
186
+ @metadata = nil if @metadata == UNSET_VALUE
187
+ @username = nil if @username == UNSET_VALUE
188
+ @network = nil if @network == UNSET_VALUE
189
+ @networks = nil if @networks == UNSET_VALUE
190
+ @address_id = 'public' if @address_id == UNSET_VALUE
191
+
192
+ # Keypair defaults to nil
193
+ @keypair_name = nil if @keypair_name == UNSET_VALUE
194
+
195
+ @scheduler_hints = nil if @scheduler_hints == UNSET_VALUE
196
+ @availability_zone = nil if @availability_zone == UNSET_VALUE
197
+ @security_groups = nil if @security_groups == UNSET_VALUE
198
+
199
+ # The SSH values by default are nil, and the top-level config
200
+ # `config.ssh` values are used.
201
+ @ssh_username = nil if @ssh_username == UNSET_VALUE
202
+ @ssh_ip_family = nil if @ssh_ip_family == UNSET_VALUE
203
+
204
+ @tenant = nil if @tenant == UNSET_VALUE
205
+ @user_data = "" if @user_data == UNSET_VALUE
206
+ @floating_ip = nil if @floating_ip == UNSET_VALUE
207
+ @floating_ip_pool = nil if @floating_ip_pool == UNSET_VALUE
208
+
209
+ @region = nil if @region == UNSET_VALUE
210
+ @project_name = nil if @project_name == UNSET_VALUE
211
+ @project_domain = nil if @project_domain == UNSET_VALUE
212
+ @user_domain = nil if @user_domain == UNSET_VALUE
213
+
214
+ @disks = nil if @disks == UNSET_VALUE
215
+
216
+ @region = nil if @region == UNSET_VALUE
217
+ @proxy = nil if @proxy == UNSET_VALUE
218
+ @ssl_verify_peer = nil if @ssl_verify_peer == UNSET_VALUE
219
+
220
+ @orchestration_stack_name = nil if @orchestration_stack_name == UNSET_VALUE
221
+ @orchestration_stack_destroy = false if @orchestration_stack_destroy == UNSET_VALUE
222
+ @orchestration_cfn_template = nil if @orchestration_cfn_template == UNSET_VALUE
223
+ @orchestration_cfn_template_file = nil if @orchestration_cfn_template_file == UNSET_VALUE
224
+ @orchestration_cfn_template_url = nil if @orchestration_cfn_template_url == UNSET_VALUE
225
+ @orchestration_cfn_template_parameters = nil if @orchestration_cfn_template_parameters == UNSET_VALUE
226
+ end
227
+
228
+ def validate(machine)
229
+ errors = []
230
+
231
+ errors << I18n.t("vagrant_openstack.config.api_key_required") if !@api_key
232
+ errors << I18n.t("vagrant_openstack.config.username_required") if !@username
233
+
234
+ if @disks and @disks.any?{|a| not a.respond_to?("include?")}
235
+ errors << I18n.t("vagrant_openstack.config.disks.specification_required")
236
+ elsif @disks
237
+ errors << I18n.t("vagrant_openstack.config.disks.name_required") if @disks.any?{|a| not a.include?("name")}
238
+ errors << I18n.t("vagrant_openstack.config.disks.description_required") if @disks.any?{|a| not a.include?("description")}
239
+ errors << I18n.t("vagrant_openstack.config.disks.size_required") if @disks.any?{|a| not a.include?("size")}
240
+ end
241
+
242
+ { "OpenStack Provider" => errors }
243
+ end
244
+ end
245
+ end
246
+ end
@@ -0,0 +1,71 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module OpenStack
5
+ module Errors
6
+ class VagrantOpenStackError < Vagrant::Errors::VagrantError
7
+ error_namespace("vagrant_openstack.errors")
8
+ end
9
+
10
+ class VolumeBadState < VagrantOpenStackError
11
+ error_key(:volume_bad_state)
12
+ end
13
+
14
+ class CreateBadState < VagrantOpenStackError
15
+ error_key(:create_bad_state)
16
+ end
17
+
18
+ class NoMatchingFlavor < VagrantOpenStackError
19
+ error_key(:no_matching_flavor)
20
+ end
21
+
22
+ class NoMatchingImage < VagrantOpenStackError
23
+ error_key(:no_matching_image)
24
+ end
25
+
26
+ class RsyncError < VagrantOpenStackError
27
+ error_key(:rsync_error)
28
+ end
29
+
30
+ class SSHNoValidHost < VagrantOpenStackError
31
+ error_key(:ssh_no_valid_host)
32
+ end
33
+
34
+ class FloatingIPNotValid < VagrantOpenStackError
35
+ error_key(:floating_ip_not_valid)
36
+ end
37
+
38
+ class FloatingIPNotFound < VagrantOpenStackError
39
+ error_key(:floating_ip_not_found)
40
+ end
41
+
42
+ class FloatingIPNotAllocated < VagrantOpenStackError
43
+ error_key(:floating_ip_not_allocated)
44
+ end
45
+
46
+ class FloatingUnassignedIPNotFound < VagrantOpenStackError
47
+ error_key(:floating_unassigned_ip_not_found)
48
+ end
49
+
50
+ class FloatingIPFailedAssociate < VagrantOpenStackError
51
+ error_key(:floating_ip_failed_associate)
52
+ end
53
+
54
+ class FloatingUnassignedRequiresPool < VagrantOpenStackError
55
+ error_key(:floating_unassigned_requires_pool)
56
+ end
57
+
58
+ class OrchestrationTemplateError < VagrantOpenStackError
59
+ error_key(:orchestration_template_error)
60
+ end
61
+
62
+ class OrchestrationNoTemplateFileError < VagrantOpenStackError
63
+ error_key(:orchestration_no_template_file_error)
64
+ end
65
+
66
+ class ServerNotDestroyed < VagrantOpenStackError
67
+ error_key(:server_not_destroyed)
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,45 @@
1
+ begin
2
+ require "vagrant"
3
+ rescue LoadError
4
+ raise "The OpenStack Cloud provider must be run within Vagrant."
5
+ end
6
+
7
+ # This is a sanity check to make sure no one is attempting to install
8
+ # this into an early Vagrant version.
9
+ if Vagrant::VERSION < "1.1.0"
10
+ raise "OpenStack Cloud provider is only compatible with Vagrant 1.1+"
11
+ end
12
+
13
+ module VagrantPlugins
14
+ module OpenStack
15
+ module Action
16
+ class Plugin < Vagrant.plugin("2")
17
+ name "OpenStack Cloud"
18
+ description <<-DESC
19
+ This plugin enables Vagrant to manage machines in OpenStack Cloud.
20
+ DESC
21
+
22
+ config(:openstack, :provider) do
23
+ require_relative "config"
24
+ Config
25
+ end
26
+
27
+ provider(:openstack, parallel: true) do
28
+ # Setup some things
29
+ OpenStack.init_i18n
30
+ OpenStack.init_logging
31
+
32
+ # Load the actual provider
33
+ require_relative "provider"
34
+ Provider
35
+ end
36
+
37
+ command "openstack" do
38
+ require_relative "command"
39
+ Command
40
+ end
41
+
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,50 @@
1
+ require "vagrant"
2
+
3
+ require "vagrant-openstack-plugin/action"
4
+
5
+ module VagrantPlugins
6
+ module OpenStack
7
+ class Provider < Vagrant.plugin("2", :provider)
8
+ def initialize(machine)
9
+ @machine = machine
10
+ end
11
+
12
+ def action(name)
13
+ # Attempt to get the action method from the Action class if it
14
+ # exists, otherwise return nil to show that we don't support the
15
+ # given action.
16
+ action_method = "action_#{name}"
17
+ return Action.send(action_method) if Action.respond_to?(action_method)
18
+ nil
19
+ end
20
+
21
+ def ssh_info
22
+ # Run a custom action called "read_ssh_info" which does what it
23
+ # says and puts the resulting SSH info into the `:machine_ssh_info`
24
+ # key in the environment.
25
+ env = @machine.action("read_ssh_info")
26
+ env[:machine_ssh_info]
27
+ end
28
+
29
+ def state
30
+ # Run a custom action we define called "read_state" which does
31
+ # what it says. It puts the state in the `:machine_state_id`
32
+ # key in the environment.
33
+ env = @machine.action("read_state")
34
+
35
+ state_id = env[:machine_state_id]
36
+
37
+ # Get the short and long description
38
+ short = I18n.t("vagrant_openstack.states.short_#{state_id}")
39
+ long = I18n.t("vagrant_openstack.states.long_#{state_id}")
40
+
41
+ # Return the MachineState object
42
+ Vagrant::MachineState.new(state_id, short, long)
43
+ end
44
+
45
+ def to_s
46
+ "OpenStack Cloud"
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,5 @@
1
+ module VagrantPlugins
2
+ module OpenStack
3
+ VERSION = '0.12.0'
4
+ end
5
+ end
data/locales/en.yml ADDED
@@ -0,0 +1,154 @@
1
+ en:
2
+ vagrant_openstack:
3
+ already_created: |-
4
+ The server is already created.
5
+ already_paused: |-
6
+ The server is already paused.
7
+ already_suspended: |-
8
+ The server is already suspended.
9
+ creating_disks: |-
10
+ Creating disks with the folowing settings...
11
+ deleting_server: |-
12
+ Deleting server...
13
+ deleting_volumes: |-
14
+ Deleting volumes...
15
+ finding_flavor: |-
16
+ Finding flavor for server...
17
+ finding_image: |-
18
+ Finding image for server...
19
+ finding_network: |-
20
+ Finding network for server...
21
+ hard_rebooting_server: |-
22
+ Hard rebooting server instance.
23
+ launching_server: |-
24
+ Launching a server with the following settings...
25
+ not_created: |-
26
+ The server hasn't been created yet. Run `vagrant up` first.
27
+ pausing_server: |-
28
+ The server instance has been paused.
29
+ ready: |-
30
+ The server is ready!
31
+ rebooting_server: |-
32
+ This server instance is rebooting!
33
+ snapshoting_server: |-
34
+ This server instance is snapshoting!
35
+ snapshot_done: |-
36
+ Snapshot is ok
37
+ snapshot_in_progress: |-
38
+ Snapshot is in progress
39
+ resuming_server: |-
40
+ The server instance has been resumed.
41
+ rsync_folder: |-
42
+ Rsyncing folder: %{hostpath} => %{guestpath}
43
+ server_running: |-
44
+ The instance '%{name}' is already running!
45
+ suspending_server: |-
46
+ The server instance has been suspended!
47
+ waiting_for_build: |-
48
+ Waiting for the server to be built...
49
+ waiting_for_ssh: |-
50
+ Waiting for SSH to become available...
51
+ warn_networks: |-
52
+ Warning! The OpenStack provider doesn't support any of the Vagrant
53
+ high-level network configurations (`config.vm.network`). They
54
+ will be silently ignored.
55
+ will_not_destroy: |-
56
+ The instance '%{name}' will not be destroyed, since the confirmation
57
+ was declined.
58
+ creating_orchestration_stack: |-
59
+ Creating orchestration stack...
60
+ deleting_orchestration_stacks: |-
61
+ Deleting orchestration stacks...
62
+ config:
63
+ api_key_required: |-
64
+ An API key is required.
65
+ username_required: |-
66
+ A username is required.
67
+ metadata_must_be_hash: |-
68
+ Metadata must be a hash.
69
+ disks:
70
+ specification_required: |-
71
+ A disk specification is required for a disk configuration (array of hashes including name, description and size keys).
72
+ name_required: |-
73
+ A disk name is required for all disk specifications.
74
+ description_required: |-
75
+ A disk description is required for all disk specifications.
76
+ size_required: |-
77
+ A disk size is required for all disk specifications.
78
+
79
+ errors:
80
+ volume_bad_state: |-
81
+ The OpenStack volume '%{volume}' requested is in an unexpected state:
82
+ '%{state}'
83
+ Please run `vagrant destroy` if you want to start over.
84
+ create_bad_state: |-
85
+ While creating the server, it transitioned to an unexpected
86
+ state: '%{state}', instead of properly booting. Run `vagrant status`
87
+ to find out what can be done about this state, or `vagrant destroy`
88
+ if you want to start over.
89
+ no_matching_flavor: |-
90
+ No matching flavor was found! Please check your flavor setting
91
+ to make sure you have a valid flavor chosen.
92
+ no_matching_image: |-
93
+ No matching image was found! Please check your image setting to
94
+ make sure you have a valid image chosen.
95
+ rsync_error: |-
96
+ There was an error when attemping to rsync a share folder.
97
+ Please inspect the error message below for more info.
98
+
99
+ Host path: %{hostpath}
100
+ Guest path: %{guestpath}
101
+ Error: %{stderr}
102
+ ssh_no_valid_host: |-
103
+ Unable to determine what host to connect to. Run `vagrant up` in
104
+ debug mode to see a list of networks available to your tenant.
105
+ Then set either `os.network` or `os.address_id` to one of the
106
+ network names.
107
+ floating_ip_not_valid: |-
108
+ The floating IP specified in the Vagrantfile does not match an
109
+ available public IP address returned by OpenStack.
110
+ floating_ip_not_found: |-
111
+ A floating IP could not be allocated, as no available floating
112
+ IPs were found in OpenStack
113
+ floating_ip_not_allocated: |-
114
+ A floating IP could not be allocated from the pool.
115
+ floating_unassigned_ip_not_found: |-
116
+ An unassigned floating IP could not be found in the specified pool.
117
+ floating_ip_failed_associate: |-
118
+ The selected IP failed to associate
119
+ floating_unassigned_requires_pool: |-
120
+ You must specifiy a pool in floating_ip_pool when using associate_unassigned
121
+ orchestration_template_error: |-
122
+ There was an error while reading orchestration template.
123
+ Error: %{err}
124
+ orchestration_no_template_file_error: |-
125
+ Orchestration template file not found (%{fname}).
126
+ server_not_destroyed: |-
127
+ OpenStack server was not fully destroyed.
128
+
129
+ states:
130
+ short_active: |-
131
+ active
132
+ long_active: |-
133
+ The server is up and running. Run `vagrant ssh` to access it.
134
+ short_build: |-
135
+ building
136
+ short_suspended: |-
137
+ suspended
138
+ short_paused: |-
139
+ paused
140
+ short_shutoff: |-
141
+ shutdown
142
+ long_build: |-
143
+ The server is currently being built. You must wait for this to
144
+ complete before you can access it. You can delete the server, however,
145
+ by running `vagrant destroy`.
146
+ short_error: |-
147
+ error
148
+ long_error: |-
149
+ The server is in an erroneous state. Destroy the machine with
150
+ `vagrant destroy`.
151
+ short_not_created: |-
152
+ not created
153
+ long_not_created: |-
154
+ The server is not created. Run `vagrant up` to create it.