vagrant-openstack-illuin-provider 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
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