pec 0.5.2 → 0.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2605a0a503984011df0eab8a874008286bb01ad9
4
- data.tar.gz: 3669c9b826b620cf233fb3e66d8a268010800f96
3
+ metadata.gz: bf28083dd8187e302dd251c338c800cefaffe4d9
4
+ data.tar.gz: bbb7ff389e5c5be0a97f8afbeb203681e26f6bd7
5
5
  SHA512:
6
- metadata.gz: 1de8c4f81632853c43075b064bb6a385b9039672c2c0a2ba801fc7046212fad1ed43eb882a456f4d29418415a8cd1ad53c53013f2e7fff866ac88abaf9a0e334
7
- data.tar.gz: 6d7a8b1e4ab630e61e3032eb2cf0748610ff9dcf2fc83d9fbf1b8e0d63c55544762e41f0b64ee4bd2982f25bd6c2f81024de5b2f578e88e8d8a8061cabc6a925
6
+ metadata.gz: 662c961455e89a1f2869f9e678c522806d2751866908f26b5efc154d214ee7ab957276697dee475fe5a90c791428c79be81c6628002da09f9ab4a0a9206a6b99
7
+ data.tar.gz: 52ae51ea07c15324bb20ec7fa4e428941464feda24ceb740442fd18fd182ea25a881270b8f78bbe645cb1abcc8ea1ba8cc6a83d1e28e6a457ff8b8e98eae997d
data/README.md CHANGED
@@ -39,7 +39,8 @@ pyama-test001:
39
39
  networks:
40
40
  eth0:
41
41
  bootproto: static
42
- allowed_address_pairs: 10.1.1.5/24
42
+ allowed_address_pairs:
43
+ - 10.1.1.5/24
43
44
  ip_address: 10.1.1.1/24
44
45
  gateway: 10.1.1.254
45
46
  dns1: 8.8.8.8
@@ -83,7 +84,7 @@ pyama-test002:
83
84
  | bootproto | ○ | static or dhcp |
84
85
  | ip_address | ※ | 10.1.1.1/24 |
85
86
  | path | | default:/etc/sysconfig/network-scripts/ifcfg-[device_name] |
86
- | allowed_address_pairs | | 10.1.1.2/24 |
87
+ | allowed_address_pairs | | [10.1.1.2/24] |
87
88
 
88
89
  ※ bootproto=static is required
89
90
  Items other than the above are output to the configuration file with `KEY = value` format
data/lib/pec.rb CHANGED
@@ -1,35 +1,28 @@
1
- require 'fog'
1
+ require 'pp'
2
+ require 'base64'
3
+ require 'yao'
4
+ require 'yaml'
5
+ require 'thor'
2
6
  require 'ip'
3
7
  require 'colorator'
4
8
  require "pec/version"
5
9
  require "pec/logger"
6
10
  require "pec/configure"
7
- require "pec/director"
8
11
  require "pec/handler"
9
12
  require "pec/sample"
10
13
  require "pec/init"
11
14
  require "pec/cli"
12
15
 
16
+
13
17
  module Pec
14
- def self.compute
15
- @_compute ||= Fog::Compute.new({
16
- provider: 'openstack'
17
- })
18
- @_compute
19
- end
20
-
21
- def self.neutron
22
- @_neutron ||= Fog::Network.new({
23
- provider: 'openstack'
24
- })
25
- @_neutron
26
- end
27
-
28
- def self.identity
29
- @_identity ||= Fog::Identity.new({
30
- provider: 'openstack'
31
- })
32
- @_identity
18
+ def self.init_yao(_tenant_name=nil)
19
+ check_env
20
+ Yao.configure do
21
+ auth_url "#{ENV["OS_AUTH_URL"]}/tokens"
22
+ username ENV["OS_USERNAME"]
23
+ password ENV["OS_PASSWORD"]
24
+ tenant_name _tenant_name || ENV["OS_TENANT_NAME"]
25
+ end
33
26
  end
34
27
 
35
28
  def self.load_config(file_name=nil)
@@ -44,10 +37,20 @@ module Pec
44
37
  load_config unless @_configure
45
38
  @_configure
46
39
  end
40
+
41
+ def self.check_env
42
+ %w(
43
+ OS_AUTH_URL
44
+ OS_USERNAME
45
+ OS_PASSWORD
46
+ ).each do |name|
47
+ raise "please set env #{name}" unless ENV[name]
48
+ end
49
+ end
50
+
47
51
  end
48
52
 
49
53
  class ::Hash
50
-
51
54
  def deep_merge(second)
52
55
  merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : Array === v1 && Array === v2 ? v1 | v2 : [:undefined, nil, :nil].include?(v2) ? v1 : v2 }
