vagrant-openstack-provider 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +13 -5
  2. data/.rubocop.yml +28 -0
  3. data/Appraisals +3 -3
  4. data/CHANGELOG.md +4 -0
  5. data/Gemfile +3 -0
  6. data/Rakefile +6 -2
  7. data/Vagrantfile +4 -15
  8. data/gemfiles/latest_stable.gemfile +2 -0
  9. data/gemfiles/oldest_current.gemfile +2 -0
  10. data/gemfiles/previous_release.gemfile +2 -0
  11. data/lib/vagrant-openstack-provider.rb +18 -13
  12. data/lib/vagrant-openstack-provider/action.rb +112 -46
  13. data/lib/vagrant-openstack-provider/action/connect_openstack.rb +9 -10
  14. data/lib/vagrant-openstack-provider/action/create_server.rb +86 -57
  15. data/lib/vagrant-openstack-provider/action/delete_server.rb +5 -6
  16. data/lib/vagrant-openstack-provider/action/{is_created.rb → message.rb} +4 -3
  17. data/lib/vagrant-openstack-provider/action/read_ssh_info.rb +7 -27
  18. data/lib/vagrant-openstack-provider/action/read_state.rb +7 -9
  19. data/lib/vagrant-openstack-provider/action/resume.rb +20 -0
  20. data/lib/vagrant-openstack-provider/action/start_server.rb +22 -0
  21. data/lib/vagrant-openstack-provider/action/stop_server.rb +22 -0
  22. data/lib/vagrant-openstack-provider/action/suspend.rb +20 -0
  23. data/lib/vagrant-openstack-provider/action/sync_folders.rb +27 -38
  24. data/lib/vagrant-openstack-provider/action/wait_stop.rb +29 -0
  25. data/lib/vagrant-openstack-provider/client/keystone.rb +76 -0
  26. data/lib/vagrant-openstack-provider/client/neutron.rb +32 -0
  27. data/lib/vagrant-openstack-provider/client/nova.rb +166 -0
  28. data/lib/vagrant-openstack-provider/client/openstack.rb +41 -0
  29. data/lib/vagrant-openstack-provider/client/utils.rb +38 -0
  30. data/lib/vagrant-openstack-provider/config.rb +38 -110
  31. data/lib/vagrant-openstack-provider/errors.rb +7 -3
  32. data/lib/vagrant-openstack-provider/plugin.rb +8 -8
  33. data/lib/vagrant-openstack-provider/provider.rb +6 -6
  34. data/lib/vagrant-openstack-provider/version.rb +1 -1
  35. data/locales/en.yml +83 -5
  36. data/numergyrc +22 -0
  37. data/spec/vagrant-openstack-provider/action/create_server_spec.rb +89 -0
  38. data/spec/vagrant-openstack-provider/client/keystone_spec.rb +140 -0
  39. data/spec/vagrant-openstack-provider/client/neutron_spec.rb +53 -0
  40. data/spec/vagrant-openstack-provider/client/nova_spec.rb +373 -0
  41. data/spec/vagrant-openstack-provider/client/utils_spec.rb +125 -0
  42. data/spec/vagrant-openstack-provider/config_spec.rb +117 -0
  43. data/spec/vagrant-openstack-provider/provider_spec.rb +13 -0
  44. data/spec/vagrant-openstack-provider/spec_helper.rb +23 -0
  45. data/vagrant-openstack-provider.gemspec +13 -14
  46. metadata +40 -30
  47. data/features/provision.feature +0 -35
  48. data/features/steps/sdk_steps.rb +0 -13
  49. data/features/steps/server_steps.rb +0 -25
  50. data/features/support/env.rb +0 -37
  51. data/features/support/fog_mock.rb +0 -19
  52. data/features/vagrant-openstack-provider.feature +0 -70
  53. data/lib/vagrant-openstack-provider/action/message_already_created.rb +0 -16
  54. data/lib/vagrant-openstack-provider/action/message_not_created.rb +0 -16
  55. data/lib/vagrant-openstack-provider/openstack_client.rb +0 -98
  56. data/spec/vagrant-openstack/config_spec.rb +0 -184
  57. data/stackrc +0 -31
