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.
Files changed (115) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/.rubocop.yml +40 -0
  4. data/CHANGELOG.md +282 -0
  5. data/Gemfile +18 -0
  6. data/RELEASE.md +15 -0
  7. data/Rakefile +25 -0
  8. data/Vagrantfile +20 -0
  9. data/dummy.box +0 -0
  10. data/example_box/README.md +13 -0
  11. data/example_box/metadata.json +3 -0
  12. data/functional_tests/Vagrantfile +58 -0
  13. data/functional_tests/keys/vagrant-openstack +27 -0
  14. data/functional_tests/keys/vagrant-openstack.pub +1 -0
  15. data/functional_tests/run_tests.sh +142 -0
  16. data/lib/vagrant-openstack-illuin-provider.rb +29 -0
  17. data/lib/vagrant-openstack-illuin-provider/action.rb +344 -0
  18. data/lib/vagrant-openstack-illuin-provider/action/abstract_action.rb +22 -0
  19. data/lib/vagrant-openstack-illuin-provider/action/connect_openstack.rb +60 -0
  20. data/lib/vagrant-openstack-illuin-provider/action/create_server.rb +187 -0
  21. data/lib/vagrant-openstack-illuin-provider/action/create_stack.rb +76 -0
  22. data/lib/vagrant-openstack-illuin-provider/action/delete_server.rb +53 -0
  23. data/lib/vagrant-openstack-illuin-provider/action/delete_stack.rb +73 -0
  24. data/lib/vagrant-openstack-illuin-provider/action/message.rb +19 -0
  25. data/lib/vagrant-openstack-illuin-provider/action/provision.rb +60 -0
  26. data/lib/vagrant-openstack-illuin-provider/action/read_ssh_info.rb +74 -0
  27. data/lib/vagrant-openstack-illuin-provider/action/read_state.rb +43 -0
  28. data/lib/vagrant-openstack-illuin-provider/action/resume.rb +24 -0
  29. data/lib/vagrant-openstack-illuin-provider/action/snapshot_cleanup.rb +32 -0
  30. data/lib/vagrant-openstack-illuin-provider/action/snapshot_delete.rb +32 -0
  31. data/lib/vagrant-openstack-illuin-provider/action/snapshot_list.rb +22 -0
  32. data/lib/vagrant-openstack-illuin-provider/action/snapshot_restore.rb +29 -0
  33. data/lib/vagrant-openstack-illuin-provider/action/snapshot_save.rb +51 -0
  34. data/lib/vagrant-openstack-illuin-provider/action/start_server.rb +24 -0
  35. data/lib/vagrant-openstack-illuin-provider/action/stop_server.rb +25 -0
  36. data/lib/vagrant-openstack-illuin-provider/action/suspend.rb +24 -0
  37. data/lib/vagrant-openstack-illuin-provider/action/sync_folders.rb +138 -0
  38. data/lib/vagrant-openstack-illuin-provider/action/wait_active.rb +33 -0
  39. data/lib/vagrant-openstack-illuin-provider/action/wait_stop.rb +33 -0
  40. data/lib/vagrant-openstack-illuin-provider/cap/snapshot_list.rb +15 -0
  41. data/lib/vagrant-openstack-illuin-provider/catalog/openstack_catalog.rb +90 -0
  42. data/lib/vagrant-openstack-illuin-provider/client/cinder.rb +39 -0
  43. data/lib/vagrant-openstack-illuin-provider/client/domain.rb +163 -0
  44. data/lib/vagrant-openstack-illuin-provider/client/glance.rb +65 -0
  45. data/lib/vagrant-openstack-illuin-provider/client/heat.rb +49 -0
  46. data/lib/vagrant-openstack-illuin-provider/client/http_utils.rb +116 -0
  47. data/lib/vagrant-openstack-illuin-provider/client/keystone.rb +128 -0
  48. data/lib/vagrant-openstack-illuin-provider/client/neutron.rb +48 -0
  49. data/lib/vagrant-openstack-illuin-provider/client/nova.rb +303 -0
  50. data/lib/vagrant-openstack-illuin-provider/client/openstack.rb +59 -0
  51. data/lib/vagrant-openstack-illuin-provider/client/request_logger.rb +23 -0
  52. data/lib/vagrant-openstack-illuin-provider/client/rest_utils.rb +28 -0
  53. data/lib/vagrant-openstack-illuin-provider/command/abstract_command.rb +51 -0
  54. data/lib/vagrant-openstack-illuin-provider/command/flavor_list.rb +24 -0
  55. data/lib/vagrant-openstack-illuin-provider/command/floatingip_list.rb +32 -0
  56. data/lib/vagrant-openstack-illuin-provider/command/image_list.rb +29 -0
  57. data/lib/vagrant-openstack-illuin-provider/command/main.rb +52 -0
  58. data/lib/vagrant-openstack-illuin-provider/command/network_list.rb +25 -0
  59. data/lib/vagrant-openstack-illuin-provider/command/openstack_command.rb +16 -0
  60. data/lib/vagrant-openstack-illuin-provider/command/reset.rb +20 -0
  61. data/lib/vagrant-openstack-illuin-provider/command/subnet_list.rb +22 -0
  62. data/lib/vagrant-openstack-illuin-provider/command/utils.rb +22 -0
  63. data/lib/vagrant-openstack-illuin-provider/command/volume_list.rb +25 -0
  64. data/lib/vagrant-openstack-illuin-provider/config.rb +505 -0
  65. data/lib/vagrant-openstack-illuin-provider/config/http.rb +39 -0
  66. data/lib/vagrant-openstack-illuin-provider/config_resolver.rb +334 -0
  67. data/lib/vagrant-openstack-illuin-provider/errors.rb +187 -0
  68. data/lib/vagrant-openstack-illuin-provider/logging.rb +39 -0
  69. data/lib/vagrant-openstack-illuin-provider/plugin.rb +58 -0
  70. data/lib/vagrant-openstack-illuin-provider/provider.rb +50 -0
  71. data/lib/vagrant-openstack-illuin-provider/utils.rb +81 -0
  72. data/lib/vagrant-openstack-illuin-provider/version.rb +15 -0
  73. data/lib/vagrant-openstack-illuin-provider/version_checker.rb +76 -0
  74. data/locales/en.yml +412 -0
  75. data/spec/vagrant-openstack-illuin-provider/action/connect_openstack_spec.rb +770 -0
  76. data/spec/vagrant-openstack-illuin-provider/action/create_server_spec.rb +260 -0
  77. data/spec/vagrant-openstack-illuin-provider/action/create_stack_spec.rb +99 -0
  78. data/spec/vagrant-openstack-illuin-provider/action/delete_server_spec.rb +89 -0
  79. data/spec/vagrant-openstack-illuin-provider/action/delete_stack_spec.rb +63 -0
  80. data/spec/vagrant-openstack-illuin-provider/action/message_spec.rb +33 -0
  81. data/spec/vagrant-openstack-illuin-provider/action/provision_spec.rb +97 -0
  82. data/spec/vagrant-openstack-illuin-provider/action/read_ssh_info_spec.rb +202 -0
  83. data/spec/vagrant-openstack-illuin-provider/action/read_state_spec.rb +81 -0
  84. data/spec/vagrant-openstack-illuin-provider/action/resume_server_spec.rb +49 -0
  85. data/spec/vagrant-openstack-illuin-provider/action/start_server_spec.rb +49 -0
  86. data/spec/vagrant-openstack-illuin-provider/action/stop_server_spec.rb +49 -0
  87. data/spec/vagrant-openstack-illuin-provider/action/suspend_server_spec.rb +49 -0
  88. data/spec/vagrant-openstack-illuin-provider/action/sync_folders_spec.rb +155 -0
  89. data/spec/vagrant-openstack-illuin-provider/action/wait_active_spec.rb +53 -0
  90. data/spec/vagrant-openstack-illuin-provider/action/wait_stop_spec.rb +53 -0
  91. data/spec/vagrant-openstack-illuin-provider/action_spec.rb +120 -0
  92. data/spec/vagrant-openstack-illuin-provider/client/cinder_spec.rb +129 -0
  93. data/spec/vagrant-openstack-illuin-provider/client/glance_spec.rb +145 -0
  94. data/spec/vagrant-openstack-illuin-provider/client/heat_spec.rb +130 -0
  95. data/spec/vagrant-openstack-illuin-provider/client/keystone_spec.rb +226 -0
  96. data/spec/vagrant-openstack-illuin-provider/client/neutron_spec.rb +173 -0
  97. data/spec/vagrant-openstack-illuin-provider/client/nova_spec.rb +760 -0
  98. data/spec/vagrant-openstack-illuin-provider/client/utils_spec.rb +176 -0
  99. data/spec/vagrant-openstack-illuin-provider/command/flavor_list_spec.rb +43 -0
  100. data/spec/vagrant-openstack-illuin-provider/command/floatingip_list_spec.rb +74 -0
  101. data/spec/vagrant-openstack-illuin-provider/command/image_list_spec.rb +95 -0
  102. data/spec/vagrant-openstack-illuin-provider/command/network_list_spec.rb +65 -0
  103. data/spec/vagrant-openstack-illuin-provider/command/reset_spec.rb +24 -0
  104. data/spec/vagrant-openstack-illuin-provider/command/subnet_list_spec.rb +45 -0
  105. data/spec/vagrant-openstack-illuin-provider/command/volume_list_spec.rb +40 -0
  106. data/spec/vagrant-openstack-illuin-provider/config_resolver_spec.rb +879 -0
  107. data/spec/vagrant-openstack-illuin-provider/config_spec.rb +416 -0
  108. data/spec/vagrant-openstack-illuin-provider/e2e_spec.rb.save +27 -0
  109. data/spec/vagrant-openstack-illuin-provider/provider_spec.rb +13 -0
  110. data/spec/vagrant-openstack-illuin-provider/spec_helper.rb +37 -0
  111. data/spec/vagrant-openstack-illuin-provider/utils_spec.rb +197 -0
  112. data/spec/vagrant-openstack-illuin-provider/version_checker_spec.rb +39 -0
  113. data/stackrc +25 -0
  114. data/vagrant-openstack-illuin-provider.gemspec +35 -0
  115. metadata +379 -0
