vagrant-openstack-provider 0.6.0 → 0.6.1
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 +4 -4
- data/CHANGELOG.md +15 -0
- data/lib/vagrant-openstack-provider/action/connect_openstack.rb +0 -1
- data/lib/vagrant-openstack-provider/action/create_server.rb +3 -2
- data/lib/vagrant-openstack-provider/action/create_stack.rb +3 -2
- data/lib/vagrant-openstack-provider/action/delete_server.rb +3 -2
- data/lib/vagrant-openstack-provider/action/delete_stack.rb +3 -2
- data/lib/vagrant-openstack-provider/action/wait_active.rb +3 -3
- data/lib/vagrant-openstack-provider/action/wait_stop.rb +3 -3
- data/lib/vagrant-openstack-provider/catalog/openstack_catalog.rb +6 -5
- data/lib/vagrant-openstack-provider/client/cinder.rb +0 -1
- data/lib/vagrant-openstack-provider/client/domain.rb +0 -1
- data/lib/vagrant-openstack-provider/client/glance.rb +5 -3
- data/lib/vagrant-openstack-provider/client/heat.rb +0 -1
- data/lib/vagrant-openstack-provider/client/http_utils.rb +7 -6
- data/lib/vagrant-openstack-provider/client/keystone.rb +5 -4
- data/lib/vagrant-openstack-provider/client/neutron.rb +0 -1
- data/lib/vagrant-openstack-provider/client/nova.rb +0 -1
- data/lib/vagrant-openstack-provider/client/openstack.rb +0 -1
- data/lib/vagrant-openstack-provider/client/request_logger.rb +0 -1
- data/lib/vagrant-openstack-provider/client/rest_utils.rb +25 -0
- data/lib/vagrant-openstack-provider/command/abstract_command.rb +4 -1
- data/lib/vagrant-openstack-provider/command/flavor_list.rb +3 -5
- data/lib/vagrant-openstack-provider/command/floatingip_list.rb +3 -5
- data/lib/vagrant-openstack-provider/command/image_list.rb +3 -5
- data/lib/vagrant-openstack-provider/command/network_list.rb +3 -5
- data/lib/vagrant-openstack-provider/command/openstack_command.rb +16 -0
- data/lib/vagrant-openstack-provider/command/reset.rb +1 -2
- data/lib/vagrant-openstack-provider/command/subnet_list.rb +2 -5
- data/lib/vagrant-openstack-provider/command/volume_list.rb +3 -5
- data/lib/vagrant-openstack-provider/config.rb +59 -2
- data/lib/vagrant-openstack-provider/config/http.rb +39 -0
- data/lib/vagrant-openstack-provider/config_resolver.rb +13 -9
- data/lib/vagrant-openstack-provider/utils.rb +11 -6
- data/lib/vagrant-openstack-provider/version.rb +1 -1
- data/locales/en.yml +4 -0
- data/spec/vagrant-openstack-provider/action/connect_openstack_spec.rb +226 -4
- data/spec/vagrant-openstack-provider/action/create_server_spec.rb +6 -3
- data/spec/vagrant-openstack-provider/action/create_stack_spec.rb +7 -3
- data/spec/vagrant-openstack-provider/action/delete_server_spec.rb +13 -4
- data/spec/vagrant-openstack-provider/action/read_ssh_info_spec.rb +24 -3
- data/spec/vagrant-openstack-provider/action/wait_active_spec.rb +9 -2
- data/spec/vagrant-openstack-provider/action/wait_stop_spec.rb +9 -2
- data/spec/vagrant-openstack-provider/client/cinder_spec.rb +17 -1
- data/spec/vagrant-openstack-provider/client/glance_spec.rb +18 -2
- data/spec/vagrant-openstack-provider/client/heat_spec.rb +8 -0
- data/spec/vagrant-openstack-provider/client/keystone_spec.rb +8 -0
- data/spec/vagrant-openstack-provider/client/neutron_spec.rb +18 -2
- data/spec/vagrant-openstack-provider/client/nova_spec.rb +8 -0
- data/spec/vagrant-openstack-provider/config_resolver_spec.rb +10 -0
- data/spec/vagrant-openstack-provider/config_spec.rb +39 -4
- data/spec/vagrant-openstack-provider/utils_spec.rb +17 -17
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79d085018733ba06b31b2f7fb8f904a29db8040b
|
4
|
+
data.tar.gz: 263505f7c34eb0c3456f00794fe5158076cc6654
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c544a9afd69438fe6a0d4b63e3d283c241c890fab6a334ba0ef4d95bb9411516f715af9494313bc3b811e32371e8624b378ec0dece4060448fd8d2c90b759837
|
7
|
+
data.tar.gz: 670e6af16eeb1b62312518ef589bf12eb6b38ee8d4f44147a47b3c4eecdfd997f76e813459b39c5f1be722286c495cdb61ab516b18ae3ef682230faa0b82cb0a
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
# 0.6.1 (January 30, 2015)
|
2
|
+
|
3
|
+
IMPROVEMENTS:
|
4
|
+
|
5
|
+
- Straightforward syntax to define single networks [#193](https://github.com/ggiamarchi/vagrant-openstack-provider/issues/193)
|
6
|
+
- Network preference for SSH [#194](https://github.com/ggiamarchi/vagrant-openstack-provider/issues/194)
|
7
|
+
- Allow lists in flavor values [#189](https://github.com/ggiamarchi/vagrant-openstack-provider/pull/189)
|
8
|
+
- Allow "wait active" timeout to be configurable [#185](https://github.com/ggiamarchi/vagrant-openstack-provider/issues/185)
|
9
|
+
- Allow setting timeout value for REST calls [#183](https://github.com/ggiamarchi/vagrant-openstack-provider/issues/183)
|
10
|
+
|
11
|
+
BUG FIXES:
|
12
|
+
|
13
|
+
- Vagrant openstack reset fails when the instance is not found [#195](https://github.com/ggiamarchi/vagrant-openstack-provider/issues/195)
|
14
|
+
- Show explicit error when tenant is missing in credentials [#186](https://github.com/ggiamarchi/vagrant-openstack-provider/issues/186)
|
15
|
+
|
1
16
|
# 0.6.0 (November 28, 2014)
|
2
17
|
|
3
18
|
FEATURES:
|
@@ -127,10 +127,11 @@ module VagrantPlugins
|
|
127
127
|
nova.create_server(env, create_opts)
|
128
128
|
end
|
129
129
|
|
130
|
-
def waiting_for_server_to_be_built(env, server_id, retry_interval = 3
|
130
|
+
def waiting_for_server_to_be_built(env, server_id, retry_interval = 3)
|
131
131
|
@logger.info "Waiting for the server with id #{server_id} to be built..."
|
132
132
|
env[:ui].info(I18n.t('vagrant_openstack.waiting_for_build'))
|
133
|
-
|
133
|
+
config = env[:machine].provider_config
|
134
|
+
timeout(config.server_create_timeout, Errors::Timeout) do
|
134
135
|
server_status = 'WAITING'
|
135
136
|
until server_status == 'ACTIVE'
|
136
137
|
@logger.debug('Waiting for server to be ACTIVE')
|
@@ -48,10 +48,11 @@ module VagrantPlugins
|
|
48
48
|
|
49
49
|
private
|
50
50
|
|
51
|
-
def waiting_for_stack_to_be_created(env, stack_name, stack_id, retry_interval = 3
|
51
|
+
def waiting_for_stack_to_be_created(env, stack_name, stack_id, retry_interval = 3)
|
52
52
|
@logger.info "Waiting for the stack with id #{stack_id} to be built..."
|
53
53
|
env[:ui].info(I18n.t('vagrant_openstack.waiting_for_stack'))
|
54
|
-
|
54
|
+
config = env[:machine].provider_config
|
55
|
+
timeout(config.stack_create_timeout, Errors::Timeout) do
|
55
56
|
stack_status = 'CREATE_IN_PROGRESS'
|
56
57
|
until stack_status == 'CREATE_COMPLETE'
|
57
58
|
@logger.debug('Waiting for stack to be CREATED')
|
@@ -28,10 +28,11 @@ module VagrantPlugins
|
|
28
28
|
|
29
29
|
private
|
30
30
|
|
31
|
-
def waiting_for_instance_to_be_deleted(env, instance_id, retry_interval = 3
|
31
|
+
def waiting_for_instance_to_be_deleted(env, instance_id, retry_interval = 3)
|
32
32
|
@logger.info "Waiting for the instance with id #{instance_id} to be deleted..."
|
33
33
|
env[:ui].info(I18n.t('vagrant_openstack.waiting_deleted'))
|
34
|
-
|
34
|
+
config = env[:machine].provider_config
|
35
|
+
timeout(config.server_delete_timeout, Errors::Timeout) do
|
35
36
|
delete_ok = false
|
36
37
|
until delete_ok
|
37
38
|
begin
|
@@ -53,10 +53,11 @@ module VagrantPlugins
|
|
53
53
|
stack_files
|
54
54
|
end
|
55
55
|
|
56
|
-
def waiting_for_stack_to_be_deleted(env, stack_name, stack_id, retry_interval = 3
|
56
|
+
def waiting_for_stack_to_be_deleted(env, stack_name, stack_id, retry_interval = 3)
|
57
57
|
@logger.info "Waiting for the stack with id #{stack_id} to be deleted..."
|
58
58
|
env[:ui].info(I18n.t('vagrant_openstack.waiting_for_stack_deleted'))
|
59
|
-
|
59
|
+
config = env[:machine].provider_config
|
60
|
+
timeout(config.stack_delete_timeout, Errors::Timeout) do
|
60
61
|
stack_status = 'DELETE_IN_PROGRESS'
|
61
62
|
until stack_status == 'DELETE_COMPLETE'
|
62
63
|
@logger.debug('Waiting for stack to be DELETED')
|
@@ -7,18 +7,18 @@ module VagrantPlugins
|
|
7
7
|
module Openstack
|
8
8
|
module Action
|
9
9
|
class WaitForServerToBeActive < AbstractAction
|
10
|
-
def initialize(app, _env, retry_interval = 3
|
10
|
+
def initialize(app, _env, retry_interval = 3)
|
11
11
|
@app = app
|
12
12
|
@logger = Log4r::Logger.new('vagrant_openstack::action::start_server')
|
13
13
|
@retry_interval = retry_interval
|
14
|
-
@timeout = timeout
|
15
14
|
end
|
16
15
|
|
17
16
|
def execute(env)
|
18
17
|
if env[:machine].id
|
19
18
|
env[:ui].info(I18n.t('vagrant_openstack.waiting_start'))
|
20
19
|
client = env[:openstack_client].nova
|
21
|
-
|
20
|
+
config = env[:machine].provider_config
|
21
|
+
timeout(config.server_active_timeout, Errors::Timeout) do
|
22
22
|
while client.get_server_details(env, env[:machine].id)['status'] != 'ACTIVE'
|
23
23
|
sleep @retry_interval
|
24
24
|
@logger.info('Waiting for server to be active')
|
@@ -7,18 +7,18 @@ module VagrantPlugins
|
|
7
7
|
module Openstack
|
8
8
|
module Action
|
9
9
|
class WaitForServerToStop < AbstractAction
|
10
|
-
def initialize(app, _env, retry_interval = 3
|
10
|
+
def initialize(app, _env, retry_interval = 3)
|
11
11
|
@app = app
|
12
12
|
@logger = Log4r::Logger.new('vagrant_openstack::action::stop_server')
|
13
13
|
@retry_interval = retry_interval
|
14
|
-
@timeout = timeout
|
15
14
|
end
|
16
15
|
|
17
16
|
def execute(env)
|
18
17
|
if env[:machine].id
|
19
18
|
env[:ui].info(I18n.t('vagrant_openstack.waiting_stop'))
|
20
19
|
client = env[:openstack_client].nova
|
21
|
-
|
20
|
+
config = env[:machine].provider_config
|
21
|
+
timeout(config.server_stop_timeout, Errors::Timeout) do
|
22
22
|
while client.get_server_details(env, env[:machine].id)['status'] != 'SHUTOFF'
|
23
23
|
sleep @retry_interval
|
24
24
|
@logger.info('Waiting for server to stop')
|
@@ -10,6 +10,7 @@ module VagrantPlugins
|
|
10
10
|
config = env[:machine].provider_config
|
11
11
|
client = env[:openstack_client]
|
12
12
|
endpoints = client.session.endpoints
|
13
|
+
endpoint_type = config.endpoint_type
|
13
14
|
@logger.info(I18n.t('vagrant_openstack.client.looking_for_available_endpoints'))
|
14
15
|
@logger.info("Selecting endpoints matching region '#{config.region}'") unless config.region.nil?
|
15
16
|
|
@@ -18,23 +19,23 @@ module VagrantPlugins
|
|
18
19
|
if config.region.nil?
|
19
20
|
if se.size > 1
|
20
21
|
env[:ui].warn I18n.t('vagrant_openstack.client.multiple_endpoint', size: se.size, type: service['type'])
|
21
|
-
env[:ui].warn " => #{service['endpoints'][0][
|
22
|
+
env[:ui].warn " => #{service['endpoints'][0][endpoint_type]}"
|
22
23
|
end
|
23
|
-
url = se[0][
|
24
|
+
url = se[0][endpoint_type].strip
|
24
25
|
else
|
25
26
|
se.each do |endpoint|
|
26
|
-
url = endpoint[
|
27
|
+
url = endpoint[endpoint_type].strip if endpoint['region'].eql? config.region
|
27
28
|
end
|
28
29
|
end
|
29
30
|
endpoints[service['type'].to_sym] = url unless url.nil? || url.empty?
|
30
31
|
end
|
31
32
|
|
32
33
|
endpoints[:network] = choose_api_version('Neutron', 'openstack_network_url', 'v2') do
|
33
|
-
client.neutron.get_api_version_list(:network)
|
34
|
+
client.neutron.get_api_version_list(env, :network)
|
34
35
|
end if config.openstack_network_url.nil? && !endpoints[:network].nil?
|
35
36
|
|
36
37
|
endpoints[:image] = choose_api_version('Glance', 'openstack_image_url', nil, false) do
|
37
|
-
client.glance.get_api_version_list(
|
38
|
+
client.glance.get_api_version_list(env)
|
38
39
|
end if config.openstack_image_url.nil? && !endpoints[:image].nil?
|
39
40
|
end
|
40
41
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'log4r'
|
2
|
-
require 'restclient'
|
3
2
|
require 'json'
|
4
3
|
|
5
4
|
require 'vagrant-openstack-provider/client/http_utils'
|
5
|
+
require 'vagrant-openstack-provider/client/rest_utils'
|
6
6
|
require 'vagrant-openstack-provider/client/domain'
|
7
7
|
|
8
8
|
module VagrantPlugins
|
@@ -17,8 +17,10 @@ module VagrantPlugins
|
|
17
17
|
@session = VagrantPlugins::Openstack.session
|
18
18
|
end
|
19
19
|
|
20
|
-
def get_api_version_list(
|
21
|
-
json =
|
20
|
+
def get_api_version_list(env)
|
21
|
+
json = RestUtils.get(env, @session.endpoints[:image],
|
22
|
+
'X-Auth-Token' => @session.token,
|
23
|
+
:accept => :json) do |response|
|
22
24
|
log_response(response)
|
23
25
|
case response.code
|
24
26
|
when 200, 300
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'log4r'
|
2
|
-
require 'restclient'
|
3
2
|
require 'json'
|
4
3
|
|
5
4
|
require 'vagrant-openstack-provider/client/keystone'
|
6
5
|
require 'vagrant-openstack-provider/client/request_logger'
|
6
|
+
require 'vagrant-openstack-provider/client/rest_utils'
|
7
7
|
|
8
8
|
module VagrantPlugins
|
9
9
|
module Openstack
|
@@ -19,7 +19,7 @@ module VagrantPlugins
|
|
19
19
|
log_request(:GET, url, headers)
|
20
20
|
|
21
21
|
authenticated(env) do
|
22
|
-
|
22
|
+
RestUtils.get(env, url, headers) { |res| handle_response(res) }.tap do
|
23
23
|
@logger.debug("#{calling_method} - end")
|
24
24
|
end
|
25
25
|
end
|
@@ -34,7 +34,7 @@ module VagrantPlugins
|
|
34
34
|
log_request(:POST, url, body, headers)
|
35
35
|
|
36
36
|
authenticated(env) do
|
37
|
-
|
37
|
+
RestUtils.post(env, url, body, headers) { |res| handle_response(res) }.tap do
|
38
38
|
@logger.debug("#{calling_method} - end")
|
39
39
|
end
|
40
40
|
end
|
@@ -49,17 +49,18 @@ module VagrantPlugins
|
|
49
49
|
log_request(:DELETE, url, headers)
|
50
50
|
|
51
51
|
authenticated(env) do
|
52
|
-
|
52
|
+
RestUtils.delete(env, url, headers) { |res| handle_response(res) }.tap do
|
53
53
|
@logger.debug("#{calling_method} - end")
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
def get_api_version_list(service_type)
|
58
|
+
def get_api_version_list(env, service_type)
|
59
59
|
url = @session.endpoints[service_type]
|
60
60
|
headers = { 'X-Auth-Token' => @session.token, :accept => :json }
|
61
61
|
log_request(:GET, url, headers)
|
62
|
-
|
62
|
+
|
63
|
+
json = RestUtils.get(env, url, headers) do |response|
|
63
64
|
log_response(response)
|
64
65
|
case response.code
|
65
66
|
when 200, 300
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'log4r'
|
2
|
-
require 'restclient'
|
3
2
|
require 'json'
|
4
3
|
|
5
4
|
require 'vagrant-openstack-provider/client/request_logger'
|
@@ -37,9 +36,11 @@ module VagrantPlugins
|
|
37
36
|
|
38
37
|
post_body[:auth][:passwordCredentials][:password] = config.password
|
39
38
|
|
40
|
-
authentication =
|
41
|
-
|
42
|
-
|
39
|
+
authentication = RestUtils.post(env, config.openstack_auth_url, post_body.to_json,
|
40
|
+
content_type: :json,
|
41
|
+
accept: :json,
|
42
|
+
timeout: config.http.read_timeout,
|
43
|
+
open_timeout: config.http.open_timeout) do |response|
|
43
44
|
log_response(response)
|
44
45
|
case response.code
|
45
46
|
when 200
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'restclient'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Openstack
|
5
|
+
module RestUtils
|
6
|
+
def self.get(env, url, headers = {}, &block)
|
7
|
+
config = env[:machine].provider_config
|
8
|
+
RestClient::Request.execute(method: :get, url: url, headers: headers,
|
9
|
+
timeout: config.http.read_timeout, open_timeout: config.http.open_timeout, &block)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.post(env, url, payload, headers = {}, &block)
|
13
|
+
config = env[:machine].provider_config
|
14
|
+
RestClient::Request.execute(method: :post, url: url, payload: payload, headers: headers,
|
15
|
+
timeout: config.http.read_timeout, open_timeout: config.http.open_timeout, &block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.delete(env, url, headers = {}, &block)
|
19
|
+
config = env[:machine].provider_config
|
20
|
+
RestClient::Request.execute(method: :delete, url: url, headers: headers,
|
21
|
+
timeout: config.http.read_timeout, open_timeout: config.http.open_timeout, &block)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -16,7 +16,7 @@ module VagrantPlugins
|
|
16
16
|
env[:ui] = @env.ui
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
before_cmd(name, @argv, env)
|
20
20
|
|
21
21
|
cmd(name, @argv, env)
|
22
22
|
@env.ui.info('')
|
@@ -38,6 +38,9 @@ module VagrantPlugins
|
|
38
38
|
args
|
39
39
|
end
|
40
40
|
|
41
|
+
def before_cmd(_name, _argv, _env)
|
42
|
+
end
|
43
|
+
|
41
44
|
def cmd(_name, _argv, _env)
|
42
45
|
fail 'Command not implemented. \'cmd\' method must be overridden in all subclasses'
|
43
46
|
end
|
@@ -1,15 +1,13 @@
|
|
1
|
-
require 'vagrant-openstack-provider/command/
|
2
|
-
require 'vagrant-openstack-provider/command/abstract_command'
|
1
|
+
require 'vagrant-openstack-provider/command/openstack_command'
|
3
2
|
|
4
3
|
module VagrantPlugins
|
5
4
|
module Openstack
|
6
5
|
module Command
|
7
|
-
class FlavorList <
|
8
|
-
include VagrantPlugins::Openstack::Command::Utils
|
9
|
-
|
6
|
+
class FlavorList < OpenstackCommand
|
10
7
|
def self.synopsis
|
11
8
|
I18n.t('vagrant_openstack.command.flavor_list_synopsis')
|
12
9
|
end
|
10
|
+
|
13
11
|
def cmd(name, argv, env)
|
14
12
|
fail Errors::NoArgRequiredForCommand, cmd: name unless argv.size == 0
|
15
13
|
flavors = env[:openstack_client].nova.get_all_flavors(env)
|
@@ -1,15 +1,13 @@
|
|
1
|
-
require 'vagrant-openstack-provider/command/
|
2
|
-
require 'vagrant-openstack-provider/command/abstract_command'
|
1
|
+
require 'vagrant-openstack-provider/command/openstack_command'
|
3
2
|
|
4
3
|
module VagrantPlugins
|
5
4
|
module Openstack
|
6
5
|
module Command
|
7
|
-
class FloatingIpList <
|
8
|
-
include VagrantPlugins::Openstack::Command::Utils
|
9
|
-
|
6
|
+
class FloatingIpList < OpenstackCommand
|
10
7
|
def self.synopsis
|
11
8
|
I18n.t('vagrant_openstack.command.flaotingip_list_synopsis')
|
12
9
|
end
|
10
|
+
|
13
11
|
def cmd(name, argv, env)
|
14
12
|
fail Errors::NoArgRequiredForCommand, cmd: name unless argv.size == 0
|
15
13
|
|
@@ -1,15 +1,13 @@
|
|
1
|
-
require 'vagrant-openstack-provider/command/
|
2
|
-
require 'vagrant-openstack-provider/command/abstract_command'
|
1
|
+
require 'vagrant-openstack-provider/command/openstack_command'
|
3
2
|
|
4
3
|
module VagrantPlugins
|
5
4
|
module Openstack
|
6
5
|
module Command
|
7
|
-
class ImageList <
|
8
|
-
include VagrantPlugins::Openstack::Command::Utils
|
9
|
-
|
6
|
+
class ImageList < OpenstackCommand
|
10
7
|
def self.synopsis
|
11
8
|
I18n.t('vagrant_openstack.command.image_list_synopsis')
|
12
9
|
end
|
10
|
+
|
13
11
|
def cmd(name, argv, env)
|
14
12
|
fail Errors::NoArgRequiredForCommand, cmd: name unless argv.size == 0
|
15
13
|
rows = []
|
@@ -1,15 +1,13 @@
|
|
1
|
-
require 'vagrant-openstack-provider/command/
|
2
|
-
require 'vagrant-openstack-provider/command/abstract_command'
|
1
|
+
require 'vagrant-openstack-provider/command/openstack_command'
|
3
2
|
|
4
3
|
module VagrantPlugins
|
5
4
|
module Openstack
|
6
5
|
module Command
|
7
|
-
class NetworkList <
|
8
|
-
include VagrantPlugins::Openstack::Command::Utils
|
9
|
-
|
6
|
+
class NetworkList < OpenstackCommand
|
10
7
|
def self.synopsis
|
11
8
|
I18n.t('vagrant_openstack.command.network_list_synopsis')
|
12
9
|
end
|
10
|
+
|
13
11
|
def cmd(name, argv, env)
|
14
12
|
fail Errors::UnrecognizedArgForCommand, cmd: name, arg: argv[1] if argv.size > 1
|
15
13
|
if argv.size == 0
|