@@ -0,0 +1,41 @@
1
+ require 'log4r'
2
+ require 'restclient'
3
+ require 'json'
4
+
5
+ require 'vagrant-openstack-provider/client/keystone'
6
+ require 'vagrant-openstack-provider/client/nova'
7
+ require 'vagrant-openstack-provider/client/neutron'
8
+
9
+ module VagrantPlugins
10
+ module Openstack
11
+ class Session
12
+ include Singleton
13
+
14
+ attr_accessor :token
15
+ attr_accessor :project_id
16
+ attr_accessor :endpoints
17
+
18
+ def initialize
19
+ @token = nil
20
+ @project_id = nil
21
+ @endpoints = {}
22
+ end
23
+ end
24
+
25
+ def self.session
26
+ Session.instance
27
+ end
28
+
29
+ def self.keystone
30
+ Openstack::KeystoneClient.instance
31
+ end
32
+
33
+ def self.nova
34
+ Openstack::NovaClient.instance
35
+ end
36
+
37
+ def self.neutron
38
+ Openstack::NeutronClient.instance
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,38 @@
1
+ require 'log4r'
2
+ require 'restclient'
3
+ require 'json'
4
+
5
+ require 'vagrant-openstack-provider/client/keystone'
6
+
7
+ module VagrantPlugins
8
+ module Openstack
9
+ module Utils
10
+ def handle_response(response)
11
+ case response.code
12
+ when 200, 201, 202, 204
13
+ response
14
+ when 401
15
+ fail Errors::AuthenticationRequired
16
+ when 400
17
+ fail Errors::VagrantOpenstackError, message: JSON.parse(response.to_s)['badRequest']['message']
18
+ else
19
+ fail Errors::VagrantOpenstackError, message: response.to_s
20
+ end
21
+ end
22
+
23
+ def authenticated(env)
24
+ nb_retry = 0
25
+ begin
26
+ return yield
27
+ rescue Errors::AuthenticationRequired => e
28
+ nb_retry += 1
29
+ env[:ui].warn(e)
30
+ env[:ui].warn(I18n.t('vagrant_openstack.trying_authentication'))
31
+ env[:openstack_client].keystone.authenticate(env)
32
+ retry if nb_retry < 3
33
+ raise e
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,48 +1,24 @@
1
- require "vagrant"
1
+ require 'vagrant'
2
2
 
3
3
  module VagrantPlugins
4
4
  module Openstack
5
- class Config < Vagrant.plugin("2", :config)
5
+ class Config < Vagrant.plugin('2', :config)
6
6
  # The API key to access Openstack.
7
7
  #
8
- # @return [String]
9
- attr_accessor :api_key
10
-
11
- # The region to access Openstack. If nil, it will default
12
- # to DFW.
13
- # (formerly know as 'endpoint')
14
- #
15
- # expected to be a symbol - :dfw (default), :ord, :lon
16
- #
17
- # Users should preference the openstack_region setting over openstack_compute_url
18
- attr_accessor :openstack_region
8
+ attr_accessor :password
19
9
 
20
- # The compute_url to access Openstack. If nil, it will default
21
- # to DFW.
22
- # (formerly know as 'endpoint')
10
+ # The compute service url to access Openstack. If nil, it will read from
11
+ # hypermedia catalog form REST API
23
12
  #
24
- # expected to be a string url -
25
- # 'https://dfw.servers.api.openstackcloud.com/v2'
26
- # 'https://ord.servers.api.openstackcloud.com/v2'
27
- # 'https://lon.servers.api.openstackcloud.com/v2'
28
- #
29
- # alternatively, can use constants if you require 'fog/openstack' in your Vagrantfile
30
- # Fog::Compute::OpenstackV2::DFW_ENDPOINT
31
- # Fog::Compute::OpenstackV2::ORD_ENDPOINT
32
- # Fog::Compute::OpenstackV2::LON_ENDPOINT
33
- #
34
- # Users should preference the openstack_region setting over openstack_compute_url
35
13
  attr_accessor :openstack_compute_url
36
14
 
37
- # The authenication endpoint. This defaults to Openstack's global authentication endpoint.
38
- # Users of the London data center should specify the following:
39
- # https://lon.identity.api.openstackcloud.com/v2.0
40
- attr_writer :openstack_auth_url
41
-
42
- # Network configurations for the instance
15
+ # The network service url to access Openstack. If nil, it will read from
16
+ # hypermedia catalog form REST API
43
17
  #
44
- # @return [String]
45
- attr_accessor :network
18
+ attr_accessor :openstack_network_url
19
+
20
+ # The authentication endpoint. This defaults to Openstack's global authentication endpoint.
21
+ attr_accessor :openstack_auth_url
46
22
 
47
23
  # The flavor of server to launch, either the ID or name. This