@@ -0,0 +1,59 @@
1
+ require 'log4r'
2
+ require 'json'
3
+
4
+ require 'vagrant-openstack-illuin-provider/client/heat'
5
+ require 'vagrant-openstack-illuin-provider/client/keystone'
6
+ require 'vagrant-openstack-illuin-provider/client/nova'
7
+ require 'vagrant-openstack-illuin-provider/client/neutron'
8
+ require 'vagrant-openstack-illuin-provider/client/cinder'
9
+ require 'vagrant-openstack-illuin-provider/client/glance'
10
+
11
+ module VagrantPlugins
12
+ module Openstack
13
+ class Session
14
+ include Singleton
15
+
16
+ attr_accessor :token
17
+ attr_accessor :project_id
18
+ attr_accessor :endpoints
19
+
20
+ def initialize
21
+ @token = nil
22
+ @project_id = nil
23
+ @endpoints = {}
24
+ end
25
+
26
+ def reset
27
+ initialize
28
+ end
29
+ end
30
+
31
+ def self.session
32
+ Session.instance
33
+ end
34
+
35
+ def self.keystone
36
+ Openstack::KeystoneClient.instance
37
+ end
38
+
39
+ def self.nova
40
+ Openstack::NovaClient.instance
41
+ end
42
+
43
+ def self.heat
44
+ Openstack::HeatClient.instance
45
+ end
46
+
47
+ def self.neutron
48
+ Openstack::NeutronClient.instance
49
+ end
50
+
51
+ def self.cinder
52
+ Openstack::CinderClient.instance
53
+ end
54
+
55
+ def self.glance
56
+ Openstack::GlanceClient.instance
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,23 @@
1
+ require 'log4r'
2
+ require 'json'
3
+
4
+ module VagrantPlugins
5
+ module Openstack
6
+ module HttpUtils
7
+ module RequestLogger
8
+ def log_request(method, url, body = nil, headers)
9
+ @logger.debug "request => method : #{method}"
10
+ @logger.debug "request => url : #{url}"
11
+ @logger.debug "request => headers : #{headers}"
12
+ @logger.debug "request => body : #{body}" unless body.nil?
13
+ end
14
+
15
+ def log_response(response)
16
+ @logger.debug "response => code : #{response.code}"
17
+ @logger.debug "response => headers : #{response.headers}"
18
+ @logger.debug "response => body : #{response}"
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,28 @@
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,
10
+ ssl_ca_file: config.ssl_ca_file, verify_ssl: config.ssl_verify_peer, &block)
11
+ end
12
+
13
+ def self.post(env, url, payload, headers = {}, &block)
14
+ config = env[:machine].provider_config
15
+ RestClient::Request.execute(method: :post, url: url, payload: payload, headers: headers,
16
+ timeout: config.http.read_timeout, open_timeout: config.http.open_timeout,
17
+ ssl_ca_file: config.ssl_ca_file, verify_ssl: config.ssl_verify_peer, &block)
18
+ end
19
+
20
+ def self.delete(env, url, headers = {}, &block)
21
+ config = env[:machine].provider_config
22
+ RestClient::Request.execute(method: :delete, url: url, headers: headers,
23
+ timeout: config.http.read_timeout, open_timeout: config.http.open_timeout,
24
+ ssl_ca_file: config.ssl_ca_file, verify_ssl: config.ssl_verify_peer, &block)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,51 @@
1
+ require 'vagrant-openstack-illuin-provider/client/openstack'
2
+ require 'colorize'
3
+
4
+ module VagrantPlugins
5
+ module Openstack
6
+ module Command
7
+ class AbstractCommand < Vagrant.plugin('2', :command)
8
+ def initialize(argv, env)
9
+ @env = env
10
+ super(normalize_args(argv), env)
11
+ end
12
+
13
+ def execute(name)
14
+ env = {}
15
+ with_target_vms(nil, provider: :openstack) do |machine|
16
+ env[:machine] = machine
17
+ env[:ui] = @env.ui
18
+ end
19
+
20
+ before_cmd(name, @argv, env)
21
+
22
+ cmd(name, @argv, env)
23
+ @env.ui.info('')
24
+ # rubocop:disable Lint/RescueException
25
+ rescue Errors::VagrantOpenstackError, SystemExit, Interrupt => e
26
+ raise e
27
+ rescue Exception => e
28
+ puts I18n.t('vagrant_openstack.global_error').red unless e.message && e.message.start_with?('Catched Error:')
29
+ raise e
30
+ end
31
+ # rubocop:enable Lint/RescueException
32
+
33
+ #
34
+ # Before Vagrant 1.5, args list ends with an extra arg '--'. It removes it if present.
35
+ #
36
+ def normalize_args(args)
37
+ return args if args.nil?
38
+ args.pop if args.size > 0 && args.last == '--'
39
+ args
40
+ end
41
+
42
+ def before_cmd(_name, _argv, _env)
43
+ end
44
+
45
+ def cmd(_name, _argv, _env)
46
+ fail 'Command not implemented. \'cmd\' method must be overridden in all subclasses'
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,24 @@
1
+ require 'vagrant-openstack-illuin-provider/command/openstack_command'
2
+
3
+ module VagrantPlugins
4
+ module Openstack
5
+ module Command
6
+ class FlavorList < OpenstackCommand
7
+ def self.synopsis
8
+ I18n.t('vagrant_openstack.command.flavor_list_synopsis')
9
+ end
10
+
11
+ def cmd(name, argv, env)
12
+ fail Errors::NoArgRequiredForCommand, cmd: name unless argv.size == 0
13
+ flavors = env[:openstack_client].nova.get_all_flavors(env)
14
+
15
+ rows = []
16
+ flavors.each do |f|
17
+ rows << [f.id, f.name, f.vcpus, f.ram, f.disk]
18
+ end
19
+ display_table(env, ['ID', 'Name', 'vCPU', 'RAM (Mo)', 'Disk size (Go)'], rows)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ require 'vagrant-openstack-illuin-provider/command/openstack_command'
2
+
3
+ module VagrantPlugins
4
+ module Openstack
5
+ module Command
6
+ class FloatingIpList < OpenstackCommand
7
+ def self.synopsis
8
+ I18n.t('vagrant_openstack.command.flaotingip_list_synopsis')
9
+ end
10
+
11
+ def cmd(name, argv, env)
12
+ fail Errors::NoArgRequiredForCommand, cmd: name unless argv.size == 0
13
+
14
+ floating_ip_pools = env[:openstack_client].nova.get_floating_ip_pools(env)
15
+ floating_ips = env[:openstack_client].nova.get_floating_ips(env)
16
+
17
+ rows = []
18
+ floating_ip_pools.each do |floating_ip_pool|
19
+ rows << [floating_ip_pool['name']]
20
+ end
21
+ display_table(env, ['Floating IP pools'], rows)
22
+
23
+ rows = []
24
+ floating_ips.each do |floating_ip|
25
+ rows << [floating_ip['id'], floating_ip['ip'], floating_ip['pool'], floating_ip['instance_id']]
26
+ end
27
+ display_table(env, ['ID', 'IP', 'Pool', 'Instance ID'], rows)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,29 @@
1
+ require 'vagrant-openstack-illuin-provider/command/openstack_command'
2
+
3
+ module VagrantPlugins
4
+ module Openstack
5
+ module Command
6
+ class ImageList < OpenstackCommand
7
+ def self.synopsis
8
+ I18n.t('vagrant_openstack.command.image_list_synopsis')
9
+ end
10
+
11
+ def cmd(name, argv, env)
12
+ fail Errors::NoArgRequiredForCommand, cmd: name unless argv.size == 0
13
+ rows = []
14
+ headers = %w(ID Name)
15
+ if env[:openstack_client].session.endpoints.key? :image
16
+ images = env[:openstack_client].glance.get_all_images(env)
17
+ images.each { |i| rows << [i.id, i.name, i.visibility, i.size.to_i / 1024 / 1024, i.min_ram, i.min_disk] }
18
+ headers << ['Visibility', 'Size (Mo)', 'Min RAM (Go)', 'Min Disk (Go)']
19
+ headers = headers.flatten
20
+ else
21
+ images = env[:openstack_client].nova.get_all_images(env)
22
+ images.each { |image| rows << [image.id, image.name] }
23
+ end
24
+ display_table(env, headers, rows)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,52 @@
1
+ module VagrantPlugins
2
+ module Openstack
3
+ module Command
4
+ COMMANDS = [
5
+ { name: :'image-list', file: 'image_list', clazz: 'ImageList' },
6
+ { name: :'flavor-list', file: 'flavor_list', clazz: 'FlavorList' },
7
+ { name: :'network-list', file: 'network_list', clazz: 'NetworkList' },
8
+ { name: :'subnet-list', file: 'subnet_list', clazz: 'SubnetList' },
9
+ { name: :'floatingip-list', file: 'floatingip_list', clazz: 'FloatingIpList' },
10
+ { name: :'volume-list', file: 'volume_list', clazz: 'VolumeList' },
11
+ { name: :'reset', file: 'reset', clazz: 'Reset' }
12
+ ]
13
+
14
+ class Main < Vagrant.plugin('2', :command)
15
+ def self.synopsis
16
+ I18n.t('vagrant_openstack.command.main_synopsis')
17
+ end
18
+
19
+ def initialize(argv, env)
20
+ @env = env
21
+ @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
22
+ @commands = Vagrant::Registry.new
23
+
24
+ COMMANDS.each do |cmd|
25
+ @commands.register(cmd[:name]) do
26
+ require_relative cmd[:file]
27
+ Command.const_get(cmd[:clazz])
28
+ end
29
+ end
30
+
31
+ super(argv, env)
32
+ end
33
+
34
+ def execute
35
+ command_class = @commands.get(@sub_command.to_sym) if @sub_command
36
+ return usage unless command_class && @sub_command
37
+ command_class.new(@sub_args, @env).execute(@sub_command)
38
+ end
39
+
40
+ def usage
41
+ @env.ui.info I18n.t('vagrant_openstack.command.main_usage')
42
+ @env.ui.info ''
43
+ @env.ui.info I18n.t('vagrant_openstack.command.available_subcommands')
44
+ @commands.each do |key, value|
45
+ @env.ui.info " #{key.to_s.ljust(20)} #{value.synopsis}"
46
+ end
47
+ @env.ui.info ''
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,25 @@
1
+ require 'vagrant-openstack-illuin-provider/command/openstack_command'
2
+
3
+ module VagrantPlugins
4
+ module Openstack
5
+ module Command
6
+ class NetworkList < OpenstackCommand
7
+ def self.synopsis
8
+ I18n.t('vagrant_openstack.command.network_list_synopsis')
9
+ end
10
+
11
+ def cmd(name, argv, env)
12
+ fail Errors::UnrecognizedArgForCommand, cmd: name, arg: argv[1] if argv.size > 1
13
+ if argv.size == 0
14
+ networks = env[:openstack_client].neutron.get_private_networks(env)
15
+ elsif argv[0] == 'all'
16
+ networks = env[:openstack_client].neutron.get_all_networks(env)
17
+ else
18
+ fail Errors::UnrecognizedArgForCommand, cmd: name, arg: argv[0]
19
+ end
20
+ display_item_list(env, networks)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,16 @@
1
+ require 'vagrant-openstack-illuin-provider/command/utils'
2
+ require 'vagrant-openstack-illuin-provider/command/abstract_command'
3
+
4
+ module VagrantPlugins
5
+ module Openstack
6
+ module Command
7
+ class OpenstackCommand < AbstractCommand
8
+ include VagrantPlugins::Openstack::Command::Utils
9
+
10
+ def before_cmd(_name, _argv, env)
11
+ VagrantPlugins::Openstack::Action::ConnectOpenstack.new(nil, env).call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,20 @@
1
+ require 'vagrant-openstack-illuin-provider/command/utils'
2
+ require 'vagrant-openstack-illuin-provider/command/abstract_command'
3
+
4
+ module VagrantPlugins
5
+ module Openstack
6
+ module Command
7
+ class Reset < AbstractCommand
8
+ def self.synopsis
9
+ I18n.t('vagrant_openstack.command.reset')
10
+ end
11
+
12
+ def cmd(name, argv, env)
13
+ fail Errors::NoArgRequiredForCommand, cmd: name unless argv.size == 0
14
+ FileUtils.remove_dir("#{env[:machine].data_dir}")
15
+ env[:ui].info 'Vagrant OpenStack Provider has been reset'
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ require 'vagrant-openstack-illuin-provider/command/openstack_command'
2
+
3
+ module VagrantPlugins
4
+ module Openstack
5
+ module Command
6
+ class SubnetList < OpenstackCommand
7
+ def self.synopsis
8
+ I18n.t('vagrant_openstack.command.subnet_list_synopsis')
9
+ end
10
+
11
+ def cmd(name, argv, env)
12
+ fail Errors::NoArgRequiredForCommand, cmd: name unless argv.size == 0
13
+ rows = []
14
+ env[:openstack_client].neutron.get_subnets(env).each do |subnet|
15
+ rows << [subnet.id, subnet.name, subnet.cidr, subnet.enable_dhcp, subnet.network_id]
16
+ end
17
+ display_table(env, ['ID', 'Name', 'CIDR', 'DHCP', 'Network ID'], rows)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ require 'terminal-table'
2
+
3
+ module VagrantPlugins
4
+ module Openstack
5
+ module Command
6
+ module Utils
7
+ def display_item_list(env, items)
8
+ rows = []
9
+ items.each do |item|
10
+ rows << [item.id, item.name]
11
+ end
12
+ display_table(env, %w(ID Name), rows)
13
+ end
14
+
15
+ def display_table(env, headers, rows)
16
+ table = Terminal::Table.new headings: headers, rows: rows
17
+ env[:ui].info("\n#{table}")
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ require 'vagrant-openstack-illuin-provider/command/openstack_command'
2
+
3
+ module VagrantPlugins
4
+ module Openstack
5
+ module Command
6
+ class VolumeList < OpenstackCommand
7
+ def self.synopsis
8
+ I18n.t('vagrant_openstack.command.volume_list_synopsis')
9
+ end
10
+
11
+ def cmd(name, argv, env)
12
+ fail Errors::NoArgRequiredForCommand, cmd: name unless argv.size == 0
13
+ volumes = env[:openstack_client].cinder.get_all_volumes(env)
14
+
15
+ rows = []
16
+ volumes.each do |v|
17
+ attachment = "#{v.instance_id} (#{v.device})" unless v.instance_id.nil?
18
+ rows << [v.id, v.name, v.size, v.status, attachment]
19
+ end
20
+ display_table(env, ['ID', 'Name', 'Size (Go)', 'Status', 'Attachment (instance ID and device)'], rows)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end