53
56
  self.merge(second.to_h, &merger)
@@ -57,3 +60,4 @@ class ::Hash
57
60
  self.merge!(deep_merge(second))
58
61
  end
59
62
  end
63
+
data/lib/pec/cli.rb CHANGED
@@ -1,30 +1,105 @@
1
1
  require 'pec'
2
- require 'thor'
3
2
  module Pec
4
3
  class CLI < Thor
5
4
 
6
5
  desc 'init', 'create sample config'
7
6
  def init
8
- Pec::Init.create_fog_config
7
+ Pec::Init.show_env_setting
9
8
  Pec::Init.create_template_dir
10
9
  Pec::Init.create_sample_config
11
10
  end
12
11
 
13
12
  desc 'up', 'create vm by Pec.yaml'
14
13
  def up(host_name = nil)
15
- Pec::Director.make(host_name)
14
+ Pec.configure.each do |host|
15
+ next if host_name && host.name != host_name
16
+ Pec.init_yao(host.tenant)
17
+
18
+ server = Yao::Server.list_detail.find {|s|s.name == host.name}
19
+ if server
20
+ Pec::Logger.notice "already exists: #{host.name}"
21
+ next
22
+ end
23
+ Pec::Logger.info "make start #{host.name}"
24
+
25
+ attribute = { name: host.name}
26
+ host.keys.each do |k|
27
+ Pec::Handler.constants.each do |c|
28
+ if Object.const_get("Pec::Handler::#{c}").kind == k
29
+ attribute.deep_merge!(Object.const_get("Pec::Handler::#{c}").build(host))
30
+ end
31
+ end
32
+ end
33
+ p 1
34
+ attribute[:user_data] = Base64.encode64("#cloud-config\n" + attribute[:user_data].to_yaml) if attribute[:user_data]
35
+
36
+ Yao::Server.create(attribute)
37
+ Pec::Logger.info "create success! #{host.name}"
38
+ end
39
+ rescue => e
40
+ print_exception(e)
16
41
  end
17
42
 
18
43
  option :force , type: :boolean, aliases: "-f"
19
44
  desc "destroy", "delete vm"
20
45
  def destroy(host_name = nil)
21
- Pec::Director.destroy(host_name, options)
46
+ Pec.configure.each do |host|
47
+ next if host_name && host.name != host_name
48
+ Pec.init_yao(host.tenant)
49
+
50
+ server = Yao::Server.list_detail.find {|s|s.name == host.name}
51
+ unless server
52
+ Pec::Logger.notice "not be created #{host.name}"
53
+ next
54
+ end
55
+
56
+ if options[:force] || yes?("#{host.name}: Are you sure you want to destroy the '#{host.name}' VM? [y/N]")
57
+ Yao::Server.destroy(server.id)
58
+ Pec::Logger.info "#{host.name} is deleted!"
59
+ end
60
+ end
61
+
62
+ rescue => e
63
+ print_exception(e)
22
64
  end
23
65
 
24
66
  desc "status", "vm status"
25
67
  def status(host_name = nil)
26
68
  say("Current machine stasus:", :yellow)
27
- Pec::Director.status(host_name)
69
+ Pec.configure.each do |host|
70
+ next if host_name && host.name != host_name
71
+ Pec.init_yao(host.tenant)
72
+ if server = Yao::Server.list_detail.find {|s|s.name == host.name}
73
+ puts sprintf(" %-35s %-10s %-10s %-10s %-10s %-35s %-48s",
74
+ host.name,
75
+ server.status,
76
+ Yao::Tenant.list.find {|tenant| tenant.id == server.tenant_id}.name,
77
+ Yao::Flavor.get(server.flavor['id']).name,
78
+ server.availability_zone,
79
+ server.ext_srv_attr_host,
80
+ server.addresses.map do |ethers|
81
+ ethers[1].map do |ether|
82
+ ether["addr"]
83
+ end
84
+ end.flatten.join(",")
85
+ )
86
+ else
87
+ puts sprintf(" %-35s %-10s",
88
+ host.name,
89
+ "uncreated"
90
+ )
91
+ end
92
+ end
93
+
94
+ rescue => e
95
+ print_exception(e)
96
+ end
97
+ no_commands do
98
+
99
+ def print_exception(e)
100
+ Pec::Logger.critical(e)
101
+ Pec::Logger.info("\t" + e.backtrace.join("\n\t"))
102
+ end
28
103
  end
29
104
  end
30
105
  end
data/lib/pec/configure.rb CHANGED
@@ -19,7 +19,7 @@ module Pec
19
19
 