48
24
  # can also be a regular expression to partially match a name.
@@ -52,22 +28,6 @@ module VagrantPlugins
52
28
  # expression to partially match a name.
53
29
  attr_accessor :image
54
30
 
55
- # Alternately, if a keypair were already uploaded to Openstack,
56
- # the key name could be provided.
57
- #
58
- # @return [String]
59
- attr_accessor :key_name
60
-
61
- # A Hash of metadata that will be sent to the instance for configuration
62
- #
63
- # @return [Hash]
64
- attr_accessor :metadata
65
-
66
- # The option that indicates RackConnect usage or not.
67
- #
68
- # @return [Boolean]
69
- attr_accessor :rackconnect
70
-
71
31
  #
72
32
  # The name of the openstack project on witch the vm will be created.
73
33
  #
@@ -78,9 +38,6 @@ module VagrantPlugins
78
38
  # here.
79
39
  attr_accessor :server_name
80
40
 
81
- # Specify the availability zone in which to create the instance
82
- attr_accessor :availability_zone
83
-
84
41
  # The username to access Openstack.
85
42
  #
86
43
  # @return [String]
@@ -103,18 +60,6 @@ module VagrantPlugins
103
60
  # @return [Integer]
104
61
  attr_accessor :ssh_timeout
105
62
 
106
- # The disk configuration value.
107
- # * AUTO - The server is built with a single partition the size of the target flavor disk. The file system is automatically adjusted to fit the entire partition.
108
- # This keeps things simple and automated. AUTO is valid only for images and servers with a single partition that use the EXT3 file system.
109
- # This is the default setting for applicable Openstack base images.
110
- #
111
- # * MANUAL - The server is built using whatever partition scheme and file system is in the source image. If the target flavor disk is larger,
112
- # the remaining disk space is left unpartitioned. This enables images to have non-EXT3 file systems, multiple partitions,
113
- # and so on, and enables you to manage the disk configuration.
114
- #
115
- # This defaults to MANUAL
116
- attr_accessor :disk_config
117
-
118
63
  # Opt files/directories in to the rsync operation performed by this provider
119
64
  #
120
65
  # @return [Array]
@@ -130,96 +75,79 @@ module VagrantPlugins
130
75
  # @return [String]
131
76
  attr_accessor :sync_method
132
77
 
78
+ # Network list the VM will be connected to
79
+ #
80
+ # @return [Array]
81
+ attr_accessor :networks
82
+
133
83
  def initialize
134
- @api_key = UNSET_VALUE
135
- @openstack_region = UNSET_VALUE
84
+ @password = UNSET_VALUE
136
85
  @openstack_compute_url = UNSET_VALUE
86
+ @openstack_network_url = UNSET_VALUE
137
87
  @openstack_auth_url = UNSET_VALUE
138
88
  @flavor = UNSET_VALUE
139
89
  @image = UNSET_VALUE
140
- @rackconnect = UNSET_VALUE
141
- @availability_zone = UNSET_VALUE
142
90
  @tenant_name = UNSET_VALUE
143
91
  @server_name = UNSET_VALUE
144
92
  @username = UNSET_VALUE
145
- @disk_config = UNSET_VALUE
146
- @network = UNSET_VALUE
147
93
  @rsync_includes = []
148
94
  @keypair_name = UNSET_VALUE
149
95
  @ssh_username = UNSET_VALUE
150
96
  @ssh_timeout = UNSET_VALUE
151
97
  @floating_ip = UNSET_VALUE
152
98
  @sync_method = UNSET_VALUE
99
+ @networks = []
153
100
  end
154
101
 
102
+ # rubocop:disable Style/CyclomaticComplexity
155
103
  def finalize!
156
- @api_key = nil if @api_key == UNSET_VALUE
157
- @openstack_region = nil if @openstack_region == UNSET_VALUE
104
+ @password = nil if @password == UNSET_VALUE
158
105
  @openstack_compute_url = nil if @openstack_compute_url == UNSET_VALUE
106
+ @openstack_network_url = nil if @openstack_network_url == UNSET_VALUE
159
107
  @openstack_auth_url = nil if @openstack_auth_url == UNSET_VALUE
160
- @flavor = /m1.tiny/ if @flavor == UNSET_VALUE # TODO No default value
161
- @image = /cirros/ if @image == UNSET_VALUE # TODO No default value
162
- @rackconnect = nil if @rackconnect == UNSET_VALUE
163
- @availability_zone = nil if @availability_zone == UNSET_VALUE
108
+ @flavor = nil if @flavor == UNSET_VALUE
109
+ @image = nil if @image == UNSET_VALUE
164
110
  @tenant_name = nil if @tenant_name == UNSET_VALUE
165
111
  @server_name = nil if @server_name == UNSET_VALUE
166
- @metadata = nil if @metadata == UNSET_VALUE
167
- @network = nil if @network == UNSET_VALUE
168
112
  @username = nil if @username == UNSET_VALUE
169
- @disk_config = nil if @disk_config == UNSET_VALUE
170
113
  @rsync_includes = nil if @rsync_includes.empty?
171
114
  @floating_ip = nil if @floating_ip == UNSET_VALUE
172
- @sync_method = "rsync" if @sync_method == UNSET_VALUE
173
-
174
- # Keypair defaults to nil
115
+ @sync_method = 'rsync' if @sync_method == UNSET_VALUE
175
116
  @keypair_name = nil if @keypair_name == UNSET_VALUE
176
117
 
177
118
  # The SSH values by default are nil, and the top-level config
178
119
  # `config.ssh` values are used.
179
120
  @ssh_username = nil if @ssh_username == UNSET_VALUE
180
- @ssh_timeout = 60 if @ssh_timeout == UNSET_VALUE
181
- end
182
-
183
- # @note Currently, you must authenticate against the UK authenication endpoint to access the London Data center.
184
- # Hopefully this method makes the experience more seemless for users of the UK cloud.
185
- def openstack_auth_url
186
- if (@openstack_auth_url.nil? || @openstack_auth_url == UNSET_VALUE) && lon_region?
187
- Fog::Openstack::UK_AUTH_ENDPOINT
188
- else
189
- @openstack_auth_url
190
- end
121
+ @ssh_timeout = 180 if @ssh_timeout == UNSET_VALUE
122
+ @networks = nil if @networks.empty?
191
123
  end
124
+ # rubocop:enable Style/CyclomaticComplexity
192
125
 
193
126
  def rsync_include(inc)
194
127
  @rsync_includes << inc
195
128
  end
196
129
 
197
- def validate(machine)
130
+ def validate(_machine)
198
131
  errors = _detected_errors
199
132
 
200
- errors << I18n.t("vagrant_openstack.config.api_key required") if !@api_key
201
- errors << I18n.t("vagrant_openstack.config.username required") if !@username
202
- errors << I18n.t("vagrant_openstack.config.keypair_name required") if !@keypair_name
133
+ errors << I18n.t('vagrant_openstack.config.password_required') unless @password
134
+ errors << I18n.t('vagrant_openstack.config.username_required') unless @username
135
+ errors << I18n.t('vagrant_openstack.config.keypair_name_required') unless @keypair_name
203
136
 
204
137
  {
205
- :openstack_compute_url => @openstack_compute_url,
206
- :openstack_auth_url => @openstack_auth_url
138
+ openstack_compute_url: @openstack_compute_url,
139
+ openstack_network_url: @openstack_network_url,
140
+ openstack_auth_url: @openstack_auth_url
207
141
  }.each_pair do |key, value|
208
- errors << I18n.t("vagrant_openstack.config.invalid_uri", :key => key, :uri => value) unless value.nil? || valid_uri?(value)
142
+ errors << I18n.t('vagrant_openstack.config.invalid_uri', key: key, uri: value) unless value.nil? || valid_uri?(value)
209
143
  end
210
144
 
211
- { "Openstack Provider" => errors }
212
- end
213
-
214
- private
215
-
216
- def lon_region?
217
- openstack_region && openstack_region != UNSET_VALUE && openstack_region.to_sym == :lon
145
+ { 'Openstack Provider' => errors }
218
146
  end
219
147
 
220
148
  private
221
149
 
222
- def valid_uri? value
150
+ def valid_uri?(value)
223
151
  uri = URI.parse value
224
152
  uri.kind_of?(URI::HTTP)
225
153
  end
@@ -1,10 +1,15 @@
1
- require "vagrant"
1
+ require 'vagrant'
2
2
 
3
3
  module VagrantPlugins
4
4
  module Openstack
5
5
  module Errors
6
6
  class VagrantOpenstackError < Vagrant::Errors::VagrantError
7
- error_namespace("vagrant_openstack.errors")
7
+ error_namespace('vagrant_openstack.errors')
8
+ error_key(:default)
9
+ end
10
+
11
+ class AuthenticationRequired < VagrantOpenstackError
12
+ error_key(:authentication_required)
8
13
  end