20
20
  def validate(host)
21
21
  %w(
22
- tenant
22
+ tenant
23
23
  image
24
24
  flavor
25
25
  networks
@@ -2,14 +2,8 @@ module Pec::Handler
2
2
  class Base
3
3
  class << self
4
4
  attr_accessor :kind
5
-
6
- %w(image flavor).each do |name|
7
- define_method("fetch_#{name}", -> (host) {
8
- unless resource = Pec.compute.send("#{name}s").find {|val|val.name == host.send(name)}
9
- raise "not fond #{name} #{host.send(name)}"
10
- end
11
- resource
12
- })
5
+ def build
6
+ raise "not defined method"
13
7
  end
14
8
  end
15
9
  end
@@ -5,7 +5,7 @@ module Pec::Handler
5
5
  def self.build(host)
6
6
  Pec::Logger.notice "flavor is #{host.flavor}"
7
7
  {
8
- flavor_ref: fetch_flavor(host).id,
8
+ flavorRef: Yao::Flavor.list.find {|flavor| flavor.name == host.flavor}.id
9
9
  }
10
10
  end
11
11
  end
@@ -5,7 +5,7 @@ module Pec::Handler
5
5
  def self.build(host)
6
6
  Pec::Logger.notice "image is #{host.image}"
7
7
  {
8
- image_ref: fetch_image(host).id
8
+ imageRef: Yao::Image.list.find {|image| image.name == host.image}.id
9
9
  }
10
10
  end
11
11
  end
@@ -1,10 +1,10 @@
1
1
  module Pec::Handler
2
- class Networks < Base
2
+ class Networks < Base
3
3
  self.kind = 'networks'
4
4
  autoload :OptionBase, "pec/handler/networks/option_base"
5
5
  autoload :IpAddress, "pec/handler/networks/ip_address"
6
6
  autoload :AllowedAddressPairs, "pec/handler/networks/allowed_address_pairs"
7
-
7
+
8
8
  class << self
9
9
  NAME = 0
10
10
  CONFIG = 1
@@ -22,7 +22,7 @@ module Pec::Handler
22
22
  user_data << gen_user_data(network, port)
23
23
  end
24
24
  {
25
- nics: ports.map {|port| { port_id: port.id }},
25
+ networks: ports.map {|port| { uuid: nil, port: port.id }},
26
26
  user_data: {
27
27
  'write_files' => user_data
28
28
  }
@@ -40,17 +40,17 @@ module Pec::Handler
40
40
 
41
41
  def create_port(host, network)
42
42
  attribute = gen_port_attribute(host, network)
43
- Pec.neutron.ports.create(attribute)
43
+ Yao::Port.create(attribute)
44
44
  end
45
-
45
+
46
46
  def gen_port_attribute(host, network)
47
47
  ip = IP.new(network[CONFIG]['ip_address'])
48
- subnet = Pec.neutron.subnets.find {|s|s.cidr == ip.network.to_s}
48
+ subnet = Yao::Subnet.list.find {|s|s.cidr == ip.network.to_s}
49
49
  attribute = {
50
50
  name: network[NAME],
51
51
  network_id: subnet.network_id
52
52
  }
53
-
53
+
54
54
  attribute.merge!(
55
55
  security_group(host)
56
56
  ) if host.security_group
@@ -66,7 +66,7 @@ module Pec::Handler
66
66
 
67
67
  attribute
68
68
  end
69
-
69
+
70
70
  def gen_user_data(network, port)
71
71
  path = network[CONFIG]['path'] || "/etc/sysconfig/network-scripts/ifcfg-#{port.name}"
72
72
  {
@@ -76,7 +76,7 @@ module Pec::Handler
76
76
  'permissions' => "0644"
77
77
  }
78
78
  end
79
-
79
+
80
80
  def ifcfg_config(network, port)
81
81
  base = {
82
82
  "name" => port.name,
@@ -95,7 +95,7 @@ module Pec::Handler
95
95
  # delete option column
96
96
  Pec::Handler::Networks.constants.each do |c|
97
97
  network[CONFIG].delete(Object.const_get("Pec::Handler::Networks::#{c}").kind)
98
- end
98
+ end
99
99
 
100
100
  base.merge!(
101
101
  network[CONFIG]
@@ -105,7 +105,9 @@ module Pec::Handler
105
105
 
106
106
  def security_group(host)
107
107
  ids = host.security_group.map do |name|
108
- Pec.neutron.security_groups.find {|sg| sg.name == name}.id
108
+ sg = Yao::SecurityGroup.list.find {|sg| sg.name == name}
109
+ raise "security group #{name} is not found" unless sg
110
+ sg.id
109
111
  end
110
112
  { security_groups: ids }
111
113
  end
@@ -6,7 +6,7 @@ module Pec::Handler
6
6
  def build(network)
7
7
  if network[1]['allowed_address_pairs']
8
8
  pairs = network[1]['allowed_address_pairs'].map do |pair|
9
- { ip_address: pair['ip_address'] }
9
+ { ip_address: pair }
10
10
  end
11
11
  { allowed_address_pairs: pairs }
12
12
  end
@@ -5,10 +5,10 @@ module Pec::Handler
5
5
  class << self
6
6
  def build(network)
7
7
  ip = IP.new(network[1]['ip_address'])
8
- subnet = Pec.neutron.subnets.find {|s|s.cidr == ip.network.to_s}
8
+ subnet = Yao::Subnet.list.find {|s|s.cidr == ip.network.to_s}
9
9
 
10
10
  if ip.to_s != subnet.cidr
11
- {
11
+ {
12
12
  fixed_ips: [
13
13
  { subnet_id: subnet.id, ip_address: ip.to_addr}
14
14
  ]
data/lib/pec/init.rb CHANGED
@@ -21,21 +21,12 @@ module Pec
21
21
  end
22
22
  end
23
23
 
24
- def create_fog_config
25
- thor = Thor.new
26
- if !File.exist?(File.expand_path("~/.fog")) || thor.yes?("Do you want to overwrite the existing ~/.fog? [y/N]")
27
- thor.say("Start Configure by OpenStack", :yellow)
28
- params = {}
29
-
30
- params = %w(auth_url username api_key tenant).inject({}) do |user_input, c|
31
- user_input["openstack_#{c}"] = thor.ask("openstack #{c}:")
32
- user_input
33
- end
34
-
35
- thor.say("Configure Complete!", :blue) if open(File.expand_path("~/.fog"), "w") do |e|
36
- YAML.dump({ "default" => params }, e)
37
- end
38
- end
24
+ def show_env_setting
25
+ thor = Thor.new
26
+ thor.say("please set env this paramater", :yellow)
27
+ puts " export OS_AUTH_URL=http://your_keystone_server:port/v2.0"
28
+ puts " export OS_USERNAME=your name"
29
+ puts " export OS_PASSWORD=your password"
39
30
  end
40
31
  end
41
32
  end
data/lib/pec/sample.rb CHANGED
@@ -8,10 +8,12 @@ module Pec
8
8
  "tenant" => "your_tenant",
9
9
  "image" => "centos-7",
10
10
  "flavor" => "m1.small",
11
+ "allowed_address_pairs" => "nova",
11
12
  "networks" => {
12
13
  "eth0" => {
13
14
  "bootproto" => "static",
14
15
  "ip_address" => "10.0.0.0/24",
16
+ "allowed_address_pairs" => ["10.0.0.1"],
15
17
  "gateway" => "10.0.0.254",
16
18
  "dns1" => "10.0.0.10"
17
19
  },
@@ -24,7 +26,7 @@ module Pec
24
26
  },
25
27
  "security_group" => [
26
28
  "default",
27
- "www from any"
29
+ "www_from_any"
28
30
  ],
29
31
  "templates" => [
30
32
  "web_server.yaml"
@@ -36,6 +38,7 @@ module Pec
36
38
  }
37
39
  }
38
40
  end
41
+
39
42
  def user_data
40
43
  {
41
44
  "hostname" => "pec",
data/lib/pec/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pec
2
- VERSION = "0.5.2"
2
+ VERSION = "0.6.0"
3
3
  end
data/pec.gemspec CHANGED
@@ -18,9 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
  spec.add_dependency 'thor', '~> 0.19.1'
21
- spec.add_dependency 'fog', '>= 1.34.0'
21
+ spec.add_dependency 'yao', '>= 0.0.2'
22
22
  spec.add_dependency 'ruby-ip', '~> 0.9.3'
23
- spec.add_dependency 'activesupport', '~> 4.2.1'
24
23
  spec.add_dependency 'colorator', '~> 0.1'
25
24
  spec.add_development_dependency "bundler"
26
25
  spec.add_development_dependency "rspec"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kazuhiko yamashita
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-05 00:00:00.000000000 Z
11
+ date: 2015-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -25,19 +25,19 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.19.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: fog
28
+ name: yao
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.34.0
33
+ version: 0.0.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.34.0
40
+ version: 0.0.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: ruby-ip
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.9.3
55
- - !ruby/object:Gem::Dependency
56
- name: activesupport
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 4.2.1
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 4.2.1
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: colorator
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -145,7 +131,6 @@ files:
145
131
  - lib/pec.rb
146
132
  - lib/pec/cli.rb
147
133
  - lib/pec/configure.rb
148
- - lib/pec/director.rb
149
134
  - lib/pec/handler.rb
150
135
  - lib/pec/handler/availability_zone.rb
151
136
  - lib/pec/handler/base.rb
@@ -182,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
167
  version: '0'
183
168
  requirements: []
184
169
  rubyforge_project:
185
- rubygems_version: 2.4.6
170
+ rubygems_version: 2.2.2
186
171
  signing_key:
187
172
  specification_version: 4
188
173
  summary: openstack vm booter.
data/lib/pec/director.rb DELETED
@@ -1,111 +0,0 @@
1
- module Pec
2
- class Director
3
- def self.make(host_name)
4
- Pec.configure.each do |host|
5
- next if host_name && host.name != host_name
6
- Pec::Logger.info "make start #{host.name}"
7
- Pec.compute.set_tenant(host.tenant)
8
- Pec.neutron.set_tenant_patch(host.tenant)
9
-
10
- attribute = { name: host.name}
11
- host.keys.each do |k|
12
- Pec::Handler.constants.each do |c|
13
- if Object.const_get("Pec::Handler::#{c}").kind == k
14
- attribute.deep_merge!(Object.const_get("Pec::Handler::#{c}").build(host))
15
- end
16
- end
17
- end
18
-
19
- attribute[:user_data] = "#cloud-config\n" + attribute[:user_data].to_yaml if attribute[:user_data]
20
- Pec::Logger.info "create success! #{host.name}" if Pec.compute.servers.create(attribute)
21
- end
22
-
23
- rescue Excon::Errors::Error => e
24
- excon_err_message(e)
25
- rescue => e
26
- Pec::Logger.critical(e)
27
- end
28
-
29
- def self.destroy(host_name, options)
30
- Pec.configure.each do |host|
31
- next if host_name && host.name != host_name
32
- Pec.compute.set_tenant(host.tenant)
33
-
34
- server = Pec.compute.servers.find {|s|s.name == host.name}
35
- unless server
36
- Pec::Logger.notice "not be created #{host.name}"
37
- next
38
- end
39
-
40
- if options[:force] || Thor.new.yes?("#{host.name}: Are you sure you want to destroy the '#{host.name}' VM? [y/N]")
41
- Pec::Logger.info "#{host.name} is deleted!" if Pec.compute.servers.destroy(server.id)
42
- end
43
- end
44
-
45
- rescue Excon::Errors::Error => e
46
- excon_err_message(e)
47
- rescue => e
48
- Pec::Logger.critical(e)
49
- end
50
-
51
- def self.status(host_name)
52
- Pec.configure.each do |host|
53
- next if host_name && host.name != host_name
54
- if server = Pec.compute.servers.find {|s|s.name == host.name}
55
- puts sprintf(" %-35s %-10s %-10s %-10s %-10s %-35s %-48s",
56
- host.name,
57
- server.state,
58
- Pec.identity.tenants.find_by_id(server.tenant_id),
59
- Pec.compute.flavors.get(server.flavor['id']).name,
60
- server.availability_zone,
61
- server.os_ext_srv_attr_host,
62
- server.addresses.map do |ethers|
63
- ethers[1].map do |ether|
64
- ether["addr"]
65
- end
66
- end.flatten.join(",")
67
- )
68
- else
69
- puts sprintf(" %-35s %-10s",
70
- host.name,
71
- "uncreated"
72
- )
73
- end
74
- end
75
-
76
- rescue Excon::Errors::Error => e
77
- excon_err_message(e)
78
- rescue => e
79
- Pec::Logger.critical(e)
80
- end
81
-
82
- def self.excon_err_message(e)
83
- if e.response
84
- JSON.parse(e.response[:body]).each { |e,m| Pec::Logger.critical("#{e}:#{m["message"]}") }
85
- else
86
- Pec::Logger.critical(e)
87
- end
88
- end
89
- end
90
- end
91
-
92
- module Fog
93
- module Network
94
- class OpenStack
95
- class Real
96
- def set_tenant_patch(tenant)
97
- @openstack_must_reauthenticate = true
98
- @openstack_tenant = tenant.to_s
99
- authenticate
100
- @path.sub!(/\/$/, '')
101
- unless @path.match(SUPPORTED_VERSIONS)
102
- @path = "/" + Fog::OpenStack.get_supported_version(SUPPORTED_VERSIONS,
103
- @openstack_management_uri,
104
- @auth_token,
105
- @connection_options)
106
- end
107
- end
108
- end
109
- end
110
- end
111
- end