9
14
 
10
15
  class CreateBadState < VagrantOpenstackError
@@ -30,7 +35,6 @@ module VagrantPlugins
30
35
  class SshUnavailable < VagrantOpenstackError
31
36
  error_key(:ssh_unavailble)
32
37
  end
33
-
34
38
  end
35
39
  end
36
40
  end
@@ -1,25 +1,25 @@
1
1
  begin
2
- require "vagrant"
2
+ require 'vagrant'
3
3
  rescue LoadError
4
- raise "The Openstack Cloud provider must be run within Vagrant."
4
+ raise 'The Openstack Cloud provider must be run within Vagrant.'
5
5
  end
6
6
 
7
7
  # This is a sanity check to make sure no one is attempting to install
8
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+"
9
+ if Vagrant::VERSION < '1.1.0'
10
+ fail 'Openstack Cloud provider is only compatible with Vagrant 1.1+'
11
11
  end
12
12
 
13
13
  module VagrantPlugins
14
14
  module Openstack
15
- class Plugin < Vagrant.plugin("2")
16
- name "Openstack Cloud"
15
+ class Plugin < Vagrant.plugin('2')
16
+ name 'Openstack Cloud'
17
17
  description <<-DESC
18
18
  This plugin enables Vagrant to manage machines in Openstack Cloud.
19
19
  DESC
20
20
 
21
21
  config(:openstack, :provider) do
22
- require_relative "config"
22
+ require_relative 'config'
23
23
  Config
24
24
  end
25
25
 
@@ -29,7 +29,7 @@ module VagrantPlugins
29
29
  Openstack.init_logging
30
30
 
31
31
  # Load the actual provider
32
- require_relative "provider"
32
+ require_relative 'provider'
33
33
  Provider
34
34
  end
35
35
  end
@@ -1,10 +1,10 @@
1
- require "vagrant"
1
+ require 'vagrant'
2
2
 
3
- require "vagrant-openstack-provider/action"
3
+ require 'vagrant-openstack-provider/action'
4
4
 
5
5
  module VagrantPlugins
6
6
  module Openstack
7
- class Provider < Vagrant.plugin("2", :provider)
7
+ class Provider < Vagrant.plugin('2', :provider)
8
8
  def initialize(machine)
9
9
  @machine = machine
10
10
  end
@@ -22,7 +22,7 @@ module VagrantPlugins
22
22
  # Run a custom action called "read_ssh_info" which does what it
23
23
  # says and puts the resulting SSH info into the `:machine_ssh_info`
24
24
  # key in the environment.
25
- env = @machine.action("read_ssh_info")
25
+ env = @machine.action('read_ssh_info')
26
26
  env[:machine_ssh_info]
27
27
  end
28
28
 
@@ -30,7 +30,7 @@ module VagrantPlugins
30
30
  # Run a custom action we define called "read_state" which does
31
31
  # what it says. It puts the state in the `:machine_state_id`
32
32
  # key in the environment.
33
- env = @machine.action("read_state")
33
+ env = @machine.action('read_state')
34
34
 
35
35
  state_id = env[:machine_state_id]
36
36
 
@@ -43,7 +43,7 @@ module VagrantPlugins
43
43
  end
44
44
 
45
45
  def to_s
46
- "Openstack Cloud"
46
+ 'Openstack Cloud'
47
47
  end
48
48
  end
49
49
  end
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Openstack
3
- VERSION = "0.1.2"
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -2,44 +2,60 @@ en:
2
2
  vagrant_openstack:
3
3
  already_created: |-
4
4
  The server is already created.
5
+ already_suspended: |-
6
+ The server is already suspended
5
7
  deleting_server: |-
6
8
  Deleting server...
7
9
  finding_flavor: |-
8
10
  Finding flavor for server...
9
11
  finding_image: |-
10
12
  Finding image for server...
13
+ finding_networks: |-
14
+ Finding network(s) for server...
11
15
  launching_server: |-
12
16
  Launching a server with the following settings...
13
17
  not_created: |-
14
18
  The server hasn't been created yet. Run `vagrant up` first.
15
19
  ready: |-
16
20
  The server is ready!
21
+ stopping_server: |-
22
+ Stopping server...
23
+ starting_server: |-
24
+ Starting server...
17
25
  timeout: |-
18
26
  Timeout!
27
+ trying_authentication: |-
28
+ Trying authentication...
19
29
  rsync_folder: |-
20
30
  Rsyncing folder: %{hostpath} => %{guestpath}
21
31
  waiting_for_build: |-
22
32
  Waiting for the server to be built...
23
- waiting_for_rackconnect: |-
24
- Waiting for RackConnect to complete...
25
33
  waiting_for_ssh: |-
26
34
  Waiting for SSH to become available...
35
+ waiting_stop: |-
36
+ Waiting for the server to stop...
27
37
  warn_networks: |-
28
38
  Warning! The Openstack provider doesn't support any of the Vagrant
29
39
  high-level network configurations (`config.vm.network`). They
30
40
  will be silently ignored.
31
41
 
32
42
  config:
33
- api_key_required: |-
34
- An API key is required.
43
+ password_required: |-
44
+ A password is required.
35
45
  username_required: |-
36
46
  A username is required.
37
47
  invalid_uri: |-
38
48
  The value for %{key} is not a valid URI: %{uri}
39
49
  metadata_must_be_hash: |-
40
50
  Metadata must be a hash.
51
+ keypair_name_required: |-
52
+ A keypair name is required.
41
53
 
42
54
  errors:
55
+ default: |-
56
+ %{message}
57
+ authentication_required: |-
58
+ Authentication token is missing or no longer valid.
43
59
  create_bad_state: |-
44
60
  While creating the server, it transitioned to an unexpected
45
61
  state: '%{state}', instead of properly booting. Run `vagrant status`
@@ -77,9 +93,71 @@ en:
77
93
  short_error: |-
78
94
  error
79
95
  long_error: |-
80
- The server is in an erroneous state. Contact Openstack support
96
+ The server is in an erroneous state. Contact your OpenStack administrator
81
97
  or destroy the machine with `vagrant destroy`.
98
+ short_hard_reboot: |-
99
+ hard reboot
100
+ long_hard_reboot: |-
101
+ The server is hard rebooting. This is equivalent to pulling the power plug
102
+ on a physical server, plugging it back in, and rebooting it.
103
+ short_password: |-
104
+ password reset
105
+ long_password: |-
106
+ The password is being reset on the server.
107
+ short_reboot: |-
108
+ reboot
109
+ long_reboot: |-
110
+ The server is in a soft reboot state. A reboot command was passed to the operating system.
111
+ short_rebuild: |-
112
+ rebuild
113
+ long_rebuild: |-
114
+ The server is currently being rebuilt from an image.
115
+ short_rescue: |-
116
+ rescue
117
+ long_rescue: |-
118
+ The server is in rescue mode.
119
+ short_resize: |-
120
+ resize
121
+ long_resize: |-
122
+ Server is performing the differential copy of data that changed during
123
+ its initial copy. Server is down for this stage.
124
+ short_revert_resize: |-
125
+ revert resize
126
+ long_revert_resize: |-
127
+ The resize or migration of a server failed for some reason. The destination
128
+ server is being cleaned up and the original source server is restarting.
129
+ short_shutoff: |-
130
+ shutoff
131
+ long_shutoff: |-
132
+ The virtual machine (VM) was powered down by the user, but not through the
133
+ OpenStack Compute API. For example, the user issued a shutdown -h command
134
+ from within the server instance. If the OpenStack Compute manager detects
135
+ that the VM was powered down, it transitions the server instance to the
136
+ SHUTOFF status. If you use the OpenStack Compute API to restart the instance,
137
+ the instance might be deleted first, depending on the value in the
138
+ shutdown_terminate database field on the Instance model.
139
+ short_suspended: |-
140
+ suspended
141
+ long_suspended: |-
142
+ The server is suspended, either by request or necessity. This status appears
143
+ for only the following hypervisors: XenServer/XCP, KVM, and ESXi.
144
+ short_unknown: |-
145
+ unknown
146
+ long_unknown: |-
147
+ The state of the server is unknown. Contact your cloud provider.
148
+ short_verify_resize: |-
149
+ verify resize
150
+ long_verifiy_resize: |-
151
+ System is awaiting confirmation that the server is operational after a move or resize.
82
152
  short_not_created: |-
83
153
  not created
84
154
  long_not_created: |-
85
155
  The server is not created. Run `vagrant up` to create it.
156
+
157
+ client:
158
+ looking_for_available_endpoints: |-
159
+ Looking for available endpoints...
160
+ multiple_endpoint: |-
161
+ %{size} endpoints are available for service '%{type}' but only the first one will be used
162
+ authentication: |-
163
+ Authentication on project %{project} with user %{user}