diff --git a/.gitignore b/.gitignore index bb9839ff9..9b0952418 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,4 @@ gemfiles/Gemfile-1.9.lock .DS_Store .idea/ vendor/bundle -test/lorem.txt \ No newline at end of file +test/lorem.txt diff --git a/.rubocop.yml b/.rubocop.yml index 3ffe2b0d8..cc32da4b9 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,2 +1 @@ inherit_from: .rubocop_todo.yml - diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 3911878d2..31ce80f90 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -134,17 +134,31 @@ Metrics/PerceivedComplexity: # Offense count: 25 Naming/AccessorMethodName: Exclude: - - 'lib/fog/baremetal/openstack/models/node.rb' - - 'lib/fog/compute/openstack/models/addresses.rb' - - 'lib/fog/compute/openstack/requests/set_tenant.rb' - - 'lib/fog/identity/openstack/v2/requests/set_tenant.rb' - - 'lib/fog/image/openstack/v1/requests/set_tenant.rb' - - 'lib/fog/image/openstack/v2/requests/set_tenant.rb' - - 'lib/fog/network/openstack/requests/get_quotas.rb' - - 'lib/fog/network/openstack/requests/set_tenant.rb' - - 'lib/fog/shared_file_system/openstack/requests/get_limits.rb' - - 'lib/fog/volume/openstack/requests/set_tenant.rb' - 'test/requests/compute/helper.rb' + - 'test/requests/compute/helper.rb' + - 'test/requests/compute/helper.rb' + - 'test/requests/compute/helper.rb' + - 'test/requests/compute/helper.rb' + - 'lib/fog/openstack/identity/v2/requests/set_tenant.rb' + - 'lib/fog/openstack/identity/v2/requests/set_tenant.rb' + - 'lib/fog/openstack/network/requests/set_tenant.rb' + - 'lib/fog/openstack/network/requests/set_tenant.rb' + - 'lib/fog/openstack/network/requests/get_quotas.rb' + - 'lib/fog/openstack/network/requests/get_quotas.rb' + - 'lib/fog/openstack/baremetal/models/node.rb' + - 'lib/fog/openstack/baremetal/models/node.rb' + - 'lib/fog/openstack/baremetal/models/node.rb' + - 'lib/fog/openstack/image/v1/requests/set_tenant.rb' + - 'lib/fog/openstack/image/v1/requests/set_tenant.rb' + - 'lib/fog/openstack/image/v2/requests/set_tenant.rb' + - 'lib/fog/openstack/image/v2/requests/set_tenant.rb' + - 'lib/fog/openstack/shared_file_system/requests/get_limits.rb' + - 'lib/fog/openstack/shared_file_system/requests/get_limits.rb' + - 'lib/fog/openstack/compute/models/addresses.rb' + - 'lib/fog/openstack/compute/requests/set_tenant.rb' + - 'lib/fog/openstack/compute/requests/set_tenant.rb' + - 'lib/fog/openstack/volume/requests/set_tenant.rb' + - 'lib/fog/openstack/volume/requests/set_tenant.rb' # Offense count: 3 # Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms. @@ -344,15 +358,10 @@ Style/MethodDefParentheses: Exclude: - 'lib/fog/openstack.rb' -# Offense count: 7 -Style/MethodMissing: +# Offense count: 2 +Style/MissingRespondToMissing: Exclude: - - 'lib/fog/baremetal/openstack/models/chassis_collection.rb' - - 'lib/fog/baremetal/openstack/models/nodes.rb' - - 'lib/fog/baremetal/openstack/models/ports.rb' - - 'lib/fog/image/openstack/v1/models/images.rb' - 'lib/fog/image/openstack/v2/models/image.rb' - - 'lib/fog/image/openstack/v2/models/images.rb' - 'lib/fog/planning/openstack/models/plans.rb' # Offense count: 2 diff --git a/.ruby-version b/.ruby-version deleted file mode 100644 index eca07e4c1..000000000 --- a/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -2.1.2 diff --git a/.travis.yml b/.travis.yml index ccb5b43f7..19e3e60da 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: ruby sudo: false before_install: - - gem update bundler + - gem install bundler --version '~> 1' script: - bundle exec rake test TESTOPTS="--verbose" - bundle exec rake spec @@ -10,13 +10,13 @@ env: matrix: fast_finish: true include: - - rvm: 2.2.0 + - rvm: 2.3.8 gemfile: Gemfile - - rvm: 2.3.0 + - rvm: 2.4.5 gemfile: Gemfile - - rvm: 2.3.1 + - rvm: 2.5.3 gemfile: Gemfile - - rvm: 2.4.2 + - rvm: 2.6.0 gemfile: Gemfile - rvm: jruby-head gemfile: Gemfile diff --git a/.zuul.yaml b/.zuul.yaml new file mode 100644 index 000000000..d8cfc0af8 --- /dev/null +++ b/.zuul.yaml @@ -0,0 +1,35 @@ +- project: + check: + jobs: + - fog-openstack-unittest-test + - fog-openstack-unittest-spec + +- job: + name: fog-openstack-unittest-test + parent: init-test + description: | + fog-openstack unittest test tests + run: playbooks/fog-openstack-unittest-test/run.yaml + vars: + rvm: + 2.3.8 + 2.4.5 + 2.5.3 + 2.6.0 + jruby-head + nodeset: ubuntu-xenial + +- job: + name: fog-openstack-unittest-spec + parent: init-test + description: | + fog-openstack unittest spec tests + run: playbooks/fog-openstack-unittest-spec/run.yaml + vars: + rvm: + 2.3.8 + 2.4.5 + 2.5.3 + 2.6.0 + jruby-head + nodeset: ubuntu-xenial diff --git a/README.md b/README.md index 378321538..844e65403 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Fog::Openstack +# Fog::OpenStack [![Gem Version](https://badge.fury.io/rb/fog-openstack.svg)](http://badge.fury.io/rb/fog-openstack) [![Build Status](https://travis-ci.org/fog/fog-openstack.svg?branch=master)](https://travis-ci.org/fog/fog-openstack) [![Dependency Status](https://gemnasium.com/fog/fog-openstack.svg)](https://gemnasium.com/fog/fog-openstack) [![Coverage Status](https://coveralls.io/repos/github/fog/fog-openstack/badge.svg?branch=master)](https://coveralls.io/github/fog/fog-openstack?branch=master) [![Code Climate](https://codeclimate.com/github/fog/fog-openstack.svg)](https://codeclimate.com/github/fog/fog-openstack) [![Join the chat at https://gitter.im/fog/fog-openstack](https://badges.gitter.im/fog/fog-openstack.svg)](https://gitter.im/fog/fog-openstack?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) @@ -42,12 +42,12 @@ Checklist: * All following examples assume that `@connection_params` is a hash of valid connection information for an OpenStack cloud. * The `:openstack_username` and `:openstack_api_key` keys must map to a valid user/password combination in Keystone. * If you don't know what domain your user belongs to, chances are it's the `default` domain. By default, all users are a member of the `default` domain unless otherwise specified. - +* Keystone endpoints are version less. Version 3 is the default as v2.0 is deprecated. Meanwhile Keystone V3 still supports v2.0 for backward compatibility. Therefore passing a tenant instead of a project (along with a domain) makes Keystone provide v2.0 token. Connection parameters: ```ruby @connection_params = { - openstack_auth_url: "http://devstack.test:5000/v3/auth/tokens", + openstack_auth_url: "http://devstack.test:5000", openstack_username: "admin", openstack_api_key: "password", openstack_project_name: "admin", @@ -55,14 +55,15 @@ Connection parameters: } ``` -If you're using Keystone V2, you don't need to supply domain details but ensure the `openstack_auth_url` parameter references the correct endpoint. +If you're using Keystone V2, you don't need to supply domain details but ensure to either provide a tenant name (`openstack_tenant`) +or a tenant id (`openstack_tenant_id`). Alternatively you can use `:openstack_identity_api_version` parameter with 'v2.0'. ```ruby @connection_params = { - openstack_auth_url: "http://devstack.test:5000/v2.0/tokens", - openstack_username: "admin", - openstack_api_key: "password", - openstack_project_name: "admin" + openstack_auth_url: "http://devstack.test:5000", + openstack_username: "admin", + openstack_api_key: "password", + openstack_tenant: "admin" } ``` @@ -81,21 +82,21 @@ The exception is if you're using Nova (and not Neutron) for your instance networ Initialise a connection to the compute service: ```ruby -compute = Fog::Compute::OpenStack.new(@connection_params) +compute = Fog::OpenStack::Compute.new(@connection_params) ``` Get a list of available images for use with booting new instances: ```ruby p compute.images -# => +# > # ] # > ``` @@ -104,9 +105,9 @@ List available flavors so we can decide how powerful to make this instance: ```ruby p compute.flavors -# => , -# {:duration=>17.359134} p instance -# => [{"OS-EXT-IPS-MAC:mac_addr"=>"fa:16:3e:f4:75:ab", "version"=>4, "addr"=>"1.2.3.4", "OS-EXT-IPS:type"=>"fixed"}]}, @@ -176,11 +177,11 @@ Allow TCP traffic through port 22: ```ruby security_group = compute.security_groups.create name: "Test SSH", description: "Allow access to port 22" -# => +# > # ] # > ``` @@ -410,9 +411,9 @@ List projects (aka tenants): ```ruby identity.projects -# => @@ -501,7 +502,7 @@ Set up a project's public gateway (needed for external access): ```ruby -identity = Fog::Identity::OpenStack.new(@connection_params) +identity = Fog::OpenStack::Identity.new(@connection_params) tenants = identity.projects.select do |project| project.name == @connection_params[:openstack_project_name] @@ -509,7 +510,7 @@ end tenant_id = tenants[0].id -neutron = Fog::Network::OpenStack.new(@connection_params) +neutron = Fog::OpenStack::Network.new(@connection_params) network = neutron.networks.create name: "default", tenant_id: tenant_id diff --git a/Rakefile b/Rakefile index 218a7df63..a0b9e15fd 100644 --- a/Rakefile +++ b/Rakefile @@ -4,31 +4,39 @@ require 'rake/testtask' RuboCop::RakeTask.new -task default: :test +task default: ['tests:mock', 'tests:spec', 'tests:unit'] -desc 'Run fog-openstack unit tests with Minitest' -task :test do - mock = ENV['FOG_MOCK'] || 'true' - sh("export FOG_MOCK=#{mock} && bundle exec rake tests:unit") -end +task mock: 'tests:mock' desc 'Run fog-openstack spec/ tests (VCR)' task spec: "tests:spec" +task unit: 'tests:unit' + namespace :tests do - desc "Run fog-openstack test/" + desc 'Run fog-openstack tests with Mock class' Rake::TestTask.new do |t| - t.name = 'unit' + ENV['FOG_MOCK'] = ENV['FOG_MOCK'].nil? ? 'true' : ENV['FOG_MOCK'] + + t.name = 'mock' t.libs.push ["lib", "test"] t.test_files = FileList['test/**/*.rb'] t.verbose = true end - desc "Run fog-openstack spec/" + desc 'Run fog-openstack tests with RSpec and VCR' Rake::TestTask.new do |t| t.name = 'spec' t.libs.push ["lib", "spec"] t.pattern = 'spec/**/*_spec.rb' t.verbose = true end + + desc 'Run fog-openstack unit tests' + Rake::TestTask.new do |t| + t.name = 'unit' + t.libs.push ["lib", "unit"] + t.pattern = 'unit/**/*_test.rb' + t.verbose = true + end end diff --git a/docs/compute.md b/docs/compute.md index 18454e513..675b10aea 100644 --- a/docs/compute.md +++ b/docs/compute.md @@ -16,7 +16,7 @@ Once `irb` has launched you need to require the Fog library by executing: Next, create a connection to the Compute Service: - service = Fog::Compute::OpenStack.new({ + service = Fog::OpenStack::Compute.new({ :openstack_auth_url => 'http://KEYSTONE_HOST:KEYSTONE_PORT/v2.0/tokens', # OpenStack Keystone endpoint :openstack_username => OPEN_STACK_USER, # Your OpenStack Username :openstack_tenant => OPEN_STACK_TENANT, # Your tenant id @@ -71,7 +71,7 @@ This will return: {"flavors"=>[{"id"=>"1", "links"=>[{"href"=>"http://localhost:8774/v2/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/1", "rel"=>"self"}, {"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/1", "rel"=>"bookmark"}], "name"=>"m1.tiny"}, {"id"=>"2", "links"=>[{"href"=>"http://localhost:8774/v2/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/2", "rel"=>"self"}, {"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/2", "rel"=>"bookmark"}], "name"=>"m1.small"}, {"id"=>"3", "links"=>[{"href"=>"http://localhost:8774/v2/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/3", "rel"=>"self"}, {"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/3", "rel"=>"bookmark"}], "name"=>"m1.medium"}, {"id"=>"4", "links"=>[{"href"=>"http://localhost:8774/v2/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/4", "rel"=>"self"}, {"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/4", "rel"=>"bookmark"}], "name"=>"m1.large"}, {"id"=>"42", "links"=>[{"href"=>"http://localhost:8774/v2/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/42", "rel"=>"self"}, {"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/42", "rel"=>"bookmark"}], "name"=>"m1.nano"}, {"id"=>"5", "links"=>[{"href"=>"http://localhost:8774/v2/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/5", "rel"=>"self"}, {"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/5", "rel"=>"bookmark"}], "name"=>"m1.xlarge"}, {"id"=>"84", "links"=>[{"href"=>"http://localhost:8774/v2/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/84", "rel"=>"self"}, {"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/84", "rel"=>"bookmark"}], "name"=>"m1.micro"}]} -To learn more about Compute request methods refer to [rdoc](http://rubydoc.info/gems/fog/Fog/Compute/Openstack/Real). To learn more about Excon refer to [Excon GitHub repo](https://github.com/geemus/excon). +To learn more about Compute request methods refer to [rdoc](http://rubydoc.info/gems/fog/fog/openstack/compute/Real). To learn more about Excon refer to [Excon GitHub repo](https://github.com/geemus/excon). ### Model Layer @@ -137,13 +137,13 @@ To retrieve a list of available images: service.images -This returns a collection of `Fog::Compute::OpenStack::Image` models: +This returns a collection of `Fog::OpenStack::Compute::Image` models: - , - @@ -167,7 +167,7 @@ This returns a collection of `Fog::Compute::OpenStack::Image` models: >, links=[{"href"=>"http://localhost:8774/v2/b5bf8e689bc64844b1d08094a2f2bdd5/images/821e2b73-5aed-4f9d-aaa7-2f4f297779f3", "rel"=>"self"}, {"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/images/821e2b73-5aed-4f9d-aaa7-2f4f297779f3", "rel"=>"bookmark"}, {"href"=>"http://localhost:9292/b5bf8e689bc64844b1d08094a2f2bdd5/images/821e2b73-5aed-4f9d-aaa7-2f4f297779f3", "type"=>"application/vnd.openstack.image", "rel"=>"alternate"}] >, - , links=[{"href"=>"http://localhost:8774/v2/b5bf8e689bc64844b1d08094a2f2bdd5/images/e21af7e2-a181-403a-84a4-fd9df36cb963", "rel"=>"self"}, {"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/images/e21af7e2-a181-403a-84a4-fd9df36cb963", "rel"=>"bookmark"}, {"href"=>"http://localhost:9292/b5bf8e689bc64844b1d08094a2f2bdd5/images/e21af7e2-a181-403a-84a4-fd9df36cb963", "type"=>"application/vnd.openstack.image", "rel"=>"alternate"}] @@ -190,9 +190,9 @@ To retrieve individual image: service.images.get "821e2b73-5aed-4f9d-aaa7-2f4f297779f3" -This returns an `Fog::Compute::OpenStack::Image` instance: +This returns an `Fog::OpenStack::Compute::Image` instance: - , - @@ -223,11 +223,11 @@ To retrieve a list of available flavors: service.flavors -This returns a collection of `Fog::Compute::OpenStack::Flavor` models: +This returns a collection of `Fog::OpenStack::Compute::Flavor` models: - , - [{"OS-EXT-IPS-MAC:mac_addr"=>"fa:16:3e:14:34:b8", "version"=>4, "addr"=>"10.0.0.5", "OS-EXT-IPS:type"=>"fixed"}]}, flavor={"id"=>"1", "links"=>[{"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/1", "rel"=>"bookmark"}]}, host_id="bb705edc279c520d97ad6fbd0b8e75a5c716388616f58e527d0ff633", image={"id"=>"821e2b73-5aed-4f9d-aaa7-2f4f297779f3", "links"=>[{"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/images/821e2b73-5aed-4f9d-aaa7-2f4f297779f3", "rel"=>"bookmark"}]}, - metadata= , links=[{"href"=>"http://localhost:8774/v2/b5bf8e689bc64844b1d08094a2f2bdd5/servers/4572529c-0cfc-433e-8dbf-7cc383ed5b7c", "rel"=>"self"}, {"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/servers/4572529c-0cfc-433e-8dbf-7cc383ed5b7c", "rel"=>"bookmark"}], @@ -331,16 +331,16 @@ To return an individual server: service.servers.get "4572529c-0cfc-433e-8dbf-7cc383ed5b7c" -This returns a `Fog::Compute::OpenStack::Server` instance: +This returns a `Fog::OpenStack::Compute::Server` instance: - [{"OS-EXT-IPS-MAC:mac_addr"=>"fa:16:3e:14:34:b8", "version"=>4, "addr"=>"10.0.0.5", "OS-EXT-IPS:type"=>"fixed"}]}, flavor={"id"=>"1", "links"=>[{"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/1", "rel"=>"bookmark"}]}, host_id="bb705edc279c520d97ad6fbd0b8e75a5c716388616f58e527d0ff633", image={"id"=>"821e2b73-5aed-4f9d-aaa7-2f4f297779f3", "links"=>[{"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/images/821e2b73-5aed-4f9d-aaa7-2f4f297779f3", "rel"=>"bookmark"}]}, - metadata= , links=[{"href"=>"http://localhost:8774/v2/b5bf8e689bc64844b1d08094a2f2bdd5/servers/4572529c-0cfc-433e-8dbf-7cc383ed5b7c", "rel"=>"self"}, {"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/servers/4572529c-0cfc-433e-8dbf-7cc383ed5b7c", "rel"=>"bookmark"}], @@ -380,16 +380,16 @@ To create a server: **Note**: The `:name`, `:flavor_ref`, and `image_ref` attributes are required for server creation. -This will return a `Fog::Compute::OpenStack::Server` instance: +This will return a `Fog::OpenStack::Compute::Server` instance: - , links=[{"href"=>"http://localhost:8774/v2/b5bf8e689bc64844b1d08094a2f2bdd5/servers/81746324-94ab-44fb-9aa9-ee0b4d95fa34", "rel"=>"self"}, {"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/servers/81746324-94ab-44fb-9aa9-ee0b4d95fa34", "rel"=>"bookmark"}], @@ -423,14 +423,14 @@ Notice that your server contains several `nil` attributes. To see the latest sta You can see that the server is currently being built: - [{"OS-EXT-IPS-MAC:mac_addr"=>"fa:16:3e:71:0d:c4", "version"=>4, "addr"=>"10.0.0.2", "OS-EXT-IPS:type"=>"fixed"}]}, flavor={"id"=>"1", "links"=>[{"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/flavors/1", "rel"=>"bookmark"}]}, host_id="bb705edc279c520d97ad6fbd0b8e75a5c716388616f58e527d0ff633", image={"id"=>"821e2b73-5aed-4f9d-aaa7-2f4f297779f3", "links"=>[{"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/images/821e2b73-5aed-4f9d-aaa7-2f4f297779f3", "rel"=>"bookmark"}]}, - metadata= , links=[{"href"=>"http://localhost:8774/v2/b5bf8e689bc64844b1d08094a2f2bdd5/servers/5f50aeff-a745-4cbc-9f8b-0356142e6f95", "rel"=>"self"}, {"href"=>"http://localhost:8774/b5bf8e689bc64844b1d08094a2f2bdd5/servers/5f50aeff-a745-4cbc-9f8b-0356142e6f95", "rel"=>"bookmark"}], @@ -464,7 +464,7 @@ Fog can wait for the server to become ready as follows: server.wait_for { ready? } -**Note**: The `Fog::Compute::OpenStack::Server` instance returned from the create method contains a `password` attribute. The `password` attribute will NOT be present in subsequent retrievals either through `service.servers` or `service.servers.get my_server_id`. +**Note**: The `Fog::OpenStack::Compute::Server` instance returned from the create method contains a `password` attribute. The `password` attribute will NOT be present in subsequent retrievals either through `service.servers` or `service.servers.get my_server_id`. ### Additional Parameters @@ -481,7 +481,7 @@ The `create` method also supports the following key values: :personality - Array of files to be injected onto the server. Please refer to the Fog personality API documentation for further information. + Array of files to be injected onto the server. Please refer to the Fog personality API documentation for further information. diff --git a/docs/introspection.md b/docs/introspection.md index 56d7cd25e..847b671be 100644 --- a/docs/introspection.md +++ b/docs/introspection.md @@ -92,7 +92,7 @@ require 'fog/openstack' Find the available Baremetal nodes. ```ruby -iron = Fog::Baremetal::OpenStack.new(@connection_params) +iron = Fog::OpenStack::Baremetal.new(@connection_params) nodes = iron.node_list ``` @@ -109,7 +109,7 @@ http://docs.openstack.org/developer/ironic/deploy/install-guide.html#hardware-in ```ruby node_id = nodes.body["nodes"][0]["uuid"] -inspector = Fog::Introspection::OpenStack.new(@connection_params) +inspector = Fog::OpenStack::Introspection.new(@connection_params) introspection1 = inspector.create_introspection(node_id) ``` diff --git a/docs/metering.md b/docs/metering.md index 278b2df52..c486575d3 100644 --- a/docs/metering.md +++ b/docs/metering.md @@ -9,7 +9,7 @@ Fog uses the [OpenStack Metering API](http://docs.openstack.org/developer/ceilom Get a handle on the Metering service: ```ruby -service = Fog::Metering::OpenStack.new({ +service = Fog::OpenStack::Metering.new({ :openstack_auth_url => 'http://KEYSTONE_HOST:KEYSTONE_PORT/v2.0/tokens', # OpenStack Keystone endpoint :openstack_username => OPEN_STACK_USER, # Your OpenStack Username :openstack_tenant => OPEN_STACK_TENANT, # Your tenant id diff --git a/docs/network.md b/docs/network.md index 498e28c7c..ab853620d 100644 --- a/docs/network.md +++ b/docs/network.md @@ -16,7 +16,7 @@ require 'fog/openstack' Next, create a connection to the Network Service: ``` -service = Fog::Network::OpenStack.new( +service = Fog::OpenStack::Network.new( :openstack_auth_url => 'http://KEYSTONE_HOST:KEYSTONE_PORT/v3/auth/tokens', # OpenStack Keystone v3 endpoint :openstack_username => OPEN_STACK_USER, # Your OpenStack Username :openstack_domain_name => OPEN_STACK_DOMAIN, # Your OpenStack Domain name @@ -104,7 +104,7 @@ This will return: {"id"=>"e624a36d-762b-481f-9b50-4154ceb78bbb", "name"=>"network_1", "subnets"=>["2e4ec6a4-0150-47f5-8523-e899ac03026e"], "shared"=>false, "status"=>"ACTIVE", "admin_state_up"=>true, "tenant_id"=>"f8b26a6032bc47718a7702233ac708b9"}] } ``` -To learn more about Network request methods refer to [rdoc](http://www.rubydoc.info/gems/fog-openstack/Fog/Network/OpenStack/Real). To learn more about Excon refer to [Excon GitHub repo](https://github.com/geemus/excon). +To learn more about Network request methods refer to [rdoc](http://www.rubydoc.info/gems/fog-openstack/fog/openstack/network/Real). To learn more about Excon refer to [Excon GitHub repo](https://github.com/geemus/excon). ### Model Layer @@ -182,14 +182,14 @@ networks = service.networks ``` This returns in the following `Fog::OpenStack::Model`: ``` -] + [] >, shared=true, status="ACTIVE", @@ -200,10 +200,10 @@ This returns in the following `Fog::OpenStack::Model`: provider_segmentation_id=nil, router_external=false >, - , diff --git a/docs/orchestration.md b/docs/orchestration.md index 0051c1ecc..a661217fb 100644 --- a/docs/orchestration.md +++ b/docs/orchestration.md @@ -25,7 +25,7 @@ _Source: [OpenStack Wiki](https://wiki.openstack.org/wiki/Heat)_ Get a handle on the Orchestration service: ```ruby -service = Fog::Orchestration::OpenStack.new({ +service = Fog::OpenStack::Orchestration.new({ :openstack_auth_url => 'http://KEYSTONE_HOST:KEYSTONE_PORT/v2.0/tokens', # OpenStack Keystone endpoint :openstack_username => OPEN_STACK_USER, # Your OpenStack Username :openstack_tenant => OPEN_STACK_TENANT, # Your tenant id @@ -46,9 +46,9 @@ service.stacks ``` This returns a list of stacks with minimum attributes, leaving other attributes empty ```ruby -=> ``` @@ -212,9 +212,9 @@ You can list `Events` of a `stack`: ```ruby stack.events -=> "http://10.8.96.4:8004/v1/5d139d95546240748508b2a518aa5bef/stacks/progenerated/0c9ee370-ef64-4a80-a6cc-65d2277caeb9", "rel"=>"self"}], @@ -260,7 +260,7 @@ An `event` has an associated `resource`: ```ruby resource = event.resource -=> 1}) -=> "http://10.8.96.4:8004/v1/5d139d95546240748508b2a518aa5bef/stacks/progenerated/0c9ee370-ef64-4a80-a6cc-65d2277caeb9", "rel"=>"self"}], @@ -332,7 +332,7 @@ You can validate a template (either HOT or CFN) before using it: ```ruby service.templates.validate(:template => content) -=> :planning, # OpenStack Fog service :openstack_username => USERNAME, # Your OpenStack Username :openstack_api_key => PASSWORD, # Your OpenStack Password @@ -48,7 +48,7 @@ Fog provides both a **model** and **request** abstraction. The request abstracti ### Request Layer -The `Fog::Openstack[:planning]` object supports a number of methods that wrap individual HTTP requests to the Tuskar API. +The `Fog::OpenStack::Planning.new` object supports a number of methods that wrap individual HTTP requests to the Tuskar API. To see a list of requests supported by the planning service: @@ -170,7 +170,7 @@ This will return hash similar to: ``` [//]: # (TODO: Specify URL to rubydoc.info when OpenStack Planning service is part of release and pages are built) -To learn more about `Fog::Openstack[:planning]` request methods refer to [rdoc](http://rubydoc.info/gems/fog/Fog). To learn more about Excon refer to [Excon GitHub repo](https://github.com/geemus/excon). +To learn more about `Fog::OpenStack::Planning.new` request methods refer to [rdoc](http://rubydoc.info/gems/fog/Fog). To learn more about Excon refer to [Excon GitHub repo](https://github.com/geemus/excon). ### Model Layer diff --git a/docs/shared_file_system.md b/docs/shared_file_system.md index 0724e3708..9de9fa991 100644 --- a/docs/shared_file_system.md +++ b/docs/shared_file_system.md @@ -22,7 +22,7 @@ require 'fog/openstack' Next, create a connection to the Shared File System Service: ``` -service = Fog::SharedFileSystem::OpenStack.new( +service = Fog::OpenStack::SharedFileSystem.new( :openstack_auth_url => 'http://KEYSTONE_HOST:KEYSTONE_PORT/v3/auth/tokens', # OpenStack Keystone v3 endpoint :openstack_username => OPEN_STACK_USER, # Your OpenStack Username :openstack_domain_name => OPEN_STACK_DOMAIN, # Your OpenStack Domain name diff --git a/docs/storage.md b/docs/storage.md index 5ad99d6e9..54b9276f4 100644 --- a/docs/storage.md +++ b/docs/storage.md @@ -29,7 +29,7 @@ require 'fog/openstack' Next, create a connection to Swift: ```ruby -service = Fog::Storage::OpenStack.new({ +service = Fog::OpenStack::Storage.new({ :openstack_username => USERNAME, # Your OpenStack Username :openstack_api_key => PASSWORD, # Your OpenStack Password :openstack_auth_url => 'http://YOUR_OPENSTACK_ENDPOINT:PORT/v2.0/tokens', @@ -126,7 +126,7 @@ This will return: {"X-Account-Bytes-Used"=>"2563554", "Date"=>"Thu, 21 Feb 2013 21:57:02 GMT", "X-Account-Meta-Temp-Url-Key"=>"super_secret_key", "X-Timestamp"=>"1354552916.82056", "Content-Length"=>"0", "Content-Type"=>"application/json; charset=utf-8", "X-Trans-Id"=>"txe934924374a744c8a6c40dd8f29ab94a", "Accept-Ranges"=>"bytes", "X-Account-Container-Count"=>"7", "X-Account-Object-Count"=>"5"} ``` -To learn more about `Fog::Storage` request methods refer to [rdoc](http://rubydoc.info/gems/fog/Fog/Storage/OpenStack/Real). To learn more about Excon refer to [Excon GitHub repo](https://github.com/geemus/excon). +To learn more about `Fog::Storage` request methods refer to [rdoc](http://rubydoc.info/gems/fog/fog/openstack/storage/Real). To learn more about Excon refer to [Excon GitHub repo](https://github.com/geemus/excon). ### Model Layer @@ -184,7 +184,7 @@ To retrieve a list of directories: service.directories ``` -This returns a collection of `Fog::Storage::OpenStack::Directory` models: +This returns a collection of `Fog::OpenStack::Storage::Directory` models: ## Get Directory @@ -194,7 +194,7 @@ To retrieve a specific directory: service.directories.get "blue" ``` -This returns a `Fog::Storage::OpenStack::Directory` instance: +This returns a `Fog::OpenStack::Storage::Directory` instance: ## Create Directory @@ -257,7 +257,7 @@ To upload a file into a directory: file = directory.files.create :key => 'space.jpg', :body => File.open "space.jpg" ``` -**Note**: For files larger than 5 GB please refer to the [Upload Large Files](#upload_large_files) section. +**Note**: For files larger than 5 GB please refer to the [Upload Large Files](#upload-large-files) section. ### Additional Parameters diff --git a/docs/workflow.md b/docs/workflow.md index cb7544cf0..8577683c7 100644 --- a/docs/workflow.md +++ b/docs/workflow.md @@ -9,7 +9,7 @@ Fog uses the [OpenStack Mistral API](http://docs.openstack.org/developer/mistral Get a handle for the Workflow service: ```ruby -service = Fog::Workflow::OpenStack.new({ +service = Fog::OpenStack::Workflow.new({ :openstack_auth_url => 'http://KEYSTONE_HOST:KEYSTONE_PORT/v2.0/tokens', # OpenStack Keystone endpoint :openstack_username => OPEN_STACK_USER, # Your OpenStack Username :openstack_tenant => OPEN_STACK_TENANT, # Your tenant id diff --git a/examples/container_infra/basics.rb b/examples/container_infra/basics.rb index 7643f949f..57758229a 100644 --- a/examples/container_infra/basics.rb +++ b/examples/container_infra/basics.rb @@ -3,16 +3,16 @@ # Initialize a connection to the Magnum API params = { - openstack_auth_url: 'https://example.net/v3/auth/tokens', - openstack_username: 'username', - openstack_api_key: 'password', + openstack_auth_url: 'https://example.net/v3/auth/tokens', + openstack_username: 'username', + openstack_api_key: 'password', openstack_project_name: 'magnum' } container_infra = Fog::ContainerInfra::OpenStack.new(params) # Get the Fedora Atomic image -image = Fog::Image::OpenStack.new(params) +image = Fog::OpenStack::Image.new(params) unless image.images.map(&:name).include?("fedora-atomic-latest") puts "Couldn't find Fedora Atomic. Uploading to Glance..." @@ -27,16 +27,16 @@ # Create a cluster template for using Docker Swarm and Fedora Atomic params = { - name: 'swarm-cluster-template', - image_id: 'fedora-atomic-latest', - keypair_id: 'YOUR_KEYPAIR_NAME', + name: 'swarm-cluster-template', + image_id: 'fedora-atomic-latest', + keypair_id: 'YOUR_KEYPAIR_NAME', external_network_id: 'public', - master_flavor_id: 'm1.small', - flavor_id: 'm1.small', - coe: 'swarm', - docker_volume_size: 3, - dns_nameserver: '8.8.8.8', - tls_disabled: true + master_flavor_id: 'm1.small', + flavor_id: 'm1.small', + coe: 'swarm', + docker_volume_size: 3, + dns_nameserver: '8.8.8.8', + tls_disabled: true } cluster_template = container_infra.cluster_templates.create(params) @@ -44,10 +44,10 @@ # Create a swarm cluster and wait for it to build params = { - name: 'swarm-cluster', + name: 'swarm-cluster', cluster_template_id: 'swarm-cluster-template', - master_count: 1, - node_count: 1 + master_count: 1, + node_count: 1 } cluster = container_infra.clusters.create(params) diff --git a/examples/event/basics.rb b/examples/event/basics.rb index 5e7fab17c..cccb7534b 100644 --- a/examples/event/basics.rb +++ b/examples/event/basics.rb @@ -13,7 +13,7 @@ puts "### SERVICE CONNECTION ###" -event_service = Fog::Event::OpenStack.new(@connection_params) +event_service = Fog::OpenStack::Event.new(@connection_params) p event_service diff --git a/examples/identity/basics.rb b/examples/identity/basics.rb index 8cfccfafa..9082cd767 100644 --- a/examples/identity/basics.rb +++ b/examples/identity/basics.rb @@ -3,34 +3,36 @@ require 'fog/openstack' require 'pp' -auth_url = "https://example.net/v2.0/tokens" +auth_url = "https://example.net" username = 'admin@example.net' password = 'secret' +tenant = 'admin' -keystone = Fog::Identity::OpenStack.new openstack_auth_url: auth_url, +keystone = Fog::OpenStack::Identity.new openstack_auth_url: auth_url, openstack_username: username, - openstack_api_key: password + openstack_api_key: password, + openstack_tenant: tenant # Optional, self-signed certs #:connection_options => { :ssl_verify_peer => false } # # Listing keystone tenants # -keystone.tenants.each do |tenant| - # - pp tenant + pp l_tenant end # # List users # keystone.users.each do |user| - # "http://example.net:35357/..."}, - # parent_id=nil, - # subtree=nil, - # parents=nil + # "http://example.net:35357/..."}, + # parent_id=nil, + # subtree=nil, + # parents=nil # > # ... pp project @@ -40,16 +40,16 @@ # List users # keystone.users.each do |user| - # "http://example.net:35357/..."}, - # password=nil + # "http://example.net:35357/..."}, + # password=nil # > # ... pp user diff --git a/examples/image/upload-test-image.rb b/examples/image/upload-test-image.rb index 342ea7ba3..d1f977b6b 100755 --- a/examples/image/upload-test-image.rb +++ b/examples/image/upload-test-image.rb @@ -69,6 +69,6 @@ container_format: 'ami', location: ami, properties: { - 'kernel_id' => aki.id, + 'kernel_id' => aki.id, 'ramdisk_id' => ari.id } diff --git a/examples/introspection/basics.rb b/examples/introspection/basics.rb index df4c2ea19..9fec78177 100644 --- a/examples/introspection/basics.rb +++ b/examples/introspection/basics.rb @@ -1,4 +1,3 @@ - require 'rubygems' require 'fog/openstack' # version >= 1.37 @@ -15,10 +14,10 @@ openstack_domain_id: "default" } -inspector = Fog::Introspection::OpenStack.new(@connection_params) +inspector = Fog::OpenStack::Introspection.new(@connection_params) # Introspection of an Ironic node -ironic = Fog::Baremetal::OpenStack.new(@connection_params) +ironic = Fog::OpenStack::Baremetal.new(@connection_params) nodes = ironic.list_nodes node1_uuid = nodes.body["nodes"][0]["uuid"] @@ -39,22 +38,22 @@ # Create a set of rules rules = { "description" => "Successful Rule", - "actions" => [ + "actions" => [ { "action" => "set-attribute", - "path" => "/extra/rule_success", - "value" => "yes" + "path" => "/extra/rule_success", + "value" => "yes" } ], "conditions" => [ { "field" => "memory_mb", - "op" => "ge", + "op" => "ge", "value" => 256 }, { "field" => "local_gb", - "op" => "ge", + "op" => "ge", "value" => 1 } ] diff --git a/examples/metric/basics.rb b/examples/metric/basics.rb index 5a7d63ec7..d6266d447 100644 --- a/examples/metric/basics.rb +++ b/examples/metric/basics.rb @@ -16,7 +16,7 @@ puts "### SERVICE CONNECTION ###" -metric = Fog::Metric::OpenStack.new(@connection_params) +metric = Fog::OpenStack::Metric.new(@connection_params) p metric diff --git a/examples/network/network_rbac.rb b/examples/network/network_rbac.rb index eed145d2b..287f9fb44 100644 --- a/examples/network/network_rbac.rb +++ b/examples/network/network_rbac.rb @@ -29,8 +29,8 @@ connection_options: { ssl_verify_peer: ENV['SSL_VERIFY'] != 'false' } } -identity_service = Fog::Identity::OpenStack::V3.new(auth_options) -network_service = Fog::Network::OpenStack.new(auth_options) +identity_service = Fog::OpenStack::Identity::V3.new(auth_options) +network_service = Fog::OpenStack::Network.new(auth_options) own_project = identity_service.projects.select { |p| p.name == ENV['OS_PROJECT_NAME'] }.first other_project = identity_service.projects.select { |p| p.name != ENV['OS_PROJECT_NAME'] }.first diff --git a/examples/network/network_subnets_routers.rb b/examples/network/network_subnets_routers.rb index 84727dedf..f754107e8 100644 --- a/examples/network/network_subnets_routers.rb +++ b/examples/network/network_subnets_routers.rb @@ -17,7 +17,7 @@ def create_tenant_network(tenant_name, subnet_gateway = '10.0.0.1', private_network_name = 'private') - network = Fog::Network[:openstack] + network = Fog::OpenStack::Network.new id = Fog::Identity[:openstack] tenant = id.tenants.find { |t| t.name == tenant_name } diff --git a/examples/shared_file_system/basics.rb b/examples/shared_file_system/basics.rb index eb53b65c3..a75005c73 100644 --- a/examples/shared_file_system/basics.rb +++ b/examples/shared_file_system/basics.rb @@ -29,8 +29,8 @@ connection_options: { ssl_verify_peer: ENV['SSL_VERIFY'] != 'false' } } -network_service = Fog::Network::OpenStack.new(auth_options) -share_service = Fog::SharedFileSystem::OpenStack.new(auth_options) +network_service = Fog::OpenStack::Network.new(auth_options) +share_service = Fog::OpenStack::SharedFileSystem.new(auth_options) net = network_service.networks.first raise 'no network exists' if net.nil? diff --git a/examples/storage/set-account-quota.rb b/examples/storage/set-account-quota.rb index 23400a18a..00f30c190 100644 --- a/examples/storage/set-account-quota.rb +++ b/examples/storage/set-account-quota.rb @@ -28,14 +28,14 @@ # to retrieve the list of tenants available and find # the tenant we want to set the quotas for. # -id = Fog::Identity::OpenStack.new openstack_auth_url: auth_url, +id = Fog::OpenStack::Identity.new openstack_auth_url: auth_url, openstack_username: user, openstack_api_key: password # # Storage service (Swift) # -st = Fog::Storage::OpenStack.new openstack_auth_url: auth_url, +st = Fog::OpenStack::Storage.new openstack_auth_url: auth_url, openstack_username: user, openstack_api_key: password diff --git a/examples/volume/backups.rb b/examples/volume/backups.rb index f8c62c071..b76b756dd 100644 --- a/examples/volume/backups.rb +++ b/examples/volume/backups.rb @@ -1,5 +1,5 @@ require 'fog/openstack' -require 'fog/workflow/openstack/v2' +require 'fog/openstack/workflow/v2' auth_url = "http://192.0.2.1:5000/v3/auth/tokens" username = "admin" @@ -14,7 +14,7 @@ openstack_domain_id: "default" } -cinder = Fog::Volume::OpenStack.new(@connection_params) +cinder = Fog::OpenStack::Volume.new(@connection_params) puts "INFO: create backup of existing volume named test" diff --git a/examples/workflow/workflow-examples.rb b/examples/workflow/workflow-examples.rb index f54dffb57..533322dbe 100644 --- a/examples/workflow/workflow-examples.rb +++ b/examples/workflow/workflow-examples.rb @@ -1,5 +1,5 @@ require 'fog/openstack' -require 'fog/workflow/openstack/v2' +require 'fog/openstack/workflow/v2' auth_url = "http://192.0.2.1:5000/v3/auth/tokens" username = "admin" @@ -14,7 +14,7 @@ openstack_domain_id: "default" } -mistral = Fog::Workflow::OpenStack.new(@connection_params) +mistral = Fog::OpenStack::Workflow.new(@connection_params) puts "INFO: create_execution" @@ -225,7 +225,7 @@ version: "2.0", myaction: { :input => ['execution_id'], - :base => "std.email", + :base => "std.email", "base-input" => { to_addrs: ['admin@mywebsite.org'], subject: "subject1", @@ -266,7 +266,7 @@ version: "2.0", myaction: { :input => ['execution_id'], - :base => "std.email", + :base => "std.email", "base-input" => { to_addrs: ['admin@mywebsite.org'], subject: "subject updated", diff --git a/fog-openstack.gemspec b/fog-openstack.gemspec index 3dea7f831..edc048064 100644 --- a/fog-openstack.gemspec +++ b/fog-openstack.gemspec @@ -6,7 +6,7 @@ require 'fog/openstack/version' Gem::Specification.new do |spec| spec.name = "fog-openstack" - spec.version = Fog::Openstack::VERSION + spec.version = Fog::OpenStack::VERSION spec.authors = ["Matt Darby"] spec.email = ["matt.darby@rackspace.com"] @@ -20,17 +20,18 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - spec.required_ruby_version = '>= 2.1.0' + spec.required_ruby_version = '>= 2.2.0' - spec.add_dependency 'fog-core', '~> 1.40' + spec.add_dependency 'fog-core', '~> 2.1' spec.add_dependency 'fog-json', '>= 1.0' spec.add_dependency 'ipaddress', '>= 0.8' - spec.add_development_dependency 'bundler', '~> 1.6' + spec.add_development_dependency 'bundler', '~> 1' spec.add_development_dependency 'coveralls' spec.add_development_dependency "mime-types" spec.add_development_dependency "mime-types-data" spec.add_development_dependency 'minitest' + spec.add_development_dependency 'pry-byebug' spec.add_development_dependency 'rake', '~> 10.0' spec.add_development_dependency 'rubocop' spec.add_development_dependency 'shindo', '~> 0.3' diff --git a/lib/fog/baremetal/openstack.rb b/lib/fog/baremetal/openstack.rb deleted file mode 100644 index 535cf4734..000000000 --- a/lib/fog/baremetal/openstack.rb +++ /dev/null @@ -1,284 +0,0 @@ - - -module Fog - module Baremetal - class OpenStack < Fog::Service - SUPPORTED_VERSIONS = /(.)*/ - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id - - ## MODELS - # - model_path 'fog/baremetal/openstack/models' - model :chassis - collection :chassis_collection - model :driver - collection :drivers - model :node - collection :nodes - model :port - collection :ports - - ## REQUESTS - # - request_path 'fog/baremetal/openstack/requests' - - # Node requests - request :create_node - request :delete_node - request :get_node - request :list_nodes - request :list_nodes_detailed - request :patch_node - request :set_node_power_state - request :set_node_provision_state - request :set_node_maintenance - request :unset_node_maintenance - - # Chassis requests - request :create_chassis - request :delete_chassis - request :get_chassis - request :list_chassis - request :list_chassis_detailed - request :patch_chassis - - # Driver requests - request :get_driver - request :get_driver_properties - request :list_drivers - - # Port requests - request :create_port - request :delete_port - request :get_port - request :list_ports - request :list_ports_detailed - request :patch_port - - ## TODO not implemented API requests: - ## Chassis - # request :list_chassis_nodes - # request :list_chassis_nodes_details - - ## Node requests - # request :validate_node - # request :get_boot_device - # request :set_boot_device - # request :list_supported_boot_devices - # request :list_node_states - # request :get_console_info - # request :change_console_state - # request :get_vendor_passthru_methods - - ## Driver requests - # request :get_vendor_passthru_methods - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - chassis_uuid = Fog::UUID.uuid - instance_uuid = Fog::UUID.uuid - node_uuid = Fog::UUID.uuid - - hash[key] = { - chassis_collection: [ - { - "created_at" => "2000-01-01T12:00:00", - "description" => "Sample chassis", - "extra" => {}, - "links" => [ - { - "href" => "http://localhost:6385/v1/chassis/eaaca217-e7d8-47b4-bb41-3f99f20eed89", - "rel" => "self" - }, - { - "href" => "http://localhost:6385/chassis/eaaca217-e7d8-47b4-bb41-3f99f20eed89", - "rel" => "bookmark" - } - ], - "nodes" => [ - { - "href" => "http://localhost:6385/v1/chassis/eaaca217-e7d8-47b4-bb41-3f99f20eed89/nodes", - "rel" => "self" - }, - { - "href" => "http://localhost:6385/chassis/eaaca217-e7d8-47b4-bb41-3f99f20eed89/nodes", - "rel" => "bookmark" - } - ], - "updated_at" => "2000-01-01T12:00:00", - "uuid" => chassis_uuid - } - ], - drivers: [ - { - "hosts" => [ - "fake-host" - ], - "name" => "sample-driver" - } - ], - nodes: [{ - "chassis_uuid" => chassis_uuid, - "console_enabled" => false, - "created_at" => "2000-01-01T12:00:00", - "driver" => "sample-driver", - "driver_info" => {}, - "extra" => {}, - "instance_info" => {}, - "instance_uuid" => instance_uuid, - "last_error" => nil, - "links" => [ - { - "href" => "http://localhost:6385/v1/nodes/1be26c0b-03f2-4d2e-ae87-c02d7f33c123", - "rel" => "self" - }, - { - "href" => "http://localhost:6385/nodes/1be26c0b-03f2-4d2e-ae87-c02d7f33c123", - "rel" => "bookmark" - } - ], - "maintenance" => false, - "maintenance_reason" => nil, - "ports" => [ - { - "href" => "http://localhost:6385/v1/nodes/1be26c0b-03f2-4d2e-ae87-c02d7f33c123/ports", - "rel" => "self" - }, - { - "href" => "http://localhost:6385/nodes/1be26c0b-03f2-4d2e-ae87-c02d7f33c123/ports", - "rel" => "bookmark" - } - ], - "power_state" => "power on", - "properties" => { - "cpus" => "1", - "local_gb" => "10", - "memory_mb" => "1024" - }, - "provision_state" => "active", - "provision_updated_at" => "2000-01-01T12:00:00", - "reservation" => nil, - "target_power_state" => nil, - "target_provision_state" => nil, - "updated_at" => "2000-01-01T12:00:00", - "uuid" => node_uuid - }], - ports: [{ - "address" => "fe:54:00:77:07:d9", - "created_at" => "2014-12-23T19:35:30.734116", - "extra" => { - "foo" => "bar" - }, - "links" => [ - { - "href" => "http://localhost:6385/v1/ports/27e3153e-d5bf-4b7e-b517-fb518e17f34c", - "rel" => "self" - }, - { - "href" => "http://localhost:6385/ports/27e3153e-d5bf-4b7e-b517-fb518e17f34c", - "rel" => "bookmark" - } - ], - "node_uuid" => "7ae81bb3-dec3-4289-8d6c-da80bd8001ae", - "updated_at" => "2014-12-23T19:35:30.734119", - "uuid" => "27e3153e-d5bf-4b7e-b517-fb518e17f34c" - }] - } - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 9292 - management_url.path = '/v1' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].find { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_region: @openstack_region, - openstack_management_url: @openstack_management_url } - end - end - - class Real - include Fog::OpenStack::Core - - # NOTE: uncommenting this should be treated as api-change! - # def self.not_found_class - # Fog::Baremetal::OpenStack::NotFound - # end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['baremetal'] - @openstack_service_name = options[:openstack_service_name] - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - private - - def set_api_path - unless @path.match(SUPPORTED_VERSIONS) - @path = "/" + Fog::OpenStack.get_supported_version(SUPPORTED_VERSIONS, - @openstack_management_uri, - @auth_token, - @connection_options) - end - end - end - end - end -end diff --git a/lib/fog/baremetal/openstack/models/chassis_collection.rb b/lib/fog/baremetal/openstack/models/chassis_collection.rb deleted file mode 100644 index 8d9176247..000000000 --- a/lib/fog/baremetal/openstack/models/chassis_collection.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/baremetal/openstack/models/chassis' - -module Fog - module Baremetal - class OpenStack - class ChassisCollection < Fog::OpenStack::Collection - model Fog::Baremetal::OpenStack::Chassis - - def all(options = {}) - load_response(service.list_chassis_detailed(options), 'chassis') - end - - def summary(options = {}) - load_response(service.list_chassis(options), 'chassis') - end - - def details(options = {}) - Fog::Logger.deprecation("Calling OpenStack[:baremetal].chassis_collection.details will be removed, "\ - " call .chassis_collection.all for detailed list.") - all(options) - end - - def find_by_uuid(uuid) - new(service.get_chassis(uuid).body) - end - alias get find_by_uuid - - def destroy(uuid) - chassis = find_by_id(uuid) - chassis.destroy - end - - def method_missing(method_sym, *arguments, &block) - if method_sym.to_s =~ /^find_by_(.*)$/ - load(service.list_chassis_detailed($1 => arguments.first).body['chassis']) - else - super - end - end - end - end - end -end diff --git a/lib/fog/baremetal/openstack/models/drivers.rb b/lib/fog/baremetal/openstack/models/drivers.rb deleted file mode 100644 index 9e6ca4dd4..000000000 --- a/lib/fog/baremetal/openstack/models/drivers.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/baremetal/openstack/models/driver' - -module Fog - module Baremetal - class OpenStack - class Drivers < Fog::OpenStack::Collection - model Fog::Baremetal::OpenStack::Driver - - def all(options = {}) - load_response(service.list_drivers(options), 'drivers') - end - - def find_by_name(name) - new(service.get_driver(name).body) - end - alias get find_by_name - end - end - end -end diff --git a/lib/fog/baremetal/openstack/models/nodes.rb b/lib/fog/baremetal/openstack/models/nodes.rb deleted file mode 100644 index 972560e72..000000000 --- a/lib/fog/baremetal/openstack/models/nodes.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/baremetal/openstack/models/node' - -module Fog - module Baremetal - class OpenStack - class Nodes < Fog::OpenStack::Collection - model Fog::Baremetal::OpenStack::Node - - def all(options = {}) - load_response(service.list_nodes_detailed(options), 'nodes') - end - - def summary(options = {}) - load_response(service.list_nodes(options), 'nodes') - end - - def details(options = {}) - Fog::Logger.deprecation("Calling OpenStack[:baremetal].nodes.details will be removed, "\ - " call .nodes.all for detailed list.") - load(service.list_nodes_detailed(options).body['nodes']) - end - - def find_by_uuid(uuid) - new(service.get_node(uuid).body) - end - alias get find_by_uuid - - def destroy(uuid) - node = find_by_uuid(uuid) - node.destroy - end - - def method_missing(method_sym, *arguments, &block) - if method_sym.to_s =~ /^find_by_(.*)$/ - load(service.list_nodes_detailed($1 => arguments.first).body['nodes']) - else - super - end - end - end - end - end -end diff --git a/lib/fog/baremetal/openstack/models/port.rb b/lib/fog/baremetal/openstack/models/port.rb deleted file mode 100644 index 6170bb30c..000000000 --- a/lib/fog/baremetal/openstack/models/port.rb +++ /dev/null @@ -1,50 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Baremetal - class OpenStack - class Port < Fog::OpenStack::Model - identity :uuid - - attribute :address - attribute :uuid - - # detailed - attribute :created_at - attribute :updated_at - attribute :extra - attribute :node_uuid - - def create - requires :address, :node_uuid - merge_attributes(service.create_port(attributes).body) - self - end - - def update(patch = nil) - requires :uuid, :address, :node_uuid - if patch - merge_attributes(service.patch_port(uuid, patch).body) - else - # TODO: implement update_node method using PUT method and self.attributes - # once it is supported by Ironic - raise ArgumentError, - 'You need to provide patch attribute. Ironic does not support update by hash yet, only by jsonpatch.' - end - self - end - - def destroy - requires :uuid - service.delete_port(uuid) - true - end - - def metadata - requires :uuid - service.get_port(uuid).headers - end - end - end - end -end diff --git a/lib/fog/baremetal/openstack/models/ports.rb b/lib/fog/baremetal/openstack/models/ports.rb deleted file mode 100644 index 4d9e79657..000000000 --- a/lib/fog/baremetal/openstack/models/ports.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/baremetal/openstack/models/port' - -module Fog - module Baremetal - class OpenStack - class Ports < Fog::OpenStack::Collection - model Fog::Baremetal::OpenStack::Port - - def all(options = {}) - load_response(service.list_ports_detailed(options), 'ports') - end - - def summary(options = {}) - load_response(service.list_ports(options), 'ports') - end - - def details(options = {}) - Fog::Logger.deprecation("Calling OpenStack[:baremetal].ports.details will be removed, "\ - " call .ports.all for detailed list.") - load(service.list_ports_detailed(options).body['ports']) - end - - def find_by_uuid(uuid) - new(service.get_port(uuid).body) - end - alias get find_by_uuid - - def destroy(uuid) - port = find_by_id(uuid) - port.destroy - end - - def method_missing(method_sym, *arguments, &block) - if method_sym.to_s =~ /^find_by_(.*)$/ - load(service.list_ports_detailed($1 => arguments.first).body['ports']) - else - super - end - end - end - end - end -end diff --git a/lib/fog/baremetal/openstack/requests/create_port.rb b/lib/fog/baremetal/openstack/requests/create_port.rb deleted file mode 100644 index af64c71ac..000000000 --- a/lib/fog/baremetal/openstack/requests/create_port.rb +++ /dev/null @@ -1,46 +0,0 @@ -module Fog - module Baremetal - class OpenStack - class Real - # Create a new port - # - # === Attributes === - # address = MAC Address for this port - # extra = Record arbitrary key/value metadata. Can be specified multiple times - # node_uuid = UUID of the node that this port belongs to - def create_port(attributes) - desired_options = [ - :address, - :extra, - :node_uuid - ] - - # Filter only allowed creation attributes - data = attributes.select { |key, _value| desired_options.include?(key.to_sym) } - - request( - body: Fog::JSON.encode(data), - expects: [200, 201], - method: 'POST', - path: 'ports' - ) - end - end - - class Mock - def create_port(_attributes) - response = Excon::Response.new - response.status = 200 - response.headers = { - "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new - } - response.body = data[:ports].first - response - end - end - end - end -end diff --git a/lib/fog/baremetal/openstack/requests/delete_port.rb b/lib/fog/baremetal/openstack/requests/delete_port.rb deleted file mode 100644 index 0df26b33e..000000000 --- a/lib/fog/baremetal/openstack/requests/delete_port.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Fog - module Baremetal - class OpenStack - class Real - def delete_port(port_uuid) - data = { port_uuid: port_uuid } - request( - body: Fog::JSON.encode(data), - expects: [200, 204], - method: 'DELETE', - path: 'ports' - ) - end - end - - class Mock - def delete_port(_port_uuid) - response = Excon::Response.new - response.status = 200 - response - end - end - end - end -end diff --git a/lib/fog/baremetal/openstack/requests/get_driver_properties.rb b/lib/fog/baremetal/openstack/requests/get_driver_properties.rb deleted file mode 100644 index 87997e222..000000000 --- a/lib/fog/baremetal/openstack/requests/get_driver_properties.rb +++ /dev/null @@ -1,40 +0,0 @@ -module Fog - module Baremetal - class OpenStack - class Real - def get_driver_properties(driver_name) - data = { driver_name: driver_name } - request( - body: Fog::JSON.encode(data), - expects: [200, 204], - method: 'GET', - path: "drivers/properties" - ) - end - end - - class Mock - def get_driver_properties(_driver_name) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = { - "pxe_deploy_ramdisk" => "UUID (from Glance) of the ramdisk.", - "ipmi_transit_address" => "transit address for bridged request.", - "ipmi_terminal_port" => "node's UDP port to connect to.", - "ipmi_target_channel" => "destination channel for bridged request.", - "ipmi_transit_channel" => "transit channel for bridged request.", - "ipmi_local_address" => "local IPMB address for bridged requests. ", - "ipmi_username" => "username; default is NULL user. Optional.", - "ipmi_address" => "IP address or hostname of the node. Required.", - "ipmi_target_address" => "destination address for bridged request.", - "ipmi_password" => "password. Optional.", - "pxe_deploy_kernel" => "UUID (from Glance) of the deployment kernel.", - "ipmi_priv_level" => "privilege level; default is ADMINISTRATOR. ", - "ipmi_bridging" => "bridging_type." - } - response - end - end - end - end -end diff --git a/lib/fog/baremetal/openstack/requests/get_port.rb b/lib/fog/baremetal/openstack/requests/get_port.rb deleted file mode 100644 index a3b44c244..000000000 --- a/lib/fog/baremetal/openstack/requests/get_port.rb +++ /dev/null @@ -1,24 +0,0 @@ -module Fog - module Baremetal - class OpenStack - class Real - def get_port(port_id) - request( - expects: [200, 204], - method: 'GET', - path: "ports/#{port_id}" - ) - end - end - - class Mock - def get_port(_port_id) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = data[:ports].first - response - end - end - end - end -end diff --git a/lib/fog/baremetal/openstack/requests/list_nodes.rb b/lib/fog/baremetal/openstack/requests/list_nodes.rb deleted file mode 100644 index 5878491c3..000000000 --- a/lib/fog/baremetal/openstack/requests/list_nodes.rb +++ /dev/null @@ -1,34 +0,0 @@ -module Fog - module Baremetal - class OpenStack - class Real - def list_nodes(options = {}) - request( - expects: [200, 204], - method: 'GET', - path: 'nodes', - query: options - ) - end - end - - class Mock - def list_nodes(_options = {}) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = { - "nodes" => [{ - "instance_uuid" => Fog::UUID.uuid, - "maintenance" => false, - "power_state" => "power on", - "provision_state" => "active", - "uuid" => Fog::UUID.uuid, - "links" => [] - }] - } - response - end - end - end - end -end diff --git a/lib/fog/baremetal/openstack/requests/list_ports.rb b/lib/fog/baremetal/openstack/requests/list_ports.rb deleted file mode 100644 index eaef0c5c0..000000000 --- a/lib/fog/baremetal/openstack/requests/list_ports.rb +++ /dev/null @@ -1,42 +0,0 @@ -module Fog - module Baremetal - class OpenStack - class Real - def list_ports(options = {}) - request( - expects: [200, 204], - method: 'GET', - path: 'ports', - query: options - ) - end - end - - class Mock - def list_ports(_options = {}) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = { - "ports" => [ - { - "address" => "fe:54:00:77:07:d9", - "links" => [ - { - "href" => "http://localhost:6385/v1/ports/27e3153e-d5bf-4b7e-b517-fb518e17f34c", - "rel" => "self" - }, - { - "href" => "http://localhost:6385/ports/27e3153e-d5bf-4b7e-b517-fb518e17f34c", - "rel" => "bookmark" - } - ], - "uuid" => Fog::UUID.uuid - } - ] - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack.rb b/lib/fog/compute/openstack.rb deleted file mode 100644 index d17b9ee72..000000000 --- a/lib/fog/compute/openstack.rb +++ /dev/null @@ -1,410 +0,0 @@ -module Fog - module Compute - class OpenStack < Fog::Service - SUPPORTED_VERSIONS = /v2\.0|v2\.1/ - SUPPORTED_MICROVERSION = '2.15'.freeze - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix - - ## MODELS - # - model_path 'fog/compute/openstack/models' - model :aggregate - collection :aggregates - model :availability_zone - collection :availability_zones - model :server - collection :servers - model :service - collection :services - model :image - collection :images - model :flavor - collection :flavors - model :metadatum - collection :metadata - model :address - collection :addresses - model :security_group - collection :security_groups - model :security_group_rule - collection :security_group_rules - model :key_pair - collection :key_pairs - model :tenant - collection :tenants - model :volume - collection :volumes - model :volume_attachment - collection :volume_attachments - model :network - collection :networks - model :snapshot - collection :snapshots - model :host - collection :hosts - model :server_group - collection :server_groups - model :os_interface - collection :os_interfaces - - ## REQUESTS - # - request_path 'fog/compute/openstack/requests' - - # Aggregate CRUD - request :list_aggregates - request :create_aggregate - request :update_aggregate - request :get_aggregate - request :update_aggregate - request :update_aggregate_metadata - request :add_aggregate_host - request :remove_aggregate_host - request :delete_aggregate - - # Server CRUD - request :list_servers - request :list_servers_detail - request :create_server - request :get_server_details - request :get_server_password - request :update_server - request :delete_server - - # Server Actions - request :server_actions - request :server_action - request :reboot_server - request :rebuild_server - request :resize_server - request :confirm_resize_server - request :revert_resize_server - request :pause_server - request :unpause_server - request :suspend_server - request :resume_server - request :start_server - request :stop_server - request :rescue_server - request :change_server_password - request :add_fixed_ip - request :remove_fixed_ip - request :server_diagnostics - request :boot_from_snapshot - request :reset_server_state - request :add_security_group - request :remove_security_group - request :shelve_server - request :unshelve_server - request :shelve_offload_server - - # Server Extenstions - request :get_console_output - request :get_vnc_console - request :live_migrate_server - request :migrate_server - request :evacuate_server - - # Service CRUD - request :list_services - request :enable_service - request :disable_service - request :disable_service_log_reason - request :delete_service - - # Image CRUD - request :list_images - request :list_images_detail - request :create_image - request :get_image_details - request :delete_image - - # Flavor CRUD - request :list_flavors - request :list_flavors_detail - request :get_flavor_details - request :create_flavor - request :delete_flavor - - # Flavor Actions - request :get_flavor_metadata - request :create_flavor_metadata - request :update_flavor_metadata - request :delete_flavor_metadata - - # Flavor Access - request :add_flavor_access - request :remove_flavor_access - request :list_tenants_with_flavor_access - - # Hypervisor - request :get_hypervisor_statistics - request :get_hypervisor - request :list_hypervisors - request :list_hypervisors_detail - request :list_hypervisor_servers - - # Metadata - request :list_metadata - request :get_metadata - request :set_metadata - request :update_metadata - request :delete_metadata - - # Metadatam - request :delete_meta - request :update_meta - - # Address - request :list_addresses - request :list_address_pools - request :list_all_addresses - request :list_private_addresses - request :list_public_addresses - request :get_address - request :allocate_address - request :associate_address - request :release_address - request :disassociate_address - - # Security Group - request :list_security_groups - request :get_security_group - request :create_security_group - request :create_security_group_rule - request :delete_security_group - request :delete_security_group_rule - request :get_security_group_rule - - # Key Pair - request :list_key_pairs - request :get_key_pair - request :create_key_pair - request :delete_key_pair - - # Tenant - request :list_tenants - request :set_tenant - request :get_limits - - # Volume - request :list_volumes - request :list_volumes_detail - request :create_volume - request :get_volume_details - request :delete_volume - request :attach_volume - request :detach_volume - request :get_server_volumes - request :list_volume_attachments - - # Snapshot - request :create_snapshot - request :list_snapshots - request :list_snapshots_detail - request :get_snapshot_details - request :delete_snapshot - - # Usage - request :list_usages - request :get_usage - - # Quota - request :get_quota - request :get_quota_defaults - request :update_quota - - # Hosts - request :list_hosts - request :get_host_details - - # Zones - request :list_zones - request :list_zones_detailed - request :list_availability_zones - - # Server Group - request :list_server_groups - request :get_server_group - request :create_server_group - request :delete_server_group - - # Server Os Interfaces - request :list_os_interfaces - request :get_os_interface - request :create_os_interface - request :delete_os_interface - - class Mock - attr_reader :auth_token - attr_reader :auth_token_expiration - attr_reader :current_user - attr_reader :current_tenant - - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - last_modified: { - images: {}, - servers: {}, - key_pairs: {}, - security_groups: {}, - addresses: {} - }, - aggregates: [{ - "availability_zone" => "nova", - "created_at" => "2012-11-16T06:22:23.032493", - "deleted" => false, - "deleted_at" => nil, - "id" => 1, - "name" => "name", - "updated_at" => nil - }], - images: { - "0e09fbd6-43c5-448a-83e9-0d3d05f9747e" => { - "id" => "0e09fbd6-43c5-448a-83e9-0d3d05f9747e", - "name" => "cirros-0.3.0-x86_64-blank", - 'progress' => 100, - 'status' => "ACTIVE", - 'updated' => "", - 'minRam' => 0, - 'minDisk' => 0, - 'metadata' => {}, - 'links' => [{ "href" => "http://nova1:8774/v1.1/admin/images/1", "rel" => "self" }, - { "href" => "http://nova1:8774/admin/images/2", "rel" => "bookmark" }] - } - }, - servers: {}, - key_pairs: {}, - security_groups: { - '0' => { - "id" => 0, - "tenant_id" => Fog::Mock.random_hex(8), - "name" => "default", - "description" => "default", - "rules" => [ - { "id" => 0, - "parent_group_id" => 0, - "from_port" => 68, - "to_port" => 68, - "ip_protocol" => "udp", - "ip_range" => { "cidr" => "0.0.0.0/0" }, - "group" => {} } - ] - } - }, - server_groups: {}, - server_security_group_map: {}, - addresses: {}, - quota: { - 'security_group_rules' => 20, - 'security_groups' => 10, - 'injected_file_content_bytes' => 10240, - 'injected_file_path_bytes' => 256, - 'injected_files' => 5, - 'metadata_items' => 128, - 'floating_ips' => 10, - 'instances' => 10, - 'key_pairs' => 10, - 'gigabytes' => 5000, - 'volumes' => 10, - 'cores' => 20, - 'ram' => 51200 - }, - volumes: {}, - snapshots: {}, - os_interfaces: [ - { - "fixed_ips" => [ - { - "ip_address" => "192.168.1.3", - "subnet_id" => "f8a6e8f8-c2ec-497c-9f23-da9616de54ef" - } - ], - "mac_addr" => "fa:16:3e:4c:2c:30", - "net_id" => "3cb9bc59-5699-4588-a4b1-b87f96708bc6", - "port_id" => "ce531f90-199f-48c0-816c-13e38010b442", - "port_state" => "ACTIVE" - } - ] - } - end - end - - def self.reset - @data = nil - end - - include Fog::OpenStack::Core - - def initialize(options = {}) - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - initialize_identity options - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 8774 - management_url.path = '/v1.1/1' - @openstack_management_url = management_url.to_s - - identity_public_endpoint = URI.parse(options[:openstack_auth_url]) - identity_public_endpoint.port = 5000 - @openstack_identity_public_endpoint = identity_public_endpoint.to_s - end - - def data - self.class.data["#{@openstack_username}-#{@current_tenant}"] - end - - def reset_data - self.class.data.delete("#{@openstack_username}-#{@current_tenant}") - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::Compute::OpenStack::NotFound - end - - def initialize(options = {}) - @supported_versions = SUPPORTED_VERSIONS - @supported_microversion = SUPPORTED_MICROVERSION - @microversion_key = 'X-OpenStack-Nova-API-Version' - - initialize_identity options - - @openstack_identity_service_type = options[:openstack_identity_service_type] || 'identity' - - @openstack_service_type = options[:openstack_service_type] || %w(nova compute) - @openstack_service_name = options[:openstack_service_name] - - @connection_options = options[:connection_options] || {} - - authenticate - - unless @path =~ %r{/(v2|v2\.0|v2\.1)} - raise Fog::OpenStack::Errors::ServiceUnavailable, - "OpenStack compute binding only supports version v2 and v2.1" - end - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/addresses.rb b/lib/fog/compute/openstack/models/addresses.rb deleted file mode 100644 index 3fe6282fe..000000000 --- a/lib/fog/compute/openstack/models/addresses.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/address' - -module Fog - module Compute - class OpenStack - class Addresses < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::Address - - def all(options = {}) - load_response(service.list_all_addresses(options), 'floating_ips') - end - - def get(address_id) - if address = service.get_address(address_id).body['floating_ip'] - new(address) - end - rescue Fog::Compute::OpenStack::NotFound - nil - end - - def get_address_pools - service.list_address_pools.body['floating_ip_pools'] - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/availability_zone.rb b/lib/fog/compute/openstack/models/availability_zone.rb deleted file mode 100644 index 2f82201cb..000000000 --- a/lib/fog/compute/openstack/models/availability_zone.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Compute - class OpenStack - class AvailabilityZone < Fog::OpenStack::Model - identity :zoneName - - attribute :hosts - attribute :zoneLabel - attribute :zoneState - - def to_s - zoneName - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/availability_zones.rb b/lib/fog/compute/openstack/models/availability_zones.rb deleted file mode 100644 index b4befaea6..000000000 --- a/lib/fog/compute/openstack/models/availability_zones.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/availability_zone' - -module Fog - module Compute - class OpenStack - class AvailabilityZones < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::AvailabilityZone - - def all(options = {}) - data = service.list_zones_detailed(options) - load_response(data, 'availabilityZoneInfo') - end - - def summary(options = {}) - data = service.list_zones(options) - load_response(data, 'availabilityZoneInfo') - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/hosts.rb b/lib/fog/compute/openstack/models/hosts.rb deleted file mode 100644 index 8cc8fa1b5..000000000 --- a/lib/fog/compute/openstack/models/hosts.rb +++ /dev/null @@ -1,26 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/host' - -module Fog - module Compute - class OpenStack - class Hosts < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::Host - - def all(options = {}) - data = service.list_hosts(options) - load_response(data, 'hosts') - end - - def get(host_name) - if host = service.get_host_details(host_name).body['host'] - new('host_name' => host_name, - 'details' => host) - end - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/image.rb b/lib/fog/compute/openstack/models/image.rb deleted file mode 100644 index 744f4d5d5..000000000 --- a/lib/fog/compute/openstack/models/image.rb +++ /dev/null @@ -1,47 +0,0 @@ -require 'fog/openstack/models/model' -require 'fog/compute/openstack/models/metadata' - -module Fog - module Compute - class OpenStack - class Image < Fog::OpenStack::Model - identity :id - - attribute :name - attribute :created_at, aliases: 'created' - attribute :updated_at, aliases: 'updated' - attribute :progress - attribute :status - attribute :minDisk - attribute :minRam - attribute :server, aliases: 'server' - attribute :size, aliases: 'OS-EXT-IMG-SIZE:size' - attribute :metadata - attribute :links - - def metadata - @metadata ||= begin - Fog::Compute::OpenStack::Metadata.new(service: service, - parent: self) - end - end - - def metadata=(new_metadata = {}) - metas = [] - new_metadata.each_pair { |k, v| metas << { "key" => k, "value" => v } } - metadata.load(metas) - end - - def destroy - requires :id - service.delete_image(id) - true - end - - def ready? - status == 'ACTIVE' - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/images.rb b/lib/fog/compute/openstack/models/images.rb deleted file mode 100644 index b1e00a84f..000000000 --- a/lib/fog/compute/openstack/models/images.rb +++ /dev/null @@ -1,38 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/image' - -module Fog - module Compute - class OpenStack - class Images < Fog::OpenStack::Collection - attribute :filters - - model Fog::Compute::OpenStack::Image - - attribute :server - - def initialize(attributes) - self.filters ||= {} - super - end - - def all(filters_arg = filters) - filters = filters_arg - data = service.list_images_detail(filters) - images = load_response(data, 'images') - if server - replace(select { |image| image.server_id == server.id }) - end - images - end - - def get(image_id) - data = service.get_image_details(image_id).body['image'] - new(data) - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/key_pairs.rb b/lib/fog/compute/openstack/models/key_pairs.rb deleted file mode 100644 index fbbd98bf2..000000000 --- a/lib/fog/compute/openstack/models/key_pairs.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/key_pair' - -module Fog - module Compute - class OpenStack - class KeyPairs < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::KeyPair - - def all(options = {}) - items = [] - service.list_key_pairs(options).body['keypairs'].each do |kp| - items += kp.values - end - # TODO: convert to load_response? - load(items) - end - - def get(key_pair_name) - if key_pair_name - all.select { |kp| kp.name == key_pair_name }.first - end - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/network.rb b/lib/fog/compute/openstack/models/network.rb deleted file mode 100644 index f6d866ee2..000000000 --- a/lib/fog/compute/openstack/models/network.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Compute - class OpenStack - class Network < Fog::OpenStack::Model - identity :id - attribute :name - attribute :addresses - end - end - end -end diff --git a/lib/fog/compute/openstack/models/networks.rb b/lib/fog/compute/openstack/models/networks.rb deleted file mode 100644 index 9e2a099a2..000000000 --- a/lib/fog/compute/openstack/models/networks.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/network' - -module Fog - module Compute - class OpenStack - class Networks < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::Network - - attribute :server - - def all - requires :server - - networks = [] - server.addresses.each_with_index do |address, index| - networks << { - id: index + 1, - name: address[0], - addresses: address[1].map { |a| a['addr'] } - } - end - - # TODO: convert to load_response? - load(networks) - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/security_group.rb b/lib/fog/compute/openstack/models/security_group.rb deleted file mode 100644 index df3e6ee30..000000000 --- a/lib/fog/compute/openstack/models/security_group.rb +++ /dev/null @@ -1,57 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Compute - class OpenStack - class SecurityGroup < Fog::OpenStack::Model - identity :id - - attribute :name - attribute :description - attribute :security_group_rules, aliases: "rules" - attribute :tenant_id - - def security_group_rules - Fog::Compute::OpenStack::SecurityGroupRules.new(service: service).load(attributes[:security_group_rules]) - end - - def rules - Fog::Logger.deprecation('#rules is deprecated. Use #security_group_rules instead') - attributes[:security_group_rules] - end - - # no one should be calling this because it doesn't do anything - # useful but we deprecated the rules attribute and need to maintain the API - def rules=(new_rules) - Fog::Logger.deprecation('#rules= is deprecated. Use the Fog::Compute::Openstack::SecurityGroupRules collection to create new rules.') - attributes[:security_group_rules] = new_rules - end - - def save - requires :name, :description - data = service.create_security_group(name, description) - merge_attributes(data.body['security_group']) - true - end - - def destroy - requires :id - service.delete_security_group(id) - true - end - - def create_security_group_rule(min, max, ip_protocol = "tcp", cidr = "0.0.0.0/0", group_id = nil) - Fog::Logger.deprecation('#create_security_group_rule is deprecated. Use the Fog::Compute::Openstack::SecurityGroupRules collection to create new rules.') - requires :id - service.create_security_group_rule(id, ip_protocol, min, max, cidr, group_id) - end - - def delete_security_group_rule(rule_id) - Fog::Logger.deprecation('#create_security_group_rule is deprecated. Use the Fog::Compute::Openstack::SecurityGroupRule objects to destroy rules.') - service.delete_security_group_rule(rule_id) - true - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/security_group_rule.rb b/lib/fog/compute/openstack/models/security_group_rule.rb deleted file mode 100644 index 48e061b5a..000000000 --- a/lib/fog/compute/openstack/models/security_group_rule.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Compute - class OpenStack - class SecurityGroupRule < Fog::OpenStack::Model - identity :id - - attribute :from_port - attribute :group - attribute :ip_protocol - attribute :to_port - attribute :parent_group_id - attribute :ip_range - - def save - requires :ip_protocol, :from_port, :to_port, :parent_group_id - cidr = ip_range && ip_range["cidr"] - if rule = service.create_security_group_rule(parent_group_id, ip_protocol, from_port, to_port, cidr, group).data[:body] - merge_attributes(rule["security_group_rule"]) - end - end - - def destroy - requires :id - service.delete_security_group_rule(id) - true - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/security_group_rules.rb b/lib/fog/compute/openstack/models/security_group_rules.rb deleted file mode 100644 index acab2e4dc..000000000 --- a/lib/fog/compute/openstack/models/security_group_rules.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/security_group_rule' - -module Fog - module Compute - class OpenStack - class SecurityGroupRules < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::SecurityGroupRule - - def get(security_group_rule_id) - if security_group_rule_id - body = service.get_security_group_rule(security_group_rule_id).body - new(body['security_group_rule']) - end - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/security_groups.rb b/lib/fog/compute/openstack/models/security_groups.rb deleted file mode 100644 index 1a26414ad..000000000 --- a/lib/fog/compute/openstack/models/security_groups.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/security_group' - -module Fog - module Compute - class OpenStack - class SecurityGroups < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::SecurityGroup - - def all(options = {}) - load_response(service.list_security_groups(options), 'security_groups') - end - - def get(security_group_id) - if security_group_id - new(service.get_security_group(security_group_id).body['security_group']) - end - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/server_groups.rb b/lib/fog/compute/openstack/models/server_groups.rb deleted file mode 100644 index 8b5d8ddca..000000000 --- a/lib/fog/compute/openstack/models/server_groups.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/server_group' - -module Fog - module Compute - class OpenStack - class ServerGroups < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::ServerGroup - - def all(options = {}) - load_response(service.list_server_groups(options), 'server_groups') - end - - def get(server_group_id) - if server_group_id - new(service.get_server_group(server_group_id).body['server_group']) - end - rescue Fog::Compute::OpenStack::NotFound - nil - end - - def create(*args) - new(service.create_server_group(*args).body['server_group']) - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/service.rb b/lib/fog/compute/openstack/models/service.rb deleted file mode 100644 index 7a9fcb1a7..000000000 --- a/lib/fog/compute/openstack/models/service.rb +++ /dev/null @@ -1,42 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Compute - class OpenStack - class Service < Fog::OpenStack::Model - identity :id - - attribute :binary - attribute :host - attribute :state - attribute :status - attribute :updated_at - attribute :zone - - # detailed - attribute :disabled_reason - - def enable - requires :binary, :host - service.enable_service(host, binary) - end - - def disable - requires :binary, :host - service.disable_service(host, binary) - end - - def disable_and_log_reason - requires :binary, :host, :disabled_reason - service.disable_service_log_reason(host, binary, disabled_reason) - end - - def destroy - requires :id - service.delete_service(id) - true - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/services.rb b/lib/fog/compute/openstack/models/services.rb deleted file mode 100644 index d1a8ce8b7..000000000 --- a/lib/fog/compute/openstack/models/services.rb +++ /dev/null @@ -1,35 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/service' - -module Fog - module Compute - class OpenStack - class Services < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::Service - - def all(options = {}) - load_response(service.list_services(options), 'services') - end - - alias summary all - - def details(options = {}) - Fog::Logger.deprecation('Calling OpenStack[:compute].services.details is deprecated, use .services.all') - all(options) - end - - def get(service_id) - # OpenStack API currently does not support getting single service from it - # There is a blueprint https://blueprints.launchpad.net/nova/+spec/get-service-by-id - # with spec proposal patch https://review.openstack.org/#/c/172412/ but this is abandoned. - serv = service.list_services.body['services'].detect do |s| - s['id'] == service_id - end - new(serv) if serv - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/snapshot.rb b/lib/fog/compute/openstack/models/snapshot.rb deleted file mode 100644 index b2be5c7a8..000000000 --- a/lib/fog/compute/openstack/models/snapshot.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'fog/openstack/models/model' -require 'fog/compute/openstack/models/metadata' - -module Fog - module Compute - class OpenStack - class Snapshot < Fog::OpenStack::Model - identity :id - - attribute :name, aliases: 'displayName' - attribute :description, aliases: 'displayDescription' - attribute :volume_id, aliases: 'volumeId' - attribute :created_at, aliases: 'createdAt' - attribute :status - attribute :size - - def save(force = false) - requires :volume_id, :name, :description - data = service.create_snapshot(volume_id, name, description, force) - merge_attributes(data.body['snapshot']) - true - end - - def destroy - requires :id - service.delete_snapshot(id) - true - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/snapshots.rb b/lib/fog/compute/openstack/models/snapshots.rb deleted file mode 100644 index 9d1c21855..000000000 --- a/lib/fog/compute/openstack/models/snapshots.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/snapshot' - -module Fog - module Compute - class OpenStack - class Snapshots < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::Snapshot - - def all(options = {}) - if !options.kind_of?(Hash) - if options - Fog::Logger.deprecation('Calling OpenStack[:compute].snapshots.all(true) is deprecated, use .snapshots.all') - else - Fog::Logger.deprecation('Calling OpenStack[:compute].snapshots.all(false) is deprecated, use .snapshots.summary') - end - load_response(service.list_snapshots(options), 'snapshots') - else - load_response(service.list_snapshots_detail(options), 'snapshots') - end - end - - def summary(options = {}) - load_response(service.list_snapshots(options), 'snapshots') - end - - def get(snapshot_id) - if snapshot = service.get_snapshot_details(snapshot_id).body['snapshot'] - new(snapshot) - end - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/tenant.rb b/lib/fog/compute/openstack/models/tenant.rb deleted file mode 100644 index 2f6c50438..000000000 --- a/lib/fog/compute/openstack/models/tenant.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Compute - class OpenStack - class Tenant < Fog::OpenStack::Model - identity :id - - attribute :description - attribute :enabled - attribute :name - - def to_s - name - end - - def usage(start_date, end_date) - requires :id - service.get_usage(id, start_date, end_date).body['tenant_usage'] - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/tenants.rb b/lib/fog/compute/openstack/models/tenants.rb deleted file mode 100644 index 15d8645fb..000000000 --- a/lib/fog/compute/openstack/models/tenants.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/tenant' - -module Fog - module Compute - class OpenStack - class Tenants < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::Tenant - - def all - load_response(service.list_tenants, 'tenants') - end - - def usages(start_date = nil, end_date = nil, details = false) - service.list_usages(start_date, end_date, details).body['tenant_usages'] - end - - def get(id) - find { |tenant| tenant.id == id } - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/volume.rb b/lib/fog/compute/openstack/models/volume.rb deleted file mode 100644 index 7d04dbdb9..000000000 --- a/lib/fog/compute/openstack/models/volume.rb +++ /dev/null @@ -1,52 +0,0 @@ -require 'fog/openstack/models/model' -require 'fog/compute/openstack/models/metadata' - -module Fog - module Compute - class OpenStack - class Volume < Fog::OpenStack::Model - identity :id - - attribute :name, aliases: 'displayName' - attribute :description, aliases: 'displayDescription' - attribute :status - attribute :size - attribute :type, aliases: 'volumeType' - attribute :snapshot_id, aliases: 'snapshotId' - attribute :availability_zone, aliases: 'availabilityZone' - attribute :created_at, aliases: 'createdAt' - attribute :attachments - - def save - requires :name, :description, :size - data = service.create_volume(name, description, size, attributes) - merge_attributes(data.body['volume']) - true - end - - def destroy - requires :id - service.delete_volume(id) - true - end - - def attach(server_id, name) - requires :id - data = service.attach_volume(id, server_id, name) - merge_attributes(attachments: attachments << data.body['volumeAttachment']) - true - end - - def detach(server_id, attachment_id) - requires :id - service.detach_volume(server_id, attachment_id) - true - end - - def ready? - status == "available" - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/volume_attachments.rb b/lib/fog/compute/openstack/models/volume_attachments.rb deleted file mode 100644 index d67f68ba5..000000000 --- a/lib/fog/compute/openstack/models/volume_attachments.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'fog/core/collection' - -module Fog - module Compute - class OpenStack - class VolumeAttachments < Fog::Collection - model Fog::Compute::OpenStack::VolumeAttachment - - def get(server_id) - if server_id - puts service.list_volume_attachments(server_id).body - load(service.list_volume_attachments(server_id).body['volumeAttachments']) - end - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/compute/openstack/models/volumes.rb b/lib/fog/compute/openstack/models/volumes.rb deleted file mode 100644 index 8ffee8073..000000000 --- a/lib/fog/compute/openstack/models/volumes.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/volume' - -module Fog - module Compute - class OpenStack - class Volumes < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::Volume - - def all(options = true) - if !options.kind_of?(Hash) - if options - Fog::Logger.deprecation('Calling OpenStack[:compute].volumes.all(true) is deprecated, use .volumes.all') - else - Fog::Logger.deprecation('Calling OpenStack[:compute].volumes.all(false) is deprecated, use .volumes.summary') - end - load_response(service.list_volumes(options), 'volumes') - else - load_response(service.list_volumes_detail(options), 'volumes') - end - end - - def summary(options = {}) - load_response(service.list_volumes(options), 'volumes') - end - - def get(volume_id) - if volume = service.get_volume_details(volume_id).body['volume'] - new(volume) - end - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/allocate_address.rb b/lib/fog/compute/openstack/requests/allocate_address.rb deleted file mode 100644 index 7dcc0b2be..000000000 --- a/lib/fog/compute/openstack/requests/allocate_address.rb +++ /dev/null @@ -1,39 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def allocate_address(pool = nil) - request( - body: Fog::JSON.encode('pool' => pool), - expects: [200, 202], - method: 'POST', - path: 'os-floating-ips' - ) - end - end - - class Mock - def allocate_address(_pool = nil) - response = Excon::Response.new - response.status = 200 - response.headers = { - "X-Compute-Request-Id" => "req-d4a21158-a86c-44a6-983a-e25645907f26", - "Content-Type" => "application/json", - "Content-Length" => "105", - "Date" => Date.new - } - response.body = { - "floating_ip" => { - "instance_id" => nil, - "ip" => "192.168.27.132", - "fixed_ip" => nil, - "id" => 4, - "pool" => "nova" - } - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/create_flavor.rb b/lib/fog/compute/openstack/requests/create_flavor.rb deleted file mode 100644 index 909977fb7..000000000 --- a/lib/fog/compute/openstack/requests/create_flavor.rb +++ /dev/null @@ -1,85 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - # PARAMETERS # - # name = Name of flavor - # ram = Memory in MB - # vcpus = Number of VCPUs - # disk = Size of local disk in GB - # swap = Swap space in MB - # rxtx_factor = RX/TX factor - def create_flavor(attributes) - # Get last flavor id - flavor_ids = [] - flavors = list_flavors_detail.body['flavors'] + list_flavors_detail(is_public: false).body['flavors'] - flavors.each do |flavor| - flavor_ids << flavor['id'].to_i - end - - # Set flavor id - attributes[:flavor_id] = attributes[:flavor_id] || (!flavor_ids.empty? ? flavor_ids.sort.last + 1 : 1) - - data = { - 'flavor' => { - 'name' => attributes[:name], - 'ram' => attributes[:ram], - 'vcpus' => attributes[:vcpus], - 'disk' => attributes[:disk], - 'id' => attributes[:flavor_id], - 'swap' => attributes[:swap], - 'OS-FLV-EXT-DATA:ephemeral' => attributes[:ephemeral], - 'os-flavor-access:is_public' => attributes[:is_public], - 'rxtx_factor' => attributes[:rxtx_factor] - } - } - - request( - body: Fog::JSON.encode(data), - expects: 200, - method: 'POST', - path: 'flavors' - ) - end - end - - class Mock - def create_flavor(attributes) - response = Excon::Response.new - response.status = 200 - response.headers = { - "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new - } - response.body = { - "flavor" => { - "vcpus" => attributes[:vcpus], - "disk" => attributes[:disk], - "name" => attributes[:name], - "links" => [ - { - "href" => "http://192.168.27.100:8774/v1.1/6733e93c5f5c4eb1bcabc6902ba208d6/flavors/11", - "rel" => "self" - }, - { - "href" => "http://192.168.27.100:8774/6733e93c5f5c4eb1bcabc6902ba208d6/flavors/11", - "rel" => "bookmark" - } - ], - "rxtx_factor" => attributes[:rxtx_factor] || 1.0, - "OS-FLV-EXT-DATA:ephemeral" => attributes[:ephemeral] || 0, - "os-flavor-access:is_public" => attributes[:is_public] || false, - "OS-FLV-DISABLED:disabled" => attributes[:disabled] || false, - "ram" => attributes[:ram], - "id" => "11", - "swap" => attributes[:swap] || "" - } - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/create_image.rb b/lib/fog/compute/openstack/requests/create_image.rb deleted file mode 100644 index 38d747477..000000000 --- a/lib/fog/compute/openstack/requests/create_image.rb +++ /dev/null @@ -1,44 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def create_image(server_id, name, metadata = {}) - body = { 'createImage' => { - 'name' => name, - 'metadata' => metadata - } } - data = server_action(server_id, body) - image_id = data.headers["Location"].scan(%r{.*/(.*)}).flatten[0] - get_image_details(image_id) - end - end - - class Mock - def create_image(server_id, name, metadata = {}) - response = Excon::Response.new - response.status = 202 - - img_id = Fog::Mock.random_numbers(6).to_s - - data = { - 'id' => img_id, - 'server' => { "id" => "3", "links" => [{ "href" => "http://nova1:8774/admin/servers/#{server_id}", "rel" => "bookmark" }] }, - 'links' => [{ "href" => "http://nova1:8774/v1.1/admin/images/#{img_id}", "rel" => "self" }, { "href" => "http://nova1:8774/admin/images/#{img_id}", "rel" => "bookmark" }], - 'metadata' => metadata || {}, - 'name' => name || "server_#{rand(999)}", - 'progress' => 0, - 'status' => 'SAVING', - 'minDisk' => 0, - 'minRam' => 0, - 'updated' => "", - 'created' => "" - } - self.data[:last_modified][:images][data['id']] = Time.now - self.data[:images][data['id']] = data - response.body = { 'image' => data } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/create_key_pair.rb b/lib/fog/compute/openstack/requests/create_key_pair.rb deleted file mode 100644 index 5489bad9f..000000000 --- a/lib/fog/compute/openstack/requests/create_key_pair.rb +++ /dev/null @@ -1,47 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def create_key_pair(key_name, public_key = nil) - data = { - 'keypair' => { - 'name' => key_name - } - } - - data['keypair']['public_key'] = public_key unless public_key.nil? - - request( - body: Fog::JSON.encode(data), - expects: [200, 201], - method: 'POST', - path: 'os-keypairs' - ) - end - end - - class Mock - def create_key_pair(key_name, _public_key = nil) - response = Excon::Response.new - response.status = 200 - response.headers = { - "X-Compute-Request-Id" => "req-c373a42c-2825-4e60-8d34-99416ea850be", - "Content-Type" => "application/json", - "Content-Length" => "1289", - "Date" => Date.new - } - response.body = { - "keypair" => { - "public_key" => "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCdAZLjljntJbLVVkNHjWFSoKen2nZbk39ZfqhZJOMdeFdz02GWBS45rcuboeGg/gozKRwsLu4N6NLPlYtbK/NapJIvgO/djBp+FQG1QZNtLPsx7j4hVJac3yISGms+Xtu4cEv6j5sFDzAgTQbWez0Z1+9qOq9ngdaoW+YClfQ== vagrant@nova\n", - "private_key" => "-----BEGIN RSA PRIVATE KEY-----\nMIICXgIBAAKBgQDCdAZLjljn1tJbLVVkNHjWFSoKen2nZbk39ZfqhZJOMdeFdz02\nGWBS45rcuHboeGg/gozKRwsLu4N6NLPlYtbK/NapJIvgO/djBp+FQG1QZNtLPsx7\nj4hVJac3yISGms+Xtu4cEv6j5sFDzAgTQbWez0Z1+9qOq9ngdaoW+YClfQIDAQAB\nAoGBALBoT9m1vuQ82EONQf2RONqHAsfUzi/SMhEZRgOlv9AemXZkcWyl4uPvxmtd\nEcreiTystAtCHjw7lhCExXthipevUjtIAAt+b3pMn6Oyjad3IRvde6atMdjrje43\n/nftYtuXYyJTsvwEvLYqSioLQ0Nn/XDKhOpcM5tejDHOH35lAkEA+H4r7y9X521u\nIABVAezBWaT/wvdMjx5cwfyYEQjnI1bxfRIqkgoY5gDDBdVbT75UTsHHbHLORQcw\nRjRvS2zgewJBAMhT6eyMonJvHHvC5RcchcY+dWkscIKoOzeyUKMb+7tERQa9/UN2\njYb+jdM0VyL0ruLFwYtl2m34gfmhcXgIvGcCQGzKMEnjHEUBr7jq7EyPbobkqeSd\niDMQQ+PZxmmO0EK0ib0L+v881HG926PuKK/cz+Q7Cif8iznFT+ksg50t6YkCQQC9\nwfcAskqieSuS9A9LcCIrojhXctf0e+T0Ij2N89DlF4sHEuqXf/IZ4IB5gsfTfdE3\nUDnAkK9yogaEbu/r0uKbAkEAy5kl71bIqvKTKsY2mES9ziVxfftl/9UIi5LI+QHb\nmC/c6cTrGVCM71fi2GMxGgBeEea4+7xwoWTL4CxA00kmTg==\n-----END RSA PRIVATE KEY-----\n", - "user_id" => "admin", - "name" => key_name, - "fingerprint" => "97:86:f4:15:68:0c:7b:a7:e5:8f:f0:bd:1f:27:65:ad" - } - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/create_security_group.rb b/lib/fog/compute/openstack/requests/create_security_group.rb deleted file mode 100644 index dee15c0c7..000000000 --- a/lib/fog/compute/openstack/requests/create_security_group.rb +++ /dev/null @@ -1,51 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def create_security_group(name, description) - data = { - 'security_group' => { - 'name' => name, - 'description' => description - } - } - - request( - body: Fog::JSON.encode(data), - expects: 200, - method: 'POST', - path: 'os-security-groups' - ) - end - end - - class Mock - def create_security_group(name, description) - Fog::Identity::OpenStack.new(openstack_auth_url: credentials[:openstack_auth_url]) - tenant_id = Fog::Identity::OpenStack::V2::Mock.data[current_tenant][:tenants].keys.first - security_group_id = Fog::Mock.random_numbers(2).to_i + 1 - data[:security_groups][security_group_id.to_s] = { - 'tenant_id' => tenant_id, - 'rules' => [], - 'id' => security_group_id, - 'name' => name, - 'description' => description - } - - response = Excon::Response.new - response.status = 200 - response.headers = { - 'X-Compute-Request-Id' => "req-#{Fog::Mock.random_hex(32)}", - 'Content-Type' => 'application/json', - 'Content-Length' => Fog::Mock.random_numbers(3).to_s, - 'Date' => Date.new - } - response.body = { - 'security_group' => data[:security_groups][security_group_id.to_s] - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/create_security_group_rule.rb b/lib/fog/compute/openstack/requests/create_security_group_rule.rb deleted file mode 100644 index 708eadc4a..000000000 --- a/lib/fog/compute/openstack/requests/create_security_group_rule.rb +++ /dev/null @@ -1,57 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def create_security_group_rule(parent_group_id, ip_protocol, from_port, to_port, cidr, group_id = nil) - data = { - 'security_group_rule' => { - 'parent_group_id' => parent_group_id, - 'ip_protocol' => ip_protocol, - 'from_port' => from_port, - 'to_port' => to_port, - 'cidr' => cidr, - 'group_id' => group_id - } - } - - request( - expects: 200, - method: 'POST', - body: Fog::JSON.encode(data), - path: 'os-security-group-rules' - ) - end - end - - class Mock - def create_security_group_rule(parent_group_id, ip_protocol, from_port, to_port, cidr, group_id = nil) - parent_group_id = parent_group_id.to_i - response = Excon::Response.new - response.status = 200 - response.headers = { - 'X-Compute-Request-Id' => "req-#{Fog::Mock.random_hex(32)}", - 'Content-Type' => 'application/json', - 'Content-Length' => Fog::Mock.random_numbers(3).to_s, - 'Date' => Date.new - } - rule = { - 'id' => Fog::Mock.random_numbers(2).to_i, - 'from_port' => from_port, - 'group' => group_id || {}, - 'ip_protocol' => ip_protocol, - 'to_port' => to_port, - 'parent_group_id' => parent_group_id, - 'ip_range' => { - 'cidr' => cidr - } - } - data[:security_groups][parent_group_id.to_s]['rules'].push(rule) - response.body = { - 'security_group_rule' => rule - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/create_snapshot.rb b/lib/fog/compute/openstack/requests/create_snapshot.rb deleted file mode 100644 index c5acda1fd..000000000 --- a/lib/fog/compute/openstack/requests/create_snapshot.rb +++ /dev/null @@ -1,51 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def create_snapshot(volume_id, name, description, force = false) - data = { - 'snapshot' => { - 'volume_id' => volume_id, - 'display_name' => name, - 'display_description' => description, - 'force' => force - } - } - - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'POST', - path: "os-snapshots" - ) - end - end - - class Mock - def create_snapshot(volume_id, name, description, _force = false) - volume_response = get_volume_details(volume_id) - volume = volume_response.data[:body]['volume'] - if volume.nil? - raise Fog::Compute::OpenStack::NotFound - else - response = Excon::Response.new - data = { - "status" => "availble", - "name" => name, - "created_at" => Time.now, - "description" => description, - "volume_id" => volume_id, - "id" => Fog::Mock.random_numbers(2), - "size" => volume['size'] - } - - self.data[:snapshots][data['id']] = data - response.body = { "snapshot" => data } - response.status = 202 - response - end - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/create_volume.rb b/lib/fog/compute/openstack/requests/create_volume.rb deleted file mode 100644 index 6f8316041..000000000 --- a/lib/fog/compute/openstack/requests/create_volume.rb +++ /dev/null @@ -1,55 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def create_volume(name, description, size, options = {}) - data = { - 'volume' => { - 'display_name' => name, - 'display_description' => description, - 'size' => size - } - } - - vanilla_options = [ - :snapshot_id, - :availability_zone, - :volume_type, - :metadata - ] - - vanilla_options.select { |o| options[o] }.each do |key| - data['volume'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'POST', - path: 'os-volumes' - ) - end - end - - class Mock - def create_volume(name, description, size, options = {}) - response = Excon::Response.new - response.status = 202 - data = { 'id' => Fog::Mock.random_numbers(2), - 'displayName' => name, - 'displayDescription' => description, - 'size' => size, - 'status' => 'creating', - 'snapshotId' => options[:snapshot_id], - 'volumeType' => options[:volume_type] || 'None', - 'availabilityZone' => options[:availability_zone] || 'nova', - 'createdAt' => Time.now.strftime('%FT%T.%6N'), - 'attachments' => [], 'metadata' => options[:metadata] || {} } - self.data[:volumes][data['id']] = data - response.body = { 'volume' => data } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/delete_image.rb b/lib/fog/compute/openstack/requests/delete_image.rb deleted file mode 100644 index e15f3f6ac..000000000 --- a/lib/fog/compute/openstack/requests/delete_image.rb +++ /dev/null @@ -1,36 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def delete_image(image_id) - request( - expects: 204, - method: 'DELETE', - path: "images/#{image_id}" - ) - end - end - - class Mock - def delete_image(image_id) - response = Excon::Response.new - image = list_images_detail.body['images'].find { |im| im['id'] == image_id } - if image - if image['status'] == 'SAVING' - response.status = 409 - raise(Excon::Errors.status_error({ expects: 202 }, response)) - else - data[:last_modified][:images].delete(image_id) - data[:images].delete(image_id) - response.status = 202 - end - response - else - response.status = 400 - raise(Excon::Errors.status_error({ expects: 202 }, response)) - end - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/delete_key_pair.rb b/lib/fog/compute/openstack/requests/delete_key_pair.rb deleted file mode 100644 index af728151d..000000000 --- a/lib/fog/compute/openstack/requests/delete_key_pair.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def delete_key_pair(key_name) - request( - expects: [202, 204], - method: 'DELETE', - path: "os-keypairs/#{Fog::OpenStack.escape(key_name)}" - ) - end - end - - class Mock - def delete_key_pair(_key_name) - response = Excon::Response.new - response.status = 202 - response.headers = { - "Content-Type" => "text/html; charset=UTF-8", - "Content-Length" => "0", - "Date" => Date.new - } - response.body = {} - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/delete_metadata.rb b/lib/fog/compute/openstack/requests/delete_metadata.rb deleted file mode 100644 index b2cc47355..000000000 --- a/lib/fog/compute/openstack/requests/delete_metadata.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def delete_metadata(collection_name, parent_id, key) - request( - expects: 204, - method: 'DELETE', - path: "#{collection_name}/#{parent_id}/metadata/#{key}" - ) - end - end - - class Mock - def delete_metadata(_collection_name, _parent_id, _key) - response = Excon::Response.new - response.status = 204 - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/delete_security_group.rb b/lib/fog/compute/openstack/requests/delete_security_group.rb deleted file mode 100644 index 14b7ade6c..000000000 --- a/lib/fog/compute/openstack/requests/delete_security_group.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def delete_security_group(security_group_id) - request( - expects: 202, - method: 'DELETE', - path: "os-security-groups/#{security_group_id}" - ) - end - end - - class Mock - def delete_security_group(security_group_id) - data[:security_groups].delete security_group_id.to_s - - response = Excon::Response.new - response.status = 202 - response.headers = { - "Content-Type" => "text/html; charset=UTF-8", - "Content-Length" => "0", - "Date" => Date.new - } - response.body = {} - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/delete_security_group_rule.rb b/lib/fog/compute/openstack/requests/delete_security_group_rule.rb deleted file mode 100644 index f6b0745ad..000000000 --- a/lib/fog/compute/openstack/requests/delete_security_group_rule.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def delete_security_group_rule(security_group_rule_id) - request( - expects: 202, - method: 'DELETE', - path: "os-security-group-rules/#{security_group_rule_id}" - ) - end - end - - class Mock - def delete_security_group_rule(security_group_rule_id) - security_group = data[:security_groups].values.find { |sg| sg["rules"].find { |sgr| sgr["id"].to_s == security_group_rule_id.to_s } } - security_group["rules"].reject! { |sgr| sgr["id"] == security_group_rule_id } - response = Excon::Response.new - response.status = 202 - response.headers = { - "Content-Type" => "text/html; charset=UTF-8", - "Content-Length" => "0", - "Date" => Date.new - } - response.body = {} - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/delete_service.rb b/lib/fog/compute/openstack/requests/delete_service.rb deleted file mode 100644 index bd067418a..000000000 --- a/lib/fog/compute/openstack/requests/delete_service.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def delete_service(uuid, optional_params = nil) - # Encode all params - optional_params = optional_params.each { |k, v| optional_params[k] = URI.encode(v) } if optional_params - - request( - expects: [202, 204], - method: 'DELETE', - path: "os-services/#{uuid}", - query: optional_params - ) - end - end - - class Mock - def delete_service(_host, _binary, _optional_params = nil) - response = Excon::Response.new - response.status = 204 - response.headers = { - "Content-Type" => "text/html; charset=UTF-8", - "Content-Length" => "0", - "Date" => Date.new - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/delete_snapshot.rb b/lib/fog/compute/openstack/requests/delete_snapshot.rb deleted file mode 100644 index 86de9b0e6..000000000 --- a/lib/fog/compute/openstack/requests/delete_snapshot.rb +++ /dev/null @@ -1,28 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def delete_snapshot(snapshot_id) - request( - expects: 202, - method: 'DELETE', - path: "os-snapshots/#{snapshot_id}" - ) - end - end - - class Mock - def delete_snapshot(snapshot_id) - response = Excon::Response.new - response.status = 204 - if list_snapshots_detail.body['snapshots'].find { |snap| snap['id'] == snapshot_id } - data[:snapshots].delete(snapshot_id) - else - raise Fog::Compute::OpenStack::NotFound - end - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/delete_volume.rb b/lib/fog/compute/openstack/requests/delete_volume.rb deleted file mode 100644 index d3c27360f..000000000 --- a/lib/fog/compute/openstack/requests/delete_volume.rb +++ /dev/null @@ -1,28 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def delete_volume(volume_id) - request( - expects: 202, - method: 'DELETE', - path: "os-volumes/#{volume_id}" - ) - end - end - - class Mock - def delete_volume(volume_id) - response = Excon::Response.new - if list_volumes.body['volumes'].map { |v| v['id'] }.include? volume_id - data[:volumes].delete(volume_id) - response.status = 204 - response - else - raise Fog::Compute::OpenStack::NotFound - end - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/disable_service_log_reason.rb b/lib/fog/compute/openstack/requests/disable_service_log_reason.rb deleted file mode 100644 index 6b403e8e7..000000000 --- a/lib/fog/compute/openstack/requests/disable_service_log_reason.rb +++ /dev/null @@ -1,38 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def disable_service_log_reason(host, binary, disabled_reason, optional_params = nil) - data = { "host" => host, "binary" => binary, "disabled_reason" => disabled_reason } - - # Encode all params - optional_params = optional_params.each { |k, v| optional_params[k] = URI.encode(v) } if optional_params - - request( - body: Fog::JSON.encode(data), - expects: 200, - method: 'PUT', - path: "os-services/disable-log-reason", - query: optional_params - ) - end - end - - class Mock - def disable_service_log_reason(_host, _binary, _disabled_reason, _optional_params = nil) - response = Excon::Response.new - response.status = 200 - response.body = { - "service" => { - "host" => "host1", - "binary" => "nova-compute", - "status" => "disabled", - "disabled_reason" => "test2" - } - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_address.rb b/lib/fog/compute/openstack/requests/get_address.rb deleted file mode 100644 index f2c73f33b..000000000 --- a/lib/fog/compute/openstack/requests/get_address.rb +++ /dev/null @@ -1,38 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def get_address(address_id) - request( - expects: [200], - method: 'GET', - path: "os-floating-ips/#{address_id}" - ) - end - end - - class Mock - def get_address(_address_id) - response = Excon::Response.new - response.status = 200 - response.headers = { - "X-Compute-Request-Id" => "req-d4a21158-a86c-44a6-983a-e25645907f26", - "Content-Type" => "application/json", - "Content-Length" => "105", - "Date" => Date.new - } - response.body = { - "floating_ip" => { - "instance_id" => nil, - "ip" => "192.168.27.129", - "fixed_ip" => nil, - "id" => 1, - "pool" => "nova" - } - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_host_details.rb b/lib/fog/compute/openstack/requests/get_host_details.rb deleted file mode 100644 index 1494fe798..000000000 --- a/lib/fog/compute/openstack/requests/get_host_details.rb +++ /dev/null @@ -1,60 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def get_host_details(host) - request( - expects: [200, 203], - method: 'GET', - path: "os-hosts/#{host}" - ) - end - end - - class Mock - def get_host_details(_host) - response = Excon::Response.new - response.status = 200 - response.body = { "host" => [ - { "resource" => { - "project" => "(total)", - "memory_mb" => 64427, - "host" => "cn28.la-1-3.morphcloud.net", - "cpu" => 12, - "disk_gb" => 1608 - } }, - { "resource" => { - "project" => "(used_now)", - "memory_mb" => 1753, - "host" => "cn28.la-1-3.morphcloud.net", - "cpu" => 3, - "disk_gb" => 33 - } }, - { "resource" => { - "project" => "(used_max)", - "memory_mb" => 7168, - "host" => "cn28.la-1-3.morphcloud.net", - "cpu" => 3, - "disk_gb" => 45 - } }, - { "resource" => { - "project" => "bf8301f5164f4790889a1bc2bfb16d99", - "memory_mb" => 5120, - "host" => "cn28.la-1-3.morphcloud.net", - "cpu" => 2, - "disk_gb" => 35 - } }, - { "resource" => { - "project" => "3bb4d0301c5f47d5b4d96a361fcf96f4", - "memory_mb" => 2048, - "host" => "cn28.la-1-3.morphcloud.net", - "cpu" => 1, - "disk_gb" => 10 - } } - ] } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_hypervisor.rb b/lib/fog/compute/openstack/requests/get_hypervisor.rb deleted file mode 100644 index 7fc60a85d..000000000 --- a/lib/fog/compute/openstack/requests/get_hypervisor.rb +++ /dev/null @@ -1,64 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def get_hypervisor(hypervisor_id) - request( - expects: 200, - method: 'GET', - path: "os-hypervisors/#{hypervisor_id}" - ) - end - end - - class Mock - def get_hypervisor(hypervisor_id) - response = Excon::Response.new - response.status = 200 - response.body = { - "hypervisor" => { - "cpu_info" => { - "arch" => "x86_64", - "model" => "Nehalem", - "vendor" => "Intel", - "features" => [ - "pge", - "clflush" - ], - "topology" => { - "cores" => 1, - "threads" => 1, - "sockets" => 4 - } - }, - "current_workload" => 0, - "status" => "enabled", - "state" => "up", - "disk_available_least" => 0, - "host_ip" => "1.1.1.1", - "free_disk_gb" => 1028, - "free_ram_mb" => 7680, - "hypervisor_hostname" => "fake-mini", - "hypervisor_type" => "fake", - "hypervisor_version" => 1000, - "id" => hypervisor_id, - "local_gb" => 1028, - "local_gb_used" => 0, - "memory_mb" => 8192, - "memory_mb_used" => 512, - "running_vms" => 0, - "service" => { - "host" => "host1", - "id" => 7, - "disabled_reason" => null - }, - "vcpus" => 1, - "vcpus_used" => 0 - } - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_hypervisor_statistics.rb b/lib/fog/compute/openstack/requests/get_hypervisor_statistics.rb deleted file mode 100644 index e27785c7b..000000000 --- a/lib/fog/compute/openstack/requests/get_hypervisor_statistics.rb +++ /dev/null @@ -1,39 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def get_hypervisor_statistics(_tenant_id) - request( - expects: 200, - method: 'GET', - path: "os-hypervisors/statistics" - ) - end - end - - class Mock - def get_hypervisor_statistics(_tenant_id) - response = Excon::Response.new - response.status = 200 - response.body = { - "hypervisor_statistics" => { - "count" => 1, - "current_workload" => 0, - "disk_available_least" => 0, - "free_disk_gb" => 1028, - "free_ram_mb" => 7680, - "local_gb" => 1028, - "local_gb_used" => 0, - "memory_mb" => 8192, - "memory_mb_used" => 512, - "running_vms" => 0, - "vcpus" => 1, - "vcpus_used" => 0 - } - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_limits.rb b/lib/fog/compute/openstack/requests/get_limits.rb deleted file mode 100644 index 64ba650a0..000000000 --- a/lib/fog/compute/openstack/requests/get_limits.rb +++ /dev/null @@ -1,94 +0,0 @@ -module Fog - module Compute - class OpenStack - # http://developer.openstack.org/api-ref-compute-v2.1.html#showlimits - - class Real - def get_limits(options = {}) - request( - expects: 200, - method: 'GET', - path: '/limits', - query: options - ) - end - end - - class Mock - def get_limits(_options = {}) - rate_limits = [ - { 'regex' => '.*', - 'limit' => [ - { 'next-available' => '2012-11-22T16:13:44Z', - 'unit' => 'MINUTE', - 'verb' => 'POST', - 'remaining' => 9, - 'value' => 10 }, - { 'next-available' => '2012-11-23T00:46:14Z', - 'unit' => 'MINUTE', - 'verb' => 'PUT', - 'remaining' => 10, - 'value' => 10 }, - { 'next-available' => '2012-11-22T16:14:30Z', - 'unit' => 'MINUTE', - 'verb' => 'DELETE', - 'remaining' => 99, - 'value' => 100 } - ], - 'uri' => '*' }, - { 'regex' => '^/servers', - 'limit' => [ - { 'next-available' => '2012-11-23T00:46:14Z', - 'unit' => 'DAY', - 'verb' => 'POST', - 'remaining' => 50, - 'value' => 50 } - ], - 'uri' => '*/servers' }, - { 'regex' => '.*changes-since.*', - 'limit' => [ - { 'next-available' => '2012-11-23T00:46:14Z', - 'unit' => 'MINUTE', - 'verb' => 'GET', - 'remaining' => 3, - 'value' => 3 } - ], - 'uri' => '*changes-since*' } - ] - - absolute_limits = { - # Max - 'maxServerMeta' => 128, - 'maxTotalInstances' => 10, - 'maxPersonality' => 5, - 'maxImageMeta' => 128, - 'maxPersonalitySize' => 10240, - 'maxSecurityGroupRules' => 20, - 'maxTotalKeypairs' => 100, - 'maxSecurityGroups' => 10, - 'maxTotalCores' => 20, - 'maxTotalFloatingIps' => 10, - 'maxTotalRAMSize' => 51200, - - # Used - 'totalCoresUsed' => -1, - 'totalRAMUsed' => -2048, - 'totalInstancesUsed' => -1, - 'totalSecurityGroupsUsed' => 0, - 'totalFloatingIpsUsed' => 0 - } - - Excon::Response.new( - status: 200, - body: { - 'limits' => { - 'rate' => rate_limits, - 'absolute' => absolute_limits - } - } - ) - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_quota.rb b/lib/fog/compute/openstack/requests/get_quota.rb deleted file mode 100644 index f64887386..000000000 --- a/lib/fog/compute/openstack/requests/get_quota.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def get_quota(tenant_id) - request( - expects: 200, - method: 'GET', - path: "/os-quota-sets/#{tenant_id}" - ) - end - end - - class Mock - def get_quota(tenant_id) - response = Excon::Response.new - response.status = 200 - response.body = { - 'quota_set' => (data[:quota_updated] || data[:quota]).merge('id' => tenant_id) - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_quota_defaults.rb b/lib/fog/compute/openstack/requests/get_quota_defaults.rb deleted file mode 100644 index 344c6a4c4..000000000 --- a/lib/fog/compute/openstack/requests/get_quota_defaults.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def get_quota_defaults(tenant_id) - request( - expects: 200, - method: 'GET', - path: "/os-quota-sets/#{tenant_id}/defaults" - ) - end - end - - class Mock - def get_quota_defaults(tenant_id) - response = Excon::Response.new - response.status = 200 - response.body = { - 'quota_set' => data[:quota].merge('id' => tenant_id) - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_security_group.rb b/lib/fog/compute/openstack/requests/get_security_group.rb deleted file mode 100644 index 974d3acba..000000000 --- a/lib/fog/compute/openstack/requests/get_security_group.rb +++ /dev/null @@ -1,37 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def get_security_group(security_group_id) - request( - expects: [200], - method: 'GET', - path: "os-security-groups/#{security_group_id}" - ) - end - end - - class Mock - def get_security_group(security_group_id) - security_group = data[:security_groups][security_group_id.to_s] - response = Excon::Response.new - if security_group - response.status = 200 - response.headers = { - "X-Compute-Request-Id" => "req-63a90344-7c4d-42e2-936c-fd748bced1b3", - "Content-Type" => "application/json", - "Content-Length" => "167", - "Date" => Date.new - } - response.body = { - "security_group" => security_group - } - else - raise Fog::Compute::OpenStack::NotFound, "Security group #{security_group_id} does not exist" - end - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_security_group_rule.rb b/lib/fog/compute/openstack/requests/get_security_group_rule.rb deleted file mode 100644 index 6c865685f..000000000 --- a/lib/fog/compute/openstack/requests/get_security_group_rule.rb +++ /dev/null @@ -1,38 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def get_security_group_rule(security_group_rule_id) - request( - expects: [200], - method: 'GET', - path: "os-security-group-rules/#{security_group_rule_id}" - ) - end - end - - class Mock - def get_security_group_rule(security_group_rule_id) - security_group_rule = nil - data[:security_groups].find { |_id, sg| security_group_rule = sg["rules"].find { |sgr| sgr["id"].to_s == security_group_rule_id.to_s } } - response = Excon::Response.new - if security_group_rule - response.status = 200 - response.headers = { - "X-Compute-Request-Id" => "req-63a90344-7c4d-42e2-936c-fd748bced1b3", - "Content-Type" => "application/json", - "Content-Length" => "167", - "Date" => Date.new - } - response.body = { - "security_group_rule" => security_group_rule - } - else - raise Fog::Compute::OpenStack::NotFound, "Security group rule #{security_group_rule_id} does not exist" - end - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_server_group.rb b/lib/fog/compute/openstack/requests/get_server_group.rb deleted file mode 100644 index 6dedf5d23..000000000 --- a/lib/fog/compute/openstack/requests/get_server_group.rb +++ /dev/null @@ -1,38 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def get_server_group(group_id) - request( - expects: 200, - method: 'GET', - path: "/os-server-groups/#{group_id}" - ) - end - end - - class Mock - def get_server_group(group_id) - grp = data[:server_groups][group_id] - response = Excon::Response.new - response.status = 200 - response.headers = { - "Content-Type" => "text/html; charset=UTF-8", - "Content-Length" => "0", - "Date" => Date.new - } - response.body = { 'server_group' => { - 'id' => group_id, - 'name' => grp[:name], - 'policies' => grp[:policies], - 'members' => grp[:members], - 'metadata' => {}, - 'project_id' => 'test-project', - 'user_id' => 'test-user' - } } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_snapshot_details.rb b/lib/fog/compute/openstack/requests/get_snapshot_details.rb deleted file mode 100644 index a623dae11..000000000 --- a/lib/fog/compute/openstack/requests/get_snapshot_details.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def get_snapshot_details(snapshot_id) - request( - expects: 200, - method: 'GET', - path: "os-snapshots/#{snapshot_id}" - ) - end - end - - class Mock - def get_snapshot_details(snapshot_id) - response = Excon::Response.new - if snapshot = list_snapshots_detail.body['snapshots'].find do |snap| - snap['id'] == snapshot_id - end - response.status = 200 - response.body = { 'snapshot' => snapshot } - response - else - raise Fog::Compute::OpenStack::NotFound - end - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_usage.rb b/lib/fog/compute/openstack/requests/get_usage.rb deleted file mode 100644 index 7b869e564..000000000 --- a/lib/fog/compute/openstack/requests/get_usage.rb +++ /dev/null @@ -1,48 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def get_usage(tenant_id, date_start, date_end) - params = {} - params[:start] = date_start.utc.iso8601.chop! - params[:end] = date_end.utc.iso8601.chop! - request( - expects: [200, 203], - method: 'GET', - path: "os-simple-tenant-usage/#{tenant_id}", - query: params - ) - end - end - - class Mock - def get_usage(tenant_id, date_start, date_end) - response = Excon::Response.new - response.status = 200 - response.body = { "tenant_usage" => - { "total_memory_mb_usage" => 0.0, - "total_vcpus_usage" => 0.0, - "total_hours" => 0.0, - "tenant_id" => tenant_id, - "stop" => date_start, - "start" => date_end, - "total_local_gb_usage" => 0.0, - "server_usages" => [{ - "hours" => 0.0, - "uptime" => 69180, - "local_gb" => 0, - "ended_at" => nil, - "name" => "test server", - "tenant_id" => tenant_id, - "vcpus" => 1, - "memory_mb" => 512, - "state" => "active", - "flavor" => "m1.tiny", - "started_at" => "2012-03-05 09:11:44" - }] } } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_vnc_console.rb b/lib/fog/compute/openstack/requests/get_vnc_console.rb deleted file mode 100644 index 1073de830..000000000 --- a/lib/fog/compute/openstack/requests/get_vnc_console.rb +++ /dev/null @@ -1,40 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - # Get a vnc console for an instance. - # - # === Parameters - # * server_id <~String> - The ID of the server. - # * console_type <~String> - Type of vnc console to get ('novnc' or 'xvpvnc'). - # === Returns - # * response <~Excon::Response>: - # * body <~Hash>: - # * url <~String> - # * type <~String> - def get_vnc_console(server_id, console_type) - body = { - 'os-getVNCConsole' => { - 'type' => console_type - } - } - server_action(server_id, body) - end - end - - class Mock - def get_vnc_console(_server_id, _console_type) - response = Excon::Response.new - response.status = 200 - response.body = { - "console" => { - "url" => "http://192.168.27.100:6080/vnc_auto.html?token=c3606020-d1b7-445d-a88f-f7af48dd6a20", - "type" => "novnc" - } - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/get_volume_details.rb b/lib/fog/compute/openstack/requests/get_volume_details.rb deleted file mode 100644 index 4ffa9d166..000000000 --- a/lib/fog/compute/openstack/requests/get_volume_details.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def get_volume_details(volume_id) - request( - expects: 200, - method: 'GET', - path: "os-volumes/#{volume_id}" - ) - end - end - - class Mock - def get_volume_details(volume_id) - response = Excon::Response.new - if data = self.data[:volumes][volume_id] - if data['status'] == 'creating' \ - && Time.now - Time.parse(data['createdAt']) >= Fog::Mock.delay - data['status'] = 'available' - end - response.status = 200 - response.body = { 'volume' => data } - response - else - raise Fog::Compute::OpenStack::NotFound - end - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_aggregates.rb b/lib/fog/compute/openstack/requests/list_aggregates.rb deleted file mode 100644 index c5394e323..000000000 --- a/lib/fog/compute/openstack/requests/list_aggregates.rb +++ /dev/null @@ -1,37 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_aggregates(options = {}) - request( - expects: [200, 203], - method: 'GET', - path: 'os-aggregates', - query: options - ) - end - end - - class Mock - def list_aggregates(_options = {}) - response = Excon::Response.new - response.status = 200 - response.body = { 'aggregates' => [{ - "availability_zone" => "nova", - "created_at" => "2012-11-16T06:22:23.032493", - "deleted" => false, - "deleted_at" => nil, - "metadata" => { - "availability_zone" => "nova" - }, - "id" => 1, - "name" => "name", - "updated_at" => nil - }] } - - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_all_addresses.rb b/lib/fog/compute/openstack/requests/list_all_addresses.rb deleted file mode 100644 index 36664e2b3..000000000 --- a/lib/fog/compute/openstack/requests/list_all_addresses.rb +++ /dev/null @@ -1,62 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_all_addresses(options = {}) - request( - expects: [200, 203], - method: 'GET', - path: "os-floating-ips", - query: options - ) - end - end - - class Mock - def list_all_addresses(_options = {}) - response = Excon::Response.new - response.status = 200 - response.headers = { - "X-Compute-Request-Id" => "req-d4a21158-a86c-44a6-983a-e25645907f26", - "Content-Type" => "application/json", - "Content-Length" => "378", - "Date" => Date.new - } - response.body = { - "floating_ips" => [ - { - "instance_id" => nil, - "ip" => "192.168.27.129", - "fixed_ip" => nil, - "id" => 1, - "pool" => "nova" - }, - { - "instance_id" => nil, - "ip" => "192.168.27.130", - "fixed_ip" => nil, - "id" => 2, - "pool" => "nova" - }, - { - "instance_id" => nil, - "ip" => "192.168.27.131", - "fixed_ip" => nil, - "id" => 3, - "pool" => "nova" - }, - { - "instance_id" => nil, - "ip" => "192.168.27.132", - "fixed_ip" => nil, - "id" => 4, - "pool" => "nova" - } - ] - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_availability_zones.rb b/lib/fog/compute/openstack/requests/list_availability_zones.rb deleted file mode 100644 index e5da2eb39..000000000 --- a/lib/fog/compute/openstack/requests/list_availability_zones.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_availability_zones(options = {}) - params = options - - request( - expects: [200], - method: 'GET', - path: "os-availability-zone", - query: params - ) - end - end - - class Mock - def list_endpoints; end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_hypervisors_detail.rb b/lib/fog/compute/openstack/requests/list_hypervisors_detail.rb deleted file mode 100644 index 0a19d2d8c..000000000 --- a/lib/fog/compute/openstack/requests/list_hypervisors_detail.rb +++ /dev/null @@ -1,71 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_hypervisors_detail(options = {}) - request( - expects: 200, - method: 'GET', - path: 'os-hypervisors/detail', - query: options - ) - end - end - - class Mock - def list_hypervisors_detail(_options = {}) - response = Excon::Response.new - response.status = 200 - response.body = { - "hypervisors" => [{ - "cpu_info" => { - "arch" => "x86_64", - "model" => "Nehalem", - "vendor" => "Intel", - "features" => [ - "pge", - "clflush" - ], - "topology" => { - "cores" => 1, - "threads" => 1, - "sockets" => 4 - } - }, - "current_workload" => 0, - "status" => "enabled", - "state" => "up", - "disk_available_least" => 0, - "host_ip" => "1.1.1.1", - "free_disk_gb" => 1028, - "free_ram_mb" => 7680, - "hypervisor_hostname" => "fake-mini", - "hypervisor_type" => "fake", - "hypervisor_version" => 1000, - "id" => 2, - "local_gb" => 1028, - "local_gb_used" => 0, - "memory_mb" => 8192, - "memory_mb_used" => 512, - "running_vms" => 0, - "service" => { - "host" => "host1", - "id" => 7, - "disabled_reason" => null - }, - "vcpus" => 1, - "vcpus_used" => 0 - }], - "hypervisors_links" => [ - { - "href" => "http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/hypervisors/detail?limit=1&marker=2", - "rel" => "next" - } - ] - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_images.rb b/lib/fog/compute/openstack/requests/list_images.rb deleted file mode 100644 index e131605f3..000000000 --- a/lib/fog/compute/openstack/requests/list_images.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_images - request( - expects: [200, 203], - method: 'GET', - path: 'images' - ) - end - end - - class Mock - def list_images - response = Excon::Response.new - data = list_images_detail.body['images'] - images = [] - data.each do |image| - images << image.reject { |key, _value| !['id', 'name', 'links'].include?(key) } - end - response.status = [200, 203][rand(2)] - response.body = { 'images' => images } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_key_pairs.rb b/lib/fog/compute/openstack/requests/list_key_pairs.rb deleted file mode 100644 index 1f248081c..000000000 --- a/lib/fog/compute/openstack/requests/list_key_pairs.rb +++ /dev/null @@ -1,39 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_key_pairs(options = {}) - request( - expects: [200, 203], - method: 'GET', - path: 'os-keypairs', - query: options - ) - end - end - - class Mock - def list_key_pairs(_options = {}) - response = Excon::Response.new - response.status = 200 - response.headers = { - "X-Compute-Request-Id" => "req-c373a42c-2825-4e60-8d34-99416ea850be", - "Content-Type" => "application/json", - "Content-Length" => "360", - "Date" => Date.new - } - response.body = { - "keypairs" => [{ - "keypair" => { - "public_key" => "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCdAZLjln1tJbLVVkNHjWFSoKen2nZbk39ZfqhZJOMdeFdz02GWBS4rcuHboeGg/gozKRwsLu4N6NLPlYtbK/NapJIvgO/djBp+FG1QZNtLPsx7j4hVJac3yISGms+Xtu4cEv6j5sFDzAgTQbWz0Z1+9qOq9ngdaoW+YClfQ== vagrant@nova\n", - "name" => "test_key", - "fingerprint" => "97:86:f4:15:68:0c:7b:a7:e5:8f:f0:bd:1f:27:65:ad" - } - }] - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_security_groups.rb b/lib/fog/compute/openstack/requests/list_security_groups.rb deleted file mode 100644 index b9218bfae..000000000 --- a/lib/fog/compute/openstack/requests/list_security_groups.rb +++ /dev/null @@ -1,67 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_security_groups(options = {}) - path = "os-security-groups" - - if options.kind_of?(Hash) - server_id = options.delete(:server_id) - query = options - else - # Backwards compatibility layer, only server_id was passed as first parameter previously - Fog::Logger.deprecation('Calling OpenStack[:compute].list_security_groups(server_id) is deprecated, use .list_security_groups(:server_id => value) instead') - server_id = options - query = {} - end - - if server_id - path = "servers/#{server_id}/#{path}" - end - - request( - expects: [200], - method: 'GET', - path: path, - query: query - ) - end - end - - class Mock - def list_security_groups(options = {}) - server_id = if options.kind_of?(Hash) - options.delete(:server_id) - else - options - end - - security_groups = data[:security_groups].values - - groups = if server_id - server_group_names = - Array(data[:server_security_group_map][server_id]) - - server_group_names.map do |name| - security_groups.find do |sg| - sg['name'] == name - end - end.compact - else - security_groups - end - - Excon::Response.new( - body: { 'security_groups' => groups }, - headers: { - "X-Compute-Request-Id" => "req-#{Fog::Mock.random_base64(36)}", - "Content-Type" => "application/json", - "Date" => Date.new - }, - status: 200 - ) - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_services.rb b/lib/fog/compute/openstack/requests/list_services.rb deleted file mode 100644 index 8cf465a3e..000000000 --- a/lib/fog/compute/openstack/requests/list_services.rb +++ /dev/null @@ -1,66 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_services(parameters = nil) - request( - expects: [200, 203], - method: 'GET', - path: 'os-services', - query: parameters - ) - end - end - - class Mock - def list_services(_parameters = nil) - response = Excon::Response.new - response.status = 200 - response.body = { - "services" => [{ - "id" => 1, - "binary" => "nova-scheduler", - "host" => "host1", - "state" => "up", - "status" => "disabled", - "updated_at" => "2012-10-29T13:42:02.000000", - "zone" => "internal", - "disabled_reason" => "test2" - }, - { - "id" => 2, - "binary" => "nova-compute", - "host" => "host1", - "state" => "up", - "status" => "disabled", - "updated_at" => "2012-10-29T13:42:05.000000", - "zone" => "nova", - "disabled_reason" => "test2" - }, - { - "id" => 3, - "binary" => "nova-scheduler", - "host" => "host2", - "state" => "down", - "status" => "enabled", - "updated_at" => "2012-09-19T06:55:34.000000", - "zone" => "internal", - "disabled_reason" => "nil" - }, - { - "id" => 4, - "binary" => "nova-compute", - "host" => "host2", - "state" => "down", - "status" => "disabled", - "updated_at" => "2012-09-18T08:03:38.000000", - "zone" => "nova", - "disabled_reason" => "test2" - }] - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_snapshots.rb b/lib/fog/compute/openstack/requests/list_snapshots.rb deleted file mode 100644 index 8a741f82a..000000000 --- a/lib/fog/compute/openstack/requests/list_snapshots.rb +++ /dev/null @@ -1,40 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_snapshots(options = true) - if options.kind_of?(Hash) - path = 'os-snapshots' - query = options - else - # Backwards compatibility layer, when 'detailed' boolean was sent as first param - if options - Fog::Logger.deprecation('Calling OpenStack[:compute].list_snapshots(true) is deprecated, use .list_snapshots_detail instead') - else - Fog::Logger.deprecation('Calling OpenStack[:compute].list_snapshots(false) is deprecated, use .list_snapshots({}) instead') - end - path = options ? 'os-snapshots/detail' : 'os-snapshots' - query = {} - end - - request( - expects: 200, - method: 'GET', - path: path, - query: query - ) - end - end - - class Mock - def list_snapshots(_options = true) - response = Excon::Response.new - response.status = 200 - snapshots = data[:snapshots].values - response.body = { 'snapshots' => snapshots } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_snapshots_detail.rb b/lib/fog/compute/openstack/requests/list_snapshots_detail.rb deleted file mode 100644 index e8ed2d349..000000000 --- a/lib/fog/compute/openstack/requests/list_snapshots_detail.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_snapshots_detail(options = {}) - request( - expects: 200, - method: 'GET', - path: 'os-snapshots/detail', - query: options - ) - end - end - - class Mock - def list_snapshots_detail(_options = {}) - response = Excon::Response.new - response.status = 200 - snapshots = data[:snapshots].values - response.body = { 'snapshots' => snapshots } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_tenants.rb b/lib/fog/compute/openstack/requests/list_tenants.rb deleted file mode 100644 index 0cc19e38e..000000000 --- a/lib/fog/compute/openstack/requests/list_tenants.rb +++ /dev/null @@ -1,43 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_tenants - response = @identity_connection.request(expects: [200, 204], - headers: { 'Content-Type' => 'application/json', - 'Accept' => 'application/json', - 'X-Auth-Token' => @auth_token }, - method: 'GET', - path: '/v2.0/tenants') - response.body = Fog::JSON.decode(response.body) - response - end - end - - class Mock - def list_tenants - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = { - 'tenants_links' => [], - 'tenants' => [ - { 'id' => '1', - 'description' => 'Has access to everything', - 'enabled' => true, - 'name' => 'admin' }, - { 'id' => '2', - 'description' => 'Normal tenant', - 'enabled' => true, - 'name' => 'default' }, - { 'id' => '3', - 'description' => 'Disabled tenant', - 'enabled' => false, - 'name' => 'disabled' } - ] - } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_usages.rb b/lib/fog/compute/openstack/requests/list_usages.rb deleted file mode 100644 index 68b26c3e8..000000000 --- a/lib/fog/compute/openstack/requests/list_usages.rb +++ /dev/null @@ -1,38 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_usages(date_start = nil, date_end = nil, detailed = false) - params = {} - params[:start] = date_start.iso8601.gsub(/\+.*/, '') if date_start - params[:end] = date_end.iso8601.gsub(/\+.*/, '') if date_end - params[:detailed] = (detailed ? '1' : '0') if detailed - - request( - expects: [200, 203], - method: 'GET', - path: 'os-simple-tenant-usage', - query: params - ) - end - end - - class Mock - def list_usages(_date_start = nil, _date_end = nil, _detailed = false) - response = Excon::Response.new - response.status = 200 - response.body = { "tenant_usages" => [{ - "total_memory_mb_usage" => 0.00036124444444444445, - "total_vcpus_usage" => 7.055555555555556e-07, - "start" => "2012-03-06 05:05:56.349001", - "tenant_id" => "b97c8abba0c44a0987c63b858a4823e5", - "stop" => "2012-03-06 05:05:56.349255", - "total_hours" => 7.055555555555556e-07, - "total_local_gb_usage" => 0.0 - }] } - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_volumes.rb b/lib/fog/compute/openstack/requests/list_volumes.rb deleted file mode 100644 index 52945f56a..000000000 --- a/lib/fog/compute/openstack/requests/list_volumes.rb +++ /dev/null @@ -1,39 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_volumes(options = true) - if options.kind_of?(Hash) - path = 'os-volumes' - query = options - else - # Backwards compatibility layer, when 'detailed' boolean was sent as first param - if options - Fog::Logger.deprecation('Calling OpenStack[:compute].list_volumes(true) is deprecated, use .list_volumes_detail instead') - else - Fog::Logger.deprecation('Calling OpenStack[:compute].list_volumes(false) is deprecated, use .list_volumes({}) instead') - end - path = options ? 'os-volumes/detail' : 'os-volumes' - query = {} - end - - request( - expects: 200, - method: 'GET', - path: path, - query: query - ) - end - end - - class Mock - def list_volumes(_options = true) - Excon::Response.new( - body: { 'volumes' => data[:volumes].values }, - status: 200 - ) - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/list_zones.rb b/lib/fog/compute/openstack/requests/list_zones.rb deleted file mode 100644 index 13fde50fd..000000000 --- a/lib/fog/compute/openstack/requests/list_zones.rb +++ /dev/null @@ -1,33 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def list_zones(options = {}) - request( - expects: 200, - method: 'GET', - path: 'os-availability-zone', - query: options - ) - end - end - - class Mock - def list_zones(_options = {}) - Excon::Response.new( - body: { "availabilityZoneInfo" => [ - { - "zoneState" => { - "available" => true - }, - "hosts" => nil, - "zoneName" => "nova" - } - ] }, - status: 200 - ) - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/server_actions.rb b/lib/fog/compute/openstack/requests/server_actions.rb deleted file mode 100644 index fabfe7ab6..000000000 --- a/lib/fog/compute/openstack/requests/server_actions.rb +++ /dev/null @@ -1,38 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - # Retrieve server actions. - # - # === Parameters - # * server_id <~String> - The ID of the server to query for available actions. - # === Returns - # * actions <~Array> - def server_actions(server_id) - request( - expects: 200, - method: 'GET', - path: "servers/#{server_id}/os-instance-actions" - ).body['instanceActions'] - end - end - - class Mock - def server_actions(server_id) - response = Excon::Response.new - response.status = 200 - response.body = [{ - 'instance_uuid' => server_id, - 'user_id' => '7067d67a2b23435ca2366588680b66c3', - 'start_time' => Time.now.iso8601, - 'request_id' => "req-#{server_id}", - 'action' => 'stop', - 'message' => nil, - 'project_id' => '9d5d0b877cf449fdae078659cfa12e86' - }] - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/set_tenant.rb b/lib/fog/compute/openstack/requests/set_tenant.rb deleted file mode 100644 index 620d74c7e..000000000 --- a/lib/fog/compute/openstack/requests/set_tenant.rb +++ /dev/null @@ -1,19 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def set_tenant(tenant) - @openstack_must_reauthenticate = true - @openstack_tenant = tenant.to_s - authenticate - end - end - - class Mock - def set_tenant(_tenant) - true - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/update_metadata.rb b/lib/fog/compute/openstack/requests/update_metadata.rb deleted file mode 100644 index 2e9bdae01..000000000 --- a/lib/fog/compute/openstack/requests/update_metadata.rb +++ /dev/null @@ -1,38 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def update_metadata(collection_name, parent_id, metadata = {}) - request( - body: Fog::JSON.encode('metadata' => metadata), - expects: 200, - method: 'POST', - path: "#{collection_name}/#{parent_id}/metadata" - ) - end - end - - class Mock - def update_metadata(collection_name, parent_id, metadata = {}) - if collection_name == "images" - unless list_images_detail.body['images'].find { |image| image['id'] == parent_id } - raise Fog::Compute::OpenStack::NotFound - end - end - - if collection_name == "servers" - unless list_servers_detail.body['servers'].find { |server| server['id'] == parent_id } - raise Fog::Compute::OpenStack::NotFound - end - end - - # FIXME: join w/ existing metadata here - response = Excon::Response.new - response.body = { "metadata" => metadata } - response.status = 200 - response - end - end - end - end -end diff --git a/lib/fog/compute/openstack/requests/update_quota.rb b/lib/fog/compute/openstack/requests/update_quota.rb deleted file mode 100644 index f10aa13f6..000000000 --- a/lib/fog/compute/openstack/requests/update_quota.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Fog - module Compute - class OpenStack - class Real - def update_quota(tenant_id, options = {}) - request( - body: Fog::JSON.encode('quota_set' => options), - expects: 200, - method: 'PUT', - path: "/os-quota-sets/#{tenant_id}" - ) - end - end - - class Mock - def update_quota(_tenant_id, options = {}) - data[:quota_updated] = data[:quota].merge options - - response = Excon::Response.new - response.status = 200 - response.body = { 'quota_set' => data[:quota_updated] } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack.rb b/lib/fog/container_infra/openstack.rb deleted file mode 100644 index c70d37c03..000000000 --- a/lib/fog/container_infra/openstack.rb +++ /dev/null @@ -1,163 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack < Fog::Service - SUPPORTED_VERSIONS = /v1/ - SUPPORTED_MICROVERSION = '1.3' - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix - - model_path 'fog/container_infra/openstack/models' - - model :bay - collection :bays - model :bay_model - collection :bay_models - model :certificate - collection :certificates - model :cluster - collection :clusters - model :cluster_template - collection :cluster_templates - - request_path 'fog/container_infra/openstack/requests' - - # Bay CRUD - request :create_bay - request :delete_bay - request :get_bay - request :list_bays - request :update_bay - - # Bay Model CRUD - request :create_bay_model - request :delete_bay_model - request :get_bay_model - request :list_bay_models - request :update_bay_model - - # Certificate CRUD - request :create_certificate - request :get_certificate - - # Cluster CRUD - request :create_cluster - request :delete_cluster - request :get_cluster - request :list_clusters - request :update_cluster - - # Cluster Template CRUD - request :create_cluster_template - request :delete_cluster_template - request :get_cluster_template - request :list_cluster_templates - request :update_cluster_template - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - users: {}, - tenants: {} - } - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 9511 - management_url.path = '/v1' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].find { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_management_url: @openstack_management_url } - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::ContainerInfra::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['container-infra'] - @openstack_service_name = options[:openstack_service_name] - @openstack_endpoint_type = options[:openstack_endpoint_type] || 'publicURL' - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def request(options = {}) - options[:headers] = { 'OpenStack-API-Version' => "container-infra #{SUPPORTED_MICROVERSION}" } - super(options) - end - - def set_api_path - unless @path.match(SUPPORTED_VERSIONS) - @path = Fog::OpenStack.get_supported_version_path( - SUPPORTED_VERSIONS, - @openstack_management_uri, - @auth_token, - @connection_options - ) - end - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/models/base.rb b/lib/fog/container_infra/openstack/models/base.rb deleted file mode 100644 index d7048d2fe..000000000 --- a/lib/fog/container_infra/openstack/models/base.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module ContainerInfra - class OpenStack - class Base < Fog::OpenStack::Model - def convert_update_params(params) - params = params.map do |key, value| - { - "path" => "/#{key}", - "op" => value ? "replace" : "remove" - }.merge(value ? { "value" => value } : {}) - end - params.each { |k, v| params[k] = v.to_s.capitalize if [true, false].include?(v) } - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/models/bay_models.rb b/lib/fog/container_infra/openstack/models/bay_models.rb deleted file mode 100644 index 82d9e8395..000000000 --- a/lib/fog/container_infra/openstack/models/bay_models.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/container_infra/openstack/models/bay_model' - -module Fog - module ContainerInfra - class OpenStack - class BayModels < Fog::OpenStack::Collection - model Fog::ContainerInfra::OpenStack::BayModel - - def all - load_response(service.list_bay_models, 'baymodels') - end - - def get(bay_model_uuid_or_name) - resource = service.get_bay_model(bay_model_uuid_or_name).body - new(resource) - rescue Fog::ContainerInfra::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/models/bays.rb b/lib/fog/container_infra/openstack/models/bays.rb deleted file mode 100644 index 043c39663..000000000 --- a/lib/fog/container_infra/openstack/models/bays.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/container_infra/openstack/models/bay' - -module Fog - module ContainerInfra - class OpenStack - class Bays < Fog::OpenStack::Collection - model Fog::ContainerInfra::OpenStack::Bay - - def all - load_response(service.list_bays, "bays") - end - - def get(bay_uuid_or_name) - resource = service.get_bay(bay_uuid_or_name).body - new(resource) - rescue Fog::ContainerInfra::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/models/certificate.rb b/lib/fog/container_infra/openstack/models/certificate.rb deleted file mode 100644 index 7c452bb27..000000000 --- a/lib/fog/container_infra/openstack/models/certificate.rb +++ /dev/null @@ -1,20 +0,0 @@ -require_relative 'base' - -module Fog - module ContainerInfra - class OpenStack - class Certificate < Fog::ContainerInfra::OpenStack::Base - identity :bay_uuid - - attribute :pem - attribute :csr - - def create - requires :csr, :bay_uuid - merge_attributes(service.create_certificate(attributes).body) - self - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/models/certificates.rb b/lib/fog/container_infra/openstack/models/certificates.rb deleted file mode 100644 index 2e04c18e1..000000000 --- a/lib/fog/container_infra/openstack/models/certificates.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/container_infra/openstack/models/certificate' - -module Fog - module ContainerInfra - class OpenStack - class Certificates < Fog::OpenStack::Collection - model Fog::ContainerInfra::OpenStack::Certificate - - def create(bay_uuid) - resource = service.create_certificate(bay_uuid).body - new(resource) - end - - def get(bay_uuid) - resource = service.get_certificate(bay_uuid).body - new(resource) - rescue Fog::ContainerInfra::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/models/cluster_templates.rb b/lib/fog/container_infra/openstack/models/cluster_templates.rb deleted file mode 100644 index 995886a38..000000000 --- a/lib/fog/container_infra/openstack/models/cluster_templates.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/container_infra/openstack/models/cluster_template' - -module Fog - module ContainerInfra - class OpenStack - class ClusterTemplates < Fog::OpenStack::Collection - model Fog::ContainerInfra::OpenStack::ClusterTemplate - - def all - load_response(service.list_cluster_templates, 'clustertemplates') - end - - def get(cluster_template_uuid_or_name) - resource = service.get_cluster_template(cluster_template_uuid_or_name).body - new(resource) - rescue Fog::ContainerInfra::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/models/clusters.rb b/lib/fog/container_infra/openstack/models/clusters.rb deleted file mode 100644 index 35974b2d6..000000000 --- a/lib/fog/container_infra/openstack/models/clusters.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/container_infra/openstack/models/cluster' - -module Fog - module ContainerInfra - class OpenStack - class Clusters < Fog::OpenStack::Collection - model Fog::ContainerInfra::OpenStack::Cluster - - def all - load_response(service.list_clusters, "clusters") - end - - def get(cluster_uuid_or_name) - resource = service.get_cluster(cluster_uuid_or_name).body - new(resource) - rescue Fog::ContainerInfra::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/create_bay_model.rb b/lib/fog/container_infra/openstack/requests/create_bay_model.rb deleted file mode 100644 index c0256dab4..000000000 --- a/lib/fog/container_infra/openstack/requests/create_bay_model.rb +++ /dev/null @@ -1,56 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def create_bay_model(params) - request( - expects: [201, 200], - method: 'POST', - path: "baymodels", - body: Fog::JSON.encode(params) - ) - end - end - - class Mock - def create_bay_model(_params) - response = Excon::Response.new - response.status = 201 - response.body = { - "insecure_registry" => nil, - "http_proxy" => "http://10.164.177.169:8080", - "updated_at" => nil, - "floating_ip_enabled" => true, - "fixed_subnet" => nil, - "master_flavor_id" => nil, - "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", - "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", - "https_proxy" => "http://10.164.177.169:8080", - "tls_disabled" => false, - "keypair_id" => "kp", - "public" => false, - "labels" => {}, - "docker_volume_size" => 3, - "server_type" => "vm", - "external_network_id" => "public", - "cluster_distro" => "fedora-atomic", - "image_id" => "fedora-atomic-latest", - "volume_driver" => "cinder", - "registry_enabled" => false, - "docker_storage_driver" => "devicemapper", - "apiserver_port" => nil, - "name" => "k8s-bm2", - "created_at" => "2016-08-29T02:08:08+00:00", - "network_driver" => "flannel", - "fixed_network" => nil, - "coe" => "kubernetes", - "flavor_id" => "m1.small", - "master_lb_enabled" => true, - "dns_nameserver" => "8.8.8.8" - } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/create_certificate.rb b/lib/fog/container_infra/openstack/requests/create_certificate.rb deleted file mode 100644 index 931f3b7fd..000000000 --- a/lib/fog/container_infra/openstack/requests/create_certificate.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def create_certificate(params) - request( - expects: [201, 200], - method: 'POST', - path: "certificates", - body: Fog::JSON.encode(params) - ) - end - end - - class Mock - def create_certificate(_params) - response = Excon::Response.new - response.status = 201 - response.body = { - "pem" => "-----BEGIN CERTIFICATE-----\nMIIDxDCCAqygAwIBAgIRALgUbIjdKUy8lqErJmCxVfkwDQYJKoZIhvcNAQELBQAw\n-----END CERTIFICATE-----\n", - "bay_uuid" => "0b4b766f-1500-44b3-9804-5a6e12fe6df4", - "csr" => "-----BEGIN CERTIFICATE REQUEST-----\nMIIEfzCCAmcCAQAwFDESMBAGA1UEAxMJWW91ciBOYW1lMIICIjANBgkqhkiG9w0B\n-----END CERTIFICATE REQUEST-----\n" - } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/create_cluster_template.rb b/lib/fog/container_infra/openstack/requests/create_cluster_template.rb deleted file mode 100644 index 96daa7f20..000000000 --- a/lib/fog/container_infra/openstack/requests/create_cluster_template.rb +++ /dev/null @@ -1,56 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def create_cluster_template(params) - request( - expects: [201, 200], - method: 'POST', - path: "clustertemplates", - body: Fog::JSON.encode(params) - ) - end - end - - class Mock - def create_cluster_template(_params) - response = Excon::Response.new - response.status = 201 - response.body = { - "insecure_registry" => nil, - "http_proxy" => "http://10.164.177.169:8080", - "updated_at" => nil, - "floating_ip_enabled" => true, - "fixed_subnet" => nil, - "master_flavor_id" => nil, - "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", - "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", - "https_proxy" => "http://10.164.177.169:8080", - "tls_disabled" => false, - "keypair_id" => "kp", - "public" => false, - "labels" => {}, - "docker_volume_size" => 3, - "server_type" => "vm", - "external_network_id" => "public", - "cluster_distro" => "fedora-atomic", - "image_id" => "fedora-atomic-latest", - "volume_driver" => "cinder", - "registry_enabled" => false, - "docker_storage_driver" => "devicemapper", - "apiserver_port" => nil, - "name" => "k8s-bm2", - "created_at" => "2016-08-29T02:08:08+00:00", - "network_driver" => "flannel", - "fixed_network" => nil, - "coe" => "kubernetes", - "flavor_id" => "m1.small", - "master_lb_enabled" => true, - "dns_nameserver" => "8.8.8.8" - } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/get_bay.rb b/lib/fog/container_infra/openstack/requests/get_bay.rb deleted file mode 100644 index 923091141..000000000 --- a/lib/fog/container_infra/openstack/requests/get_bay.rb +++ /dev/null @@ -1,51 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def get_bay(uuid_or_name) - request( - expects: [200], - method: 'GET', - path: "bays/#{uuid_or_name}" - ) - end - end - - class Mock - def get_bay(_uuid_or_name) - response = Excon::Response.new - response.status = 200 - response.body = { - "status" => "CREATE_COMPLETE", - "uuid" => "746e779a-751a-456b-a3e9-c883d734946f", - "stack_id" => "9c6f1169-7300-4d08-a444-d2be38758719", - "created_at" => "2016-08-29T06:51:31+00:00", - "api_address" => "https://172.24.4.6:6443", - "discovery_url" => "https://discovery.etcd.io/cbeb580da58915809d59ee69348a84f3", - "updated_at" => "2016-08-29T06:53:24+00:00", - "master_count" => 1, - "coe_version" => "v1.2.0", - "baymodel_id" => "0562d357-8641-4759-8fed-8173f02c9633", - "master_addresses" => ["172.24.4.6"], - "node_count" => 1, - "node_addresses" => ["172.24.4.13"], - "status_reason" => "Stack CREATE completed successfully", - "bay_create_timeout" => 60, - "name" => "k8s", - "links" => [ - { - "href" => "http://10.164.180.104:9511/v1/bays/746e779a-751a-456b-a3e9-c883d734946f", - "rel" => "self" - }, - { - "href" => "http://10.164.180.104:9511/bays/746e779a-751a-456b-a3e9-c883d734946f", - "rel" => "bookmark" - } - ] - } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/get_bay_model.rb b/lib/fog/container_infra/openstack/requests/get_bay_model.rb deleted file mode 100644 index 14c04fd02..000000000 --- a/lib/fog/container_infra/openstack/requests/get_bay_model.rb +++ /dev/null @@ -1,55 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def get_bay_model(uuid_or_name) - request( - expects: [200], - method: 'GET', - path: "baymodels/#{uuid_or_name}" - ) - end - end - - class Mock - def get_bay_model(_uuid_or_name) - response = Excon::Response.new - response.status = 200 - response.body = { - "insecure_registry" => nil, - "http_proxy" => "http://10.164.177.169:8080", - "updated_at" => nil, - "floating_ip_enabled" => true, - "fixed_subnet" => nil, - "master_flavor_id" => nil, - "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", - "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", - "https_proxy" => "http://10.164.177.169:8080", - "tls_disabled" => false, - "keypair_id" => "kp", - "public" => false, - "labels" => {}, - "docker_volume_size" => 3, - "server_type" => "vm", - "external_network_id" => "public", - "cluster_distro" => "fedora-atomic", - "image_id" => "fedora-atomic-latest", - "volume_driver" => "cinder", - "registry_enabled" => false, - "docker_storage_driver" => "devicemapper", - "apiserver_port" => nil, - "name" => "k8s-bm2", - "created_at" => "2016-08-29T02:08:08+00:00", - "network_driver" => "flannel", - "fixed_network" => nil, - "coe" => "kubernetes", - "flavor_id" => "m1.small", - "master_lb_enabled" => true, - "dns_nameserver" => "8.8.8.8" - } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/get_certificate.rb b/lib/fog/container_infra/openstack/requests/get_certificate.rb deleted file mode 100644 index 8dc6698ad..000000000 --- a/lib/fog/container_infra/openstack/requests/get_certificate.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def get_certificate(_bay_uuid) - request( - expects: [200], - method: 'GET', - path: "certificates/#{cluster_uuid}" - ) - end - end - - class Mock - def get_certificate(_bay_uuid) - response = Excon::Response.new - response.status = 200 - response.body = { - "pem" => "-----BEGIN CERTIFICATE-----\nMIICzDCCAbSgAwIBAgIQOOkVcEN7TNa9E80GoUs4xDANBgkqhkiG9w0BAQsFADAO\n-----END CERTIFICATE-----\n", - "bay_uuid" => "0b4b766f-1500-44b3-9804-5a6e12fe6df4" - } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/get_cluster.rb b/lib/fog/container_infra/openstack/requests/get_cluster.rb deleted file mode 100644 index 0df72a138..000000000 --- a/lib/fog/container_infra/openstack/requests/get_cluster.rb +++ /dev/null @@ -1,41 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def get_cluster(uuid_or_name) - request( - expects: [200], - method: 'GET', - path: "clusters/#{uuid_or_name}" - ) - end - end - - class Mock - def get_cluster(_uuid_or_name) - response = Excon::Response.new - response.status = 200 - response.body = { - "status" => "CREATE_COMPLETE", - "uuid" => "746e779a-751a-456b-a3e9-c883d734946f", - "stack_id" => "9c6f1169-7300-4d08-a444-d2be38758719", - "created_at" => "2016-08-29T06:51:31+00:00", - "api_address" => "https://172.24.4.6:6443", - "discovery_url" => "https://discovery.etcd.io/cbeb580da58915809d59ee69348a84f3", - "updated_at" => "2016-08-29T06:53:24+00:00", - "master_count" => 1, - "coe_version" => "v1.2.0", - "cluster_template_id" => "0562d357-8641-4759-8fed-8173f02c9633", - "master_addresses" => ["172.24.4.6"], - "node_count" => 1, - "node_addresses" => ["172.24.4.13"], - "status_reason" => "Stack CREATE completed successfully", - "create_timeout" => 60, - "name" => "k8s" - } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/get_cluster_template.rb b/lib/fog/container_infra/openstack/requests/get_cluster_template.rb deleted file mode 100644 index d2c2da32a..000000000 --- a/lib/fog/container_infra/openstack/requests/get_cluster_template.rb +++ /dev/null @@ -1,55 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def get_cluster_template(uuid_or_name) - request( - expects: [200], - method: 'GET', - path: "clustertemplates/#{uuid_or_name}" - ) - end - end - - class Mock - def get_cluster_template(_uuid_or_name) - response = Excon::Response.new - response.status = 200 - response.body = { - "insecure_registry" => nil, - "http_proxy" => "http://10.164.177.169:8080", - "updated_at" => nil, - "floating_ip_enabled" => true, - "fixed_subnet" => nil, - "master_flavor_id" => nil, - "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", - "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", - "https_proxy" => "http://10.164.177.169:8080", - "tls_disabled" => false, - "keypair_id" => "kp", - "public" => false, - "labels" => {}, - "docker_volume_size" => 3, - "server_type" => "vm", - "external_network_id" => "public", - "cluster_distro" => "fedora-atomic", - "image_id" => "fedora-atomic-latest", - "volume_driver" => "cinder", - "registry_enabled" => false, - "docker_storage_driver" => "devicemapper", - "apiserver_port" => nil, - "name" => "k8s-bm2", - "created_at" => "2016-08-29T02:08:08+00:00", - "network_driver" => "flannel", - "fixed_network" => nil, - "coe" => "kubernetes", - "flavor_id" => "m1.small", - "master_lb_enabled" => true, - "dns_nameserver" => "8.8.8.8" - } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/list_bay_models.rb b/lib/fog/container_infra/openstack/requests/list_bay_models.rb deleted file mode 100644 index 2cf5a626a..000000000 --- a/lib/fog/container_infra/openstack/requests/list_bay_models.rb +++ /dev/null @@ -1,69 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def list_bay_models - request( - expects: [200], - method: 'GET', - path: "baymodels/detail" - ) - end - end - - class Mock - def list_bay_models - response = Excon::Response.new - response.status = 200 - response.body = { - "baymodels" => [ - { - "insecure_registry" => nil, - "http_proxy" => "http://10.164.177.169:8080", - "updated_at" => nil, - "floating_ip_enabled" => true, - "fixed_subnet" => nil, - "master_flavor_id" => nil, - "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", - "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", - "https_proxy" => "http://10.164.177.169:8080", - "tls_disabled" => false, - "keypair_id" => "kp", - "public" => false, - "labels" => {}, - "docker_volume_size" => 3, - "server_type" => "vm", - "external_network_id" => "public", - "cluster_distro" => "fedora-atomic", - "image_id" => "fedora-atomic-latest", - "volume_driver" => "cinder", - "registry_enabled" => false, - "docker_storage_driver" => "devicemapper", - "apiserver_port" => nil, - "name" => "k8s-bm2", - "created_at" => "2016-08-29T02:08:08+00:00", - "network_driver" => "flannel", - "fixed_network" => nil, - "coe" => "kubernetes", - "flavor_id" => "m1.small", - "master_lb_enabled" => true, - "dns_nameserver" => "8.8.8.8", - "links" => [ - { - "href" => "http://10.164.180.104:9511/v1/baymodels/085e1c4d-4f68-4bfd-8462-74b9e14e4f39", - "rel" => "self" - }, - { - "href" => "http://10.164.180.104:9511/baymodels/085e1c4d-4f68-4bfd-8462-74b9e14e4f39", - "rel" => "bookmark" - } - ] - } - ] - } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/list_bays.rb b/lib/fog/container_infra/openstack/requests/list_bays.rb deleted file mode 100644 index 0fcb0d8a3..000000000 --- a/lib/fog/container_infra/openstack/requests/list_bays.rb +++ /dev/null @@ -1,55 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def list_bays - request( - expects: [200], - method: 'GET', - path: "bays/detail" - ) - end - end - - class Mock - def list_bays - response = Excon::Response.new - response.status = 200 - response.body = { - "bays" => [ - { - "status" => "CREATE_COMPLETE", - "uuid" => "746e779a-751a-456b-a3e9-c883d734946f", - "stack_id" => "9c6f1169-7300-4d08-a444-d2be38758719", - "created_at" => "2016-08-29T06:51:31+00:00", - "api_address" => "https://172.24.4.6:6443", - "discovery_url" => "https://discovery.etcd.io/cbeb580da58915809d59ee69348a84f3", - "updated_at" => "2016-08-29T06:53:24+00:00", - "master_count" => 1, - "coe_version" => "v1.2.0", - "baymodel_id" => "0562d357-8641-4759-8fed-8173f02c9633", - "master_addresses" => ["172.24.4.6"], - "node_count" => 1, - "node_addresses" => ["172.24.4.13"], - "status_reason" => "Stack CREATE completed successfully", - "bay_create_timeout" => 60, - "name" => "k8s", - "links" => [ - { - "href" => "http://10.164.180.104:9511/v1/bays/746e779a-751a-456b-a3e9-c883d734946f", - "rel" => "self" - }, - { - "href" => "http://10.164.180.104:9511/bays/746e779a-751a-456b-a3e9-c883d734946f", - "rel" => "bookmark" - } - ] - } - ] - } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/list_cluster_templates.rb b/lib/fog/container_infra/openstack/requests/list_cluster_templates.rb deleted file mode 100644 index ea3289c6c..000000000 --- a/lib/fog/container_infra/openstack/requests/list_cluster_templates.rb +++ /dev/null @@ -1,59 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def list_cluster_templates - request( - expects: [200], - method: 'GET', - path: "clustertemplates/detail" - ) - end - end - - class Mock - def list_cluster_templates - response = Excon::Response.new - response.status = 200 - response.body = { - "clustertemplates" => [ - { - "insecure_registry" => nil, - "http_proxy" => "http://10.164.177.169:8080", - "updated_at" => nil, - "floating_ip_enabled" => true, - "fixed_subnet" => nil, - "master_flavor_id" => nil, - "uuid" => "0562d357-8641-4759-8fed-8173f02c9633", - "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", - "https_proxy" => "http://10.164.177.169:8080", - "tls_disabled" => false, - "keypair_id" => "kp", - "public" => false, - "labels" => {}, - "docker_volume_size" => 3, - "server_type" => "vm", - "external_network_id" => "public", - "cluster_distro" => "fedora-atomic", - "image_id" => "fedora-atomic-latest", - "volume_driver" => "cinder", - "registry_enabled" => false, - "docker_storage_driver" => "devicemapper", - "apiserver_port" => nil, - "name" => "k8s-bm", - "created_at" => "2016-08-26T09:34:41+00:00", - "network_driver" => "flannel", - "fixed_network" => nil, - "coe" => "kubernetes", - "flavor_id" => "m1.small", - "master_lb_enabled" => false, - "dns_nameserver" => "8.8.8.8" - } - ] - } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/list_clusters.rb b/lib/fog/container_infra/openstack/requests/list_clusters.rb deleted file mode 100644 index 3c6934335..000000000 --- a/lib/fog/container_infra/openstack/requests/list_clusters.rb +++ /dev/null @@ -1,37 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def list_clusters - request( - expects: [200], - method: 'GET', - path: "clusters/detail" - ) - end - end - - class Mock - def list_clusters - response = Excon::Response.new - response.status = 200 - response.body = { - "clusters" => [ - { - "status" => "CREATE_IN_PROGRESS", - "cluster_template_id" => "0562d357-8641-4759-8fed-8173f02c9633", - "uuid" => "731387cf-a92b-4c36-981e-3271d63e5597", - "stack_id" => "31c1ee6c-081e-4f39-9f0f-f1d87a7defa1", - "master_count" => 1, - "create_timeout" => 60, - "node_count" => 1, - "name" => "k8s" - } - ] - } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/update_bay_model.rb b/lib/fog/container_infra/openstack/requests/update_bay_model.rb deleted file mode 100644 index 5c984aa9c..000000000 --- a/lib/fog/container_infra/openstack/requests/update_bay_model.rb +++ /dev/null @@ -1,56 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def update_bay_model(uuid_or_name, params) - request( - expects: [200], - method: 'PATCH', - path: "baymodels/#{uuid_or_name}", - body: Fog::JSON.encode(params) - ) - end - end - - class Mock - def update_bay_model(_uuid_or_name, _params) - response = Excon::Response.new - response.status = 200 - response.body = { - "insecure_registry" => nil, - "http_proxy" => "http://10.164.177.169:8080", - "updated_at" => nil, - "floating_ip_enabled" => true, - "fixed_subnet" => nil, - "master_flavor_id" => nil, - "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", - "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", - "https_proxy" => "http://10.164.177.169:8080", - "tls_disabled" => false, - "keypair_id" => "kp", - "public" => false, - "labels" => {}, - "docker_volume_size" => 3, - "server_type" => "vm", - "external_network_id" => "public", - "cluster_distro" => "fedora-atomic", - "image_id" => "fedora-atomic-latest", - "volume_driver" => "cinder", - "registry_enabled" => false, - "docker_storage_driver" => "devicemapper", - "apiserver_port" => nil, - "name" => "rename-test-bay-model", - "created_at" => "2016-08-29T02:08:08+00:00", - "network_driver" => "flannel", - "fixed_network" => nil, - "coe" => "kubernetes", - "flavor_id" => "m1.small", - "master_lb_enabled" => true, - "dns_nameserver" => "8.8.8.8" - } - response - end - end - end - end -end diff --git a/lib/fog/container_infra/openstack/requests/update_cluster_template.rb b/lib/fog/container_infra/openstack/requests/update_cluster_template.rb deleted file mode 100644 index 43f8eb1d5..000000000 --- a/lib/fog/container_infra/openstack/requests/update_cluster_template.rb +++ /dev/null @@ -1,56 +0,0 @@ -module Fog - module ContainerInfra - class OpenStack - class Real - def update_cluster_template(uuid_or_name, params) - request( - expects: [200], - method: 'PATCH', - path: "clustertemplates/#{uuid_or_name}", - body: Fog::JSON.encode(params) - ) - end - end - - class Mock - def update_cluster_template(_uuid_or_name, _params) - response = Excon::Response.new - response.status = 200 - response.body = { - "insecure_registry" => nil, - "http_proxy" => "http://10.164.177.169:8080", - "updated_at" => nil, - "floating_ip_enabled" => true, - "fixed_subnet" => nil, - "master_flavor_id" => nil, - "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", - "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", - "https_proxy" => "http://10.164.177.169:8080", - "tls_disabled" => false, - "keypair_id" => "kp", - "public" => false, - "labels" => {}, - "docker_volume_size" => 3, - "server_type" => "vm", - "external_network_id" => "public", - "cluster_distro" => "fedora-atomic", - "image_id" => "fedora-atomic-latest", - "volume_driver" => "cinder", - "registry_enabled" => false, - "docker_storage_driver" => "devicemapper", - "apiserver_port" => nil, - "name" => "rename-test-cluster-template", - "created_at" => "2016-08-29T02:08:08+00:00", - "network_driver" => "flannel", - "fixed_network" => nil, - "coe" => "kubernetes", - "flavor_id" => "m1.small", - "master_lb_enabled" => true, - "dns_nameserver" => "8.8.8.8" - } - response - end - end - end - end -end diff --git a/lib/fog/dns/openstack.rb b/lib/fog/dns/openstack.rb deleted file mode 100644 index aceb804bc..000000000 --- a/lib/fog/dns/openstack.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Fog - module DNS - class OpenStack < Fog::Service - autoload :V1, File.expand_path('openstack/v1', __dir__) - autoload :V2, File.expand_path('openstack/v2', __dir__) - - # Fog::DNS::OpenStack.new() will return a Fog::DNS::OpenStack::V2 or a Fog::DNS::OpenStack::V1, - # choosing the latest available - def self.new(args = {}) - @openstack_auth_uri = URI.parse(args[:openstack_auth_url]) if args[:openstack_auth_url] - if inspect == 'Fog::DNS::OpenStack' - service = Fog::DNS::OpenStack::V2.new(args) unless args.empty? - service ||= Fog::DNS::OpenStack::V1.new(args) - else - service = Fog::Service.new(args) - end - service - end - end - end -end diff --git a/lib/fog/dns/openstack/v1.rb b/lib/fog/dns/openstack/v1.rb deleted file mode 100644 index c39fe6ce1..000000000 --- a/lib/fog/dns/openstack/v1.rb +++ /dev/null @@ -1,128 +0,0 @@ -require 'fog/dns/openstack' - -module Fog - module DNS - class OpenStack - class V1 < Fog::Service - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, :openstack_userid, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_auth_omit_default_port, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix, :openstack_temp_url_key, :openstack_cache_ttl - - request_path 'fog/dns/openstack/v1/requests' - - request :list_domains - - request :get_quota - request :update_quota - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - domains: [{ - "id" => "a86dba58-0043-4cc6-a1bb-69d5e86f3ca3", - "name" => "example.org.", - "email" => "joe@example.org", - "ttl" => 7200, - "serial" => 1_404_757_531, - "description" => "This is an example zone.", - "created_at" => "2014-07-07T18:25:31.275934", - "updated_at" => '' - }], - quota: { - "api_export_size" => 1000, - "recordset_records" => 20, - "domain_records" => 500, - "domain_recordsets" => 500, - "domains" => 100 - } - } - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 9001 - management_url.path = '/v1' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].detect { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_region: @openstack_region, - openstack_management_url: @openstack_management_url } - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::DNS::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['dns'] - @openstack_service_name = options[:openstack_service_name] - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - # version explicitly set to allow usage also in 'DEPRECATED' mitaka version, - # where f.i. quota modification was not possible at the time of creation - @path = '/v1' unless @path =~ /v1/ - end - end - end - end - end -end diff --git a/lib/fog/dns/openstack/v1/requests/get_quota.rb b/lib/fog/dns/openstack/v1/requests/get_quota.rb deleted file mode 100644 index a1fc14732..000000000 --- a/lib/fog/dns/openstack/v1/requests/get_quota.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Fog - module DNS - class OpenStack - class V1 - class Real - def get_quota(project_id) - request( - expects: 200, - method: 'GET', - path: "quotas/#{project_id}" - ) - end - end - - class Mock - def get_quota(_project_id) - response = Excon::Response.new - response.status = 200 - response.body = data[:quota_updated] || data[:quota] - response - end - end - end - end - end -end diff --git a/lib/fog/dns/openstack/v1/requests/list_domains.rb b/lib/fog/dns/openstack/v1/requests/list_domains.rb deleted file mode 100644 index 80a7b805c..000000000 --- a/lib/fog/dns/openstack/v1/requests/list_domains.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Fog - module DNS - class OpenStack - class V1 - class Real - def list_domains(options = {}) - request( - expects: 200, - method: 'GET', - path: 'domains', - query: options - ) - end - end - - class Mock - def list_domains(_options = {}) - response = Excon::Response.new - response.status = 200 - response.body = { 'domains' => data[:domains] } - response - end - end - end - end - end -end diff --git a/lib/fog/dns/openstack/v1/requests/update_quota.rb b/lib/fog/dns/openstack/v1/requests/update_quota.rb deleted file mode 100644 index 4bb020891..000000000 --- a/lib/fog/dns/openstack/v1/requests/update_quota.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Fog - module DNS - class OpenStack - class V1 - class Real - def update_quota(project_id, options = {}) - request( - body: Fog::JSON.encode(options), - expects: 200, - method: 'PUT', - path: "quotas/#{project_id}" - ) - end - end - - class Mock - def update_quota(_project_id, options = {}) - # stringify keys - options = Hash[options.map { |k, v| [k.to_s, v] }] - data[:quota_updated] = data[:quota].merge(options) - - response = Excon::Response.new - response.status = 200 - response.body = data[:quota_updated] - response - end - end - end - end - end -end diff --git a/lib/fog/dns/openstack/v2.rb b/lib/fog/dns/openstack/v2.rb deleted file mode 100644 index 20680ecab..000000000 --- a/lib/fog/dns/openstack/v2.rb +++ /dev/null @@ -1,341 +0,0 @@ -require 'fog/dns/openstack' - -module Fog - module DNS - class OpenStack - class V2 < Fog::Service - SUPPORTED_VERSIONS = /v2/ - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, :openstack_userid, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_auth_omit_default_port, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix, :openstack_temp_url_key, :openstack_cache_ttl - - model_path 'fog/dns/openstack/v2/models' - model :zone - collection :zones - model :recordset - collection :recordsets - model :pool - collection :pools - model :zone_transfer_request - collection :zone_transfer_requests - model :zone_transfer_accept - collection :zone_transfer_accepts - - request_path 'fog/dns/openstack/v2/requests' - - request :list_zones - request :get_zone - request :create_zone - request :update_zone - request :delete_zone - - request :list_recordsets - request :get_recordset - request :create_recordset - request :update_recordset - request :delete_recordset - - request :list_pools - request :get_pool - - request :get_quota - request :update_quota - - request :create_zone_transfer_request - request :get_zone_transfer_request - request :list_zone_transfer_requests - request :update_zone_transfer_request - request :delete_zone_transfer_request - - request :create_zone_transfer_accept - request :get_zone_transfer_accept - request :list_zone_transfer_accepts - - def self.setup_headers(options) - # user needs to have admin privileges to ask for all projects - all_projects = options.delete(:all_projects) || false - - # user needs to have admin privileges to impersonate another project - # don't ask for all and one project at the same time - project_id = options.delete(:project_id) unless all_projects - - headers = { 'X-Auth-All-Projects' => all_projects } - headers['X-Auth-Sudo-Project-Id'] = project_id unless project_id.nil? - - [headers, options] - end - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - zones: [{ - "id" => "a86dba58-0043-4cc6-a1bb-69d5e86f3ca3", - "pool_id" => "572ba08c-d929-4c70-8e42-03824bb24ca2", - "project_id" => "4335d1f0-f793-11e2-b778-0800200c9a66", - "name" => "example.org.", - "email" => "joe@example.org", - "ttl" => 7200, - "serial" => 1_404_757_531, - "status" => "ACTIVE", - "action" => "NONE", - "description" => "This is an example zone.", - "masters" => [], - "type" => "PRIMARY", - "transferred_at" => '', - "version" => 1, - "created_at" => "2014-07-07T18:25:31.275934", - "updated_at" => '', - "links" => { - "self" => "https://127.0.0.1:9001/v2/zones/a86dba58-0043-4cc6-a1bb-69d5e86f3ca3" - } - }], - pools: { - "metadata" => { - "total_count" => 2 - }, - "links" => { - "self" => "http://127.0.0.1:9001/v2/pools" - }, - "pools" => [ - { - "description" => '', - "id" => "794ccc2c-d751-44fe-b57f-8894c9f5c842", - "project_id" => '', - "created_at" => "2015-02-18T22:18:58.000000", - "attributes" => '', - "ns_records" => [ - { - "hostname" => "ns1.example.org.", - "priority" => 1 - } - ], - "links" => { - "self" => "http://127.0.0.1:9001/v2/pools/794ccc2c-d751-44fe-b57f-8894c9f5c842" - }, - "name" => "default", - "updated_at" => "2015-02-19T15:59:44.000000" - }, - { - "description" => '', - "id" => "d1716333-8c16-490f-85ee-29af36907605", - "project_id" => "noauth-project", - "created_at" => "2015-02-23T21:56:33.000000", - "attributes" => '', - "ns_records" => [ - { - "hostname" => "ns2.example.org.", - "priority" => 1 - } - ], - "links" => { - "self" => "http://127.0.0.1:9001/v2/pools/d1716333-8c16-490f-85ee-29af36907605" - }, - "name" => "example_pool", - "updated_at" => '' - } - ] - }, - quota: { - "api_export_size" => 1000, - "recordset_records" => 20, - "zone_records" => 500, - "zone_recordsets" => 500, - "zones" => 100 - }, - recordsets: { - "recordsets" => [{ - "description" => "This is an example record set.", - "links" => { - "self" => "https://127.0.0.1:9001/v2/zones/2150b1bf-dee2-4221-9d85-11f7886fb15f/recordsets/f7b10e9b-0cae-4a91-b162-562bc6096648" - }, - "updated_at" => '', - "records" => [ - "10.1.0.2" - ], - "ttl" => 3600, - "id" => "f7b10e9b-0cae-4a91-b162-562bc6096648", - "name" => "example.org.", - "project_id" => "4335d1f0-f793-11e2-b778-0800200c9a66", - "zone_id" => "2150b1bf-dee2-4221-9d85-11f7886fb15f", - "zone_name" => "example.com.", - "created_at" => "2014-10-24T19:59:44.000000", - "version" => 1, - "type" => "A", - "status" => "ACTIVE", - "action" => "NONE" - }], - "links" => { - "self" => "http://127.0.0.1:9001/v2/recordsets?limit=1", - "next" => "http://127.0.0.1:9001/v2/recordsets?limit=1&marker=45fd892d-7a67-4f65-9df0-87273f228d6c" - }, - "metadata" => { - "total_count" => 2 - } - }, - zone_transfer_requests: { - "transfer_requests" => [ - { - "created_at" => "2014-07-17T20:34:40.882579", - "description" => "This was created by the requesting project", - "id" => "f2ad17b5-807a-423f-a991-e06236c247be", - "key" => "9Z2R50Y0", - "project_id" => "1", - "status" => "ACTIVE", - "target_project_id" => "123456", - "updated_at" => nil, - "zone_id" => "6b78734a-aef1-45cd-9708-8eb3c2d26ff8", - "zone_name" => "qa.dev.example.com.", - "links" => { - "self" => "http://127.0.0.1:9001/v2/zones/tasks/transfer_requests/f2ad17b5-807a-423f-a991-e06236c247be" - } - }, - { - "description" => "This is scoped to the requesting project", - "id" => "efd2d720-b0c4-43d4-99f7-d9b53e08860d", - "zone_id" => "2c4d5e37-f823-4bee-9859-031cb44f80e7", - "zone_name" => "subdomain.example.com.", - "status" => "ACTIVE", - "links" => { - "self" => "http://127.0.0.1:9001/v2/zones/tasks/transfer_requests/efd2d720-b0c4-43d4-99f7-d9b53e08860d" - } - } - ], - "links" => { - "self" => "http://127.0.0.1:9001/v2/zones/tasks/transfer_requests" - } - }, - zone_transfer_accepts: { - "metadata" => { - "total_count" => 2 - }, - "links" => { - "self" => "http://127.0.0.1:9001/v2/zones/tasks/transfer_accepts" - }, - "transfer_accepts" => [ - { - "status" => "COMPLETE", - "zone_id" => "8db93d1a-59e3-4143-a393-5821abea0a46", - "links" => { - "self" => "http://127.0.0.1:9001/v2/zones/tasks/transfer_accepts/afb4222b-18b3-44b3-9f54-e0dfdba1be44", - "zone" => "http://127.0.0.1:9001/v2/zones/8db93d1a-59e3-4143-a393-5821abea0a46" - }, - "created_at" => "2016-06-01 05:35:35", - "updated_at" => "2016-06-01 05:35:35", - "key" => nil, - "project_id" => "85604ecfb5334b50bd40ca53fc1d710f", - "id" => "afb4222b-18b3-44b3-9f54-e0dfdba1be44", - "zone_transfer_request_id" => "d223f7ef-77a6-459e-abd3-b4dbc97338e7" - }, - { - "status" => "COMPLETE", - "zone_id" => "925bfc45-8901-4aca-aa12-18afaf0879e2", - "links" => { - "self" => "http://127.0.0.1:9001/v2/zones/tasks/transfer_accepts/ecbc7091-c498-4ec4-9893-68b06297fe50", - "zone" => "http://127.0.0.1:9001/v2/zones/925bfc45-8901-4aca-aa12-18afaf0879e2" - }, - "created_at" => "2016-06-01 10:06:36", - "updated_at" => "2016-06-01 10:06:37", - "key" => nil, - "project_id" => "85604ecfb5334b50bd40ca53fc1d710f", - "id" => "ecbc7091-c498-4ec4-9893-68b06297fe50", - "zone_transfer_request_id" => "94cf9bd3-4137-430b-bf75-4e690430258c" - } - ] - } - } - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 9001 - management_url.path = '/v2' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].detect { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_region: @openstack_region, - openstack_management_url: @openstack_management_url } - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::DNS::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['dns'] - @openstack_service_name = options[:openstack_service_name] - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}/", @persistent, @connection_options) - end - - def set_api_path - unless @path.match(SUPPORTED_VERSIONS) - @path = Fog::OpenStack.get_supported_version_path( - SUPPORTED_VERSIONS, - @openstack_management_uri, - @auth_token, - @connection_options - ) - end - end - end - end - end - end -end diff --git a/lib/fog/dns/openstack/v2/requests/get_quota.rb b/lib/fog/dns/openstack/v2/requests/get_quota.rb deleted file mode 100644 index ef8ec4461..000000000 --- a/lib/fog/dns/openstack/v2/requests/get_quota.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Fog - module DNS - class OpenStack - class V2 - class Real - def get_quota(project_id = nil) - headers, _options = Fog::DNS::OpenStack::V2.setup_headers(all_projects: !project_id.nil?) - - request( - expects: 200, - method: 'GET', - path: "quotas/#{project_id}", - headers: headers - ) - end - end - - class Mock - def get_quota(_project_id = nil) - response = Excon::Response.new - response.status = 200 - response.body = data[:quota_updated] || data[:quota] - response - end - end - end - end - end -end diff --git a/lib/fog/dns/openstack/v2/requests/list_zones.rb b/lib/fog/dns/openstack/v2/requests/list_zones.rb deleted file mode 100644 index ba6a352cf..000000000 --- a/lib/fog/dns/openstack/v2/requests/list_zones.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Fog - module DNS - class OpenStack - class V2 - class Real - def list_zones(options = {}) - headers, options = Fog::DNS::OpenStack::V2.setup_headers(options) - - request( - expects: 200, - method: 'GET', - path: 'zones', - query: options, - headers: headers - ) - end - end - - class Mock - def list_zones(_options = {}) - response = Excon::Response.new - response.status = 200 - response.body = { 'zones' => data[:zones] } - response - end - end - end - end - end -end diff --git a/lib/fog/dns/openstack/v2/requests/update_quota.rb b/lib/fog/dns/openstack/v2/requests/update_quota.rb deleted file mode 100644 index 74a11ad7e..000000000 --- a/lib/fog/dns/openstack/v2/requests/update_quota.rb +++ /dev/null @@ -1,34 +0,0 @@ -module Fog - module DNS - class OpenStack - class V2 - class Real - def update_quota(project_id, options = {}) - headers, options = Fog::DNS::OpenStack::V2.setup_headers(options) - - request( - body: Fog::JSON.encode(options), - expects: 200, - method: 'PATCH', - path: "quotas/#{project_id}", - headers: headers - ) - end - end - - class Mock - def update_quota(_project_id, options = {}) - # stringify keys - options = Hash[options.map { |k, v| [k.to_s, v] }] - data[:quota_updated] = data[:quota].merge(options) - - response = Excon::Response.new - response.status = 200 - response.body = data[:quota_updated] - response - end - end - end - end - end -end diff --git a/lib/fog/event/openstack.rb b/lib/fog/event/openstack.rb deleted file mode 100644 index 8e1a898e6..000000000 --- a/lib/fog/event/openstack.rb +++ /dev/null @@ -1,120 +0,0 @@ -module Fog - module Event - class OpenStack < Fog::Service - SUPPORTED_VERSIONS = /v2/ - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix - - model_path 'fog/event/openstack/models' - - model :event - collection :events - - request_path 'fog/event/openstack/requests' - - request :get_event - request :list_events - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - users: {}, - tenants: {} - } - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 8779 - management_url.path = '/v2' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].find { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_management_url: @openstack_management_url } - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::Event::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['event'] - @openstack_service_name = options[:openstack_service_name] - @openstack_endpoint_type = options[:openstack_endpoint_type] || 'publicURL' - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - unless @path.match(SUPPORTED_VERSIONS) - @path = "/" + Fog::OpenStack.get_supported_version( - SUPPORTED_VERSIONS, - @openstack_management_uri, - @auth_token, - @connection_options - ) - end - end - end - end - end -end diff --git a/lib/fog/event/openstack/models/event.rb b/lib/fog/event/openstack/models/event.rb deleted file mode 100644 index fffa54856..000000000 --- a/lib/fog/event/openstack/models/event.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Event - class OpenStack - class Event < Fog::OpenStack::Model - identity :message_id - - attribute :event_type - attribute :generated - attribute :raw - attribute :traits - end - end - end -end diff --git a/lib/fog/event/openstack/models/events.rb b/lib/fog/event/openstack/models/events.rb deleted file mode 100644 index 4dace3546..000000000 --- a/lib/fog/event/openstack/models/events.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/event/openstack/models/event' - -module Fog - module Event - class OpenStack - class Events < Fog::OpenStack::Collection - model Fog::Event::OpenStack::Event - - def all(q = []) - load_response(service.list_events(q)) - end - - def find_by_id(message_id) - event = service.get_event(message_id).body - new(event) - rescue Fog::Event::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/event/openstack/requests/get_event.rb b/lib/fog/event/openstack/requests/get_event.rb deleted file mode 100644 index 4b8304c80..000000000 --- a/lib/fog/event/openstack/requests/get_event.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Fog - module Event - class OpenStack - class Real - def get_event(message_id) - request( - expects: 200, - method: 'GET', - path: "events/#{message_id}" - ) - end - end - - class Mock - def get_event(_message_id) - response = Excon::Response.new - response.status = 200 - response.body = { - 'event_type' => 'compute.instance.create', - 'message_id' => 'd646b40dea6347dfb8caee2da1484c56' - } - response - end - end - end - end -end diff --git a/lib/fog/event/openstack/requests/list_events.rb b/lib/fog/event/openstack/requests/list_events.rb deleted file mode 100644 index 643e825e2..000000000 --- a/lib/fog/event/openstack/requests/list_events.rb +++ /dev/null @@ -1,42 +0,0 @@ -module Fog - module Event - class OpenStack - class Real - def list_events(options = []) - data = { - 'q' => [] - } - - options.each do |opt| - filter = {} - - ['field', 'op', 'value'].each do |key| - filter[key] = opt[key] if opt[key] - end - - data['q'] << filter unless filter.empty? - end - - request( - body: Fog::JSON.encode(data), - expects: 200, - method: 'GET', - path: 'events' - ) - end - end - - class Mock - def list_events(_options = {}) - response = Excon::Response.new - response.status = 200 - response.body = [{ - 'event_type' => 'compute.instance.create', - 'message_id' => 'd646b40dea6347dfb8caee2da1484c56' - }] - response - end - end - end - end -end diff --git a/lib/fog/identity/openstack.rb b/lib/fog/identity/openstack.rb deleted file mode 100644 index 0f0811fe2..000000000 --- a/lib/fog/identity/openstack.rb +++ /dev/null @@ -1,117 +0,0 @@ - - -module Fog - module Identity - class OpenStack < Fog::Service - autoload :V2, File.expand_path('openstack/v2', __dir__) - autoload :V3, File.expand_path('openstack/v3', __dir__) - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, :persistent, - :openstack_service_type, :openstack_service_name, :openstack_tenant, - :openstack_endpoint_type, :openstack_region, :openstack_domain_id, - :openstack_project_name, :openstack_domain_name, - :openstack_user_domain, :openstack_project_domain, - :openstack_user_domain_id, :openstack_project_domain_id, - :openstack_api_key, :openstack_current_user_id, :openstack_userid, :openstack_username, - :current_user, :current_user_id, :current_tenant, :openstack_cache_ttl, - :provider, :openstack_identity_prefix, :openstack_endpoint_path_matches - - # Fog::Identity::OpenStack.new() will return a Fog::Identity::OpenStack::V3 by default - def self.new(args = {}) - version = '3' - url = Fog.credentials[:openstack_auth_url] || args[:openstack_auth_url] - if url - uri = URI(url) - version = '2.0' if uri.path =~ /v2\.0/ - end - - service = case version - when '2.0' - Fog::Identity::OpenStack::V2.new(args) - else - Fog::Identity::OpenStack::V3.new(args) - end - service - end - - class Mock - attr_reader :config - - def initialize(options = {}) - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - @config = options - end - end - - class Real - include Fog::OpenStack::Core - - DEFAULT_SERVICE_TYPE_V3 = %w(identity_v3 identityv3 identity).collect(&:freeze).freeze - DEFAULT_SERVICE_TYPE = %w(identity).collect(&:freeze).freeze - - def self.not_found_class - Fog::Identity::OpenStack::NotFound - end - - def initialize(options = {}) - if options.respond_to?(:config_service?) && options.config_service? - configure(options) - return - end - - initialize_identity(options) - - @openstack_service_type = options[:openstack_service_type] || default_service_type(options) - @openstack_service_name = options[:openstack_service_name] - - @connection_options = options[:connection_options] || {} - - @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL' - initialize_endpoint_path_matches(options) - - authenticate - - if options[:openstack_identity_prefix] - @path = "/#{options[:openstack_identity_prefix]}/#{@path}" - end - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def config_service? - true - end - - def config - self - end - - private - - def default_service_type(options) - unless options[:openstack_identity_prefix] - if @openstack_auth_uri.path =~ %r{/v3} || - (options[:openstack_endpoint_path_matches] && options[:openstack_endpoint_path_matches] =~ '/v3') - return DEFAULT_SERVICE_TYPE_V3 - end - end - DEFAULT_SERVICE_TYPE - end - - def initialize_endpoint_path_matches(options) - if options[:openstack_endpoint_path_matches] - @openstack_endpoint_path_matches = options[:openstack_endpoint_path_matches] - end - end - - def configure(source) - source.instance_variables.each do |v| - instance_variable_set(v, source.instance_variable_get(v)) - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2.rb b/lib/fog/identity/openstack/v2.rb deleted file mode 100644 index 63e06699d..000000000 --- a/lib/fog/identity/openstack/v2.rb +++ /dev/null @@ -1,181 +0,0 @@ -require 'fog/identity/openstack' - -module Fog - module Identity - class OpenStack - class V2 < Fog::Service - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix, :openstack_endpoint_path_matches - - model_path 'fog/identity/openstack/v2/models' - model :tenant - collection :tenants - model :user - collection :users - model :role - collection :roles - model :ec2_credential - collection :ec2_credentials - - request_path 'fog/identity/openstack/v2/requests' - - request :check_token - request :validate_token - - request :list_tenants - request :create_tenant - request :get_tenant - request :get_tenants_by_id - request :get_tenants_by_name - request :update_tenant - request :delete_tenant - - request :list_users - request :create_user - request :update_user - request :delete_user - request :get_user_by_id - request :get_user_by_name - request :add_user_to_tenant - request :remove_user_from_tenant - - request :list_endpoints_for_token - request :list_roles_for_user_on_tenant - request :list_user_global_roles - - request :create_role - request :delete_role - request :delete_user_role - request :create_user_role - request :get_role - request :list_roles - - request :set_tenant - - request :create_ec2_credential - request :delete_ec2_credential - request :get_ec2_credential - request :list_ec2_credentials - - class Mock - attr_reader :auth_token - attr_reader :auth_token_expiration - attr_reader :current_user - attr_reader :current_tenant - attr_reader :unscoped_token - - def self.data - @users ||= {} - @roles ||= {} - @tenants ||= {} - @ec2_credentials ||= Hash.new { |hash, key| hash[key] = {} } - @user_tenant_membership ||= {} - - @data ||= Hash.new do |hash, key| - hash[key] = { - users: @users, - roles: @roles, - tenants: @tenants, - ec2_credentials: @ec2_credentials, - user_tenant_membership: @user_tenant_membership - } - end - end - - def self.reset! - @data = nil - @users = nil - @roles = nil - @tenants = nil - @ec2_credentials = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] || 'admin' - @openstack_tenant = options[:openstack_tenant] || 'admin' - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - @openstack_management_url = @openstack_auth_uri.to_s - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - @admin_tenant = data[:tenants].values.find do |u| - u['name'] == 'admin' - end - - if @openstack_tenant - @current_tenant = data[:tenants].values.find do |u| - u['name'] == @openstack_tenant - end - - if @current_tenant - @current_tenant_id = @current_tenant['id'] - else - @current_tenant_id = Fog::Mock.random_hex(32) - @current_tenant = data[:tenants][@current_tenant_id] = { - 'id' => @current_tenant_id, - 'name' => @openstack_tenant - } - end - else - @current_tenant = @admin_tenant - end - - @current_user = data[:users].values.find do |u| - u['name'] == @openstack_username - end - @current_tenant_id = Fog::Mock.random_hex(32) - - if @current_user - @current_user_id = @current_user['id'] - else - @current_user_id = Fog::Mock.random_hex(32) - @current_user = data[:users][@current_user_id] = { - 'id' => @current_user_id, - 'name' => @openstack_username, - 'email' => "#{@openstack_username}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_management_url: @openstack_management_url, - openstack_current_user_id: @openstack_current_user_id, - current_user: @current_user, - current_tenant: @current_tenant } - end - end - - class Real < Fog::Identity::OpenStack::Real - private - - def default_service_type(_) - DEFAULT_SERVICE_TYPE - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/models/role.rb b/lib/fog/identity/openstack/v2/models/role.rb deleted file mode 100644 index 683d701f3..000000000 --- a/lib/fog/identity/openstack/v2/models/role.rb +++ /dev/null @@ -1,53 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Identity - class OpenStack - class V2 - class Role < Fog::OpenStack::Model - identity :id - attribute :name - - def save - requires :name - data = service.create_role(name) - merge_attributes(data.body['role']) - true - end - - def destroy - requires :id - service.delete_role(id) - true - end - - def add_to_user(user, tenant) - add_remove_to_user(user, tenant, :add) - end - - def remove_to_user(user, tenant) - add_remove_to_user(user, tenant, :remove) - end - - private - - def add_remove_to_user(user, tenant, ops) - requires :id - user_id = get_id(user) - tenant_id = get_id(tenant) - case ops - when :add - service.create_user_role(tenant_id, user_id, id).status == 200 - when :remove - service.delete_user_role(tenant_id, user_id, id).status == 204 - end - end - - def get_id(model_or_string) - model_or_string.kind_of?(String) ? id : model_or_string.id - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/models/roles.rb b/lib/fog/identity/openstack/v2/models/roles.rb deleted file mode 100644 index 893cbe266..000000000 --- a/lib/fog/identity/openstack/v2/models/roles.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v2/models/role' - -module Fog - module Identity - class OpenStack - class V2 - class Roles < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V2::Role - - def all(options = {}) - load_response(service.list_roles(options), 'roles') - end - - def get(id) - service.get_role(id) - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/models/tenant.rb b/lib/fog/identity/openstack/v2/models/tenant.rb deleted file mode 100644 index 77d01a269..000000000 --- a/lib/fog/identity/openstack/v2/models/tenant.rb +++ /dev/null @@ -1,63 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Identity - class OpenStack - class V2 - class Tenant < Fog::OpenStack::Model - identity :id - - attribute :description - attribute :enabled - attribute :name - - def to_s - name - end - - def roles_for(user) - service.roles( - tenant: self, - user: user - ) - end - - def users - requires :id - service.users(tenant_id: id) - end - - def destroy - requires :id - service.delete_tenant(id) - true - end - - def update(attr = nil) - requires :id, :name - merge_attributes( - service.update_tenant(id, attr || attributes).body['tenant'] - ) - self - end - - def create - requires :name - merge_attributes( - service.create_tenant(attributes).body['tenant'] - ) - self - end - - def grant_user_role(user_id, role_id) - service.add_user_to_tenant(id, user_id, role_id) - end - - def revoke_user_role(user_id, role_id) - service.remove_user_from_tenant(id, user_id, role_id) - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/models/tenants.rb b/lib/fog/identity/openstack/v2/models/tenants.rb deleted file mode 100644 index 607a448ab..000000000 --- a/lib/fog/identity/openstack/v2/models/tenants.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v2/models/tenant' - -module Fog - module Identity - class OpenStack - class V2 - class Tenants < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V2::Tenant - - def all(options = {}) - load_response(service.list_tenants(options), 'tenants') - end - - def find_by_id(id) - cached_tenant = find { |tenant| tenant.id == id } - return cached_tenant if cached_tenant - tenant_hash = service.get_tenant(id).body['tenant'] - Fog::Identity::OpenStack::V2::Tenant.new( - tenant_hash.merge(service: service) - ) - end - - def destroy(id) - tenant = find_by_id(id) - tenant.destroy - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/models/user.rb b/lib/fog/identity/openstack/v2/models/user.rb deleted file mode 100644 index 737ea0115..000000000 --- a/lib/fog/identity/openstack/v2/models/user.rb +++ /dev/null @@ -1,69 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Identity - class OpenStack - class V2 - class User < Fog::OpenStack::Model - identity :id - - attribute :email - attribute :enabled - attribute :name - attribute :tenant_id, aliases: 'tenantId' - attribute :password - - attr_accessor :email, :name, :tenant_id, :enabled, :password - - def ec2_credentials - requires :id - service.ec2_credentials(user: self) - end - - def save - raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? - requires :name - enabled = true if enabled.nil? - data = service.create_user(name, password, email, tenant_id, enabled) - merge_attributes(data.body['user']) - true - end - - def update(options = {}) - requires :id - options.merge('id' => id) - service.update_user(id, options) - true - end - - def update_password(password) - update('password' => password, 'url' => "/users/#{id}/OS-KSADM/password") - end - - def update_tenant(tenant) - tenant = tenant.id if tenant.class != String - update(:tenantId => tenant, 'url' => "/users/#{id}/OS-KSADM/tenant") - end - - def update_enabled(enabled) - update(:enabled => enabled, 'url' => "/users/#{id}/OS-KSADM/enabled") - end - - def destroy - requires :id - service.delete_user(id) - true - end - - def roles(tenant_id = self.tenant_id) - if tenant_id - service.list_roles_for_user_on_tenant(tenant_id, id).body['roles'] - else - [] - end - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/models/users.rb b/lib/fog/identity/openstack/v2/models/users.rb deleted file mode 100644 index 40c17d228..000000000 --- a/lib/fog/identity/openstack/v2/models/users.rb +++ /dev/null @@ -1,45 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v2/models/user' - -module Fog - module Identity - class OpenStack - class V2 - class Users < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V2::User - - attribute :tenant_id - - def all(options = {}) - options[:tenant_id] = tenant_id - - load_response(service.list_users(options), 'users') - end - - def find_by_id(id) - find { |user| user.id == id } || - Fog::Identity::OpenStack::V2::User.new( - service.get_user_by_id(id).body['user'].merge( - 'service' => service - ) - ) - end - - def find_by_name(name) - find { |user| user.name == name } || - Fog::Identity::OpenStack::V2::User.new( - service.get_user_by_name(name).body['user'].merge( - 'service' => service - ) - ) - end - - def destroy(id) - user = find_by_id(id) - user.destroy - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/requests/create_role.rb b/lib/fog/identity/openstack/v2/requests/create_role.rb deleted file mode 100644 index e297fd8b8..000000000 --- a/lib/fog/identity/openstack/v2/requests/create_role.rb +++ /dev/null @@ -1,38 +0,0 @@ -module Fog - module Identity - class OpenStack - class V2 - class Real - def create_role(name) - data = { - 'role' => { - 'name' => name - } - } - - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'POST', - path: '/OS-KSADM/roles' - ) - end - end - - class Mock - def create_role(name) - data = { - 'id' => Fog::Mock.random_hex(32), - 'name' => name - } - self.data[:roles][data['id']] = data - Excon::Response.new( - body: { 'role' => data }, - status: 202 - ) - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/requests/create_user.rb b/lib/fog/identity/openstack/v2/requests/create_user.rb deleted file mode 100644 index 98bde4cf1..000000000 --- a/lib/fog/identity/openstack/v2/requests/create_user.rb +++ /dev/null @@ -1,45 +0,0 @@ -module Fog - module Identity - class OpenStack - class V2 - class Real - def create_user(name, password, email, tenantId = nil, enabled = true) - data = { - 'user' => { - 'name' => name, - 'password' => password, - 'tenantId' => tenantId, - 'email' => email, - 'enabled' => enabled - } - } - - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'POST', - path: '/users' - ) - end - end - - class Mock - def create_user(name, _password, email, tenantId = nil, enabled = true) - response = Excon::Response.new - response.status = 200 - data = { - 'id' => Fog::Mock.random_hex(32), - 'name' => name, - 'email' => email, - 'tenantId' => tenantId, - 'enabled' => enabled - } - self.data[:users][data['id']] = data - response.body = { 'user' => data } - response - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/requests/delete_role.rb b/lib/fog/identity/openstack/v2/requests/delete_role.rb deleted file mode 100644 index 4b69c245d..000000000 --- a/lib/fog/identity/openstack/v2/requests/delete_role.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Fog - module Identity - class OpenStack - class V2 - class Real - def delete_role(role_id) - request( - expects: [200, 204], - method: 'DELETE', - path: "/OS-KSADM/roles/#{role_id}" - ) - end - end - - class Mock - def delete_role(role_id) - response = Excon::Response.new - if data[:roles][role_id] - data[:roles].delete(role_id) - response.status = 204 - response - else - raise Fog::Identity::OpenStack::NotFound - end - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/requests/delete_user.rb b/lib/fog/identity/openstack/v2/requests/delete_user.rb deleted file mode 100644 index 5fd1bd88a..000000000 --- a/lib/fog/identity/openstack/v2/requests/delete_user.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Fog - module Identity - class OpenStack - class V2 - class Real - def delete_user(user_id) - request( - expects: [200, 204], - method: 'DELETE', - path: "users/#{user_id}" - ) - end - end - - class Mock - def delete_user(user_id) - data[:users].delete( - list_users.body['users'].find { |x| x['id'] == user_id }['id'] - ) - - response = Excon::Response.new - response.status = 204 - response - rescue - raise Fog::Identity::OpenStack::NotFound - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/requests/get_role.rb b/lib/fog/identity/openstack/v2/requests/get_role.rb deleted file mode 100644 index dbafa00e3..000000000 --- a/lib/fog/identity/openstack/v2/requests/get_role.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Fog - module Identity - class OpenStack - class V2 - class Real - def get_role(id) - request( - expects: [200, 204], - method: 'GET', - path: "/OS-KSADM/roles/#{id}" - ) - end - end - - class Mock - def get_role(id) - response = Excon::Response.new - if data = self.data[:roles][id] - response.status = 200 - response.body = { 'role' => data } - response - else - raise Fog::Identity::OpenStack::NotFound - end - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/requests/list_roles.rb b/lib/fog/identity/openstack/v2/requests/list_roles.rb deleted file mode 100644 index c275b9559..000000000 --- a/lib/fog/identity/openstack/v2/requests/list_roles.rb +++ /dev/null @@ -1,34 +0,0 @@ -module Fog - module Identity - class OpenStack - class V2 - class Real - def list_roles(options = {}) - request( - expects: 200, - method: 'GET', - path: '/OS-KSADM/roles', - query: options - ) - end - end - - class Mock - def list_roles(_options = {}) - if data[:roles].empty? - ['admin', 'Member'].each do |name| - id = Fog::Mock.random_hex(32) - data[:roles][id] = { 'id' => id, 'name' => name } - end - end - - Excon::Response.new( - body: { 'roles' => data[:roles].values }, - status: 200 - ) - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/requests/list_tenants.rb b/lib/fog/identity/openstack/v2/requests/list_tenants.rb deleted file mode 100644 index a9a4a4d0f..000000000 --- a/lib/fog/identity/openstack/v2/requests/list_tenants.rb +++ /dev/null @@ -1,53 +0,0 @@ -module Fog - module Identity - class OpenStack - class V2 - class Real - def list_tenants(options = nil, marker = nil) - if options.kind_of?(Hash) - params = options - else - Fog::Logger.deprecation('Calling OpenStack[:identity].list_tenants(limit, marker) is deprecated, use'\ - ' .list_ec2_credentials(:limit => value, :marker => value)') - params = {} - params['limit'] = options if options - params['marker'] = marker if marker - end - - request( - expects: [200, 204], - method: 'GET', - path: "tenants", - query: params - ) - end - end - - class Mock - def list_tenants(_options = nil, _marker = nil) - Excon::Response.new( - body: { - 'tenants_links' => [], - 'tenants' => [ - { 'id' => '1', - 'description' => 'Has access to everything', - 'enabled' => true, - 'name' => 'admin' }, - { 'id' => '2', - 'description' => 'Normal tenant', - 'enabled' => true, - 'name' => 'default' }, - { 'id' => '3', - 'description' => 'Disabled tenant', - 'enabled' => false, - 'name' => 'disabled' } - ] - }, - status: [200, 204][rand(2)] - ) - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/requests/list_users.rb b/lib/fog/identity/openstack/v2/requests/list_users.rb deleted file mode 100644 index 7d9fd5cfa..000000000 --- a/lib/fog/identity/openstack/v2/requests/list_users.rb +++ /dev/null @@ -1,47 +0,0 @@ -module Fog - module Identity - class OpenStack - class V2 - class Real - def list_users(options = {}) - if options.kind_of?(Hash) - tenant_id = options.delete(:tenant_id) - query = options - else - Fog::Logger.deprecation('Calling OpenStack[:identity].list_users(tenant_id) is deprecated, use .list_users(:tenant_id => value)') - tenant_id = options - query = {} - end - - path = tenant_id ? "tenants/#{tenant_id}/users" : 'users' - request( - expects: [200, 204], - method: 'GET', - path: path, - query: query - ) - end - end - - class Mock - def list_users(options = {}) - tenant_id = options[:tenant_id] - - users = data[:users].values - - if tenant_id - users = users.select do |user| - user['tenantId'] == tenant_id - end - end - - Excon::Response.new( - body: { 'users' => users }, - status: 200 - ) - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/requests/set_tenant.rb b/lib/fog/identity/openstack/v2/requests/set_tenant.rb deleted file mode 100644 index 4beb72e84..000000000 --- a/lib/fog/identity/openstack/v2/requests/set_tenant.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Fog - module Identity - class OpenStack - class V2 - class Real - def set_tenant(tenant) - @openstack_must_reauthenticate = true - @openstack_tenant = tenant.to_s - authenticate - end - end - - class Mock - def set_tenant(_tenant) - true - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v2/requests/update_user.rb b/lib/fog/identity/openstack/v2/requests/update_user.rb deleted file mode 100644 index b829d9d07..000000000 --- a/lib/fog/identity/openstack/v2/requests/update_user.rb +++ /dev/null @@ -1,34 +0,0 @@ -module Fog - module Identity - class OpenStack - class V2 - class Real - def update_user(user_id, options = {}) - url = options.delete('url') || "/users/#{user_id}" - request( - body: Fog::JSON.encode('user' => options), - expects: 200, - method: 'PUT', - path: url - ) - end - end - - class Mock - def update_user(user_id, options) - response = Excon::Response.new - if user = data[:users][user_id] - if options['name'] - user['name'] = options['name'] - end - response.status = 200 - response - else - raise Fog::Identity::OpenStack::NotFound - end - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3.rb b/lib/fog/identity/openstack/v3.rb deleted file mode 100644 index 3a43c3afd..000000000 --- a/lib/fog/identity/openstack/v3.rb +++ /dev/null @@ -1,161 +0,0 @@ -require 'fog/identity/openstack' - -module Fog - module Identity - class OpenStack - class V3 < Fog::Service - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, :persistent, - :openstack_service_type, :openstack_service_name, :openstack_tenant, - :openstack_endpoint_type, :openstack_region, :openstack_domain_id, - :openstack_project_name, :openstack_domain_name, - :openstack_user_domain, :openstack_project_domain, - :openstack_user_domain_id, :openstack_project_domain_id, - :openstack_api_key, :openstack_current_user_id, :openstack_userid, :openstack_username, - :current_user, :current_user_id, :current_tenant, - :provider, :openstack_identity_prefix, :openstack_endpoint_path_matches, :openstack_cache_ttl - - model_path 'fog/identity/openstack/v3/models' - model :domain - collection :domains - model :endpoint - collection :endpoints - model :project - collection :projects - model :service - collection :services - model :token - collection :tokens - model :user - collection :users - model :group - collection :groups - model :role - collection :roles - model :role_assignment - collection :role_assignments - model :os_credential - collection :os_credentials - model :policy - collection :policies - - request_path 'fog/identity/openstack/v3/requests' - - request :list_users - request :get_user - request :create_user - request :update_user - request :delete_user - request :list_user_groups - request :list_user_projects - request :list_groups - request :get_group - request :create_group - request :update_group - request :delete_group - request :add_user_to_group - request :remove_user_from_group - request :group_user_check - request :list_group_users - request :list_roles - request :list_role_assignments - request :get_role - request :create_role - request :update_role - request :delete_role - request :auth_domains - request :auth_projects - request :list_domains - request :get_domain - request :create_domain - request :update_domain - request :delete_domain - request :list_domain_user_roles - request :grant_domain_user_role - request :check_domain_user_role - request :revoke_domain_user_role - request :list_domain_group_roles - request :grant_domain_group_role - request :check_domain_group_role - request :revoke_domain_group_role - request :list_endpoints - request :get_endpoint - request :create_endpoint - request :update_endpoint - request :delete_endpoint - request :list_projects - request :get_project - request :create_project - request :update_project - request :delete_project - request :list_project_user_roles - request :grant_project_user_role - request :check_project_user_role - request :revoke_project_user_role - request :list_project_group_roles - request :grant_project_group_role - request :check_project_group_role - request :revoke_project_group_role - request :list_services - request :get_service - request :create_service - request :update_service - request :delete_service - request :token_authenticate - request :token_validate - request :token_check - request :token_revoke - request :list_os_credentials - request :get_os_credential - request :create_os_credential - request :update_os_credential - request :delete_os_credential - request :list_policies - request :get_policy - request :create_policy - request :update_policy - request :delete_policy - - class Mock - include Fog::OpenStack::Core - def initialize(options = {}); end - end - - def self.get_api_version(uri, connection_options = {}) - connection = Fog::Core::Connection.new(uri, false, connection_options) - response = connection.request(expects: [200], - headers: { 'Content-Type' => 'application/json', - 'Accept' => 'application/json' }, - method: 'GET') - - body = Fog::JSON.decode(response.body) - version = nil - unless body['version'].empty? - version = body['version']['id'] - end - if version.nil? - raise Fog::OpenStack::Errors::ServiceUnavailable, "No version available at #{uri}" - end - - version - end - - class Real < Fog::Identity::OpenStack::Real - private - - def default_service_type(_) - DEFAULT_SERVICE_TYPE_V3 - end - - def initialize_endpoint_path_matches(options) - if options[:openstack_endpoint_path_matches] - @openstack_endpoint_path_matches = options[:openstack_endpoint_path_matches] - else - @openstack_endpoint_path_matches = %r{/v3} unless options[:openstack_identity_prefix] - end - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/models/endpoints.rb b/lib/fog/identity/openstack/v3/models/endpoints.rb deleted file mode 100644 index b3fd11c9c..000000000 --- a/lib/fog/identity/openstack/v3/models/endpoints.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v3/models/service' - -module Fog - module Identity - class OpenStack - class V3 - class Endpoints < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V3::Endpoint - - def all(options = {}) - load_response(service.list_endpoints(options), 'endpoints') - end - - def find_by_id(id) - cached_endpoint = find { |endpoint| endpoint.id == id } - return cached_endpoint if cached_endpoint - endpoint_hash = service.get_endpoint(id).body['endpoint'] - Fog::Identity::OpenStack::V3::Endpoint.new( - endpoint_hash.merge(service: service) - ) - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/models/role.rb b/lib/fog/identity/openstack/v3/models/role.rb deleted file mode 100644 index 024b251b4..000000000 --- a/lib/fog/identity/openstack/v3/models/role.rb +++ /dev/null @@ -1,41 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Identity - class OpenStack - class V3 - class Role < Fog::OpenStack::Model - identity :id - - attribute :name - attribute :links - - def to_s - name - end - - def destroy - requires :id - service.delete_role(id) - true - end - - def update(attr = nil) - requires :id - merge_attributes( - service.update_role(id, attr || attributes).body['role'] - ) - self - end - - def create - merge_attributes( - service.create_role(attributes).body['role'] - ) - self - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/models/roles.rb b/lib/fog/identity/openstack/v3/models/roles.rb deleted file mode 100644 index 02bfadb86..000000000 --- a/lib/fog/identity/openstack/v3/models/roles.rb +++ /dev/null @@ -1,40 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v3/models/role' - -module Fog - module Identity - class OpenStack - class V3 - class Roles < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V3::Role - - def all(options = {}) - load_response(service.list_roles(options), 'roles') - end - - def assignments(options = {}) - # TODO(lsmola) this method doesn't make much sense, it should be moved to role.rb and automatically add - # role.id filter. Otherwise it's just duplication. - Fog::Logger.deprecation("Calling OpenStack[:keystone].roles.assignments(options) method which"\ - " deprecated, call OpenStack[:keystone].role_assignments.all(options) instead") - load(service.list_role_assignments(options).body['role_assignments']) - end - - def find_by_id(id) - cached_role = find { |role| role.id == id } - return cached_role if cached_role - role_hash = service.get_role(id).body['role'] - Fog::Identity::OpenStack::V3.role.new( - role_hash.merge(service: service) - ) - end - - def destroy(id) - role = find_by_id(id) - role.destroy - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/models/service.rb b/lib/fog/identity/openstack/v3/models/service.rb deleted file mode 100644 index a06ef8a43..000000000 --- a/lib/fog/identity/openstack/v3/models/service.rb +++ /dev/null @@ -1,48 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Identity - class OpenStack - class V3 - class Service < Fog::OpenStack::Model - identity :id - - attribute :description - attribute :type - attribute :name - attribute :links - - def to_s - name - end - - def destroy - requires :id - service.delete_service(id) - true - end - - def update(attr = nil) - requires :id - merge_attributes( - service.update_service(id, attr || attributes).body['service'] - ) - self - end - - def save - requires :name - identity ? update : create - end - - def create - merge_attributes( - service.create_service(attributes).body['service'] - ) - self - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/models/services.rb b/lib/fog/identity/openstack/v3/models/services.rb deleted file mode 100644 index 030ecceb5..000000000 --- a/lib/fog/identity/openstack/v3/models/services.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v3/models/service' - -module Fog - module Identity - class OpenStack - class V3 - class Services < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V3::Service - - def all(options = {}) - load_response(service.list_services(options), 'services') - end - - def find_by_id(id) - cached_service = find { |service| service.id == id } - return cached_service if cached_service - service_hash = service.get_service(id).body['service'] - Fog::Identity::OpenStack::V3::Service.new( - service_hash.merge(service: service) - ) - end - - def destroy(id) - service = find_by_id(id) - service.destroy - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/models/token.rb b/lib/fog/identity/openstack/v3/models/token.rb deleted file mode 100644 index 5c2392684..000000000 --- a/lib/fog/identity/openstack/v3/models/token.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Identity - class OpenStack - class V3 - class Token < Fog::OpenStack::Model - attribute :value - attribute :catalog - attribute :expires_at - attribute :issued_at - attribute :methods - attribute :project - attribute :roles - attribute :user - - def to_s - value - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/models/user.rb b/lib/fog/identity/openstack/v3/models/user.rb deleted file mode 100644 index cf2ee4b59..000000000 --- a/lib/fog/identity/openstack/v3/models/user.rb +++ /dev/null @@ -1,82 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Identity - class OpenStack - class V3 - class User < Fog::OpenStack::Model - identity :id - - attribute :default_project_id - attribute :description - attribute :domain_id - attribute :email - attribute :enabled - attribute :name - attribute :links - attribute :password - - def to_s - name - end - - def groups - requires :id - service.list_user_groups(id).body['groups'] - end - - def projects - requires :id - service.list_user_projects(id).body['projects'] - end - - def roles - requires :id, :domain_id - service.list_domain_user_roles(domain_id, id).body['roles'] - end - - def grant_role(role_id) - requires :id, :domain_id - service.grant_domain_user_role(domain_id, id, role_id) - end - - def check_role(role_id) - requires :id, :domain_id - begin - service.check_domain_user_role(domain_id, id, role_id) - rescue Fog::Identity::OpenStack::NotFound - return false - end - true - end - - def revoke_role(role_id) - requires :id, :domain_id - service.revoke_domain_user_role(domain_id, id, role_id) - end - - def destroy - requires :id - service.delete_user(id) - true - end - - def update(attr = nil) - requires :id - merge_attributes( - service.update_user(id, attr || attributes).body['user'] - ) - self - end - - def create - merge_attributes( - service.create_user(attributes).body['user'] - ) - self - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/models/users.rb b/lib/fog/identity/openstack/v3/models/users.rb deleted file mode 100644 index 7f993fd84..000000000 --- a/lib/fog/identity/openstack/v3/models/users.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v3/models/domain' - -module Fog - module Identity - class OpenStack - class V3 - class Users < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V3::User - - def all(options = {}) - load_response(service.list_users(options), 'users') - end - - def find_by_id(id) - cached_user = find { |user| user.id == id } - return cached_user if cached_user - user_hash = service.get_user(id).body['user'] - Fog::Identity::OpenStack::V3::User.new( - user_hash.merge(service: service) - ) - end - - def find_by_name(name, options = {}) - load(service.list_users(options.merge(name: name)).body["users"]) - end - - def destroy(id) - user = find_by_id(id) - user.destroy - end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/requests/create_role.rb b/lib/fog/identity/openstack/v3/requests/create_role.rb deleted file mode 100644 index 7ff715229..000000000 --- a/lib/fog/identity/openstack/v3/requests/create_role.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Fog - module Identity - class OpenStack - class V3 - class Real - def create_role(role) - request( - expects: [201], - method: 'POST', - path: "roles", - body: Fog::JSON.encode(role: role) - ) - end - end - - class Mock - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/requests/create_user.rb b/lib/fog/identity/openstack/v3/requests/create_user.rb deleted file mode 100644 index 56421fad2..000000000 --- a/lib/fog/identity/openstack/v3/requests/create_user.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Fog - module Identity - class OpenStack - class V3 - class Real - def create_user(user) - request( - expects: [201], - method: 'POST', - path: "users", - body: Fog::JSON.encode(user: user) - ) - end - end - - class Mock - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/requests/delete_role.rb b/lib/fog/identity/openstack/v3/requests/delete_role.rb deleted file mode 100644 index bcb00a8a0..000000000 --- a/lib/fog/identity/openstack/v3/requests/delete_role.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Fog - module Identity - class OpenStack - class V3 - class Real - def delete_role(id) - request( - expects: [204], - method: 'DELETE', - path: "roles/#{id}" - ) - end - end - - class Mock - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/requests/delete_service.rb b/lib/fog/identity/openstack/v3/requests/delete_service.rb deleted file mode 100644 index fdba92701..000000000 --- a/lib/fog/identity/openstack/v3/requests/delete_service.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Fog - module Identity - class OpenStack - class V3 - class Real - def delete_service(id) - request( - expects: [204], - method: 'DELETE', - path: "services/#{id}" - ) - end - end - - class Mock - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/requests/delete_user.rb b/lib/fog/identity/openstack/v3/requests/delete_user.rb deleted file mode 100644 index f7fd7a7a6..000000000 --- a/lib/fog/identity/openstack/v3/requests/delete_user.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Fog - module Identity - class OpenStack - class V3 - class Real - def delete_user(id) - request( - expects: [204], - method: 'DELETE', - path: "users/#{id}" - ) - end - end - - class Mock - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/requests/get_project.rb b/lib/fog/identity/openstack/v3/requests/get_project.rb deleted file mode 100644 index b243acdcc..000000000 --- a/lib/fog/identity/openstack/v3/requests/get_project.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Fog - module Identity - class OpenStack - class V3 - class Real - def get_project(id, options = []) - request( - expects: [200], - method: 'GET', - path: "projects/#{id}?#{options.join '&'}" - ) - end - end - - class Mock - def get_domain(id); end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/requests/get_role.rb b/lib/fog/identity/openstack/v3/requests/get_role.rb deleted file mode 100644 index 923161c6d..000000000 --- a/lib/fog/identity/openstack/v3/requests/get_role.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Fog - module Identity - class OpenStack - class V3 - class Real - def get_role(id) - request( - expects: [200], - method: 'GET', - path: "roles/#{id}" - ) - end - end - - class Mock - def get_role(id); end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/requests/list_domains.rb b/lib/fog/identity/openstack/v3/requests/list_domains.rb deleted file mode 100644 index ef880696d..000000000 --- a/lib/fog/identity/openstack/v3/requests/list_domains.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Fog - module Identity - class OpenStack - class V3 - class Real - def list_domains(options = {}) - request( - expects: [200], - method: 'GET', - path: "domains", - query: options - ) - end - end - - class Mock - def list_domains(options = {}); end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/requests/list_roles.rb b/lib/fog/identity/openstack/v3/requests/list_roles.rb deleted file mode 100644 index b40765d67..000000000 --- a/lib/fog/identity/openstack/v3/requests/list_roles.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Fog - module Identity - class OpenStack - class V3 - class Real - def list_roles(options = {}) - request( - expects: [200], - method: 'GET', - path: "roles", - query: options - ) - end - end - - class Mock - def list_roles(options = {}); end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/requests/list_services.rb b/lib/fog/identity/openstack/v3/requests/list_services.rb deleted file mode 100644 index 685021932..000000000 --- a/lib/fog/identity/openstack/v3/requests/list_services.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Fog - module Identity - class OpenStack - class V3 - class Real - def list_services(options = {}) - request( - expects: [200], - method: 'GET', - path: "services", - query: options - ) - end - end - - class Mock - def list_services(options = {}); end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/requests/list_users.rb b/lib/fog/identity/openstack/v3/requests/list_users.rb deleted file mode 100644 index d875d8af1..000000000 --- a/lib/fog/identity/openstack/v3/requests/list_users.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Fog - module Identity - class OpenStack - class V3 - class Real - def list_users(options = {}) - request( - expects: [200], - method: 'GET', - path: "users", - query: options - ) - end - end - - class Mock - def list_users(options = {}); end - end - end - end - end -end diff --git a/lib/fog/identity/openstack/v3/requests/update_user.rb b/lib/fog/identity/openstack/v3/requests/update_user.rb deleted file mode 100644 index a8ff71450..000000000 --- a/lib/fog/identity/openstack/v3/requests/update_user.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Fog - module Identity - class OpenStack - class V3 - class Real - def update_user(id, user) - request( - expects: [200], - method: 'PATCH', - path: "users/#{id}", - body: Fog::JSON.encode(user: user) - ) - end - end - - class Mock - end - end - end - end -end diff --git a/lib/fog/image/openstack.rb b/lib/fog/image/openstack.rb deleted file mode 100644 index 7336fb3d1..000000000 --- a/lib/fog/image/openstack.rb +++ /dev/null @@ -1,23 +0,0 @@ - - -module Fog - module Image - class OpenStack < Fog::Service - autoload :V1, File.expand_path('openstack/v1', __dir__) - autoload :V2, File.expand_path('openstack/v2', __dir__) - - # Fog::Image::OpenStack.new() will return a Fog::Image::OpenStack::V2 or a Fog::Image::OpenStack::V1, - # choosing the latest available - def self.new(args = {}) - @openstack_auth_uri = URI.parse(args[:openstack_auth_url]) if args[:openstack_auth_url] - if inspect == 'Fog::Image::OpenStack' - service = Fog::Image::OpenStack::V2.new(args) unless args.empty? - service ||= Fog::Image::OpenStack::V1.new(args) - else - service = Fog::Service.new(args) - end - service - end - end - end -end diff --git a/lib/fog/image/openstack/v1.rb b/lib/fog/image/openstack/v1.rb deleted file mode 100644 index 947538359..000000000 --- a/lib/fog/image/openstack/v1.rb +++ /dev/null @@ -1,133 +0,0 @@ -require 'fog/image/openstack' - -module Fog - module Image - class OpenStack - class V1 < Fog::Service - SUPPORTED_VERSIONS = /v1(\.(0|1))*/ - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix - - model_path 'fog/image/openstack/v1/models' - - model :image - collection :images - - request_path 'fog/image/openstack/v1/requests' - - request :list_public_images - request :list_public_images_detailed - request :get_image - request :create_image - request :update_image - request :get_image_members - request :update_image_members - request :get_shared_images - request :add_member_to_image - request :remove_member_from_image - request :delete_image - request :get_image_by_id - request :set_tenant - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - images: {} - } - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 9292 - management_url.path = '/v1' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].detect { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_region: @openstack_region, - openstack_management_url: @openstack_management_url } - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::Image::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['image'] - @openstack_service_name = options[:openstack_service_name] - @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL' - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - unless @path.match(SUPPORTED_VERSIONS) - @path = Fog::OpenStack.get_supported_version_path(SUPPORTED_VERSIONS, - @openstack_management_uri, - @auth_token, - @connection_options) - end - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v1/models/image.rb b/lib/fog/image/openstack/v1/models/image.rb deleted file mode 100644 index 2d911e2a6..000000000 --- a/lib/fog/image/openstack/v1/models/image.rb +++ /dev/null @@ -1,78 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Image - class OpenStack - class V1 - class Image < Fog::OpenStack::Model - identity :id - - attribute :name - attribute :size - attribute :disk_format - attribute :container_format - attribute :id - attribute :checksum - - # detailed - attribute :min_disk - attribute :created_at - attribute :deleted_at - attribute :updated_at - attribute :deleted - attribute :protected - attribute :is_public - attribute :status - attribute :min_ram - attribute :owner - attribute :properties - attribute :location - attribute :copy_from - - def create - requires :name - merge_attributes(service.create_image(attributes).body['image']) - self - end - - def update - requires :name - merge_attributes(service.update_image(attributes).body['image']) - self - end - - def destroy - requires :id - service.delete_image(id) - true - end - - def add_member(member_id) - requires :id - service.add_member_to_image(id, member_id) - end - - def remove_member(member_id) - requires :id - service.remove_member_from_image(id, member_id) - end - - def update_members(members) - requires :id - service.update_image_members(id, members) - end - - def members - requires :id - service.get_image_members(id).body['members'] - end - - def metadata - requires :id - service.get_image(id).headers - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v1/models/images.rb b/lib/fog/image/openstack/v1/models/images.rb deleted file mode 100644 index dee79dcb9..000000000 --- a/lib/fog/image/openstack/v1/models/images.rb +++ /dev/null @@ -1,106 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/image/openstack/v1/models/image' - -module Fog - module Image - class OpenStack - class V1 - class Images < Fog::OpenStack::Collection - model Fog::Image::OpenStack::V1::Image - - def all(options = {}) - load_response(service.list_public_images_detailed(options), 'images') - end - - def summary(options = {}) - load_response(service.list_public_images(options), 'images') - end - - def details(options = {}, deprecated_query = nil) - Fog::Logger.deprecation("Calling OpenStack[:glance].images.details will be removed, "\ - " call .images.all for detailed list.") - load_response(service.list_public_images_detailed(options, deprecated_query), 'images') - end - - def find_by_id(id) - marker = 'X-Image-Meta-' - property_marker = 'X-Image-Meta-Property-' - headers = service.get_image_by_id(id).headers.select { |h, _| h.start_with?(marker) } - - # partioning on the longer prefix, leaving X-Image-Meta - # headers in the second returned hash. - custom_properties, params = headers.partition do |k, _| - k.start_with?(property_marker) - end.map { |p| Hash[p] } - - params = remove_prefix_and_convert_type(params, marker) - custom_properties = remove_prefix_and_convert_type(custom_properties, property_marker) - - params['properties'] = custom_properties - new(params) - rescue Fog::Image::OpenStack::NotFound - nil - end - alias get find_by_id - - def public - images = load(service.list_public_images_detailed.body['images']) - images.delete_if { |image| image.is_public == false } - end - - def private - images = load(service.list_public_images_detailed.body['images']) - images.delete_if(&:is_public) - end - - def destroy(id) - image = find_by_id(id) - image.destroy - end - - def method_missing(method_sym, *arguments, &block) - if method_sym.to_s =~ /^find_by_(.*)$/ - load(service.list_public_images_detailed($1, arguments.first).body['images']) - else - super - end - end - - def find_by_size_min(size) - find_attribute(__method__, size) - end - - def find_by_size_max(size) - find_attribute(__method__, size) - end - - def find_attribute(attribute, value) - attribute = attribute.to_s.gsub("find_by_", "") - load(service.list_public_images_detailed(attribute, value).body['images']) - end - - private - - def convert_to_type(v) - case v - when /^\d+$/ - v.to_i - when 'True' - true - when 'False' - false - when /^\d\d\d\d\-\d\d\-\d\dT/ - ::Time.parse(v) - else - v - end - end - - def remove_prefix_and_convert_type(hash, prefix) - Hash[hash.map { |k, v| [k.gsub(prefix, '').downcase, convert_to_type(v)] }] - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v1/requests/add_member_to_image.rb b/lib/fog/image/openstack/v1/requests/add_member_to_image.rb deleted file mode 100644 index 9276b3948..000000000 --- a/lib/fog/image/openstack/v1/requests/add_member_to_image.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Fog - module Image - class OpenStack - class V1 - class Real - def add_member_to_image(image_id, tenant_id) - request( - expects: [200, 204], - method: 'PUT', - path: "images/#{image_id}/members/#{tenant_id}" - ) - end - end - - class Mock - def add_member_to_image(_image_id, _tenant_id) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v1/requests/create_image.rb b/lib/fog/image/openstack/v1/requests/create_image.rb deleted file mode 100644 index 793368077..000000000 --- a/lib/fog/image/openstack/v1/requests/create_image.rb +++ /dev/null @@ -1,78 +0,0 @@ -module Fog - module Image - class OpenStack - class V1 - class Real - def create_image(attributes) - data = { - 'Content-Type' => 'application/octet-stream', - 'x-image-meta-name' => attributes[:name], - 'x-image-meta-disk-format' => attributes[:disk_format], - 'x-image-meta-container-format' => attributes[:container_format], - 'x-image-meta-size' => attributes[:size], - 'x-image-meta-is-public' => attributes[:is_public], - 'x-image-meta-min-ram' => attributes[:min_ram], - 'x-image-meta-min-disk' => attributes[:min_disk], - 'x-image-meta-checksum' => attributes[:checksum], - 'x-image-meta-owner' => attributes[:owner], - 'x-glance-api-copy-from' => attributes[:copy_from] - }.reject { |_k, v| v.nil? } - - body = '' - if attributes[:location] - body = File.open(attributes[:location], "rb") - # Make sure the image file size is always present - data['x-image-meta-size'] = File.size(body) - end - - unless attributes[:properties].nil? - attributes[:properties].each do |key, value| - data["x-image-meta-property-#{key}"] = value - end - end - - request( - headers: data, - body: body, - expects: 201, - method: 'POST', - path: "images" - ) - ensure - body.close if body.respond_to?(:close) - end - end - - class Mock - def create_image(attributes) - response = Excon::Response.new - response.status = 201 - - image_id = Fog::Mock.random_hex(32) - image = data[:images][image_id] = { - 'name' => attributes[:name], - 'size' => attributes[:size] || Fog::Mock.random_numbers(8).to_i, - 'min_disk' => attributes[:min_disk] || 0, - 'disk_format' => attributes[:disk_format] || 'raw', - 'created_at' => Time.now.strftime('%FT%T.%6N'), - 'container_format' => attributes[:container_format] || 'bare', - 'deleted_at' => nil, - 'updated_at' => Time.now.strftime('%FT%T.%6N'), - 'checksum' => attributes[:checksum] || Fog::Mock.random_hex(32), - 'id' => image_id, - 'deleted' => false, - 'protected' => false, - 'is_public' => attributes[:is_public].to_s == 'true', - 'status' => 'queued', - 'min_ram' => attributes[:min_ram] || 0, - 'owner' => attributes[:owner], - 'properties' => attributes[:properties] || {} - } - response.body = { 'image' => image } - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v1/requests/delete_image.rb b/lib/fog/image/openstack/v1/requests/delete_image.rb deleted file mode 100644 index 63c3e7731..000000000 --- a/lib/fog/image/openstack/v1/requests/delete_image.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Fog - module Image - class OpenStack - class V1 - class Real - def delete_image(image_id) - request( - expects: 200, - method: 'DELETE', - path: "images/#{image_id}" - ) - end - end - - class Mock - def delete_image(_image_id) - response = Excon::Response.new - response.status = 200 - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v1/requests/get_image.rb b/lib/fog/image/openstack/v1/requests/get_image.rb deleted file mode 100644 index 664f5006f..000000000 --- a/lib/fog/image/openstack/v1/requests/get_image.rb +++ /dev/null @@ -1,47 +0,0 @@ -module Fog - module Image - class OpenStack - class V1 - class Real - def get_image(image_id) - request( - expects: [200, 204], - method: 'HEAD', - path: "images/#{image_id}" - ) - end - end - - class Mock - def get_image(_image_id) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.headers = { "X-Image-Meta-Is_public" => "True", - "X-Image-Meta-Min_disk" => "0", - "X-Image-Meta-Property-Ramdisk_id" => "b45aa128-cd36-4ad9-a026-1a1c2bfd8fdc", - "X-Image-Meta-Disk_format" => "ami", - "X-Image-Meta-Created_at" => "2012-02-21T07:32:26", - "X-Image-Meta-Container_format" => "ami", - "Etag" => "2f81976cae15c16ef0010c51e3a6c163", - "Location" => "http://192.168.27.100:9292/v1/images/0e09fbd6-43c5-448a-83e9-0d3d05f9747e", - "X-Image-Meta-Protected" => "False", - "Date" => "Fri, 24 Feb 2012 02:14:25 GMT", - "X-Image-Meta-Name" => "cirros-0.3.0-x86_64-blank", - "X-Image-Meta-Min_ram" => "0", "Content-Type" => "text/html; charset=UTF-8", - "X-Image-Meta-Updated_at" => "2012-02-21T07:32:29", - "X-Image-Meta-Property-Kernel_id" => "cd28951e-e1c2-4bc5-95d3-f0495abbcdc5", - "X-Image-Meta-Size" => "25165824", - "X-Image-Meta-Checksum" => "2f81976cae15c16ef0010c51e3a6c163", - "X-Image-Meta-Deleted" => "False", - "Content-Length" => "0", - "X-Image-Meta-Owner" => "ff528b20431645ebb5fa4b0a71ca002f", - "X-Image-Meta-Status" => "active", - "X-Image-Meta-Id" => "0e09fbd6-43c5-448a-83e9-0d3d05f9747e" } - response.body = "" - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v1/requests/get_image_by_id.rb b/lib/fog/image/openstack/v1/requests/get_image_by_id.rb deleted file mode 100644 index fe8886825..000000000 --- a/lib/fog/image/openstack/v1/requests/get_image_by_id.rb +++ /dev/null @@ -1,44 +0,0 @@ -module Fog - module Image - class OpenStack - class V1 - class Real - def get_image_by_id(image_id) - request( - expects: [200], - method: 'HEAD', - path: "images/#{image_id}" - ) - end - end - - class Mock - def get_image_by_id(image_id) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.headers = { - 'X-Image-Meta-Checksum' => '8a40c862b5735975d82605c1dd395796', - 'X-Image-Meta-Container_format' => 'aki', - 'X-Image-Meta-Created_at' => '2016-01-06T03:22:20.000000', - 'X-Image-Meta-Deleted' => 'False', - 'X-Image-Meta-Disk_format' => 'aki', - 'X-Image-Meta-Id' => image_id, - 'X-Image-Meta-Is_public' => 'True', - 'X-Image-Meta-Min_disk' => 0, - 'X-Image-Meta-Min_ram' => 0, - 'X-Image-Meta-Name' => 'cirros-0.3.4-x86_64-uec-kernel', - 'X-Image-Meta-Owner' => '13cc6052265b41529e2fd0fc461fa8ef', - 'X-Image-Meta-Protected' => 'False', - 'X-Image-Meta-Size' => 4979632, - 'X-Image-Meta-Status' => 'deactivated', - 'X-Image-Meta-Updated_at' => '2016-02-25T03:02:05.000000', - 'X-Image-Meta-Property-foo' => 'bar' - } - response.body = {} - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v1/requests/get_image_members.rb b/lib/fog/image/openstack/v1/requests/get_image_members.rb deleted file mode 100644 index 3144b2954..000000000 --- a/lib/fog/image/openstack/v1/requests/get_image_members.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Fog - module Image - class OpenStack - class V1 - class Real - def get_image_members(image_id) - request( - expects: [200, 204], - method: 'GET', - path: "images/#{image_id}/members" - ) - end - end - - class Mock - def get_image_members(_image_id) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = { - "members" => [ - { "member_id" => "ff528b20431645ebb5fa4b0a71ca002f", - "can_share" => false } - ] - } - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v1/requests/get_shared_images.rb b/lib/fog/image/openstack/v1/requests/get_shared_images.rb deleted file mode 100644 index 0831ca451..000000000 --- a/lib/fog/image/openstack/v1/requests/get_shared_images.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Fog - module Image - class OpenStack - class V1 - class Real - def get_shared_images(tenant_id) - request( - expects: [200, 204], - method: 'GET', - path: "shared-images/#{tenant_id}" - ) - end - end - - class Mock - def get_shared_images(_tenant_id) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = { - "shared_images" => [ - { "image_id" => "ff528b20431645ebb5fa4b0a71ca002f", - "can_share" => false } - ] - } - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v1/requests/list_public_images.rb b/lib/fog/image/openstack/v1/requests/list_public_images.rb deleted file mode 100644 index 018c882ca..000000000 --- a/lib/fog/image/openstack/v1/requests/list_public_images.rb +++ /dev/null @@ -1,36 +0,0 @@ -module Fog - module Image - class OpenStack - class V1 - class Real - def list_public_images(options = {}) - request( - expects: [200, 204], - method: 'GET', - path: 'images', - query: options - ) - end - end - - class Mock - def list_public_images(_options = {}) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = { - "images" => [{ - "name" => Fog::Mock.random_letters(10), - "size" => Fog::Mock.random_numbers(8).to_i, - "disk_format" => "iso", - "container_format" => "bare", - "id" => Fog::Mock.random_hex(36), - "checksum" => Fog::Mock.random_hex(32) - }] - } - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v1/requests/remove_member_from_image.rb b/lib/fog/image/openstack/v1/requests/remove_member_from_image.rb deleted file mode 100644 index 7d8f897a3..000000000 --- a/lib/fog/image/openstack/v1/requests/remove_member_from_image.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Fog - module Image - class OpenStack - class V1 - class Real - def remove_member_from_image(image_id, member_id) - request( - expects: [200, 204], - method: 'DELETE', - path: "images/#{image_id}/members/#{member_id}" - ) - end - end - - class Mock - def remove_member_from_image(_image_id, _member_id) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v1/requests/set_tenant.rb b/lib/fog/image/openstack/v1/requests/set_tenant.rb deleted file mode 100644 index a65b20c12..000000000 --- a/lib/fog/image/openstack/v1/requests/set_tenant.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Fog - module Image - class OpenStack - class V1 - class Real - def set_tenant(tenant) - @openstack_must_reauthenticate = true - @openstack_tenant = tenant.to_s - authenticate - end - end - - class Mock - def set_tenant(_tenant) - true - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v1/requests/update_image.rb b/lib/fog/image/openstack/v1/requests/update_image.rb deleted file mode 100644 index 9dd396f36..000000000 --- a/lib/fog/image/openstack/v1/requests/update_image.rb +++ /dev/null @@ -1,66 +0,0 @@ -module Fog - module Image - class OpenStack - class V1 - class Real - def update_image(attributes) - data = { - 'x-image-meta-name' => attributes[:name], - 'x-image-meta-disk-format' => attributes[:disk_format], - 'x-image-meta-container-format' => attributes[:container_format], - 'x-image-meta-size' => attributes[:size], - 'x-image-meta-is-public' => attributes[:is_public], - 'x-image-meta-min-ram' => attributes[:min_ram], - 'x-image-meta-min-disk' => attributes[:min_disk], - 'x-image-meta-checksum' => attributes[:checksum], - 'x-image-meta-owner' => attributes[:owner] - }.reject { |_k, v| v.nil? } - - unless attributes[:properties].nil? - attributes[:properties].each do |key, value| - data["x-image-meta-property-#{key}"] = value - end - end - - request( - headers: data, - expects: 200, - method: 'PUT', - path: "images/#{attributes[:id]}" - ) - end - end - - class Mock - def update_image(attributes) - response = Excon::Response.new - response.status = 200 - image = images.last - response.body = { - 'image' => { - 'name' => attributes[:name] || image.name, - 'size' => image.size, - 'min_disk' => (attributes[:min_disk] || image.min_disk).to_i, - 'disk_format' => attributes[:disk_format] || image.disk_format, - 'created_at' => image.created_at, - 'container_format' => attributes[:container_format] || image.container_format, - 'deleted_at' => nil, - 'updated_at' => Time.now.to_s, - 'checksum' => image.checksum, - 'id' => attributes[:id], - 'deleted' => false, - 'protected' => false, - 'is_public' => attributes[:is_public] || image.is_public, - 'status' => image.status, - 'min_ram' => (attributes[:min_ram] || image.min_ram).to_i, - 'owner' => attributes[:owner] || image.owner, - 'properties' => attributes[:properties] || image.properties - } - } - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2.rb b/lib/fog/image/openstack/v2.rb deleted file mode 100644 index bea22a36f..000000000 --- a/lib/fog/image/openstack/v2.rb +++ /dev/null @@ -1,143 +0,0 @@ -require 'fog/image/openstack' - -module Fog - module Image - class OpenStack - class V2 < Fog::Service - SUPPORTED_VERSIONS = /v2(\.(0|1|2|3))*/ - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix - - model_path 'fog/image/openstack/v2/models' - - model :image - collection :images - - request_path 'fog/image/openstack/v2/requests' - - request :list_images - request :get_image - request :create_image - request :update_image - request :upload_image - request :download_image - request :reactivate_image - request :deactivate_image - request :add_tag_to_image - request :remove_tag_from_image - request :get_image_members - request :get_member_details - request :update_image_member - request :get_shared_images - request :add_member_to_image - request :remove_member_from_image - request :delete_image - request :get_image_by_id - request :set_tenant - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - images: {} - } - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 9292 - management_url.path = '/v2' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].detect { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_region: @openstack_region, - openstack_management_url: @openstack_management_url } - end - end - - # Exists for image_v2_upload_spec "describe" - class Upload - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::Image::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['image'] - @openstack_service_name = options[:openstack_service_name] - @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL' - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - unless @path.match(SUPPORTED_VERSIONS) - @path = Fog::OpenStack.get_supported_version_path(SUPPORTED_VERSIONS, - @openstack_management_uri, - @auth_token, - @connection_options) - end - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2/models/image.rb b/lib/fog/image/openstack/v2/models/image.rb deleted file mode 100644 index 144fc0a04..000000000 --- a/lib/fog/image/openstack/v2/models/image.rb +++ /dev/null @@ -1,214 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Image - class OpenStack - class V2 - class Image < Fog::OpenStack::Model - identity :id - - attribute :name - attribute :visibility # public or private - - attribute :tags - - attribute :self - attribute :size - attribute :virtual_size - attribute :disk_format - attribute :container_format - attribute :id - attribute :checksum - attribute :self - attribute :file - - # detailed - attribute :min_disk - attribute :created_at - attribute :updated_at - attribute :protected - attribute :status # "queued","saving","active","killed","deleted","pending_delete" - attribute :min_ram - attribute :owner - attribute :properties - attribute :metadata - attribute :location - - # from snapshot support - attribute :network_allocated - attribute :base_image_ref - attribute :image_type - attribute :instance_uuid - attribute :user_id - - def method_missing(method_sym, *arguments, &block) - if attributes.key?(method_sym) - attributes[method_sym] - elsif attributes.key?(method_sym.to_s) - attributes[method_sym.to_s] - elsif method_sym.to_s.end_with?('=') - attributes[method_sym.to_s.gsub(/=$/, '')] = arguments[0] - else - super - end - end - - def respond_to?(method_sym, include_all = false) - if attributes.key?(method_sym) - true - elsif attributes.key?(method_sym.to_s) - true - elsif method_sym.to_s.end_with?('=') - true - else - super - end - end - - def create - requires :name - merge_attributes(service.create_image(attributes).body) - self - end - - # Here we convert 'attributes' into a form suitable for Glance's usage of JSON Patch (RFC6902). - # We fetch the existing attributes from the server to compute the delta (difference) - # Setting value to nil will delete that attribute from the server. - def update(attr = nil) - requires :id - client_attributes = attr || @attributes - server_attributes = service.images.get(id).attributes - - json_patch = build_update_json_patch(client_attributes, server_attributes) - - merge_attributes( - service.update_image(id, json_patch).body - ) - self - end - - # This overrides the behaviour of Fog::OpenStack::Model::save() which tries to be clever and - # assumes save=update if an ID is present - but Image V2 allows ID to be specified on creation - def save - if @attributes[:self].nil? - create - else - update - end - end - - def destroy - requires :id - service.delete_image(id) - true - end - - def upload_data(io_obj) - requires :id - if io_obj.kind_of? Hash - service.upload_image(id, nil, io_obj) - else - service.upload_image(id, io_obj) - end - end - - def download_data(params = {}) - requires :id - service.download_image(id, params[:content_range], params) - end - - def reactivate - requires :id - service.reactivate_image(id) - end - - def deactivate - requires :id - service.deactivate_image(id) - end - - def add_member(member_id) - requires :id - service.add_member_to_image(id, member_id) - end - - def remove_member(member_id) - requires :id - service.remove_member_from_image(id, member_id) - end - - def update_member(member) - requires :id - service.update_image_member(id, member) - end - - def members - requires :id - service.get_image_members(id).body['members'] - end - - def member(member_id) - requires :id - service.get_member_details(id, member_id) - end - - def add_tags(tags) - requires :id - tags.each { |tag| add_tag tag } - end - - def add_tag(tag) - requires :id - service.add_tag_to_image(id, tag) - end - - def remove_tags(tags) - requires :id - tags.each { |tag| remove_tag tag } - end - - def remove_tag(tag) - requires :id - service.remove_tag_from_image(id, tag) - end - - private - - def build_update_json_patch(client_attributes, server_attributes) - [ - build_patch_operation('remove', patch_attributes_to_remove(client_attributes, server_attributes)), - build_patch_operation('add', patch_attributes_to_add(client_attributes, server_attributes)), - build_patch_operation('replace', patch_attributes_to_replace(client_attributes, server_attributes)) - ].flatten - end - - def patch_attributes_to_remove(client_attributes, server_attributes) - client_attributes.select do |key, value| - value.nil? && !server_attributes[key].nil? - end - end - - def patch_attributes_to_add(client_attributes, server_attributes) - client_attributes.reject do |key, _| - server_attributes.key?(key) - end - end - - def patch_attributes_to_replace(client_attributes, server_attributes) - client_attributes.reject do |key, value| - value.nil? || server_attributes[key] == value - end - end - - def build_patch_operation(op_name, attributes) - json_patch = [] - attributes.each do |key, value| - json_patch << { op: op_name, path: "/#{key}", value: value } - end - json_patch - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2/models/images.rb b/lib/fog/image/openstack/v2/models/images.rb deleted file mode 100644 index f17bdfedf..000000000 --- a/lib/fog/image/openstack/v2/models/images.rb +++ /dev/null @@ -1,66 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/image/openstack/v2/models/image' - -module Fog - module Image - class OpenStack - class V2 - class Images < Fog::OpenStack::Collection - model Fog::Image::OpenStack::V2::Image - - def all(options = {}) - load_response(service.list_images(options), 'images') - end - - def summary(options = {}) - load_response(service.list_images(options), 'images') - end - - def find_by_id(id) - new(service.get_image_by_id(id).body) - rescue Fog::Image::OpenStack::NotFound - nil - end - - alias get find_by_id - - def public - images = load(service.list_images.body['images']) - images.delete_if { |image| image.is_public == false } - end - - def private - images = load(service.list_images.body['images']) - images.delete_if(&:is_public) - end - - def destroy(id) - image = find_by_id(id) - image.destroy - end - - def method_missing(method_sym, *arguments, &block) - if method_sym.to_s =~ /^find_by_(.*)$/ - load(service.list_images($1.to_sym => arguments.first).body['images']) - else - super - end - end - - def find_by_size_min(size) - find_attribute(__method__, size) - end - - def find_by_size_max(size) - find_attribute(__method__, size) - end - - def find_attribute(attribute, value) - attribute = attribute.to_s.gsub("find_by_", "") - load(service.list_images(attribute.to_sym => value).body['images']) - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2/requests/add_member_to_image.rb b/lib/fog/image/openstack/v2/requests/add_member_to_image.rb deleted file mode 100644 index f0c3310ff..000000000 --- a/lib/fog/image/openstack/v2/requests/add_member_to_image.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Fog - module Image - class OpenStack - class V2 - class Real - def add_member_to_image(image_id, tenant_id) - request( - expects: [200], - method: 'POST', - path: "images/#{image_id}/members", - body: Fog::JSON.encode(member: tenant_id) - ) - end - end - - class Mock - def add_member_to_image(_image_id, _tenant_id) - response = Excon::Response.new - response.status = 200 - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2/requests/create_image.rb b/lib/fog/image/openstack/v2/requests/create_image.rb deleted file mode 100644 index 008aef0c3..000000000 --- a/lib/fog/image/openstack/v2/requests/create_image.rb +++ /dev/null @@ -1,51 +0,0 @@ -module Fog - module Image - class OpenStack - class V2 - class Real - def create_image(image) - location = image.delete :location - headers = {} - headers["Location"] = location if location - - request( - headers: headers, - expects: [201], - method: 'POST', - path: "images", - body: Fog::JSON.encode(image) - ) - end - end - - class Mock - def create_image(attributes) - response = Excon::Response.new - response.status = 201 - - image_id = Fog::Mock.random_hex(32) - image = data[:images][image_id] = { - 'tags' => attributes[:tags] || [], - 'name' => attributes[:name], - 'size' => nil, - 'min_disk' => attributes[:min_disk] || 0, - 'disk_format' => attributes[:disk_format] || 'raw', - 'created_at' => Time.now.strftime('%FT%T.%6N'), - 'container_format' => attributes[:container_format] || 'bare', - 'deleted_at' => nil, - 'updated_at' => Time.now.strftime('%FT%T.%6N'), - 'checksum' => nil, - 'id' => image_id, - 'visibility' => attributes[:visibility] || 'public', - 'status' => 'queued', - 'min_ram' => attributes[:min_ram] || 0, - 'owner' => attributes[:owner] || Fog::Mock.random_hex(32) - } - response.body = image - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2/requests/delete_image.rb b/lib/fog/image/openstack/v2/requests/delete_image.rb deleted file mode 100644 index 30b81df6f..000000000 --- a/lib/fog/image/openstack/v2/requests/delete_image.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Fog - module Image - class OpenStack - class V2 - class Real - def delete_image(image_id) - request( - expects: 204, - method: 'DELETE', - path: "images/#{image_id}" - ) - end - end - - class Mock - def delete_image(_image_id) - response = Excon::Response.new - response.status = 204 - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2/requests/get_image.rb b/lib/fog/image/openstack/v2/requests/get_image.rb deleted file mode 100644 index 41d6d0304..000000000 --- a/lib/fog/image/openstack/v2/requests/get_image.rb +++ /dev/null @@ -1,47 +0,0 @@ -module Fog - module Image - class OpenStack - class V2 - class Real - def get_image(image_id) - request( - expects: [200, 204], - method: 'HEAD', - path: "images/#{image_id}" - ) - end - end - - class Mock - def get_image(_image_id) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.headers = { "X-Image-Meta-Is_public" => "True", - "X-Image-Meta-Min_disk" => "0", - "X-Image-Meta-Property-Ramdisk_id" => "b45aa128-cd36-4ad9-a026-1a1c2bfd8fdc", - "X-Image-Meta-Disk_format" => "ami", - "X-Image-Meta-Created_at" => "2012-02-21T07:32:26", - "X-Image-Meta-Container_format" => "ami", - "Etag" => "2f81976cae15c16ef0010c51e3a6c163", - "Location" => "http://192.168.27.100:9292/v1/images/0e09fbd6-43c5-448a-83e9-0d3d05f9747e", - "X-Image-Meta-Protected" => "False", - "Date" => "Fri, 24 Feb 2012 02:14:25 GMT", - "X-Image-Meta-Name" => "cirros-0.3.0-x86_64-blank", - "X-Image-Meta-Min_ram" => "0", "Content-Type" => "text/html; charset=UTF-8", - "X-Image-Meta-Updated_at" => "2012-02-21T07:32:29", - "X-Image-Meta-Property-Kernel_id" => "cd28951e-e1c2-4bc5-95d3-f0495abbcdc5", - "X-Image-Meta-Size" => "25165824", - "X-Image-Meta-Checksum" => "2f81976cae15c16ef0010c51e3a6c163", - "X-Image-Meta-Deleted" => "False", - "Content-Length" => "0", - "X-Image-Meta-Owner" => "ff528b20431645ebb5fa4b0a71ca002f", - "X-Image-Meta-Status" => "active", - "X-Image-Meta-Id" => "0e09fbd6-43c5-448a-83e9-0d3d05f9747e" } - response.body = "" - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2/requests/get_image_by_id.rb b/lib/fog/image/openstack/v2/requests/get_image_by_id.rb deleted file mode 100644 index f35ee5e39..000000000 --- a/lib/fog/image/openstack/v2/requests/get_image_by_id.rb +++ /dev/null @@ -1,35 +0,0 @@ -module Fog - module Image - class OpenStack - class V2 - class Real - def get_image_by_id(image_id) - request( - expects: [200], - method: 'GET', - path: "images/#{image_id}" - ) - end - end - - class Mock - def get_image_by_id(_image_id) - response = Excon::Response.new - response.status = [200][rand(2)] - response.body = { - "images" => [{ - "name" => "mock-image-name", - "size" => 25165824, - "disk_format" => "ami", - "container_format" => "ami", - "id" => "0e09fbd6-43c5-448a-83e9-0d3d05f9747e", - "checksum" => "2f81976cae15c16ef0010c51e3a6c163" - }] - } - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2/requests/get_image_members.rb b/lib/fog/image/openstack/v2/requests/get_image_members.rb deleted file mode 100644 index e300acc66..000000000 --- a/lib/fog/image/openstack/v2/requests/get_image_members.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Fog - module Image - class OpenStack - class V2 - class Real - def get_image_members(image_id) - request( - expects: [200, 204], - method: 'GET', - path: "images/#{image_id}/members" - ) - end - end - - class Mock - def get_image_members(_image_id) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = { - "members" => [ - { "member_id" => "ff528b20431645ebb5fa4b0a71ca002f", - "can_share" => false } - ] - } - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2/requests/get_shared_images.rb b/lib/fog/image/openstack/v2/requests/get_shared_images.rb deleted file mode 100644 index f18429e48..000000000 --- a/lib/fog/image/openstack/v2/requests/get_shared_images.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Fog - module Image - class OpenStack - class V2 - class Real - def get_shared_images(tenant_id) - request( - expects: [200, 204], - method: 'GET', - path: "shared-images/#{tenant_id}" - ) - end - end - - class Mock - def get_shared_images(_tenant_id) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = { - "shared_images" => [ - { "image_id" => "ff528b20431645ebb5fa4b0a71ca002f", - "can_share" => false } - ] - } - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2/requests/list_images.rb b/lib/fog/image/openstack/v2/requests/list_images.rb deleted file mode 100644 index bc309c5be..000000000 --- a/lib/fog/image/openstack/v2/requests/list_images.rb +++ /dev/null @@ -1,36 +0,0 @@ -module Fog - module Image - class OpenStack - class V2 - class Real - def list_images(options = {}) - request( - expects: [200], - method: 'GET', - path: 'images', - query: options - ) - end - end - - class Mock - def list_images(_options = {}) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = { - "images" => [{ - "name" => Fog::Mock.random_letters(10), - "size" => Fog::Mock.random_numbers(8).to_i, - "disk_format" => "iso", - "container_format" => "bare", - "id" => Fog::Mock.random_hex(36), - "checksum" => Fog::Mock.random_hex(32) - }] - } - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2/requests/remove_member_from_image.rb b/lib/fog/image/openstack/v2/requests/remove_member_from_image.rb deleted file mode 100644 index 82baed430..000000000 --- a/lib/fog/image/openstack/v2/requests/remove_member_from_image.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Fog - module Image - class OpenStack - class V2 - class Real - def remove_member_from_image(image_id, member_id) - request( - expects: [200, 204], - method: 'DELETE', - path: "images/#{image_id}/members/#{member_id}" - ) - end - end - - class Mock - def remove_member_from_image(_image_id, _member_id) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2/requests/set_tenant.rb b/lib/fog/image/openstack/v2/requests/set_tenant.rb deleted file mode 100644 index 56f1445b7..000000000 --- a/lib/fog/image/openstack/v2/requests/set_tenant.rb +++ /dev/null @@ -1,21 +0,0 @@ -module Fog - module Image - class OpenStack - class V2 - class Real - def set_tenant(tenant) - @openstack_must_reauthenticate = true - @openstack_tenant = tenant.to_s - authenticate - end - end - - class Mock - def set_tenant(_tenant) - true - end - end - end - end - end -end diff --git a/lib/fog/image/openstack/v2/requests/update_image.rb b/lib/fog/image/openstack/v2/requests/update_image.rb deleted file mode 100644 index ebf712927..000000000 --- a/lib/fog/image/openstack/v2/requests/update_image.rb +++ /dev/null @@ -1,49 +0,0 @@ -module Fog - module Image - class OpenStack - class V2 - class Real - def update_image(id, json_patch) - request( - headers: { 'Content-Type' => 'application/openstack-images-v2.1-json-patch' }, - expects: [200], - method: 'PATCH', - path: "images/#{id}", - body: Fog::JSON.encode(json_patch) - ) - end - end - - class Mock - def update_image(attributes) - response = Excon::Response.new - response.status = 200 - image = images.last - response.body = { - 'image' => { - 'name' => attributes[:name] || image.name, - 'size' => image.size, - 'min_disk' => (attributes[:min_disk] || image.min_disk).to_i, - 'disk_format' => attributes[:disk_format] || image.disk_format, - 'created_at' => image.created_at, - 'container_format' => attributes[:container_format] || image.container_format, - 'deleted_at' => nil, - 'updated_at' => Time.now.to_s, - 'checksum' => image.checksum, - 'id' => attributes[:id], - 'deleted' => false, - 'protected' => false, - 'is_public' => attributes[:is_public] || image.is_public, - 'status' => image.status, - 'min_ram' => (attributes[:min_ram] || image.min_ram).to_i, - 'owner' => attributes[:owner] || image.owner, - 'properties' => attributes[:properties] || image.properties - } - } - response - end - end - end - end - end -end diff --git a/lib/fog/introspection/openstack.rb b/lib/fog/introspection/openstack.rb deleted file mode 100644 index 085ed8de5..000000000 --- a/lib/fog/introspection/openstack.rb +++ /dev/null @@ -1,103 +0,0 @@ -require 'yaml' - -module Fog - module Introspection - class OpenStack < Fog::Service - SUPPORTED_VERSIONS = /v1/ - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id - - ## REQUESTS - # - request_path 'fog/introspection/openstack/requests' - - # Introspection requests - request :create_introspection - request :get_introspection - request :abort_introspection - request :get_introspection_details - - # Rules requests - request :create_rules - request :list_rules - request :delete_rules_all - request :get_rules - request :delete_rules - - ## MODELS - # - model_path 'fog/introspection/openstack/models' - model :rules - collection :rules_collection - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - # Introspection data is *huge* we load it from a yaml file - file = "../../../../test/fixtures/introspection.yaml" - hash[key] = YAML.load(File.read(File.expand_path(file, __FILE__))) - end - end - - def self.reset - @data = nil - end - - include Fog::OpenStack::Core - - def initialize(options = {}) - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86_400).iso8601 - - initialize_identity options - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::Introspection::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['baremetal-introspection'] - @openstack_service_name = options[:openstack_service_name] - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - unless @path.match(SUPPORTED_VERSIONS) - @path = "/v1" - end - end - end - end - end -end diff --git a/lib/fog/introspection/openstack/models/rules_collection.rb b/lib/fog/introspection/openstack/models/rules_collection.rb deleted file mode 100644 index b6b437a0a..000000000 --- a/lib/fog/introspection/openstack/models/rules_collection.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/introspection/openstack/models/rules' - -module Fog - module Introspection - class OpenStack - class RulesCollection < Fog::OpenStack::Collection - model Fog::Introspection::OpenStack::Rules - - def all(_options = {}) - load_response(service.list_rules, 'rules') - end - - def get(uuid) - data = service.get_rules(uuid).body - new(data) - rescue Fog::Introspection::OpenStack::NotFound - nil - end - - def destroy(uuid) - rules = get(uuid) - rules.destroy - end - - def destroy_all - service.delete_rules_all - end - end - end - end -end diff --git a/lib/fog/key_manager/openstack.rb b/lib/fog/key_manager/openstack.rb deleted file mode 100644 index 4932a170e..000000000 --- a/lib/fog/key_manager/openstack.rb +++ /dev/null @@ -1,149 +0,0 @@ -module Fog - module KeyManager - class OpenStack < Fog::Service - SUPPORTED_VERSIONS = /v1(\.0)*/ - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, :openstack_userid, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_auth_omit_default_port, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix, :openstack_temp_url_key, :openstack_cache_ttl - - ## MODELS - # - model_path 'fog/key_manager/openstack/models' - model :secret - collection :secrets - model :container - collection :containers - model :acl - - ## REQUESTS - - # secrets - request_path 'fog/key_manager/openstack/requests' - request :create_secret - request :list_secrets - request :get_secret - request :get_secret_payload - request :get_secret_metadata - request :delete_secret - - # containers - request :create_container - request :get_container - request :list_containers - request :delete_container - - # ACL - request :get_secret_acl - request :update_secret_acl - request :replace_secret_acl - request :delete_secret_acl - - request :get_container_acl - request :update_container_acl - request :replace_container_acl - request :delete_container_acl - - class Mock - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 9311 - management_url.path = '/v1' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].detect { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_region: @openstack_region, - openstack_management_url: @openstack_management_url } - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::KeyManager::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['key-manager'] - @openstack_service_name = options[:openstack_service_name] - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - @path.sub!(%r{/$}, '') - unless @path.match(SUPPORTED_VERSIONS) - @path = supported_version(SUPPORTED_VERSIONS, @openstack_management_uri, @auth_token, @connection_options) - end - end - - def supported_version(supported_versions, uri, auth_token, connection_options = {}) - connection = Fog::Core::Connection.new("#{uri.scheme}://#{uri.host}:#{uri.port}", false, connection_options) - response = connection.request(expects: [200, 204, 300], - headers: { 'Content-Type' => 'application/json', - 'Accept' => 'application/json', - 'X-Auth-Token' => auth_token }, - method: 'GET') - - body = Fog::JSON.decode(response.body) - version = nil - - versions = body.fetch('versions', {}).fetch('values', []) - versions.each do |v| - if v.fetch('id', "").match(supported_versions) && - ['current', 'supported', 'stable'].include?(v.fetch('status', '').downcase) - version = v['id'] - end - end - - if !version || version.empty? - raise Fog::OpenStack::Errors::ServiceUnavailable.new( - "OpenStack service only supports API versions #{supported_versions.inspect}" - ) - end - - version - end - end - end - end -end diff --git a/lib/fog/key_manager/openstack/models/containers.rb b/lib/fog/key_manager/openstack/models/containers.rb deleted file mode 100644 index eb138d8b7..000000000 --- a/lib/fog/key_manager/openstack/models/containers.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/key_manager/openstack/models/container' - -module Fog - module KeyManager - class OpenStack - class Containers < Fog::OpenStack::Collection - model Fog::KeyManager::OpenStack::Container - - def all(options = {}) - load_response(service.list_containers(options), 'containers') - end - - def get(secret_ref) - if secret = service.get_container(secret_ref).body - new(secret) - end - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/key_manager/openstack/models/secrets.rb b/lib/fog/key_manager/openstack/models/secrets.rb deleted file mode 100644 index cb53d3f3b..000000000 --- a/lib/fog/key_manager/openstack/models/secrets.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/key_manager/openstack/models/secret' - -module Fog - module KeyManager - class OpenStack - class Secrets < Fog::OpenStack::Collection - model Fog::KeyManager::OpenStack::Secret - - def all(options = {}) - load_response(service.list_secrets(options), 'secrets') - end - - def get(secret_ref) - if secret = service.get_secret(secret_ref).body - new(secret) - end - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/key_manager/openstack/requests/delete_container.rb b/lib/fog/key_manager/openstack/requests/delete_container.rb deleted file mode 100644 index 208753c3c..000000000 --- a/lib/fog/key_manager/openstack/requests/delete_container.rb +++ /dev/null @@ -1,18 +0,0 @@ -module Fog - module KeyManager - class OpenStack - class Real - def delete_container(id) - request( - expects: [204], - method: 'DELETE', - path: "containers/#{id}" - ) - end - end - - class Mock - end - end - end -end diff --git a/lib/fog/key_manager/openstack/requests/get_container.rb b/lib/fog/key_manager/openstack/requests/get_container.rb deleted file mode 100644 index 1b5c30d25..000000000 --- a/lib/fog/key_manager/openstack/requests/get_container.rb +++ /dev/null @@ -1,18 +0,0 @@ -module Fog - module KeyManager - class OpenStack - class Real - def get_container(uuid) - request( - expects: [200], - method: 'GET', - path: "containers/#{uuid}" - ) - end - end - - class Mock - end - end - end -end diff --git a/lib/fog/key_manager/openstack/requests/get_container_acl.rb b/lib/fog/key_manager/openstack/requests/get_container_acl.rb deleted file mode 100644 index 27a420f30..000000000 --- a/lib/fog/key_manager/openstack/requests/get_container_acl.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Fog - module KeyManager - class OpenStack - class Real - def get_container_acl(uuid) - request( - expects: [200], - method: 'GET', - path: "containers/#{uuid}/acl" - ) - end - end - - class Mock - def get_container_acl(_uuid) - response = Excon::Response.new - response.status = 200 - response.body = { - "read" => { - "project-access" => true, - "updated" => "2017-04-25T19:10:52", - "users" => ["45895d3a393f42b2a8760f5dafa9c6d8"], - "created" => "2017-04-25T19:10:52" - } - } - response - end - end - end - end -end diff --git a/lib/fog/key_manager/openstack/requests/get_secret_acl.rb b/lib/fog/key_manager/openstack/requests/get_secret_acl.rb deleted file mode 100644 index 771ff68bb..000000000 --- a/lib/fog/key_manager/openstack/requests/get_secret_acl.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Fog - module KeyManager - class OpenStack - class Real - def get_secret_acl(uuid) - request( - expects: [200], - method: 'GET', - path: "secrets/#{uuid}/acl" - ) - end - end - - class Mock - def get_secret_acl(_uuid) - response = Excon::Response.new - response.status = 200 - response.body = { - "read" => { - "project-access" => false, - "updated" => "2017-04-25T19:10:52", - "users" => %w(45895d3a393f42b2a8760f5dafa9c6d8 dc2cb4f0d30044e2b0251409c94cc955), - "created" => "2017-04-25T19:10:52" - } - } - response - end - end - end - end -end diff --git a/lib/fog/metering/openstack.rb b/lib/fog/metering/openstack.rb deleted file mode 100644 index 24270ce31..000000000 --- a/lib/fog/metering/openstack.rb +++ /dev/null @@ -1,132 +0,0 @@ - - -module Fog - module Metering - class OpenStack < Fog::Service - SUPPORTED_VERSIONS = /v2/ - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix - - model_path 'fog/metering/openstack/models' - - model :resource - collection :resources - - # Events extracted from Ceilometer (metering service) to Panko (event service) since Ocata release - model :event - collection :events - - request_path 'fog/metering/openstack/requests' - - # Metering - request :get_event - request :get_resource - request :get_samples - request :get_statistics - request :list_events - request :list_meters - request :list_resources - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - users: {}, - tenants: {} - } - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 8776 - management_url.path = '/v1' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].find { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_management_url: @openstack_management_url } - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::Metering::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['metering'] - @openstack_service_name = options[:openstack_service_name] - @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL' - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - unless @path.match(SUPPORTED_VERSIONS) - @path = "/" + Fog::OpenStack.get_supported_version( - SUPPORTED_VERSIONS, - @openstack_management_uri, - @auth_token, - @connection_options - ) - end - end - end - end - end -end diff --git a/lib/fog/metering/openstack/models/event.rb b/lib/fog/metering/openstack/models/event.rb deleted file mode 100644 index 606ebc0c1..000000000 --- a/lib/fog/metering/openstack/models/event.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Metering - class OpenStack - class Event < Fog::OpenStack::Model - identity :message_id - - attribute :event_type - attribute :generated - attribute :raw - attribute :traits - end - end - end -end diff --git a/lib/fog/metering/openstack/models/events.rb b/lib/fog/metering/openstack/models/events.rb deleted file mode 100644 index 01af6f5a1..000000000 --- a/lib/fog/metering/openstack/models/events.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/metering/openstack/models/event' - -module Fog - module Metering - class OpenStack - class Events < Fog::OpenStack::Collection - model Fog::Metering::OpenStack::Event - - def all(q = []) - load_response(service.list_events(q)) - end - - def find_by_id(message_id) - event = service.get_event(message_id).body - new(event) - rescue Fog::Metering::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/metering/openstack/models/resource.rb b/lib/fog/metering/openstack/models/resource.rb deleted file mode 100644 index 9d08cfe23..000000000 --- a/lib/fog/metering/openstack/models/resource.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Metering - class OpenStack - class Resource < Fog::OpenStack::Model - identity :resource_id - - attribute :project_id - attribute :user_id - attribute :metadata - end - end - end -end diff --git a/lib/fog/metering/openstack/models/resources.rb b/lib/fog/metering/openstack/models/resources.rb deleted file mode 100644 index 048861625..000000000 --- a/lib/fog/metering/openstack/models/resources.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/metering/openstack/models/resource' - -module Fog - module Metering - class OpenStack - class Resources < Fog::OpenStack::Collection - model Fog::Metering::OpenStack::Resource - - def all(_detailed = true) - load_response(service.list_resources) - end - - def find_by_id(resource_id) - resource = service.get_resource(resource_id).body - new(resource) - rescue Fog::Metering::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/metering/openstack/requests/get_event.rb b/lib/fog/metering/openstack/requests/get_event.rb deleted file mode 100644 index ae6fb1aa0..000000000 --- a/lib/fog/metering/openstack/requests/get_event.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Fog - module Metering - class OpenStack - class Real - def get_event(message_id) - request( - expects: 200, - method: 'GET', - path: "events/#{message_id}" - ) - end - end - - class Mock - def get_event(_message_id) - response = Excon::Response.new - response.status = 200 - response.body = { - 'event_type' => 'compute.instance.create', - 'message_id' => 'd646b40dea6347dfb8caee2da1484c56' - } - response - end - end - end - end -end diff --git a/lib/fog/metering/openstack/requests/get_resource.rb b/lib/fog/metering/openstack/requests/get_resource.rb deleted file mode 100644 index 4ae279325..000000000 --- a/lib/fog/metering/openstack/requests/get_resource.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Fog - module Metering - class OpenStack - class Real - def get_resource(resource_id) - request( - expects: 200, - method: 'GET', - path: "resources/#{resource_id}" - ) - end - end - - class Mock - def get_resource(_resource_id) - response = Excon::Response.new - response.status = 200 - response.body = { - 'resource_id' => 'glance', - 'project_id' => 'd646b40dea6347dfb8caee2da1484c56', - 'user_id' => '1d5fd9eda19142289a60ed9330b5d284', - 'metadata' => {} - } - response - end - end - end - end -end diff --git a/lib/fog/metering/openstack/requests/get_samples.rb b/lib/fog/metering/openstack/requests/get_samples.rb deleted file mode 100644 index 62ab3e410..000000000 --- a/lib/fog/metering/openstack/requests/get_samples.rb +++ /dev/null @@ -1,52 +0,0 @@ -module Fog - module Metering - class OpenStack - class Real - def get_samples(meter_id, options = [], limit = 10000000) - data = { - 'q' => [] - } - - options.each do |opt| - filter = {} - - ['field', 'op', 'value'].each do |key| - filter[key] = opt[key] if opt[key] - end - - data['q'] << filter unless filter.empty? - data['limit'] = limit - end - - request( - body: Fog::JSON.encode(data), - expects: 200, - method: 'GET', - path: "meters/#{meter_id}" - ) - end - end - - class Mock - def get_samples(_meter_id) - response = Excon::Response.new - response.status = 200 - response.body = [{ - 'counter_name' => 'image.size', - 'user_id' => '1d5fd9eda19142289a60ed9330b5d284', - 'resource_id' => 'glance', - 'timestamp' => '2013-04-03T23:44:21', - 'resource_metadata' => {}, - 'source' => 'artificial', - 'counter_unit' => 'bytes', - 'counter_volume' => 10.0, - 'project_id' => 'd646b40dea6347dfb8caee2da1484c56', - 'message_id' => '14e4a902-9cf3-11e2-a054-003048f5eafc', - 'counter_type' => 'gauge' - }] - response - end - end - end - end -end diff --git a/lib/fog/metering/openstack/requests/get_statistics.rb b/lib/fog/metering/openstack/requests/get_statistics.rb deleted file mode 100644 index c70f3e8b5..000000000 --- a/lib/fog/metering/openstack/requests/get_statistics.rb +++ /dev/null @@ -1,52 +0,0 @@ -module Fog - module Metering - class OpenStack - class Real - def get_statistics(meter_id, options = {}) - data = { - 'period' => options['period'], - 'q' => [] - } - - options['q'].each do |opt| - filter = {} - - ['field', 'op', 'value'].each do |key| - filter[key] = opt[key] if opt[key] - end - - data['q'] << filter unless filter.empty? - end if options['q'].kind_of? Array - - request( - body: Fog::JSON.encode(data), - expects: 200, - method: 'GET', - path: "meters/#{meter_id}/statistics" - ) - end - end - - class Mock - def get_statistics(_meter_id, _options = {}) - response = Excon::Response.new - response.status = 200 - response.body = [{ - 'count' => 143, - 'duration_start' => '2013-04-03T23:44:21', - 'min' => 10.0, - 'max' => 10.0, - 'duration_end' => '2013-04-04T23:24:21', - 'period' => 0, - 'period_end' => '2013-04-04T23:24:21', - 'duration' => 85200.0, - 'period_start' => '2013-04-03T23:44:21', - 'avg' => 10.0, - 'sum' => 1430.0 - }] - response - end - end - end - end -end diff --git a/lib/fog/metering/openstack/requests/list_events.rb b/lib/fog/metering/openstack/requests/list_events.rb deleted file mode 100644 index 94f250acd..000000000 --- a/lib/fog/metering/openstack/requests/list_events.rb +++ /dev/null @@ -1,42 +0,0 @@ -module Fog - module Metering - class OpenStack - class Real - def list_events(options = []) - data = { - 'q' => [] - } - - options.each do |opt| - filter = {} - - ['field', 'op', 'value'].each do |key| - filter[key] = opt[key] if opt[key] - end - - data['q'] << filter unless filter.empty? - end - - request( - body: Fog::JSON.encode(data), - expects: 200, - method: 'GET', - path: 'events' - ) - end - end - - class Mock - def list_events(_options = {}) - response = Excon::Response.new - response.status = 200 - response.body = [{ - 'event_type' => 'compute.instance.create', - 'message_id' => 'd646b40dea6347dfb8caee2da1484c56' - }] - response - end - end - end - end -end diff --git a/lib/fog/metering/openstack/requests/list_meters.rb b/lib/fog/metering/openstack/requests/list_meters.rb deleted file mode 100644 index ae2d56936..000000000 --- a/lib/fog/metering/openstack/requests/list_meters.rb +++ /dev/null @@ -1,46 +0,0 @@ -module Fog - module Metering - class OpenStack - class Real - def list_meters(options = []) - data = { - 'q' => [] - } - - options.each do |opt| - filter = {} - - ['field', 'op', 'value'].each do |key| - filter[key] = opt[key] if opt[key] - end - - data['q'] << filter unless filter.empty? - end - - request( - body: Fog::JSON.encode(data), - expects: 200, - method: 'GET', - path: 'meters' - ) - end - end - - class Mock - def list_meters(_options = {}) - response = Excon::Response.new - response.status = 200 - response.body = [{ - 'user_id' => '1d5fd9eda19142289a60ed9330b5d284', - 'name' => 'image.size', - 'resource_id' => 'glance', - 'project_id' => 'd646b40dea6347dfb8caee2da1484c56', - 'type' => 'gauge', - 'unit' => 'bytes' - }] - response - end - end - end - end -end diff --git a/lib/fog/metering/openstack/requests/list_resources.rb b/lib/fog/metering/openstack/requests/list_resources.rb deleted file mode 100644 index 11ebbe869..000000000 --- a/lib/fog/metering/openstack/requests/list_resources.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Fog - module Metering - class OpenStack - class Real - def list_resources(_options = {}) - request( - expects: 200, - method: 'GET', - path: 'resources' - ) - end - end - - class Mock - def list_resources(_options = {}) - response = Excon::Response.new - response.status = 200 - response.body = [{ - 'resource_id' => 'glance', - 'project_id' => 'd646b40dea6347dfb8caee2da1484c56', - 'user_id' => '1d5fd9eda19142289a60ed9330b5d284', - 'metadata' => {} - }] - response - end - end - end - end -end diff --git a/lib/fog/metric/openstack.rb b/lib/fog/metric/openstack.rb deleted file mode 100644 index 2abe60059..000000000 --- a/lib/fog/metric/openstack.rb +++ /dev/null @@ -1,126 +0,0 @@ -module Fog - module Metric - class OpenStack < Fog::Service - SUPPORTED_VERSIONS = /v1/ - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix - - model_path 'fog/metric/openstack/models' - - model :metric - collection :metrics - model :resource - collection :resources - - request_path 'fog/metric/openstack/requests' - - request :get_resource_metric_measures - request :get_metric_measures - request :get_metric - request :list_metrics - request :get_resource - request :list_resources - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - users: {}, - tenants: {} - } - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 8041 - management_url.path = '/v1' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].find { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_management_url: @openstack_management_url } - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::Metric::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['metric'] - @openstack_service_name = options[:openstack_service_name] - @openstack_endpoint_type = options[:openstack_endpoint_type] || 'publicURL' - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - unless @path.match(SUPPORTED_VERSIONS) - @path = Fog::OpenStack.get_supported_version_path( - SUPPORTED_VERSIONS, - @openstack_management_uri, - @auth_token, - @connection_options - ) - end - end - end - end - end -end diff --git a/lib/fog/metric/openstack/models/metric.rb b/lib/fog/metric/openstack/models/metric.rb deleted file mode 100644 index aedf0ca50..000000000 --- a/lib/fog/metric/openstack/models/metric.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Metric - class OpenStack - class Metric < Fog::OpenStack::Model - identity :id - - attribute :name - attribute :resource_id - attribute :unit - attribute :created_by_project_id - attribute :created_by_user_id - attribute :definition - end - end - end -end diff --git a/lib/fog/metric/openstack/models/metrics.rb b/lib/fog/metric/openstack/models/metrics.rb deleted file mode 100644 index 08d604161..000000000 --- a/lib/fog/metric/openstack/models/metrics.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/metric/openstack/models/metric' - -module Fog - module Metric - class OpenStack - class Metrics < Fog::OpenStack::Collection - model Fog::Metric::OpenStack::Metric - - def all(options = {}) - load_response(service.list_metrics(options)) - end - - def find_by_id(metric_id) - resource = service.get_metric(metric_id).body - new(resource) - rescue Fog::Metric::OpenStack::NotFound - nil - end - - def find_measures_by_id(metric_id, options = {}) - resource = service.get_metric_measures(metric_id, options).body - new(resource) - rescue Fog::Metric::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/metric/openstack/models/resource.rb b/lib/fog/metric/openstack/models/resource.rb deleted file mode 100644 index 772d72a96..000000000 --- a/lib/fog/metric/openstack/models/resource.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Metric - class OpenStack - class Resource < Fog::OpenStack::Model - identity :id - - attribute :original_resource_id - attribute :project_id - attribute :user_id - attribute :metrics - end - end - end -end diff --git a/lib/fog/metric/openstack/models/resources.rb b/lib/fog/metric/openstack/models/resources.rb deleted file mode 100644 index f246ad989..000000000 --- a/lib/fog/metric/openstack/models/resources.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/metric/openstack/models/resource' - -module Fog - module Metric - class OpenStack - class Resources < Fog::OpenStack::Collection - model Fog::Metric::OpenStack::Resource - - def all(options = {}) - load_response(service.list_resources(options)) - end - - def find_by_id(resource_id) - resource = service.get_resource(resource_id).body - new(resource) - rescue Fog::Metric::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/metric/openstack/requests/get_metric.rb b/lib/fog/metric/openstack/requests/get_metric.rb deleted file mode 100644 index d780a8146..000000000 --- a/lib/fog/metric/openstack/requests/get_metric.rb +++ /dev/null @@ -1,62 +0,0 @@ -module Fog - module Metric - class OpenStack - class Real - def get_metric(metric_id) - request( - expects: 200, - method: 'GET', - path: "metric/#{metric_id}" - ) - end - end - - class Mock - def get_metric(_metric_id) - response = Excon::Response.new - response.status = 200 - response.body = { - "archive_policy" => { - "aggregation_methods" => [ - "95pct", - "median", - "max", - "count", - "std", - "sum", - "min", - "mean" - ], - "back_window" => 0, - "definition" => [ - { - "granularity" => "0:00:01", - "points" => 3600, - "timespan" => "1:00:00" - }, - { - "granularity" => "0:01:00", - "points" => 10080, - "timespan" => "7 days, 0:00:00" - }, - { - "granularity" => "1:00:00", - "points" => 8760, - "timespan" => "365 days, 0:00:00" - } - ], - "name" => "high" - }, - "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", - "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", - "id" => "8bbb5f02-b654-4861-b19e-d372fcdca124", - "name" => nil, - "resource" => nil, - "unit" => nil - } - response - end - end - end - end -end diff --git a/lib/fog/metric/openstack/requests/get_resource.rb b/lib/fog/metric/openstack/requests/get_resource.rb deleted file mode 100644 index c731d7e5e..000000000 --- a/lib/fog/metric/openstack/requests/get_resource.rb +++ /dev/null @@ -1,37 +0,0 @@ -module Fog - module Metric - class OpenStack - class Real - def get_resource(resource_id) - request( - expects: 200, - method: 'GET', - path: "resource/generic/#{resource_id}" - ) - end - end - - class Mock - def get_resource(_resource_id) - response = Excon::Response.new - response.status = 200 - response.body = { - "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", - "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", - "ended_at" => nil, - "id" => "75c44741-cc60-4033-804e-2d3098c7d2e9", - "metrics" => {}, - "original_resource_id" => "75C44741-CC60-4033-804E-2D3098C7D2E9", - "project_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D", - "revision_end" => nil, - "revision_start" => "2016-11-08T11:23:45.989977+00:00", - "started_at" => "2016-11-08T11:23:45.989960+00:00", - "type" => "generic", - "user_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D" - } - response - end - end - end - end -end diff --git a/lib/fog/metric/openstack/requests/list_metrics.rb b/lib/fog/metric/openstack/requests/list_metrics.rb deleted file mode 100644 index 907e93c95..000000000 --- a/lib/fog/metric/openstack/requests/list_metrics.rb +++ /dev/null @@ -1,104 +0,0 @@ -module Fog - module Metric - class OpenStack - class Real - def list_metrics(options = {}) - request( - expects: 200, - method: 'GET', - path: 'metric', - query: options - ) - end - end - - class Mock - def list_metrics(_options = {}) - response = Excon::Response.new - response.status = 200 - response.body = [ - { - "archive_policy" => { - "aggregation_methods" => [ - "95pct", - "median", - "max", - "count", - "std", - "sum", - "min", - "mean" - ], - "back_window" => 0, - "definition" => [ - { - "granularity" => "0:00:01", - "points" => 3600, - "timespan" => "1:00:00" - }, - { - "granularity" => "0:01:00", - "points" => 10080, - "timespan" => "7 days, 0:00:00" - }, - { - "granularity" => "1:00:00", - "points" => 8760, - "timespan" => "365 days, 0:00:00" - } - ], - "name" => "high" - }, - "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", - "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", - "id" => "8bbb5f02-b654-4861-b19e-d372fcdca124", - "name" => nil, - "resource_id" => nil, - "unit" => nil - }, - { - "archive_policy" => { - "aggregation_methods" => [ - "95pct", - "median", - "max", - "count", - "std", - "sum", - "min", - "mean" - ], - "back_window" => 0, - "definition" => [ - { - "granularity" => "0:05:00", - "points" => 12, - "timespan" => "1:00:00" - }, - { - "granularity" => "1:00:00", - "points" => 24, - "timespan" => "1 day, 0:00:00" - }, - { - "granularity" => "1 day, 0:00:00", - "points" => 30, - "timespan" => "30 days, 0:00:00" - } - ], - "name" => "low" - }, - "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", - "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", - "id" => "af3446dc-e20f-4ecf-aaaa-1240c05ff19b", - "name" => nil, - "resource_id" => nil, - "unit" => nil - } - ] - response - end - end - end - end -end diff --git a/lib/fog/metric/openstack/requests/list_resources.rb b/lib/fog/metric/openstack/requests/list_resources.rb deleted file mode 100644 index b068e5f74..000000000 --- a/lib/fog/metric/openstack/requests/list_resources.rb +++ /dev/null @@ -1,70 +0,0 @@ -module Fog - module Metric - class OpenStack - class Real - def list_resources(type = "generic", options = {}) - request( - expects: 200, - method: 'GET', - path: "resource/#{Fog::OpenStack.escape(type)}", - query: options - ) - end - end - - class Mock - def list_resources(_type = "generic", _options = {}) - response = Excon::Response.new - response.status = 200 - response.body = [ - { - "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", - "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", - "ended_at" => nil, - "id" => "75c44741-cc60-4033-804e-2d3098c7d2e9", - "metrics" => {}, - "original_resource_id" => "75C44741-CC60-4033-804E-2D3098C7D2E9", - "project_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D", - "revision_end" => nil, - "revision_start" => "2016-11-08T11:23:45.989977+00:00", - "started_at" => "2016-11-08T11:23:45.989960+00:00", - "type" => "generic", - "user_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D" - }, - { - "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", - "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", - "ended_at" => nil, - "id" => "ab68da77-fa82-4e67-aba9-270c5a98cbcb", - "metrics" => { - "temperature" => "ed51c966-8890-4f4e-96c4-f0a753dbad42" - }, - "original_resource_id" => "AB68DA77-FA82-4E67-ABA9-270C5A98CBCB", - "project_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D", - "revision_end" => nil, - "revision_start" => "2016-11-08T11:23:46.177259+00:00", - "started_at" => "2016-11-08T11:23:46.177236+00:00", - "type" => "generic", - "user_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D" - }, - { - "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", - "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", - "ended_at" => "2014-01-04T10:00:12+00:00", - "id" => "6868da77-fa82-4e67-aba9-270c5ae8cbca", - "metrics" => {}, - "original_resource_id" => "6868DA77-FA82-4E67-ABA9-270C5AE8CBCA", - "project_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D", - "revision_end" => nil, - "revision_start" => "2016-11-08T11:23:46.781604+00:00", - "started_at" => "2014-01-02T23:23:34+00:00", - "type" => "instance", - "user_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D" - } - ] - response - end - end - end - end -end diff --git a/lib/fog/monitoring/openstack.rb b/lib/fog/monitoring/openstack.rb deleted file mode 100644 index 0436b4109..000000000 --- a/lib/fog/monitoring/openstack.rb +++ /dev/null @@ -1,96 +0,0 @@ - -module Fog - module Monitoring - class OpenStack < Fog::Service - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, :openstack_userid, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_auth_omit_default_port, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix, :openstack_temp_url_key, :openstack_cache_ttl - - model_path 'fog/monitoring/openstack/models' - model :metric - collection :metrics - model :measurement - collection :measurements - model :statistic - collection :statistics - model :notification_method - collection :notification_methods - model :alarm_definition - collection :alarm_definitions - model :alarm - collection :alarms - model :alarm_state - collection :alarm_states - model :alarm_count - collection :alarm_counts - model :dimension_value - - request_path 'fog/monitoring/openstack/requests' - request :create_metric - request :create_metric_array - request :list_metrics - request :list_metric_names - - request :find_measurements - - request :list_statistics - - request :create_notification_method - request :get_notification_method - request :list_notification_methods - request :put_notification_method - request :patch_notification_method - request :delete_notification_method - - request :create_alarm_definition - request :list_alarm_definitions - request :patch_alarm_definition - request :update_alarm_definition - request :get_alarm_definition - request :delete_alarm_definition - - request :list_alarms - request :get_alarm - request :patch_alarm - request :update_alarm - request :delete_alarm - request :get_alarm_counts - - request :list_alarm_state_history_for_specific_alarm - request :list_alarm_state_history_for_all_alarms - - request :list_dimension_values - - request :list_notification_method_types - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::Monitoring::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['monitoring'] - @openstack_service_name = options[:openstack_service_name] - - @connection_options = options[:connection_options] || {} - - authenticate - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - end - end - end -end diff --git a/lib/fog/monitoring/openstack/models/alarm_counts.rb b/lib/fog/monitoring/openstack/models/alarm_counts.rb deleted file mode 100644 index 9b2070c87..000000000 --- a/lib/fog/monitoring/openstack/models/alarm_counts.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/monitoring/openstack/models/alarm_count' - -module Fog - module Monitoring - class OpenStack - class AlarmCounts < Fog::OpenStack::Collection - model Fog::Monitoring::OpenStack::AlarmCount - - def get(options = {}) - load_response(service.get_alarm_counts(options)) - end - end - end - end -end diff --git a/lib/fog/monitoring/openstack/models/dimension_values.rb b/lib/fog/monitoring/openstack/models/dimension_values.rb deleted file mode 100644 index 05fd95d8a..000000000 --- a/lib/fog/monitoring/openstack/models/dimension_values.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/monitoring/openstack/models/dimension_value' - -module Fog - module Monitoring - class OpenStack - class DimensionValues < Fog::OpenStack::Collection - model Fog::Monitoring::OpenStack::DimensionValue - - def all(dimension_name, options = {}) - load_response(service.list_dimension_values(dimension_name, options), 'elements') - end - end - end - end -end diff --git a/lib/fog/monitoring/openstack/models/measurements.rb b/lib/fog/monitoring/openstack/models/measurements.rb deleted file mode 100644 index cc36c8f7e..000000000 --- a/lib/fog/monitoring/openstack/models/measurements.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/monitoring/openstack/models/measurement' - -module Fog - module Monitoring - class OpenStack - class Measurements < Fog::OpenStack::Collection - model Fog::Monitoring::OpenStack::Measurement - - def find(options = {}) - load_response(service.find_measurements(options), 'elements') - end - end - end - end -end diff --git a/lib/fog/monitoring/openstack/models/metric.rb b/lib/fog/monitoring/openstack/models/metric.rb deleted file mode 100644 index 9b8482272..000000000 --- a/lib/fog/monitoring/openstack/models/metric.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Monitoring - class OpenStack - class Metric < Fog::OpenStack::Model - identity :id - - attribute :name - attribute :dimensions - attribute :timestamp - attribute :value - attribute :value_meta - - def to_s - name - end - - def create - requires :name, :timestamp, :value - service.create_metric(attributes).body['metric'] - self - end - end - end - end -end diff --git a/lib/fog/monitoring/openstack/models/metrics.rb b/lib/fog/monitoring/openstack/models/metrics.rb deleted file mode 100644 index 1b10f384f..000000000 --- a/lib/fog/monitoring/openstack/models/metrics.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/monitoring/openstack/models/metric' -require 'fog/monitoring/openstack/models/dimension_values' - -module Fog - module Monitoring - class OpenStack - class Metrics < Fog::OpenStack::Collection - model Fog::Monitoring::OpenStack::Metric - - def all(options = {}) - load_response(service.list_metrics(options), 'elements') - end - - def list_metric_names(options = {}) - load_response(service.list_metric_names(options), 'elements') - end - - def create(attributes) - super(attributes) - end - - def create_metric_array(metrics_list = []) - service.create_metric_array(metrics_list) - end - - def list_dimension_values(dimension_name, options = {}) - dimension_value = Fog::Monitoring::OpenStack::DimensionValues.new - dimension_value.load_response( - service.list_dimension_values(dimension_name, options), 'elements' - ) - end - end - end - end -end diff --git a/lib/fog/monitoring/openstack/models/statistics.rb b/lib/fog/monitoring/openstack/models/statistics.rb deleted file mode 100644 index 2098a2e4e..000000000 --- a/lib/fog/monitoring/openstack/models/statistics.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/monitoring/openstack/models/statistic' - -module Fog - module Monitoring - class OpenStack - class Statistics < Fog::OpenStack::Collection - model Fog::Monitoring::OpenStack::Statistic - - def all(options = {}) - load_response(service.list_statistics(options), 'elements') - end - end - end - end -end diff --git a/lib/fog/monitoring/openstack/requests/list_metrics.rb b/lib/fog/monitoring/openstack/requests/list_metrics.rb deleted file mode 100644 index babeeb082..000000000 --- a/lib/fog/monitoring/openstack/requests/list_metrics.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Fog - module Monitoring - class OpenStack - class Real - def list_metrics(options = {}) - request( - expects: [200], - method: 'GET', - path: "metrics", - query: options - ) - end - end - - class Mock - # def list_metrics(options = {}) - # - # end - end - end - end -end diff --git a/lib/fog/network/openstack.rb b/lib/fog/network/openstack.rb deleted file mode 100644 index aac9c752f..000000000 --- a/lib/fog/network/openstack.rb +++ /dev/null @@ -1,479 +0,0 @@ - - -module Fog - module Network - class OpenStack < Fog::Service - SUPPORTED_VERSIONS = /v2(\.0)*/ - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix - - ## MODELS - # - model_path 'fog/network/openstack/models' - model :extension - collection :extensions - model :network - collection :networks - model :port - collection :ports - model :subnet - collection :subnets - model :subnet_pool - collection :subnet_pools - model :floating_ip - collection :floating_ips - model :router - collection :routers - model :lb_pool - collection :lb_pools - model :lb_member - collection :lb_members - model :lb_health_monitor - collection :lb_health_monitors - model :lb_vip - collection :lb_vips - model :vpn_service - collection :vpn_services - model :ike_policy - collection :ike_policies - model :ipsec_policy - collection :ipsec_policies - model :ipsec_site_connection - collection :ipsec_site_connections - model :rbac_policy - collection :rbac_policies - model :security_group - collection :security_groups - model :security_group_rule - collection :security_group_rules - model :network_ip_availability - collection :network_ip_availabilities - - ## REQUESTS - # - request_path 'fog/network/openstack/requests' - - # Neutron Extensions - request :list_extensions - request :get_extension - - # IP Availability - request :get_network_ip_availability - request :list_network_ip_availabilities - - # Network CRUD - request :list_networks - request :create_network - request :delete_network - request :get_network - request :update_network - - # Port CRUD - request :list_ports - request :create_port - request :delete_port - request :get_port - request :update_port - - # Subnet CRUD - request :list_subnets - request :create_subnet - request :delete_subnet - request :get_subnet - request :update_subnet - - # Subnet Pools CRUD - request :list_subnet_pools - request :create_subnet_pool - request :delete_subnet_pool - request :get_subnet_pool - request :update_subnet_pool - - # FloatingIp CRUD - request :list_floating_ips - request :create_floating_ip - request :delete_floating_ip - request :get_floating_ip - request :associate_floating_ip - request :disassociate_floating_ip - - # Router CRUD - request :list_routers - request :create_router - request :delete_router - request :get_router - request :update_router - request :add_router_interface - request :remove_router_interface - - # - # LBaaS V1 - # - - # LBaaS Pool CRUD - request :list_lb_pools - request :create_lb_pool - request :delete_lb_pool - request :get_lb_pool - request :get_lb_pool_stats - request :update_lb_pool - - # LBaaS Member CRUD - request :list_lb_members - request :create_lb_member - request :delete_lb_member - request :get_lb_member - request :update_lb_member - - # LBaaS Health Monitor CRUD - request :list_lb_health_monitors - request :create_lb_health_monitor - request :delete_lb_health_monitor - request :get_lb_health_monitor - request :update_lb_health_monitor - request :associate_lb_health_monitor - request :disassociate_lb_health_monitor - - # LBaaS VIP CRUD - request :list_lb_vips - request :create_lb_vip - request :delete_lb_vip - request :get_lb_vip - request :update_lb_vip - - # - # LBaaS V2 - # - - # LBaaS V2 Loadbanacer - request :list_lbaas_loadbalancers - request :create_lbaas_loadbalancer - request :delete_lbaas_loadbalancer - request :get_lbaas_loadbalancer - request :update_lbaas_loadbalancer - - # LBaaS V2 Listener - request :list_lbaas_listeners - request :create_lbaas_listener - request :delete_lbaas_listener - request :get_lbaas_listener - request :update_lbaas_listener - - # LBaaS V2 Pool - request :list_lbaas_pools - request :create_lbaas_pool - request :delete_lbaas_pool - request :get_lbaas_pool - request :update_lbaas_pool - - # LBaaS V2 Pool_Member - request :list_lbaas_pool_members - request :create_lbaas_pool_member - request :delete_lbaas_pool_member - request :get_lbaas_pool_member - request :update_lbaas_pool_member - - # LBaaS V2 Healthmonitor - request :list_lbaas_healthmonitors - request :create_lbaas_healthmonitor - request :delete_lbaas_healthmonitor - request :get_lbaas_healthmonitor - request :update_lbaas_healthmonitor - - # LBaaS V2 L7Policy - request :list_lbaas_l7policies - request :create_lbaas_l7policy - request :delete_lbaas_l7policy - request :get_lbaas_l7policy - request :update_lbaas_l7policy - - # LBaaS V2 L7Rule - request :list_lbaas_l7rules - request :create_lbaas_l7rule - request :delete_lbaas_l7rule - request :get_lbaas_l7rule - request :update_lbaas_l7rule - - # VPNaaS VPN Service CRUD - request :list_vpn_services - request :create_vpn_service - request :delete_vpn_service - request :get_vpn_service - request :update_vpn_service - - # VPNaaS VPN IKE Policy CRUD - request :list_ike_policies - request :create_ike_policy - request :delete_ike_policy - request :get_ike_policy - request :update_ike_policy - - # VPNaaS VPN IPSec Policy CRUD - request :list_ipsec_policies - request :create_ipsec_policy - request :delete_ipsec_policy - request :get_ipsec_policy - request :update_ipsec_policy - - # VPNaaS VPN IPSec Site Connection CRUD - request :list_ipsec_site_connections - request :create_ipsec_site_connection - request :delete_ipsec_site_connection - request :get_ipsec_site_connection - request :update_ipsec_site_connection - - # RBAC Policy CRUD - request :list_rbac_policies - request :create_rbac_policy - request :delete_rbac_policy - request :get_rbac_policy - request :update_rbac_policy - - # Security Group - request :create_security_group - request :delete_security_group - request :get_security_group - request :list_security_groups - request :update_security_group - - # Security Group Rules - request :create_security_group_rule - request :delete_security_group_rule - request :get_security_group_rule - request :list_security_group_rules - - # Tenant - request :set_tenant - - # Quota - request :get_quotas - request :get_quota - request :update_quota - request :delete_quota - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - qos_policy_id = Fog::UUID.uuid - network_id = Fog::UUID.uuid - extension_id = Fog::UUID.uuid - subnet_id = Fog::UUID.uuid - tenant_id = Fog::Mock.random_hex(8) - - hash[key] = { - extensions: { - extension_id => { - 'id' => extension_id, - 'alias' => 'dvr', - 'description' => 'Enables configuration of Distributed Virtual Routers.', - 'links' => [], - 'name' => 'Distributed Virtual Router' - } - }, - networks: { - network_id => { - 'id' => network_id, - 'name' => 'Public', - 'subnets' => [subnet_id], - 'shared' => true, - 'status' => 'ACTIVE', - 'tenant_id' => tenant_id, - 'provider:network:type' => 'vlan', - 'router:external' => false, - 'admin_state_up' => true, - 'qos_policy_id' => qos_policy_id, - 'port_security_enabled' => true - }, - 'e624a36d-762b-481f-9b50-4154ceb78bbb' => { - 'id' => 'e624a36d-762b-481f-9b50-4154ceb78bbb', - 'name' => 'network_1', - 'subnets' => ['2e4ec6a4-0150-47f5-8523-e899ac03026e'], - 'shared' => false, - 'status' => 'ACTIVE', - 'tenant_id' => 'f8b26a6032bc47718a7702233ac708b9', - 'provider:network:type' => 'vlan', - 'router:external' => false, - 'admin_state_up' => true, - 'qos_policy_id' => qos_policy_id, - 'port_security_enabled' => true - } - }, - ports: {}, - subnets: { - subnet_id => { - 'id' => subnet_id, - 'name' => "Public", - 'network_id' => network_id, - 'cidr' => "192.168.0.0/22", - 'ip_version' => 4, - 'gateway_ip' => Fog::Mock.random_ip, - 'allocation_pools' => [], - 'dns_nameservers' => [Fog::Mock.random_ip, Fog::Mock.random_ip], - 'host_routes' => [Fog::Mock.random_ip], - 'enable_dhcp' => true, - 'tenant_id' => tenant_id - } - }, - subnet_pools: {}, - floating_ips: {}, - routers: {}, - lb_pools: {}, - lb_members: {}, - lb_health_monitors: {}, - lb_vips: {}, - lbaas_loadbalancers: {}, - lbaas_listeners: {}, - lbaas_pools: {}, - lbaas_pool_members: {}, - lbaas_health_monitorss: {}, - lbaas_l7policies: {}, - lbaas_l7rules: {}, - vpn_services: {}, - ike_policies: {}, - ipsec_policies: {}, - ipsec_site_connections: {}, - rbac_policies: {}, - quota: { - "subnet" => 10, - "router" => 10, - "port" => 50, - "network" => 10, - "floatingip" => 50 - }, - quotas: [ - { - "subnet" => 10, - "network" => 10, - "floatingip" => 50, - "tenant_id" => tenant_id, - "router" => 10, - "port" => 30 - } - ], - security_groups: {}, - security_group_rules: {}, - network_ip_availabilities: [ - { - "network_id" => "4cf895c9-c3d1-489e-b02e-59b5c8976809", - "network_name" => "public", - "subnet_ip_availability" => [ - { - "cidr" => "2001:db8::/64", - "ip_version" => 6, - "subnet_id" => "ca3f46c4-c6ff-4272-9be4-0466f84c6077", - "subnet_name" => "ipv6-public-subnet", - "total_ips" => 18446744073709552000, - "used_ips" => 1 - }, - { - "cidr" => "172.24.4.0/24", - "ip_version" => 4, - "subnet_id" => "cc02efc1-9d47-46bd-bab6-760919c836b5", - "subnet_name" => "public-subnet", - "total_ips" => 253, - "used_ips" => 1 - } - ], - "project_id" => "1a02cc95f1734fcc9d3c753818f03002", - "tenant_id" => "1a02cc95f1734fcc9d3c753818f03002", - "total_ips" => 253, - "used_ips" => 2 - }, - { - "network_id" => "6801d9c8-20e6-4b27-945d-62499f00002e", - "network_name" => "private", - "subnet_ip_availability" => [ - { - "cidr" => "10.0.0.0/24", - "ip_version" => 4, - "subnet_id" => "44e70d00-80a2-4fb1-ab59-6190595ceb61", - "subnet_name" => "private-subnet", - "total_ips" => 253, - "used_ips" => 2 - }, - { - "ip_version" => 6, - "cidr" => "fdbf:ac66:9be8::/64", - "subnet_id" => "a90623df-00e1-4902-a675-40674385d74c", - "subnet_name" => "ipv6-private-subnet", - "total_ips" => 18446744073709552000, - "used_ips" => 2 - } - ], - "project_id" => "d56d3b8dd6894a508cf41b96b522328c", - "tenant_id" => "d56d3b8dd6894a508cf41b96b522328c", - "total_ips" => 18446744073709552000, - "used_ips" => 4 - } - ] - } - end - end - - def self.reset - @data = nil - end - - include Fog::OpenStack::Core - - def initialize(options = {}) - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - initialize_identity options - end - - def data - self.class.data["#{@openstack_username}-#{@openstack_tenant}"] - end - - def reset_data - self.class.data.delete("#{@openstack_username}-#{@openstack_tenant}") - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::Network::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['network'] - @openstack_service_name = options[:openstack_service_name] - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - @path.sub!(%r{/$}, '') - unless @path.match(SUPPORTED_VERSIONS) - @path = Fog::OpenStack.get_supported_version_path(SUPPORTED_VERSIONS, - @openstack_management_uri, - @auth_token, - @connection_options) - end - end - end - end - end -end diff --git a/lib/fog/network/openstack/models/network.rb b/lib/fog/network/openstack/models/network.rb deleted file mode 100644 index 68a902299..000000000 --- a/lib/fog/network/openstack/models/network.rb +++ /dev/null @@ -1,43 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Network - class OpenStack - class Network < Fog::OpenStack::Model - identity :id - - attribute :name - attribute :subnets - attribute :shared - attribute :status - attribute :admin_state_up - attribute :tenant_id - attribute :provider_network_type, aliases: 'provider:network_type' - attribute :provider_physical_network, aliases: 'provider:physical_network' - attribute :provider_segmentation_id, aliases: 'provider:segmentation_id' - attribute :router_external, aliases: 'router:external' - - def subnets - service.subnets.select { |s| s.network_id == id } - end - - def create - merge_attributes(service.create_network(attributes).body['network']) - self - end - - def update - requires :id - merge_attributes(service.update_network(id, attributes).body['network']) - self - end - - def destroy - requires :id - service.delete_network(id) - true - end - end - end - end -end diff --git a/lib/fog/network/openstack/models/network_ip_availabilities.rb b/lib/fog/network/openstack/models/network_ip_availabilities.rb deleted file mode 100644 index b9dc84abe..000000000 --- a/lib/fog/network/openstack/models/network_ip_availabilities.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/network_ip_availability' - -module Fog - module Network - class OpenStack - class NetworkIpAvailabilities < Fog::OpenStack::Collection - model Fog::Network::OpenStack::NetworkIpAvailability - - def all - load_response(service.list_network_ip_availabilities, 'network_ip_availabilities') - end - - def get(network_id) - if network_ip_availability = service.get_network_ip_availability(network_id).body['network_ip_availability'] - new(network_ip_availability) - end - rescue Fog::Network::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/network/openstack/models/networks.rb b/lib/fog/network/openstack/models/networks.rb deleted file mode 100644 index 2a6e061e5..000000000 --- a/lib/fog/network/openstack/models/networks.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/network' - -module Fog - module Network - class OpenStack - class Networks < Fog::OpenStack::Collection - attribute :filters - - model Fog::Network::OpenStack::Network - - def initialize(attributes) - self.filters ||= {} - super - end - - def all(filters_arg = filters) - filters = filters_arg - load_response(service.list_networks(filters), 'networks') - end - - def get(network_id) - if network = service.get_network(network_id).body['network'] - new(network) - end - rescue Fog::Network::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/network/openstack/models/port.rb b/lib/fog/network/openstack/models/port.rb deleted file mode 100644 index 1d3bbb88f..000000000 --- a/lib/fog/network/openstack/models/port.rb +++ /dev/null @@ -1,42 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Network - class OpenStack - class Port < Fog::OpenStack::Model - identity :id - - attribute :name - attribute :network_id - attribute :fixed_ips - attribute :mac_address - attribute :status - attribute :admin_state_up - attribute :device_owner - attribute :device_id - attribute :tenant_id - attribute :security_groups - - def create - requires :network_id - merge_attributes(service.create_port(network_id, - attributes).body['port']) - self - end - - def update - requires :id, :network_id - merge_attributes(service.update_port(id, - attributes).body['port']) - self - end - - def destroy - requires :id - service.delete_port(id) - true - end - end - end - end -end diff --git a/lib/fog/network/openstack/models/ports.rb b/lib/fog/network/openstack/models/ports.rb deleted file mode 100644 index b92c00310..000000000 --- a/lib/fog/network/openstack/models/ports.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/port' - -module Fog - module Network - class OpenStack - class Ports < Fog::OpenStack::Collection - attribute :filters - - model Fog::Network::OpenStack::Port - - def initialize(attributes) - self.filters ||= {} - super - end - - def all(filters_arg = filters) - filters = filters_arg - load_response(service.list_ports(filters), 'ports') - end - - def get(port_id) - if port = service.get_port(port_id).body['port'] - new(port) - end - rescue Fog::Network::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/network/openstack/models/security_group.rb b/lib/fog/network/openstack/models/security_group.rb deleted file mode 100644 index db8f38f80..000000000 --- a/lib/fog/network/openstack/models/security_group.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Network - class OpenStack - class SecurityGroup < Fog::OpenStack::Model - identity :id - - attribute :name - attribute :description - attribute :security_group_rules - attribute :tenant_id - - def destroy - requires :id - service.delete_security_group(id) - true - end - - def security_group_rules - Fog::Network::OpenStack::SecurityGroupRules.new(service: service).load(attributes[:security_group_rules]) - end - - def save - merge_attributes(service.create_security_group(attributes).body['security_group']) - self - end - - def update - requires :id - merge_attributes(service.update_security_group(id, attributes).body['security_group']) - self - end - end - end - end -end diff --git a/lib/fog/network/openstack/models/security_group_rule.rb b/lib/fog/network/openstack/models/security_group_rule.rb deleted file mode 100644 index 15ecff135..000000000 --- a/lib/fog/network/openstack/models/security_group_rule.rb +++ /dev/null @@ -1,33 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Network - class OpenStack - class SecurityGroupRule < Fog::OpenStack::Model - identity :id - - attribute :security_group_id - attribute :direction - attribute :protocol - attribute :port_range_min - attribute :port_range_max - attribute :remote_ip_prefix - attribute :ethertype - attribute :remote_group_id - attribute :tenant_id - - def destroy - requires :id - service.delete_security_group_rule(id) - true - end - - def save - raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? - merge_attributes(service.create_security_group_rule(security_group_id, direction, attributes).body['security_group_rule']) - true - end - end - end - end -end diff --git a/lib/fog/network/openstack/models/security_group_rules.rb b/lib/fog/network/openstack/models/security_group_rules.rb deleted file mode 100644 index de8486a4e..000000000 --- a/lib/fog/network/openstack/models/security_group_rules.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/security_group_rule' - -module Fog - module Network - class OpenStack - class SecurityGroupRules < Fog::OpenStack::Collection - attribute :filters - - model Fog::Network::OpenStack::SecurityGroupRule - - def initialize(attributes) - self.filters ||= {} - super - end - - def all(filters_arg = filters) - filters = filters_arg - load_response(service.list_security_group_rules(filters), 'security_group_rules') - end - - def get(sec_group_rule_id) - if sec_group_rule = service.get_security_group_rule(sec_group_rule_id).body['security_group_rule'] - new(sec_group_rule) - end - rescue Fog::Network::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/network/openstack/models/security_groups.rb b/lib/fog/network/openstack/models/security_groups.rb deleted file mode 100644 index cd79a446a..000000000 --- a/lib/fog/network/openstack/models/security_groups.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/security_group' - -module Fog - module Network - class OpenStack - class SecurityGroups < Fog::OpenStack::Collection - attribute :filters - - model Fog::Network::OpenStack::SecurityGroup - - def initialize(attributes) - self.filters ||= {} - super - end - - def all(filters_arg = filters) - filters = filters_arg - load_response(service.list_security_groups(filters), 'security_groups') - end - - def get(security_group_id) - if security_group = service.get_security_group(security_group_id).body['security_group'] - new(security_group) - end - rescue Fog::Network::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/add_router_interface.rb b/lib/fog/network/openstack/requests/add_router_interface.rb deleted file mode 100644 index bc0cf89be..000000000 --- a/lib/fog/network/openstack/requests/add_router_interface.rb +++ /dev/null @@ -1,52 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def add_router_interface(router_id, subnet_id_or_options) - if subnet_id_or_options.kind_of? String - data = { - 'subnet_id' => subnet_id_or_options - } - elsif subnet_id_or_options.kind_of? Hash - data = subnet_id_or_options - else - raise ArgumentError, 'Please pass a subnet id or hash {subnet_id:xxx,port_id:xxx}' - end - - request( - body: Fog::JSON.encode(data), - expects: [200], - method: 'PUT', - path: "routers/#{router_id}/add_router_interface" - ) - end - end - - class Mock - def add_router_interface(_router_id, _subnet_id, _options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'status' => 'ACTIVE', - 'name' => '', - 'admin_state_up' => true, - 'network_id' => '5307648b-e836-4658-8f1a-ff7536870c64', - 'tenant_id' => '6b96ff0cb17a4b859e1e575d221683d3', - 'device_owner' => 'network:router_interface', - 'mac_address' => 'fa:16:3e:f7:d1:9c', - 'fixed_ips' => { - 'subnet_id' => 'a2f1f29d-571b-4533-907f-5803ab96ead1', - 'ip_address' => '10.1.1.1' - }, - 'id' => '3a44f4e5-1694-493a-a1fb-393881c673a4', - 'device_id' => '7177abc4-5ae9-4bb7-b0d4-89e94a4abf3b' - } - - self.data[:routers][data['router_id']] = data - response.body = { 'router' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_ike_policy.rb b/lib/fog/network/openstack/requests/create_ike_policy.rb deleted file mode 100644 index 728c87adb..000000000 --- a/lib/fog/network/openstack/requests/create_ike_policy.rb +++ /dev/null @@ -1,52 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_ike_policy(options = {}) - data = { - 'ikepolicy' => { - } - } - - vanilla_options = [:name, :description, :tenant_id, - :auth_algorithm, :encryption_algorithm, - :pfs, :phase1_negotiation_mode, - :lifetime, :ike_version] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['ikepolicy'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'vpn/ikepolicies' - ) - end - end - - class Mock - def create_ike_policy(options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'name' => options[:name], - 'description' => options[:description], - 'tenant_id' => options[:tenant_id], - 'auth_algorithm' => options[:auth_algorithm], - 'encryption_algorithm' => options[:encryption_algorithm], - 'pfs' => options[:pfs], - 'phase1_negotiation_mode' => options[:phase1_negotiation_mode], - 'lifetime' => options[:lifetime], - 'ike_version' => options[:ike_version] - } - - self.data[:ike_policies][data['id']] = data - response.body = { 'ikepolicy' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_ipsec_policy.rb b/lib/fog/network/openstack/requests/create_ipsec_policy.rb deleted file mode 100644 index 50a7244b4..000000000 --- a/lib/fog/network/openstack/requests/create_ipsec_policy.rb +++ /dev/null @@ -1,52 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_ipsec_policy(options = {}) - data = { - 'ipsecpolicy' => { - } - } - - vanilla_options = [:name, :description, :tenant_id, - :auth_algorithm, :encryption_algorithm, - :pfs, :transform_protocol, - :lifetime, :encapsulation_mode] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['ipsecpolicy'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'vpn/ipsecpolicies' - ) - end - end - - class Mock - def create_ipsec_policy(options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'name' => options[:name], - 'description' => options[:description], - 'tenant_id' => options[:tenant_id], - 'auth_algorithm' => options[:auth_algorithm], - 'encryption_algorithm' => options[:encryption_algorithm], - 'pfs' => options[:pfs], - 'transform_protocol' => options[:transform_protocol], - 'lifetime' => options[:lifetime], - 'encapsulation_mode' => options[:encapsulation_mode] - } - - self.data[:ipsec_policies][data['id']] = data - response.body = { 'ipsecpolicy' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_ipsec_site_connection.rb b/lib/fog/network/openstack/requests/create_ipsec_site_connection.rb deleted file mode 100644 index 2f46d9730..000000000 --- a/lib/fog/network/openstack/requests/create_ipsec_site_connection.rb +++ /dev/null @@ -1,65 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_ipsec_site_connection(vpn_service_id, ike_policy_id, ipsec_policy_id, options = {}) - data = { - 'ipsec_site_connection' => { - 'vpnservice_id' => vpn_service_id, - 'ikepolicy_id' => ike_policy_id, - 'ipsecpolicy_id' => ipsec_policy_id - } - } - - vanilla_options = [:name, :description, :tenant_id, - :peer_address, :peer_id, :peer_cidrs, - :psk, :mtu, :dpd, :initiator, - :admin_state_up] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['ipsec_site_connection'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'vpn/ipsec-site-connections' - ) - end - end - - class Mock - def create_ipsec_site_connection(vpn_service_id, ike_policy_id, ipsec_policy_id, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'name' => options[:name], - 'description' => options[:description], - 'status' => 'ACTIVE', - 'tenant_id' => options[:tenant_id], - 'admin_state_up' => options[:admin_state_up], - 'psk' => options[:psk], - 'initiator' => options[:initiator], - 'auth_mode' => "psk", - 'peer_cidrs' => options[:peer_cidrs], - 'mtu' => options[:mtu], - 'peer_ep_group_id' => Fog::Mock.random_numbers(6).to_s, - 'ikepolicy_id' => ike_policy_id, - 'vpnservice_id' => vpn_service_id, - 'dpd' => options[:dpd], - 'route_mode' => "static", - 'ipsecpolicy_id' => ipsec_policy_id, - 'local_ep_group_id' => Fog::Mock.random_numbers(6).to_s, - 'peer_address' => options[:peer_address], - 'peer_id' => options[:peer_id] - } - - self.data[:ipsec_site_connections][data['id']] = data - response.body = { 'ipsec_site_connection' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_lb_health_monitor.rb b/lib/fog/network/openstack/requests/create_lb_health_monitor.rb deleted file mode 100644 index a60f5d117..000000000 --- a/lib/fog/network/openstack/requests/create_lb_health_monitor.rb +++ /dev/null @@ -1,54 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_lb_health_monitor(type, delay, timeout, max_retries, options = {}) - data = { - 'health_monitor' => { - 'type' => type, - 'delay' => delay, - 'timeout' => timeout, - 'max_retries' => max_retries - } - } - - vanilla_options = [:http_method, :url_path, :expected_codes, :admin_state_up, :tenant_id] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['health_monitor'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'lb/health_monitors' - ) - end - end - - class Mock - def create_lb_health_monitor(type, delay, timeout, max_retries, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'type' => type, - 'delay' => delay, - 'timeout' => timeout, - 'max_retries' => max_retries, - 'http_method' => options[:http_method], - 'url_path' => options[:url_path], - 'expected_codes' => options[:expected_codes], - 'status' => 'ACTIVE', - 'admin_state_up' => options[:admin_state_up], - 'tenant_id' => options[:tenant_id] - } - - self.data[:lb_health_monitors][data['id']] = data - response.body = { 'health_monitor' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_lb_member.rb b/lib/fog/network/openstack/requests/create_lb_member.rb deleted file mode 100644 index 867c73efc..000000000 --- a/lib/fog/network/openstack/requests/create_lb_member.rb +++ /dev/null @@ -1,51 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_lb_member(pool_id, address, protocol_port, weight, options = {}) - data = { - 'member' => { - 'pool_id' => pool_id, - 'address' => address, - 'protocol_port' => protocol_port, - 'weight' => weight - } - } - - vanilla_options = [:admin_state_up, :tenant_id] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['member'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'lb/members' - ) - end - end - - class Mock - def create_lb_member(pool_id, address, protocol_port, weight, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'pool_id' => pool_id, - 'address' => address, - 'protocol_port' => protocol_port, - 'weight' => weight, - 'status' => 'ACTIVE', - 'admin_state_up' => options[:admin_state_up], - 'tenant_id' => options[:tenant_id] - } - - self.data[:lb_members][data['id']] = data - response.body = { 'member' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_lb_pool.rb b/lib/fog/network/openstack/requests/create_lb_pool.rb deleted file mode 100644 index 009d7adb0..000000000 --- a/lib/fog/network/openstack/requests/create_lb_pool.rb +++ /dev/null @@ -1,58 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_lb_pool(subnet_id, protocol, lb_method, options = {}) - data = { - 'pool' => { - 'subnet_id' => subnet_id, - 'protocol' => protocol, - 'lb_method' => lb_method - } - } - - vanilla_options = [:name, :description, :admin_state_up, :tenant_id] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['pool'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'lb/pools' - ) - end - end - - class Mock - def create_lb_pool(subnet_id, protocol, lb_method, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'subnet_id' => subnet_id, - 'protocol' => protocol, - 'lb_method' => lb_method, - 'name' => options[:name], - 'description' => options[:description], - 'health_monitors' => [], - 'members' => [], - 'status' => 'ACTIVE', - 'admin_state_up' => options[:admin_state_up], - 'vip_id' => nil, - 'tenant_id' => options[:tenant_id], - 'active_connections' => nil, - 'bytes_in' => nil, - 'bytes_out' => nil, - 'total_connections' => nil - } - - self.data[:lb_pools][data['id']] = data - response.body = { 'pool' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_lb_vip.rb b/lib/fog/network/openstack/requests/create_lb_vip.rb deleted file mode 100644 index cf0c1cfa6..000000000 --- a/lib/fog/network/openstack/requests/create_lb_vip.rb +++ /dev/null @@ -1,58 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_lb_vip(subnet_id, pool_id, protocol, protocol_port, options = {}) - data = { - 'vip' => { - 'subnet_id' => subnet_id, - 'pool_id' => pool_id, - 'protocol' => protocol, - 'protocol_port' => protocol_port - } - } - - vanilla_options = [:name, :description, :address, :session_persistence, :connection_limit, - :admin_state_up, :tenant_id] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['vip'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'lb/vips' - ) - end - end - - class Mock - def create_lb_vip(subnet_id, pool_id, protocol, protocol_port, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'subnet_id' => subnet_id, - 'pool_id' => pool_id, - 'protocol' => protocol, - 'protocol_port' => protocol_port, - 'name' => options[:name], - 'description' => options[:description], - 'address' => options[:address], - 'port_id' => Fog::Mock.random_numbers(6).to_s, - 'session_persistence' => options[:session_persistence], - 'connection_limit' => options[:connection_limit], - 'status' => 'ACTIVE', - 'admin_state_up' => options[:admin_state_up], - 'tenant_id' => options[:tenant_id] - } - - self.data[:lb_vips][data['id']] = data - response.body = { 'vip' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_lbaas_healthmonitor.rb b/lib/fog/network/openstack/requests/create_lbaas_healthmonitor.rb deleted file mode 100644 index 9a69e5f8c..000000000 --- a/lib/fog/network/openstack/requests/create_lbaas_healthmonitor.rb +++ /dev/null @@ -1,57 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_lbaas_healthmonitor(pool_id, type, delay, timeout, max_retries, options = {}) - data = { - 'healthmonitor' => { - 'pool_id' => pool_id, - 'type' => type, - 'delay' => delay, - 'timeout' => timeout, - 'max_retries' => max_retries - } - } - - vanilla_options = [:http_method, :url_path, :expected_codes, :admin_state_up, :tenant_id] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['healthmonitor'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'lbaas/healthmonitors' - ) - end - end - - class Mock - def create_lbaas_healthmonitor(type, delay, timeout, max_retries, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'type' => type, - 'delay' => delay, - 'timeout' => timeout, - 'max_retries' => max_retries, - 'http_method' => options[:http_method], - 'url_path' => options[:url_path], - 'expected_codes' => options[:expected_codes], - 'status' => 'ACTIVE', - 'admin_state_up' => options[:admin_state_up], - 'tenant_id' => options[:tenant_id], - 'name' => options[:name], - 'pools' => [{ 'id' => Fog::Mock.random_numbers(6).to_s }] - } - - self.data[:lbaas_healthmonitors][data['id']] = data - response.body = { 'healthmonitor' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_lbaas_l7policy.rb b/lib/fog/network/openstack/requests/create_lbaas_l7policy.rb deleted file mode 100644 index 2af76adde..000000000 --- a/lib/fog/network/openstack/requests/create_lbaas_l7policy.rb +++ /dev/null @@ -1,50 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_lbaas_l7policy(listener_id, action, options = {}) - data = { - 'l7policy' => { - 'listener_id' => listener_id, - 'action' => action - } - } - - vanilla_options = [:tenant_id, :name, :description, :redirect_pool_id, :redirect_url, :position] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['l7policy'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'lbaas/l7policies' - ) - end - end - - class Mock - def create_lbaas_l7policy(listener_id, action, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'listener_id' => listener_id, - 'action' => action, - 'position' => options[:position], - 'tenant_id' => options[:tenant_id], - 'name' => options[:name], - 'description' => options[:description], - 'redirect_pool_id' => options[:redirect_pool_id], - 'redirect_url' => options[:redirect_url] - } - - self.data[:lbaas_l7policies][data['id']] = data - response.body = { 'l7policy' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_lbaas_l7rule.rb b/lib/fog/network/openstack/requests/create_lbaas_l7rule.rb deleted file mode 100644 index baa27d9ed..000000000 --- a/lib/fog/network/openstack/requests/create_lbaas_l7rule.rb +++ /dev/null @@ -1,50 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_lbaas_l7rule(l7policy_id, type, compare_type, value, options = {}) - data = { - 'rule' => { - 'type' => type, - 'compare_type' => compare_type, - 'value' => value - } - } - - vanilla_options = [:tenant_id, :key, :invert] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['rule'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: "lbaas/l7policies/#{l7policy_id}/rules" - ) - end - end - - class Mock - def create_lbaas_l7rule(l7policy_id, type, compare_type, value, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'type' => type, - 'compare_type' => compare_type, - 'value' => value, - 'tenant_id' => options[:tenant_id], - 'key' => options[:key], - 'invert' => options[:invert], - 'l7policy_id' => l7policy_id - } - - self.data[:lbaas_l7rules][data['id']] = data - response.body = { 'rule' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_lbaas_listener.rb b/lib/fog/network/openstack/requests/create_lbaas_listener.rb deleted file mode 100644 index e9b675710..000000000 --- a/lib/fog/network/openstack/requests/create_lbaas_listener.rb +++ /dev/null @@ -1,55 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_lbaas_listener(loadbalancer_id, protocol, protocol_port, options = {}) - data = { - 'listener' => { - 'loadbalancer_id' => loadbalancer_id, - 'protocol' => protocol, - 'protocol_port' => protocol_port - } - } - - vanilla_options = [:name, :description, :default_pool_id, :connection_limit, :default_tls_container_ref, :sni_container_refs, - :admin_state_up, :tenant_id] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['listener'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'lbaas/listeners' - ) - end - end - - class Mock - def create_lbaas_listener(loadbalancer_id, protocol, protocol_port, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'loadbalancers' => [{ 'id' => loadbalancer_id }], - 'protocol' => protocol, - 'protocol_port' => protocol_port, - 'name' => options[:name], - 'description' => options[:description], - 'default_pool_id' => options[:default_pool_id], - 'connection_limit' => options[:connection_limit], - 'default_tls_container_ref' => options[:default_tls_container_ref], - 'sni_container_refs' => options[:sni_container_refs], - 'admin_state_up' => options[:admin_state_up], - 'tenant_id' => options[:tenant_id] - } - - self.data[:lbaas_listener][data['id']] = data - response.body = { 'listener' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_lbaas_pool.rb b/lib/fog/network/openstack/requests/create_lbaas_pool.rb deleted file mode 100644 index f019b4b7c..000000000 --- a/lib/fog/network/openstack/requests/create_lbaas_pool.rb +++ /dev/null @@ -1,53 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_lbaas_pool(listener_id, protocol, lb_algorithm, options = {}) - data = { - 'pool' => { - 'listener_id' => listener_id, - 'protocol' => protocol, - 'lb_algorithm' => lb_algorithm - } - } - - vanilla_options = [:name, :description, :admin_state_up, :session_persistence, :tenant_id] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['pool'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'lbaas/pools' - ) - end - end - - class Mock - def create_lbaas_pool(listener_id, protocol, lb_algorithm, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'protocol' => protocol, - 'lb_algorithm' => lb_algorithm, - 'name' => options[:name], - 'description' => options[:description], - 'healthmonitor_id' => Fog::Mock.random_numbers(6).to_s, - 'members' => [Fog::Mock.random_numbers(6).to_s], - 'status' => 'ACTIVE', - 'admin_state_up' => options[:admin_state_up], - 'tenant_id' => options[:tenant_id], - 'listeners' => ['id' => listener_id], - 'session_persistence' => {} - } - self.data[:lbaas_pools][data['id']] = data - response.body = { 'pool' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_lbaas_pool_member.rb b/lib/fog/network/openstack/requests/create_lbaas_pool_member.rb deleted file mode 100644 index 0e96d9e19..000000000 --- a/lib/fog/network/openstack/requests/create_lbaas_pool_member.rb +++ /dev/null @@ -1,49 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_lbaas_pool_member(pool_id, address, protocol_port, options = {}) - data = { - 'member' => { - 'address' => address, - 'protocol_port' => protocol_port - } - } - - vanilla_options = [:admin_state_up, :tenant_id, :weight, :subnet_id] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['member'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: "lbaas/pools/#{pool_id}/members" - ) - end - end - - class Mock - def create_lbaas_pool_member(pool_id, address, protocol_port, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'pool_id' => pool_id, - 'address' => address, - 'protocol_port' => protocol_port, - 'weight' => options[:weight], - 'status' => 'ACTIVE', - 'admin_state_up' => options[:admin_state_up], - 'tenant_id' => options[:tenant_id], - 'subnet_id' => ptions[:subnet_id] - } - self.data[:lb_members][data['id']] = data - response.body = { 'member' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_port.rb b/lib/fog/network/openstack/requests/create_port.rb deleted file mode 100644 index 0c6261d56..000000000 --- a/lib/fog/network/openstack/requests/create_port.rb +++ /dev/null @@ -1,53 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_port(network_id, options = {}) - data = { - 'port' => { - 'network_id' => network_id - } - } - - vanilla_options = [:name, :fixed_ips, :mac_address, :admin_state_up, - :device_owner, :device_id, :tenant_id, :security_groups, - :allowed_address_pairs] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['port'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'ports' - ) - end - end - - class Mock - def create_port(network_id, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'name' => options[:name], - 'network_id' => network_id, - 'fixed_ips' => options[:fixed_ips], - 'mac_address' => options[:mac_address], - 'status' => 'ACTIVE', - 'admin_state_up' => options[:admin_state_up], - 'device_owner' => options[:device_owner], - 'device_id' => options[:device_id], - 'tenant_id' => options[:tenant_id], - 'security_groups' => options[:security_groups], - 'allowed_address_pairs' => options[:allowed_address_pairs] - } - self.data[:ports][data['id']] = data - response.body = { 'port' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_rbac_policy.rb b/lib/fog/network/openstack/requests/create_rbac_policy.rb deleted file mode 100644 index 8c9cd077f..000000000 --- a/lib/fog/network/openstack/requests/create_rbac_policy.rb +++ /dev/null @@ -1,42 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_rbac_policy(options = {}) - data = { 'rbac_policy' => {} } - - vanilla_options = [:object_type, :object_id, :tenant_id, :target_tenant, :action] - vanilla_options.select { |o| options.key?(o) }.each do |key| - data['rbac_policy'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'rbac-policies' - ) - end - end - - class Mock - def create_rbac_policy(options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'object_type' => options[:object_type], - 'object_id' => options[:object_id], - 'tenant_id' => options[:tenant_id], - 'target_tenant' => options[:target_tenant], - 'action' => options[:action] - } - - self.data[:rbac_policies][data['id']] = data - response.body = { 'rbac_policy' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_security_group.rb b/lib/fog/network/openstack/requests/create_security_group.rb deleted file mode 100644 index bbf8cfab2..000000000 --- a/lib/fog/network/openstack/requests/create_security_group.rb +++ /dev/null @@ -1,92 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - # Create a new security group - # - # ==== Parameters - # * options<~Hash>: - # * 'name'<~String> - Name of the security group - # * 'description'<~String> - Description of the security group - # * 'tenant_id'<~String> - TenantId different than the current user, that should own the security group. Only allowed if user has 'admin' role. - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Hash>: - # * 'security_groups'<~Array>: - # * 'id'<~String> - UUID of the security group - # * 'name'<~String> - Name of the security group - # * 'description'<~String> - Description of the security group - # * 'tenant_id'<~String> - Tenant id that owns the security group - # * 'security_group_rules'<~Array>: - Array of security group rules - # * 'id'<~String> - UUID of the security group rule - # * 'direction'<~String> - Direction of traffic, must be in ['ingress', 'egress'] - # * 'port_range_min'<~Integer> - Start port for rule i.e. 22 (or -1 for ICMP wildcard) - # * 'port_range_max'<~Integer> - End port for rule i.e. 22 (or -1 for ICMP wildcard) - # * 'protocol'<~String> - IP protocol for rule, must be in ['tcp', 'udp', 'icmp'] - # * 'ethertype'<~String> - Type of ethernet support, must be in ['IPv4', 'IPv6'] - # * 'security_group_id'<~String> - UUID of the parent security group - # * 'remote_group_id'<~String> - UUID of the remote security group - # * 'remote_ip_prefix'<~String> - IP cidr range address i.e. '0.0.0.0/0' - # * 'tenant_id'<~String> - Tenant id that owns the security group rule - def create_security_group(options = {}) - data = { "security_group" => {} } - desired_options = [:name, :description, :tenant_id] - selected_options = desired_options.select { |o| options[o] } - selected_options.each { |key| data["security_group"][key] = options[key] } - - request( - body: Fog::JSON.encode(data), - expects: 201, - method: "POST", - path: "security-groups" - ) - end - end - - class Mock - def create_security_group(options = {}) - # Spaces are NOT removed from name and description, as in case of compute sec groups - tenant_id = Fog::Mock.random_numbers(14).to_s - sec_group_id = Fog::UUID.uuid - - response = Excon::Response.new - response.status = 201 - # by default every security group will come setup with an egress rule to "allow all out" - data = { - "security_group_rules" => [ - { "remote_group_id" => nil, - "direction" => "egress", - "remote_ip_prefix" => nil, - "protocol" => nil, - "ethertype" => "IPv4", - "tenant_id" => tenant_id, - "port_range_max" => nil, - "port_range_min" => nil, - "id" => Fog::UUID.uuid, - "security_group_id" => sec_group_id }, - { "remote_group_id" => nil, - "direction" => "egress", - "remote_ip_prefix" => nil, - "protocol" => nil, - "ethertype" => "IPv6", - "tenant_id" => tenant_id, - "port_range_max" => nil, - "port_range_min" => nil, - "id" => Fog::UUID.uuid, - "security_group_id" => sec_group_id } - ], - "id" => sec_group_id, - "tenant_id" => tenant_id, - "name" => options[:name] || "", - "description" => options[:description] || "" - } - - self.data[:security_groups][data["id"]] = data - response.body = { "security_group" => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_security_group_rule.rb b/lib/fog/network/openstack/requests/create_security_group_rule.rb deleted file mode 100644 index 2ad17fac6..000000000 --- a/lib/fog/network/openstack/requests/create_security_group_rule.rb +++ /dev/null @@ -1,79 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - # Create a new security group rule - # - # ==== Parameters - # * 'security_group_id'<~String> - UUID of the parent security group - # * 'direction'<~String> - Direction of traffic, must be in ['ingress', 'egress'] - # * options<~Hash>: - # * 'port_range_min'<~Integer> - Start port for rule i.e. 22 (or -1 for ICMP wildcard) - # * 'port_range_max'<~Integer> - End port for rule i.e. 22 (or -1 for ICMP wildcard) - # * 'protocol'<~String> - IP protocol for rule, must be in ['tcp', 'udp', 'icmp'] - # * 'ethertype'<~String> - Type of ethernet support, must be in ['IPv4', 'IPv6'] - # * 'remote_group_id'<~String> - UUID of the remote security group - # * 'remote_ip_prefix'<~String> - IP cidr range address i.e. '0.0.0.0/0' - # * 'tenant_id'<~String> - TenantId different than the current user, that should own the security group. Only allowed if user has 'admin' role. - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Hash>: - # * 'security_group_rule'<~Hash>: - # * 'id'<~String> - UUID of the security group rule - # * 'direction'<~String> - Direction of traffic, must be in ['ingress', 'egress'] - # * 'port_range_min'<~String> - Start port for rule i.e. 22 (or -1 for ICMP wildcard) - # * 'port_range_max'<~String> - End port for rule i.e. 22 (or -1 for ICMP wildcard) - # * 'protocol'<~String> - IP protocol for rule, must be in ['tcp', 'udp', 'icmp'] - # * 'ethertype'<~String> - Type of ethernet support, must be in ['IPv4', 'IPv6'] - # * 'security_group_id'<~String> - UUID of the parent security group - # * 'remote_group_id'<~String> - UUID of the source security group - # * 'remote_ip_prefix'<~String> - IP cidr range address i.e. '0.0.0.0/0' - # * 'tenant_id'<~String> - Tenant id that owns the security group rule - def create_security_group_rule(security_group_id, direction, options = {}) - data = { "security_group_rule" => { "security_group_id" => security_group_id, "direction" => direction } } - desired_options = [ - :port_range_min, - :port_range_max, - :protocol, - :ethertype, - :remote_group_id, - :remote_ip_prefix, - :tenant_id - ] - selected_options = desired_options.select { |o| options[o] } - selected_options.each { |key| data["security_group_rule"][key] = options[key] } - - request( - body: Fog::JSON.encode(data), - expects: 201, - method: "POST", - path: "security-group-rules" - ) - end - end - - class Mock - def create_security_group_rule(security_group_id, direction, options = {}) - response = Excon::Response.new - data = { - "id" => Fog::UUID.uuid, - "remote_group_id" => options[:remote_group_id], - "direction" => direction, - "remote_ip_prefix" => options[:remote_ip_prefix], - "protocol" => options[:protocol], - "ethertype" => options[:ethertype] || "IPv4", - "tenant_id" => options[:tenant_id] || Fog::Mock.random_numbers(14).to_s, - "port_range_max" => options[:port_range_max], - "port_range_min" => options[:port_range_min], - "security_group_id" => security_group_id - } - self.data[:security_group_rules][data["id"]] = data - response.status = 201 - response.body = { "security_group_rule" => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_subnet.rb b/lib/fog/network/openstack/requests/create_subnet.rb deleted file mode 100644 index 97079c2c2..000000000 --- a/lib/fog/network/openstack/requests/create_subnet.rb +++ /dev/null @@ -1,54 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_subnet(network_id, cidr, ip_version, options = {}) - data = { - 'subnet' => { - 'network_id' => network_id, - 'cidr' => cidr, - 'ip_version' => ip_version - } - } - - vanilla_options = [:name, :gateway_ip, :allocation_pools, - :dns_nameservers, :host_routes, :enable_dhcp, - :tenant_id] - vanilla_options.select { |o| options.key?(o) }.each do |key| - data['subnet'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'subnets' - ) - end - end - - class Mock - def create_subnet(network_id, cidr, ip_version, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'name' => options[:name], - 'network_id' => network_id, - 'cidr' => cidr, - 'ip_version' => ip_version, - 'gateway_ip' => options[:gateway_ip], - 'allocation_pools' => options[:allocation_pools], - 'dns_nameservers' => options[:dns_nameservers], - 'host_routes' => options[:host_routes], - 'enable_dhcp' => options[:enable_dhcp], - 'tenant_id' => options[:tenant_id] - } - self.data[:subnets][data['id']] = data - response.body = { 'subnet' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_subnet_pool.rb b/lib/fog/network/openstack/requests/create_subnet_pool.rb deleted file mode 100644 index 5422512f2..000000000 --- a/lib/fog/network/openstack/requests/create_subnet_pool.rb +++ /dev/null @@ -1,56 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_subnet_pool(name, prefixes, options = {}) - data = { - 'subnetpool' => { - 'name' => name, - 'prefixes' => prefixes - } - } - - vanilla_options = [:description, :address_scope_id, :shared, - :min_prefixlen, :max_prefixlen, :default_prefixlen] - vanilla_options.select { |o| options.key?(o) }.each do |key| - data['subnetpool'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'subnetpools' - ) - end - end - - class Mock - def create_subnet_pool(name, prefixes, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'name' => name, - 'prefixes' => prefixes, - 'description' => options[:description], - 'min_prefixlen' => options[:min_prefixlen] || 64, - 'max_prefixlen' => options[:max_prefixlen] || 64, - 'default_prefixlen' => options[:default_prefixlen] || 64, - 'address_scope_id' => options[:address_scope_id], - 'default_quota' => options[:default_quota], - 'ip_version' => options[:ip_version] || 4, - 'shared' => options[:shared].nil? ? false : options[:shared], - 'is_default' => options[:is_default].nil? ? false : options[:is_default], - 'created_at' => Time.now.to_s, - 'updated_at' => Time.now.to_s, - 'tenant_id' => Fog::Mock.random_hex(8).to_s - } - self.data[:subnet_pools][data['id']] = data - response.body = { 'subnetpool' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/create_vpn_service.rb b/lib/fog/network/openstack/requests/create_vpn_service.rb deleted file mode 100644 index 0f955cd0a..000000000 --- a/lib/fog/network/openstack/requests/create_vpn_service.rb +++ /dev/null @@ -1,51 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def create_vpn_service(subnet_id, router_id, options = {}) - data = { - 'vpnservice' => { - 'subnet_id' => subnet_id, - 'router_id' => router_id - } - } - - vanilla_options = [:name, :description, :admin_state_up, :tenant_id] - vanilla_options.reject { |o| options[o].nil? }.each do |key| - data['vpnservice'][key] = options[key] - end - - request( - body: Fog::JSON.encode(data), - expects: [201], - method: 'POST', - path: 'vpn/vpnservices' - ) - end - end - - class Mock - def create_vpn_service(subnet_id, router_id, options = {}) - response = Excon::Response.new - response.status = 201 - data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'subnet_id' => subnet_id, - 'router_id' => router_id, - 'name' => options[:name], - 'description' => options[:description], - 'status' => 'ACTIVE', - 'admin_state_up' => options[:admin_state_up], - 'tenant_id' => options[:tenant_id], - 'external_v4_ip' => '1.2.3.4', - 'external_v6_ip' => '::1' - } - - self.data[:vpn_services][data['id']] = data - response.body = { 'vpnservice' => data } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/delete_port.rb b/lib/fog/network/openstack/requests/delete_port.rb deleted file mode 100644 index 0ab46c92e..000000000 --- a/lib/fog/network/openstack/requests/delete_port.rb +++ /dev/null @@ -1,28 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def delete_port(port_id) - request( - expects: 204, - method: 'DELETE', - path: "ports/#{port_id}" - ) - end - end - - class Mock - def delete_port(port_id) - response = Excon::Response.new - if list_ports.body['ports'].map { |r| r['id'] }.include? port_id - data[:ports].delete(port_id) - response.status = 204 - response - else - raise Fog::Network::OpenStack::NotFound - end - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/delete_security_group.rb b/lib/fog/network/openstack/requests/delete_security_group.rb deleted file mode 100644 index 0411b9cb4..000000000 --- a/lib/fog/network/openstack/requests/delete_security_group.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - # Delete a security group - # - # ==== Parameters - # * 'security_group_id'<~String> - UUID of the security group to delete - def delete_security_group(security_group_id) - request( - expects: 204, - method: 'DELETE', - path: "security-groups/#{security_group_id}" - ) - end - end - - class Mock - def delete_security_group(security_group_id) - response = Excon::Response.new - if data[:security_groups][security_group_id] - data[:security_groups].delete(security_group_id) - response.status = 204 - response - else - raise Fog::Network::OpenStack::NotFound - end - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/delete_security_group_rule.rb b/lib/fog/network/openstack/requests/delete_security_group_rule.rb deleted file mode 100644 index 19b934c98..000000000 --- a/lib/fog/network/openstack/requests/delete_security_group_rule.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - # Delete a security group rule - # - # ==== Parameters - # * 'security_group_rule_id'<~String> - UUID of the security group rule to delete - def delete_security_group_rule(security_group_rule_id) - request( - expects: 204, - method: "DELETE", - path: "security-group-rules/#{security_group_rule_id}" - ) - end - end - - class Mock - def delete_security_group_rule(security_group_rule_id) - response = Excon::Response.new - if data[:security_group_rules][security_group_rule_id] - data[:security_group_rules].delete(security_group_rule_id) - response.status = 204 - response - else - raise Fog::Network::OpenStack::NotFound - end - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/get_floating_ip.rb b/lib/fog/network/openstack/requests/get_floating_ip.rb deleted file mode 100644 index 6bde5e5ac..000000000 --- a/lib/fog/network/openstack/requests/get_floating_ip.rb +++ /dev/null @@ -1,39 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def get_floating_ip(floating_ip_id) - request( - expects: [200], - method: 'GET', - path: "floatingips/#{floating_ip_id}" - ) - end - end - - class Mock - def get_floating_ip(floating_ip_id) - response = Excon::Response.new - if data = self.data[:floating_ips][floating_ip_id] - response.status = 200 - response.body = { - "floatingip" => { - "id" => "00000000-0000-0000-0000-000000000000", - # changed - # "floating_ip_id" => floating_ip_id, - "port_id" => data["port_id"], - "tenant_id" => data["tenant_id"], - "fixed_ip_address" => data["fixed_ip_address"], - "router_id" => "00000000-0000-0000-0000-000000000000", - "floating_ip_address" => data["floating_ip_address"] - } - } - response - else - raise Fog::Network::OpenStack::NotFound - end - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/get_port.rb b/lib/fog/network/openstack/requests/get_port.rb deleted file mode 100644 index 49b614490..000000000 --- a/lib/fog/network/openstack/requests/get_port.rb +++ /dev/null @@ -1,51 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def get_port(port_id) - request( - expects: [200], - method: 'GET', - path: "ports/#{port_id}" - ) - end - end - - class Mock - def get_port(port_id) - response = Excon::Response.new - if data = self.data[:ports][port_id] - response.status = 200 - response.body = { - 'port' => { - 'id' => '5c81d975-5fea-4674-9c1f-b8aa10bf9a79', - 'name' => 'port_1', - 'network_id' => 'e624a36d-762b-481f-9b50-4154ceb78bbb', - 'fixed_ips' => [ - { - 'ip_address' => '10.2.2.2', - 'subnet_id' => '2e4ec6a4-0150-47f5-8523-e899ac03026e' - } - ], - 'mac_address' => 'fa:16:3e:62:91:7f', - 'status' => 'ACTIVE', - 'admin_state_up' => true, - 'device_id' => 'dhcp724fc160-2b2e-597e-b9ed-7f65313cd73f-e624a36d-762b-481f-9b50-4154ceb78bbb', - 'device_owner' => 'network:dhcp', - 'tenant_id' => 'f8b26a6032bc47718a7702233ac708b9', - 'security_groups' => ['3ddde803-e550-4737-b5de-0862401dc834'], - 'allowed_address_pairs' => [ - 'ip_address' => '10.1.1.1', - 'mac_address' => 'fa:16:3e:3d:2a:cc' - ] - } - } - response - else - raise Fog::Network::OpenStack::NotFound - end - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/get_quota.rb b/lib/fog/network/openstack/requests/get_quota.rb deleted file mode 100644 index ce47f22bd..000000000 --- a/lib/fog/network/openstack/requests/get_quota.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def get_quota(tenant_id) - request( - expects: 200, - method: 'GET', - path: "/quotas/#{tenant_id}" - ) - end - end - - class Mock - def get_quota(_tenant_id) - response = Excon::Response.new - response.status = 200 - response.body = { - 'quota' => (data[:quota_updated] || data[:quota]) - } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/get_security_group.rb b/lib/fog/network/openstack/requests/get_security_group.rb deleted file mode 100644 index 3be324697..000000000 --- a/lib/fog/network/openstack/requests/get_security_group.rb +++ /dev/null @@ -1,52 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - # Get details about a security group - # - # ==== Parameters - # * 'security_group_id'<~String> - UUID of the security group - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Hash>: - # * 'security_group'<~Array>: - # * 'id'<~String> - UUID of the security group - # * 'name'<~String> - Name of the security group - # * 'description'<~String> - Description of the security group - # * 'tenant_id'<~String> - Tenant id that owns the security group - # * 'security_group_rules'<~Array>: - Array of security group rules - # * 'id'<~String> - UUID of the security group rule - # * 'direction'<~String> - Direction of traffic, must be in ['ingress', 'egress'] - # * 'port_range_min'<~Integer> - Start port for rule i.e. 22 (or -1 for ICMP wildcard) - # * 'port_range_max'<~Integer> - End port for rule i.e. 22 (or -1 for ICMP wildcard) - # * 'protocol'<~String> - IP protocol for rule, must be in ['tcp', 'udp', 'icmp'] - # * 'ethertype'<~String> - Type of ethernet support, must be in ['IPv4', 'IPv6'] - # * 'security_group_id'<~String> - UUID of the parent security group - # * 'remote_group_id'<~String> - UUID of the remote security group - # * 'remote_ip_prefix'<~String> - IP cidr range address i.e. '0.0.0.0/0' - # * 'tenant_id'<~String> - Tenant id that owns the security group rule - def get_security_group(security_group_id) - request( - expects: 200, - method: "GET", - path: "security-groups/#{security_group_id}" - ) - end - end - - class Mock - def get_security_group(security_group_id) - response = Excon::Response.new - if sec_group = data[:security_groups][security_group_id] - response.status = 200 - response.body = { "security_group" => sec_group } - response - else - raise Fog::Network::OpenStack::NotFound - end - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/get_security_group_rule.rb b/lib/fog/network/openstack/requests/get_security_group_rule.rb deleted file mode 100644 index ac6881aea..000000000 --- a/lib/fog/network/openstack/requests/get_security_group_rule.rb +++ /dev/null @@ -1,47 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - # Get details about a security group rule - # - # ==== Parameters - # * 'security_group_rule_id'<~String> - UUID of the security group rule - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Hash>: - # * 'security_group_rule'<~Hash>: - # * 'id'<~String> - UUID of the security group rule - # * 'direction'<~String> - Direction of traffic, must be in ['ingress', 'egress'] - # * 'port_range_min'<~Integer> - Start port for rule i.e. 22 (or -1 for ICMP wildcard) - # * 'port_range_max'<~Integer> - End port for rule i.e. 22 (or -1 for ICMP wildcard) - # * 'protocol'<~String> - IP protocol for rule, must be in ['tcp', 'udp', 'icmp'] - # * 'ethertype'<~String> - Type of ethernet support, must be in ['IPv4', 'IPv6'] - # * 'security_group_id'<~String> - UUID of the parent security group - # * 'remote_group_id'<~String> - UUID of the remote security group - # * 'remote_ip_prefix'<~String> - IP cidr range address i.e. '0.0.0.0/0' - # * 'tenant_id'<~String> - Tenant id that owns the security group rule - def get_security_group_rule(security_group_rule_id) - request( - expects: 200, - method: "GET", - path: "security-group-rules/#{security_group_rule_id}" - ) - end - end - - class Mock - def get_security_group_rule(security_group_rule_id) - response = Excon::Response.new - if sec_group_rule = data[:security_group_rules][security_group_rule_id] - response.status = 200 - response.body = { "security_group_rule" => sec_group_rule } - response - else - raise Fog::Network::OpenStack::NotFound - end - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/get_subnet.rb b/lib/fog/network/openstack/requests/get_subnet.rb deleted file mode 100644 index 0402c9dd0..000000000 --- a/lib/fog/network/openstack/requests/get_subnet.rb +++ /dev/null @@ -1,47 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def get_subnet(subnet_id) - request( - expects: [200], - method: 'GET', - path: "subnets/#{subnet_id}" - ) - end - end - - class Mock - def get_subnet(subnet_id) - response = Excon::Response.new - if data = self.data[:subnets][subnet_id] - response.status = 200 - response.body = { - "subnet" => { - "id" => "2e4ec6a4-0150-47f5-8523-e899ac03026e", - "name" => "subnet_1", - "network_id" => "e624a36d-762b-481f-9b50-4154ceb78bbb", - "cidr" => "10.2.2.0/24", - "ip_version" => 4, - "gateway_ip" => "10.2.2.1", - "allocation_pools" => [ - { - "start" => "10.2.2.2", - "end" => "10.2.2.254" - } - ], - "dns_nameservers" => [], - "host_routes" => [], - "enable_dhcp" => true, - "tenant_id" => "f8b26a6032bc47718a7702233ac708b9" - } - } - response - else - raise Fog::Network::OpenStack::NotFound - end - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/list_ports.rb b/lib/fog/network/openstack/requests/list_ports.rb deleted file mode 100644 index 5afd25b02..000000000 --- a/lib/fog/network/openstack/requests/list_ports.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def list_ports(filters = {}) - request( - expects: 200, - method: 'GET', - path: 'ports', - query: filters - ) - end - end - - class Mock - def list_ports(_filters = {}) - Excon::Response.new( - body: { 'ports' => data[:ports].values }, - status: 200 - ) - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/list_security_groups.rb b/lib/fog/network/openstack/requests/list_security_groups.rb deleted file mode 100644 index 69ffee9dd..000000000 --- a/lib/fog/network/openstack/requests/list_security_groups.rb +++ /dev/null @@ -1,53 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - # List all security groups - # - # ==== Parameters - # * options<~Hash>: - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~Hash>: - # * 'security_groups'<~Array>: - # * 'id'<~String> - UUID of the security group - # * 'name'<~String> - Name of the security group - # * 'description'<~String> - Description of the security group - # * 'tenant_id'<~String> - Tenant id that owns the security group - # * 'security_group_rules'<~Array>: - Array of security group rules - # * 'id'<~String> - UUID of the security group rule - # * 'direction'<~String> - Direction of traffic, must be in ['ingress', 'egress'] - # * 'port_range_min'<~Integer> - Start port for rule i.e. 22 (or -1 for ICMP wildcard) - # * 'port_range_max'<~Integer> - End port for rule i.e. 22 (or -1 for ICMP wildcard) - # * 'protocol'<~String> - IP protocol for rule, must be in ['tcp', 'udp', 'icmp'] - # * 'ethertype'<~String> - Type of ethernet support, must be in ['IPv4', 'IPv6'] - # * 'security_group_id'<~String> - UUID of the parent security group - # * 'remote_group_id'<~String> - UUID of the remote security group - # * 'remote_ip_prefix'<~String> - IP cidr range address i.e. '0.0.0.0/0' - # * 'tenant_id'<~String> - Tenant id that owns the security group rule - def list_security_groups(options = {}) - request( - expects: 200, - method: 'GET', - path: 'security-groups', - query: options - ) - end - end - - class Mock - def list_security_groups(_options = {}) - response = Excon::Response.new - - sec_groups = [] - sec_groups = data[:security_groups].values unless data[:security_groups].nil? - - response.status = 200 - response.body = { 'security_groups' => sec_groups } - response - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/set_tenant.rb b/lib/fog/network/openstack/requests/set_tenant.rb deleted file mode 100644 index 4427abdb1..000000000 --- a/lib/fog/network/openstack/requests/set_tenant.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def set_tenant(tenant) - @openstack_must_reauthenticate = true - @openstack_tenant = tenant.to_s - authenticate - set_api_path - end - end - - class Mock - def set_tenant(_tenant) - true - end - end - end - end -end diff --git a/lib/fog/network/openstack/requests/update_quota.rb b/lib/fog/network/openstack/requests/update_quota.rb deleted file mode 100644 index c84aa1a1b..000000000 --- a/lib/fog/network/openstack/requests/update_quota.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Fog - module Network - class OpenStack - class Real - def update_quota(tenant_id, options = {}) - request( - body: Fog::JSON.encode('quota' => options), - expects: 200, - method: 'PUT', - path: "/quotas/#{tenant_id}" - ) - end - end - - class Mock - def update_quota(_tenant_id, options = {}) - data[:quota_updated] = data[:quota].merge options - - response = Excon::Response.new - response.status = 200 - response.body = { 'quota' => data[:quota_updated] } - response - end - end - end - end -end diff --git a/lib/fog/nfv/openstack.rb b/lib/fog/nfv/openstack.rb deleted file mode 100644 index c8a4b4b06..000000000 --- a/lib/fog/nfv/openstack.rb +++ /dev/null @@ -1,133 +0,0 @@ -require 'yaml' - -module Fog - module NFV - class OpenStack < Fog::Service - SUPPORTED_VERSIONS = /v1.0/ - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id - - ## REQUESTS - # - request_path 'fog/nfv/openstack/requests' - - # vnfds requests - request :list_vnfds - request :get_vnfd - request :create_vnfd - request :delete_vnfd - - # vfns requests - request :list_vnfs - request :get_vnf - request :create_vnf - request :update_vnf - request :delete_vnf - - ## MODELS - # - model_path 'fog/nfv/openstack/models' - model :vnfd - collection :vnfds - model :vnf - collection :vnfs - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - vnfs: [ - { - "status" => "ACTIVE", - "description" => "demo-example", - "tenant_id" => "943b6ff8229a4ec2bed0a306f869a0ea", - "instance_id" => "5a9a7d3b-24f5-4226-8d43-262972a1776e", - "mgmt_url" => "{\"vdu1\": \"192.168.0.8\"}", - "attributes" => { "monitoring_policy" => "{\"vdus\": {}}" }, - "id" => "cb4cdbd8-cf1a-4758-8d36-40db788a37a1", - "name" => "LadasTest" - } - ], - vnfds: [ - { - "service_types" => [{ "service_type" => "vnfd", "id" => "f9211d81-b58a-4849-8d38-e25376c421bd" }], - "description" => "demo-example", - "tenant_id" => "943b6ff8229a4ec2bed0a306f869a0ea", - "mgmt_driver" => "noop", - "infra_driver" => "heat", - "attributes" => { "vnfd" => "template_name: sample-vnfd" }, - "id" => "1f8f33cf-8c94-427e-a040-f3e393b773b7", - "name" => "sample-vnfd" - } - ] - } - end - end - - def self.reset - @data = nil - end - - include Fog::OpenStack::Core - - def initialize(options = {}) - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86_400).iso8601 - - initialize_identity options - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::NFV::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['servicevm'] - @openstack_service_name = options[:openstack_service_name] - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - unless @path.match(SUPPORTED_VERSIONS) - @path = "/" + Fog::OpenStack.get_supported_version( - SUPPORTED_VERSIONS, - @openstack_management_uri, - @auth_token, - @connection_options - ) - end - end - end - end - end -end diff --git a/lib/fog/nfv/openstack/models/vnfds.rb b/lib/fog/nfv/openstack/models/vnfds.rb deleted file mode 100644 index 924df6e43..000000000 --- a/lib/fog/nfv/openstack/models/vnfds.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/nfv/openstack/models/vnfd' - -module Fog - module NFV - class OpenStack - class Vnfds < Fog::OpenStack::Collection - model Fog::NFV::OpenStack::Vnfd - - def all(options = {}) - load_response(service.list_vnfds(options), 'vnfds') - end - - def get(uuid) - data = service.get_vnfd(uuid).body['vnfd'] - new(data) - rescue Fog::NFV::OpenStack::NotFound - nil - end - - def destroy(uuid) - vnfd = get(uuid) - vnfd.destroy - end - end - end - end -end diff --git a/lib/fog/nfv/openstack/models/vnfs.rb b/lib/fog/nfv/openstack/models/vnfs.rb deleted file mode 100644 index 6db6c11dc..000000000 --- a/lib/fog/nfv/openstack/models/vnfs.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/nfv/openstack/models/vnf' - -module Fog - module NFV - class OpenStack - class Vnfs < Fog::OpenStack::Collection - model Fog::NFV::OpenStack::Vnf - - def all(options = {}) - load_response(service.list_vnfs(options), 'vnfs') - end - - def get(uuid) - data = service.get_vnf(uuid).body['vnf'] - new(data) - rescue Fog::NFV::OpenStack::NotFound - nil - end - - def destroy(uuid) - vnf = get(uuid) - vnf.destroy - end - end - end - end -end diff --git a/lib/fog/openstack.rb b/lib/fog/openstack.rb index 64412f899..ddfaeabf1 100644 --- a/lib/fog/openstack.rb +++ b/lib/fog/openstack.rb @@ -1,89 +1,36 @@ -require 'fog/openstack/version' require 'fog/core' require 'fog/json' module Fog - module Baremetal - autoload :OpenStack, File.expand_path('baremetal/openstack', __dir__) - end - - module Compute - autoload :OpenStack, File.expand_path('compute/openstack', __dir__) - end - - module ContainerInfra - autoload :OpenStack, File.expand_path('container_infra/openstack', __dir__) - end - - module DNS - autoload :OpenStack, File.expand_path('dns/openstack', __dir__) - end - - module Event - autoload :OpenStack, File.expand_path('event/openstack', __dir__) - end - - module Identity - autoload :OpenStack, File.expand_path('identity/openstack', __dir__) - end - - module Image - autoload :OpenStack, File.expand_path('image/openstack', __dir__) - end - - module Introspection - autoload :OpenStack, File.expand_path('introspection/openstack', __dir__) - end - - module KeyManager - autoload :OpenStack, File.expand_path('key_manager/openstack', __dir__) - end - - module Metering - autoload :OpenStack, File.expand_path('metering/openstack', __dir__) - end - - module Metric - autoload :OpenStack, File.expand_path('metric/openstack', __dir__) - end - - module Monitoring - autoload :OpenStack, File.expand_path('monitoring/openstack', __dir__) - end - - module Network - autoload :OpenStack, File.expand_path('network/openstack', __dir__) - end - - module NFV - autoload :OpenStack, File.expand_path('nfv/openstack', __dir__) - end - - module Orchestration - autoload :OpenStack, File.expand_path('orchestration/openstack', __dir__) - autoload :Util, File.expand_path('orchestration/util/recursive_hot_file_loader', __dir__) - end - - module SharedFileSystem - autoload :OpenStack, File.expand_path('shared_file_system/openstack', __dir__) - end - - module Storage - autoload :OpenStack, File.expand_path('storage/openstack', __dir__) - end - - module Volume - autoload :OpenStack, File.expand_path('volume/openstack', __dir__) - end - - module Workflow - autoload :OpenStack, File.expand_path('workflow/openstack', __dir__) - end - module OpenStack - autoload :Core, File.expand_path('openstack/core', __dir__) - autoload :Errors, File.expand_path('openstack/errors', __dir__) - autoload :Planning, File.expand_path('planning/openstack', __dir__) + require 'fog/openstack/auth/token' + + autoload :VERSION, 'fog/openstack/version' + + autoload :Core, 'fog/openstack/core' + autoload :Errors, 'fog/openstack/errors' + + autoload :Baremetal, 'fog/openstack/baremetal' + autoload :Compute, 'fog/openstack/compute' + autoload :ContainerInfra, 'fog/openstack/container_infra' + autoload :DNS, 'fog/openstack/dns' + autoload :Event, 'fog/openstack/event' + autoload :Identity, 'fog/openstack/identity' + autoload :Image, 'fog/openstack/image' + autoload :Introspection, 'fog/openstack/introspection' + autoload :KeyManager, 'fog/openstack/key_manager' + autoload :Metering, 'fog/openstack/metering' + autoload :Metric, 'fog/openstack/metric' + autoload :Monitoring, 'fog/openstack/monitoring' + autoload :Network, 'fog/openstack/network' + autoload :NFV, 'fog/openstack/nfv' + autoload :Orchestration, 'fog/openstack/orchestration' + autoload :OrchestrationUtil, 'fog/openstack/orchestration/util/recursive_hot_file_loader' + autoload :Planning, 'fog/openstack/planning' + autoload :SharedFileSystem, 'fog/openstack/shared_file_system' + autoload :Storage, 'fog/openstack/storage' + autoload :Workflow, 'fog/openstack/workflow' + autoload :Volume, 'fog/openstack/volume' extend Fog::Provider @@ -118,421 +65,10 @@ def self.clear_token_cache Fog::OpenStack.token_cache = {} end - def self.authenticate(options, connection_options = {}) - case options[:openstack_auth_uri].path - when /v1(\.\d+)?/ - authenticate_v1(options, connection_options) - when /v2(\.\d+)?/ - authenticate_v2(options, connection_options) - when /v3(\.\d+)?/ - authenticate_v3(options, connection_options) - else - authenticate_v2(options, connection_options) - end - end - - # legacy v1.0 style auth - def self.authenticate_v1(options, connection_options = {}) - uri = options[:openstack_auth_uri] - connection = Fog::Core::Connection.new(uri.to_s, false, connection_options) - @openstack_api_key = options[:openstack_api_key] - @openstack_username = options[:openstack_username] - - response = connection.request( - expects: [200, 204], - headers: { - 'X-Auth-Key' => @openstack_api_key, - 'X-Auth-User' => @openstack_username - }, - method: 'GET', - path: (uri.path && (not uri.path.empty?)) ? uri.path : 'v1.0' - ) - - return { - token: response.headers['X-Auth-Token'], - server_management_url: response.headers['X-Server-Management-Url'] || response.headers['X-Storage-Url'], - identity_public_endpoint: response.headers['X-Keystone'] - } - end - - # Keystone Style Auth - def self.authenticate_v2(options, connection_options = {}) - uri = options[:openstack_auth_uri] - tenant_name = options[:openstack_tenant] - service_type = options[:openstack_service_type] - service_name = options[:openstack_service_name] - identity_service_type = options[:openstack_identity_service_type] - endpoint_type = (options[:openstack_endpoint_type] || 'publicURL').to_s - openstack_region = options[:openstack_region] - - body = retrieve_tokens_v2(options, connection_options) - service = get_service(body, service_type, service_name) - - options[:unscoped_token] = body['access']['token']['id'] - - unless service - unless tenant_name - response = Fog::Core::Connection.new( - "#{uri.scheme}://#{uri.host}:#{uri.port}/v2.0/tenants", false, connection_options - ).request( - expects: [200, 204], - headers: { 'Content-Type' => 'application/json', - 'Accept' => 'application/json', - 'X-Auth-Token' => body['access']['token']['id'] }, - method: 'GET' - ) - - body = Fog::JSON.decode(response.body) - if body['tenants'].empty? - raise Fog::Errors::NotFound.new('No Tenant Found') - else - options[:openstack_tenant] = body['tenants'].first['name'] - end - end - - body = retrieve_tokens_v2(options, connection_options) - service = get_service(body, service_type, service_name) - - end - - unless service - available = body['access']['serviceCatalog'].map do |endpoint| - endpoint['type'] - end.sort.join ', ' - - missing = service_type.join ', ' - - message = "Could not find service #{missing}. Have #{available}" - - raise Fog::Errors::NotFound, message - end - - service['endpoints'] = service['endpoints'].select do |endpoint| - endpoint['region'] == openstack_region - end if openstack_region - - if service['endpoints'].empty? - raise Fog::Errors::NotFound.new("No endpoints available for region '#{openstack_region}'") - end if openstack_region - - regions = service["endpoints"].map { |e| e['region'] }.uniq - if regions.count > 1 - raise Fog::Errors::NotFound.new("Multiple regions available choose one of these '#{regions.join(',')}'") - end - - identity_service = get_service(body, identity_service_type) if identity_service_type - tenant = body['access']['token']['tenant'] - user = body['access']['user'] - - management_url = service['endpoints'].find { |s| s[endpoint_type] }[endpoint_type] - identity_url = identity_service['endpoints'].find { |s| s['publicURL'] }['publicURL'] if identity_service - - { - user: user, - tenant: tenant, - identity_public_endpoint: identity_url, - server_management_url: management_url, - token: body['access']['token']['id'], - expires: body['access']['token']['expires'], - current_user_id: body['access']['user']['id'], - unscoped_token: options[:unscoped_token] - } - end - - # Keystone Style Auth - def self.authenticate_v3(options, connection_options = {}) - uri = options[:openstack_auth_uri] - project_name = options[:openstack_project_name] - service_type = options[:openstack_service_type] - service_name = options[:openstack_service_name] - identity_service_type = options[:openstack_identity_service_type] - endpoint_type = map_endpoint_type(options[:openstack_endpoint_type] || 'publicURL') - openstack_region = options[:openstack_region] - - token, body = retrieve_tokens_v3 options, connection_options - - service = get_service_v3(body, service_type, service_name, openstack_region, options) - - options[:unscoped_token] = token - - unless service - unless project_name - request_body = { - expects: [200], - headers: { 'Content-Type' => 'application/json', - 'Accept' => 'application/json', - 'X-Auth-Token' => token }, - method: 'GET' - } - user_id = body['token']['user']['id'] - project_uri = uri.clone - project_uri.path = uri.path.sub('/auth/tokens', "/users/#{user_id}/projects") - project_uri_param = "#{project_uri.scheme}://#{project_uri.host}:#{project_uri.port}#{project_uri.path}" - response = Fog::Core::Connection.new(project_uri_param, false, connection_options).request(request_body) - - projects_body = Fog::JSON.decode(response.body) - if projects_body['projects'].empty? - options[:openstack_domain_id] = body['token']['user']['domain']['id'] - else - options[:openstack_project_id] = projects_body['projects'].first['id'] - options[:openstack_project_name] = projects_body['projects'].first['name'] - options[:openstack_domain_id] = projects_body['projects'].first['domain_id'] - end - end - - token, body = retrieve_tokens_v3(options, connection_options) - service = get_service_v3(body, service_type, service_name, openstack_region, options) - end - - # If no identity endpoint is found, try the auth uri (slicing /auth/tokens) - # It covers the case where identityv3 endpoint is not present in the catalog but we have to use it - unless service - if service_type.include? "identity" - identity_uri = uri.to_s.sub('/auth/tokens', '') - response = Fog::Core::Connection.new(identity_uri, false, connection_options).request(method: 'GET') - if response.status == 200 - service = { - "endpoints" => [{ - "url" => identity_uri, - "region" => openstack_region, - "interface" => endpoint_type - }], - "type" => service_type, - "name" => service_name - } - end - end - end - - unless service - available_services = body['token']['catalog'].map do |service| - service['type'] - end.sort.join ', ' - - available_regions = body['token']['catalog'].map do |service| - service['endpoints'].map do |endpoint| - endpoint['region'] - end.uniq - end.uniq.sort.join ', ' - - missing = service_type.join ', ' - - message = "Could not find service #{missing}#{(' in region ' + openstack_region) if openstack_region}." + - " Have #{available_services}#{(' in regions ' + available_regions) if openstack_region}" - - raise Fog::Errors::NotFound, message - end - - service['endpoints'] = service['endpoints'].select do |endpoint| - endpoint['region'] == openstack_region && endpoint['interface'] == endpoint_type - end if openstack_region - - if service['endpoints'].empty? - raise Fog::Errors::NotFound.new("No endpoints available for region '#{openstack_region}'") - end if openstack_region - - regions = service["endpoints"].map { |e| e['region'] }.uniq - if regions.count > 1 - raise Fog::Errors::NotFound.new("Multiple regions available choose one of these '#{regions.join(',')}'") - end - - identity_service = get_service_v3(body, identity_service_type, nil, nil, openstack_endpoint_path_matches: /\/v3/) if identity_service_type - - management_url = service['endpoints'].find { |e| e['interface'] == endpoint_type }['url'] - identity_url = identity_service['endpoints'].find { |e| e['interface'] == 'public' }['url'] if identity_service - - if body['token']['project'] - tenant = body['token']['project'] - elsif body['token']['user']['project'] - tenant = body['token']['user']['project'] - end - - return { - user: body['token']['user']['name'], - tenant: tenant, - identity_public_endpoint: identity_url, - server_management_url: management_url, - token: token, - expires: body['token']['expires_at'], - current_user_id: body['token']['user']['id'], - unscoped_token: options[:unscoped_token] - } - end - - def self.get_service(body, service_type = [], service_name = nil) - if not body['access'].nil? - body['access']['serviceCatalog'].find do |s| - if service_name.nil? || service_name.empty? - service_type.include?(s['type']) - else - service_type.include?(s['type']) && (s['name'] == service_name) - end - end - elsif not body['token']['catalog'].nil? - body['token']['catalog'].find do |s| - if service_name.nil? || service_name.empty? - service_type.include?(s['type']) - else - service_type.include?(s['type']) && (s['name'] == service_name) - end - end - - end - end - - def self.retrieve_tokens_v2(options, connection_options = {}) - api_key = options[:openstack_api_key].to_s - username = options[:openstack_username].to_s - tenant_name = options[:openstack_tenant].to_s - auth_token = options[:openstack_auth_token] || options[:unscoped_token] - uri = options[:openstack_auth_uri] - omit_default_port = options[:openstack_auth_omit_default_port] - - identity_v2_connection = Fog::Core::Connection.new(uri.to_s, false, connection_options) - request_body = { auth: {} } - - if auth_token - request_body[:auth][:token] = { - id: auth_token - } - else - request_body[:auth][:passwordCredentials] = { - username: username, - password: api_key - } - end - request_body[:auth][:tenantName] = tenant_name if tenant_name - - request = { - expects: [200, 204], - headers: { 'Content-Type' => 'application/json' }, - body: Fog::JSON.encode(request_body), - method: 'POST', - path: (uri.path && (not uri.path.empty?)) ? uri.path : 'v2.0' - } - request[:omit_default_port] = omit_default_port unless omit_default_port.nil? - - response = identity_v2_connection.request(request) - - Fog::JSON.decode(response.body) - end - - def self.retrieve_tokens_v3(options, connection_options = {}) - api_key = options[:openstack_api_key].to_s - username = options[:openstack_username].to_s - userid = options[:openstack_userid] - domain_id = options[:openstack_domain_id] - domain_name = options[:openstack_domain_name] - project_domain = options[:openstack_project_domain] - project_domain_id = options[:openstack_project_domain_id] - user_domain = options[:openstack_user_domain] - user_domain_id = options[:openstack_user_domain_id] - project_name = options[:openstack_project_name] - project_id = options[:openstack_project_id] - auth_token = options[:openstack_auth_token] || options[:unscoped_token] - uri = options[:openstack_auth_uri] - omit_default_port = options[:openstack_auth_omit_default_port] - cache_ttl = options[:openstack_cache_ttl] || 0 - - connection = Fog::Core::Connection.new(uri.to_s, false, connection_options) - request_body = { auth: {} } - - scope = {} - - if project_name || project_id - scope[:project] = if project_id.nil? then - if project_domain || project_domain_id - { name: project_name, domain: project_domain_id.nil? ? { name: project_domain } : { id: project_domain_id } } - else - { name: project_name, domain: domain_id.nil? ? { name: domain_name } : { id: domain_id } } - end - else - { id: project_id } - end - elsif domain_name || domain_id - scope[:domain] = domain_id.nil? ? { name: domain_name } : { id: domain_id } - end - - if auth_token - request_body[:auth][:identity] = { - methods: %w{token}, - token: { - id: auth_token - } - } - else - request_body[:auth][:identity] = { - methods: %w{password}, - password: { - user: { - password: api_key - } - } - } - - if userid - request_body[:auth][:identity][:password][:user][:id] = userid - else - if user_domain || user_domain_id - request_body[:auth][:identity][:password][:user][:domain] = user_domain_id.nil? ? { name: user_domain } : { id: user_domain_id } - elsif domain_name || domain_id - request_body[:auth][:identity][:password][:user][:domain] = domain_id.nil? ? { name: domain_name } : { id: domain_id } - end - request_body[:auth][:identity][:password][:user][:name] = username - end - - end - request_body[:auth][:scope] = scope unless scope.empty? - - path = (uri.path && (not uri.path.empty?)) ? uri.path : 'v3' - - response, expires = Fog::OpenStack.token_cache[{ body: request_body, path: path }] if cache_ttl > 0 - - unless response && expires > Time.now - request = { - expects: [201], - headers: { 'Content-Type' => 'application/json' }, - body: Fog::JSON.encode(request_body), - method: 'POST', - path: path - } - request[:omit_default_port] = omit_default_port unless omit_default_port.nil? - - response = connection.request(request) - if cache_ttl > 0 - cache = Fog::OpenStack.token_cache - cache[{ body: request_body, path: path }] = response, Time.now + cache_ttl - Fog::OpenStack.token_cache = cache - end - end - - [response.headers["X-Subject-Token"], Fog::JSON.decode(response.body)] - end - - def self.get_service_v3(hash, service_type = [], service_name = nil, region = nil, options = {}) - # Find all services matching any of the types in service_type, filtered by service_name if it's non-nil - services = hash['token']['catalog'].find_all do |s| - if service_name.nil? || service_name.empty? - service_type.include?(s['type']) - else - service_type.include?(s['type']) && (s['name'] == service_name) - end - end if hash['token']['catalog'] - - # Filter the found services by region (if specified) and whether the endpoint path matches the given regex (e.g. /\/v3/) - services.find do |s| - s['endpoints'].any? { |ep| endpoint_region?(ep, region) && endpoint_path_match?(ep, options[:openstack_endpoint_path_matches]) } - end if services - end - def self.endpoint_region?(endpoint, region) region.nil? || endpoint['region'] == region end - def self.endpoint_path_match?(endpoint, match_regex) - match_regex.nil? || URI(endpoint['url']).path =~ match_regex - end - def self.get_supported_version(supported_versions, uri, auth_token, connection_options = {}) supported_version = get_version(supported_versions, uri, auth_token, connection_options) version = supported_version['id'] if supported_version @@ -562,25 +98,18 @@ def self.escape(str, extra_exclude_chars = '') end end - def self.map_endpoint_type type - case type - when "publicURL" - "public" - when "internalURL" - "internal" - when "adminURL" - "admin" - end - end - def self.get_version(supported_versions, uri, auth_token, connection_options = {}) version_cache = "#{uri}#{supported_versions}" return @version[version_cache] if @version && @version[version_cache] - connection = Fog::Core::Connection.new("#{uri.scheme}://#{uri.host}:#{uri.port}", false, connection_options) + + # To allow version discovery we need a "version less" endpoint + path = uri.path.gsub(/\/v([1-9]+\d*)(\.[1-9]+\d*)*.*$/, '/') + url = "#{uri.scheme}://#{uri.host}:#{uri.port}#{path}" + connection = Fog::Core::Connection.new(url, false, connection_options) response = connection.request( expects: [200, 204, 300], headers: { 'Content-Type' => 'application/json', - 'Accept' => 'application/json', + 'Accept' => 'application/json', 'X-Auth-Token' => auth_token }, method: 'GET' ) @@ -592,10 +121,17 @@ def self.get_version(supported_versions, uri, auth_token, connection_options = { end def self.extract_version_from_body(body, supported_versions) - return nil if body['versions'].empty? - versions = body['versions'].kind_of?(Array) ? body['versions'] : body['versions']['values'] + versions = [] + unless body['versions'].nil? || body['versions'].empty? + versions = body['versions'].kind_of?(Array) ? body['versions'] : body['versions']['values'] + end + # Some version API would return single endpoint rather than endpoints list, try to get it via 'version'. + unless body['version'].nil? || !versions.empty? + versions = [body['version']] + end version = nil - # order is important, preffered status should be first + + # order is important, preferred status should be first %w(CURRENT stable SUPPORTED DEPRECATED).each do |status| version = versions.find { |x| x['id'].match(supported_versions) && (x['status'] == status) } break if version diff --git a/lib/fog/openstack/auth/catalog.rb b/lib/fog/openstack/auth/catalog.rb new file mode 100644 index 000000000..cbc42e07b --- /dev/null +++ b/lib/fog/openstack/auth/catalog.rb @@ -0,0 +1,68 @@ +module Fog + module OpenStack + module Auth + module Catalog + attr_reader :payload + + class CatalogError < RuntimeError; end + class EndpointError < RuntimeError; end + class ServiceTypeError < RuntimeError; end + + def initialize(payload) + @payload = payload + end + + def get_endpoint_url(names, interfaces, region = nil) + # TODO: Inject OpenStack Service Types Authority + names_list = if names.kind_of?(String) + [names] + else + names + end + entries = get_by_type(names_list) + raise ServiceTypeError, 'No endpoint match' if entries.empty? + + interfaces_list = if interfaces.kind_of?(String) + [interfaces] + else + interfaces + end + + list = [] + interfaces_list.each do |interface| + val = get_endpoint(entries, interface, region) + list << val if val + end + + raise EndpointError, 'No endpoint found' if list.empty? + + list[0] + end + + private + + def get_by_type(names) + raise CatalogError, 'Empty content' unless @payload + + @payload.select do |e| + names.include?(e['type']) + end + end + + def get_endpoint(entries, interface, region) + list = [] + entries.each do |type| + next unless type.key?('endpoints') + + type['endpoints'].each do |endpoint| + list << endpoint_url(endpoint, interface) if endpoint_match?(endpoint, interface, region) + end + end + raise EndpointError, 'Multiple endpoints found' if list.size > 1 + + list[0] + end + end + end + end +end diff --git a/lib/fog/openstack/auth/catalog/v2.rb b/lib/fog/openstack/auth/catalog/v2.rb new file mode 100644 index 000000000..7cdeab41a --- /dev/null +++ b/lib/fog/openstack/auth/catalog/v2.rb @@ -0,0 +1,23 @@ +require 'fog/openstack/auth/catalog' + +module Fog + module OpenStack + module Auth + module Catalog + class V2 + include Fog::OpenStack::Auth::Catalog + + def endpoint_match?(endpoint, interface, region) + if endpoint.key?("#{interface}URL") + true unless !region.nil? && endpoint['region'] != region + end + end + + def endpoint_url(endpoint, interface) + endpoint["#{interface}URL"] + end + end + end + end + end +end diff --git a/lib/fog/openstack/auth/catalog/v3.rb b/lib/fog/openstack/auth/catalog/v3.rb new file mode 100644 index 000000000..45a2169f2 --- /dev/null +++ b/lib/fog/openstack/auth/catalog/v3.rb @@ -0,0 +1,23 @@ +require 'fog/openstack/auth/catalog' + +module Fog + module OpenStack + module Auth + module Catalog + class V3 + include Fog::OpenStack::Auth::Catalog + + def endpoint_match?(endpoint, interface, region) + if endpoint['interface'] == interface + true unless !region.nil? && endpoint['region'] != region + end + end + + def endpoint_url(endpoint, _ignored_interface) + endpoint['url'] + end + end + end + end + end +end diff --git a/lib/fog/openstack/auth/name.rb b/lib/fog/openstack/auth/name.rb new file mode 100644 index 000000000..1567c4b4f --- /dev/null +++ b/lib/fog/openstack/auth/name.rb @@ -0,0 +1,67 @@ +module Fog + module OpenStack + module Auth + class CredentialsError < RuntimeError; end + + module Domain + attr_accessor :domain + + def identity + data = {} + if !id.nil? + data.merge!(to_h(:id)) + elsif !name.nil? && !domain.nil? + data.merge!(to_h(:name)) + data[:domain] = @domain.identity + else + raise Fog::OpenStack::Auth::CredentialsError, + "#{self.class}: An Id, or a name with its domain, must be provided" + end + data + end + end + + Name = Struct.new(:id, :name) + class Name + def identity + return to_h(:id) unless id.nil? + return to_h(:name) unless name.nil? + + raise Fog::OpenStack::Auth::CredentialsError, "#{self.class}: No available id or name" + end + + def to_h(var) + { var => send(var) } + end + end + + class DomainScope < Name + def identity + { domain: super } + end + end + + class ProjectScope < Name + include Fog::OpenStack::Auth::Domain + + def identity + { project: super } + end + end + + class User < Name + include Fog::OpenStack::Auth::Domain + + attr_accessor :password + + def identity + data = super + raise CredentialsError, "#{self.class}: No password available" if password.nil? + + data.merge!(to_h(:password)) + { user: data } + end + end + end + end +end diff --git a/lib/fog/openstack/auth/token.rb b/lib/fog/openstack/auth/token.rb new file mode 100644 index 000000000..d5d14bb4a --- /dev/null +++ b/lib/fog/openstack/auth/token.rb @@ -0,0 +1,71 @@ +require 'fog/openstack/auth/token/v2' +require 'fog/openstack/auth/token/v3' +require 'fog/openstack/auth/catalog/v2' +require 'fog/openstack/auth/catalog/v3' + +module Fog + module OpenStack + module Auth + module Token + attr_reader :catalog, :expires, :tenant, :token, :user, :data + + class ExpiryError < RuntimeError; end + class StandardError < RuntimeError; end + class URLError < RuntimeError; end + + def self.build(auth, options) + if auth[:openstack_identity_api_version] =~ /(v)*2(\.0)*/i || + auth[:openstack_tenant_id] || auth[:openstack_tenant] + Fog::OpenStack::Auth::Token::V2.new(auth, options) + else + Fog::OpenStack::Auth::Token::V3.new(auth, options) + end + end + + def initialize(auth, options) + raise URLError, 'No URL provided' if auth[:openstack_auth_url].nil? || auth[:openstack_auth_url].empty? + + @creds = { + data: build_credentials(auth), + uri: URI.parse(auth[:openstack_auth_url]) + } + response = authenticate(@creds, options) + set(response) + end + + def get + set(authenticate(@creds, {})) if expired? + @token + end + + private + + def authenticate(creds, options) + connection = Fog::Core::Connection.new(creds[:uri].to_s, false, options) + + request = { + expects: [200, 201], + headers: { 'Content-Type' => 'application/json' }, + body: Fog::JSON.encode(creds[:data]), + method: 'POST', + path: creds[:uri].path + prefix_path(creds[:uri]) + path + } + + connection.request(request) + end + + def expired? + if @expires.nil? || @expires.empty? + raise ExpiryError, 'Missing token expiration data' + end + + Time.parse(@expires) < Time.now.utc + end + + def refresh + raise StandardError, "__method__ not implemented yet!" + end + end + end + end +end diff --git a/lib/fog/openstack/auth/token/v2.rb b/lib/fog/openstack/auth/token/v2.rb new file mode 100644 index 000000000..e74578770 --- /dev/null +++ b/lib/fog/openstack/auth/token/v2.rb @@ -0,0 +1,77 @@ +require 'fog/openstack/auth/token' +require 'fog/openstack/auth/name' + +module Fog + module OpenStack + module Auth + module Token + class CredentialsError < RuntimeError; end + + class V2 + include Fog::OpenStack::Auth::Token + attr_reader :tenant + + def credentials + if @token + identity = { 'token' => { 'id' => @token } } + else + raise CredentialsError, "#{self.class}: User name is required" if @user.name.nil? + raise CredentialsError, "#{self.class}: User password is required" if @user.password.nil? + + identity = { 'passwordCredentials' => user_credentials } + end + + if @tenant.id + identity['tenantId'] = @tenant.id.to_s + elsif @tenant.name + identity['tenantName'] = @tenant.name.to_s + end + + { 'auth' => identity } + end + + def prefix_path(uri) + if uri.path =~ %r{/v2(\.0)*(/)*.*$} + '' + else + '/v2.0' + end + end + + def path + '/tokens' + end + + def user_credentials + { + 'username' => @user.name.to_s, + 'password' => @user.password + } + end + + def set(response) + @data = Fog::JSON.decode(response.body) + @token = @data['access']['token']['id'] + @expires = @data['access']['token']['expires'] + @tenant = @data['access']['token']['tenant'] + @user = @data['access']['user'] + catalog = @data['access']['serviceCatalog'] + @catalog = Fog::OpenStack::Auth::Catalog::V2.new(catalog) if catalog + end + + def build_credentials(auth) + if auth[:openstack_auth_token] + @token = auth[:openstack_auth_token] + else + @user = Fog::OpenStack::Auth::User.new(auth[:openstack_userid], auth[:openstack_username]) + @user.password = auth[:openstack_api_key] + end + + @tenant = Fog::OpenStack::Auth::Name.new(auth[:openstack_tenant_id], auth[:openstack_tenant]) + credentials + end + end + end + end + end +end diff --git a/lib/fog/openstack/auth/token/v3.rb b/lib/fog/openstack/auth/token/v3.rb new file mode 100644 index 000000000..2f85bbe5b --- /dev/null +++ b/lib/fog/openstack/auth/token/v3.rb @@ -0,0 +1,124 @@ +require 'fog/openstack/auth/token' +require 'fog/openstack/auth/name' + +module Fog + module OpenStack + module Auth + module Token + class V3 + include Fog::OpenStack::Auth::Token + attr_reader :domain, :project + + # Default Domain ID + DOMAIN_ID = 'default'.freeze + + def credentials + identity = if @token + { + 'methods' => ['token'], + 'token' => { 'id' => @token } + } + else + { + 'methods' => ['password'], + 'password' => @user.identity + } + end + + if scope + { + 'auth' => { + 'identity' => identity, + 'scope' => scope + } + } + else + { 'auth' => { 'identity' => identity } } + end + end + + def prefix_path(uri) + if uri.path =~ %r{/v3(/)*.*$} + '' + else + '/v3' + end + end + + def path + '/auth/tokens' + end + + def scope + return @project.identity if @project + return @domain.identity if @domain + end + + def set(response) + @data = Fog::JSON.decode(response.body) + @token = response.headers['x-subject-token'] + @expires = @data['token']['expires_at'] + @tenant = @data['token']['project'] + @user = @data['token']['user'] + catalog = @data['token']['catalog'] + if catalog + @catalog = Fog::OpenStack::Auth::Catalog::V3.new(catalog) + end + end + + def build_credentials(auth) + if auth[:openstack_project_id] || auth[:openstack_project_name] + # project scoped + @project = Fog::OpenStack::Auth::ProjectScope.new( + auth[:openstack_project_id], + auth[:openstack_project_name] + ) + @project.domain = if auth[:openstack_project_domain_id] || auth[:openstack_project_domain_name] + Fog::OpenStack::Auth::Name.new( + auth[:openstack_project_domain_id], + auth[:openstack_project_domain_name] + ) + elsif auth[:openstack_domain_id] || auth[:openstack_domain_name] + Fog::OpenStack::Auth::Name.new( + auth[:openstack_domain_id], + auth[:openstack_domain_name] + ) + else + Fog::OpenStack::Auth::Name.new(DOMAIN_ID, nil) + end + elsif auth[:openstack_domain_id] || auth[:openstack_domain_name] + # domain scoped + @domain = Fog::OpenStack::Auth::DomainScope.new( + auth[:openstack_domain_id], + auth[:openstack_domain_name] + ) + end + + if auth[:openstack_auth_token] + @token = auth[:openstack_auth_token] + else + @user = Fog::OpenStack::Auth::User.new(auth[:openstack_userid], auth[:openstack_username]) + @user.password = auth[:openstack_api_key] + + @user.domain = if auth[:openstack_user_domain_id] || auth[:openstack_user_domain_name] + Fog::OpenStack::Auth::Name.new( + auth[:openstack_user_domain_id], + auth[:openstack_user_domain_name] + ) + elsif auth[:openstack_domain_id] || auth[:openstack_domain_name] + Fog::OpenStack::Auth::Name.new( + auth[:openstack_domain_id], + auth[:openstack_domain_name] + ) + else + Fog::OpenStack::Auth::Name.new(DOMAIN_ID, nil) + end + end + + credentials + end + end + end + end + end +end diff --git a/lib/fog/openstack/baremetal.rb b/lib/fog/openstack/baremetal.rb new file mode 100644 index 000000000..117a7f7e2 --- /dev/null +++ b/lib/fog/openstack/baremetal.rb @@ -0,0 +1,260 @@ +module Fog + module OpenStack + class Baremetal < Fog::Service + SUPPORTED_VERSIONS = /(.)*/.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version + + ## MODELS + # + model_path 'fog/openstack/baremetal/models' + model :chassis + collection :chassis_collection + model :driver + collection :drivers + model :node + collection :nodes + model :port + collection :ports + + ## REQUESTS + # + request_path 'fog/openstack/baremetal/requests' + + # Node requests + request :create_node + request :delete_node + request :get_node + request :list_nodes + request :list_nodes_detailed + request :patch_node + request :set_node_power_state + request :set_node_provision_state + request :set_node_maintenance + request :unset_node_maintenance + + # Chassis requests + request :create_chassis + request :delete_chassis + request :get_chassis + request :list_chassis + request :list_chassis_detailed + request :patch_chassis + + # Driver requests + request :get_driver + request :get_driver_properties + request :list_drivers + + # Port requests + request :create_port + request :delete_port + request :get_port + request :list_ports + request :list_ports_detailed + request :patch_port + + ## TODO not implemented API requests: + ## Chassis + # request :list_chassis_nodes + # request :list_chassis_nodes_details + + ## Node requests + # request :validate_node + # request :get_boot_device + # request :set_boot_device + # request :list_supported_boot_devices + # request :list_node_states + # request :get_console_info + # request :change_console_state + # request :get_vendor_passthru_methods + + ## Driver requests + # request :get_vendor_passthru_methods + + class Mock + def self.data + @data ||= Hash.new do |hash, key| + chassis_uuid = Fog::UUID.uuid + instance_uuid = Fog::UUID.uuid + node_uuid = Fog::UUID.uuid + + hash[key] = { + chassis_collection: [ + { + "created_at" => "2000-01-01T12:00:00", + "description" => "Sample chassis", + "extra" => {}, + "links" => [ + { + "href" => "http://localhost:6385/v1/chassis/eaaca217-e7d8-47b4-bb41-3f99f20eed89", + "rel" => "self" + }, + { + "href" => "http://localhost:6385/chassis/eaaca217-e7d8-47b4-bb41-3f99f20eed89", + "rel" => "bookmark" + } + ], + "nodes" => [ + { + "href" => "http://localhost:6385/v1/chassis/eaaca217-e7d8-47b4-bb41-3f99f20eed89/nodes", + "rel" => "self" + }, + { + "href" => "http://localhost:6385/chassis/eaaca217-e7d8-47b4-bb41-3f99f20eed89/nodes", + "rel" => "bookmark" + } + ], + "updated_at" => "2000-01-01T12:00:00", + "uuid" => chassis_uuid + } + ], + drivers: [ + { + "hosts" => [ + "fake-host" + ], + "name" => "sample-driver" + } + ], + nodes: [{ + "chassis_uuid" => chassis_uuid, + "console_enabled" => false, + "created_at" => "2000-01-01T12:00:00", + "driver" => "sample-driver", + "driver_info" => {}, + "extra" => {}, + "instance_info" => {}, + "instance_uuid" => instance_uuid, + "last_error" => nil, + "links" => [ + { + "href" => "http://localhost:6385/v1/nodes/1be26c0b-03f2-4d2e-ae87-c02d7f33c123", + "rel" => "self" + }, + { + "href" => "http://localhost:6385/nodes/1be26c0b-03f2-4d2e-ae87-c02d7f33c123", + "rel" => "bookmark" + } + ], + "maintenance" => false, + "maintenance_reason" => nil, + "ports" => [ + { + "href" => "http://localhost:6385/v1/nodes/1be26c0b-03f2-4d2e-ae87-c02d7f33c123/ports", + "rel" => "self" + }, + { + "href" => "http://localhost:6385/nodes/1be26c0b-03f2-4d2e-ae87-c02d7f33c123/ports", + "rel" => "bookmark" + } + ], + "power_state" => "power on", + "properties" => { + "cpus" => "1", + "local_gb" => "10", + "memory_mb" => "1024" + }, + "provision_state" => "active", + "provision_updated_at" => "2000-01-01T12:00:00", + "reservation" => nil, + "target_power_state" => nil, + "target_provision_state" => nil, + "updated_at" => "2000-01-01T12:00:00", + "uuid" => node_uuid + }], + ports: [{ + "address" => "fe:54:00:77:07:d9", + "created_at" => "2014-12-23T19:35:30.734116", + "extra" => { + "foo" => "bar" + }, + "links" => [ + { + "href" => "http://localhost:6385/v1/ports/27e3153e-d5bf-4b7e-b517-fb518e17f34c", + "rel" => "self" + }, + { + "href" => "http://localhost:6385/ports/27e3153e-d5bf-4b7e-b517-fb518e17f34c", + "rel" => "bookmark" + } + ], + "node_uuid" => "7ae81bb3-dec3-4289-8d6c-da80bd8001ae", + "updated_at" => "2014-12-23T19:35:30.734119", + "uuid" => "27e3153e-d5bf-4b7e-b517-fb518e17f34c" + }] + } + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 9292 + management_url.path = '/v1' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].find { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_region: @openstack_region, + openstack_management_url: @openstack_management_url } + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Baremetal::NotFound + end + + def default_service_type + %w[baremetal] + end + end + end + end +end diff --git a/lib/fog/baremetal/openstack/models/chassis.rb b/lib/fog/openstack/baremetal/models/chassis.rb similarity index 96% rename from lib/fog/baremetal/openstack/models/chassis.rb rename to lib/fog/openstack/baremetal/models/chassis.rb index 006501962..e096109eb 100644 --- a/lib/fog/baremetal/openstack/models/chassis.rb +++ b/lib/fog/openstack/baremetal/models/chassis.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Chassis < Fog::OpenStack::Model identity :uuid diff --git a/lib/fog/openstack/baremetal/models/chassis_collection.rb b/lib/fog/openstack/baremetal/models/chassis_collection.rb new file mode 100644 index 000000000..d717a3306 --- /dev/null +++ b/lib/fog/openstack/baremetal/models/chassis_collection.rb @@ -0,0 +1,48 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/baremetal/models/chassis' + +module Fog + module OpenStack + class Baremetal + class ChassisCollection < Fog::OpenStack::Collection + model Fog::OpenStack::Baremetal::Chassis + + def all(options = {}) + load_response(service.list_chassis_detailed(options), 'chassis') + end + + def summary(options = {}) + load_response(service.list_chassis(options), 'chassis') + end + + def details(options = {}) + Fog::Logger.deprecation("Calling OpenStack[:baremetal].chassis_collection.details will be removed, "\ + " call .chassis_collection.all for detailed list.") + all(options) + end + + def find_by_uuid(uuid) + new(service.get_chassis(uuid).body) + end + alias get find_by_uuid + + def destroy(uuid) + chassis = find_by_id(uuid) + chassis.destroy + end + + def method_missing(method_sym, *arguments, &block) + if method_sym.to_s =~ /^find_by_(.*)$/ + load(service.list_chassis_detailed(Regexp.last_match(1) => arguments.first).body['chassis']) + else + super + end + end + + def respond_to_missing?(method_sym, include_private = false) + method_sym.to_s.start_with?('find_by_') || super + end + end + end + end +end diff --git a/lib/fog/baremetal/openstack/models/driver.rb b/lib/fog/openstack/baremetal/models/driver.rb similarity index 91% rename from lib/fog/baremetal/openstack/models/driver.rb rename to lib/fog/openstack/baremetal/models/driver.rb index 529ae2224..8693ce329 100644 --- a/lib/fog/baremetal/openstack/models/driver.rb +++ b/lib/fog/openstack/baremetal/models/driver.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Driver < Fog::OpenStack::Model identity :name diff --git a/lib/fog/openstack/baremetal/models/drivers.rb b/lib/fog/openstack/baremetal/models/drivers.rb new file mode 100644 index 000000000..567ba9549 --- /dev/null +++ b/lib/fog/openstack/baremetal/models/drivers.rb @@ -0,0 +1,21 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/baremetal/models/driver' + +module Fog + module OpenStack + class Baremetal + class Drivers < Fog::OpenStack::Collection + model Fog::OpenStack::Baremetal::Driver + + def all(options = {}) + load_response(service.list_drivers(options), 'drivers') + end + + def find_by_name(name) + new(service.get_driver(name).body) + end + alias get find_by_name + end + end + end +end diff --git a/lib/fog/baremetal/openstack/models/node.rb b/lib/fog/openstack/baremetal/models/node.rb similarity index 98% rename from lib/fog/baremetal/openstack/models/node.rb rename to lib/fog/openstack/baremetal/models/node.rb index 18c5c834f..01a2ba237 100644 --- a/lib/fog/baremetal/openstack/models/node.rb +++ b/lib/fog/openstack/baremetal/models/node.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Node < Fog::OpenStack::Model identity :uuid diff --git a/lib/fog/openstack/baremetal/models/nodes.rb b/lib/fog/openstack/baremetal/models/nodes.rb new file mode 100644 index 000000000..f1dbab14a --- /dev/null +++ b/lib/fog/openstack/baremetal/models/nodes.rb @@ -0,0 +1,48 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/baremetal/models/node' + +module Fog + module OpenStack + class Baremetal + class Nodes < Fog::OpenStack::Collection + model Fog::OpenStack::Baremetal::Node + + def all(options = {}) + load_response(service.list_nodes_detailed(options), 'nodes') + end + + def summary(options = {}) + load_response(service.list_nodes(options), 'nodes') + end + + def details(options = {}) + Fog::Logger.deprecation("Calling OpenStack[:baremetal].nodes.details will be removed, "\ + " call .nodes.all for detailed list.") + load(service.list_nodes_detailed(options).body['nodes']) + end + + def find_by_uuid(uuid) + new(service.get_node(uuid).body) + end + alias get find_by_uuid + + def destroy(uuid) + node = find_by_uuid(uuid) + node.destroy + end + + def method_missing(method_sym, *arguments, &block) + if method_sym.to_s =~ /^find_by_(.*)$/ + load(service.list_nodes_detailed(Regexp.last_match(1) => arguments.first).body['nodes']) + else + super + end + end + + def respond_to_missing?(method_sym, include_private = false) + method_sym.to_s.start_with?('find_by_') || super + end + end + end + end +end diff --git a/lib/fog/openstack/baremetal/models/port.rb b/lib/fog/openstack/baremetal/models/port.rb new file mode 100644 index 000000000..479af5bd0 --- /dev/null +++ b/lib/fog/openstack/baremetal/models/port.rb @@ -0,0 +1,50 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Baremetal + class Port < Fog::OpenStack::Model + identity :uuid + + attribute :address + attribute :uuid + + # detailed + attribute :created_at + attribute :updated_at + attribute :extra + attribute :node_uuid + + def create + requires :address, :node_uuid + merge_attributes(service.create_port(attributes).body) + self + end + + def update(patch = nil) + requires :uuid, :address, :node_uuid + if patch + merge_attributes(service.patch_port(uuid, patch).body) + else + # TODO: implement update_node method using PUT method and self.attributes + # once it is supported by Ironic + raise ArgumentError, + 'You need to provide patch attribute. Ironic does not support update by hash yet, only by jsonpatch.' + end + self + end + + def destroy + requires :uuid + service.delete_port(uuid) + true + end + + def metadata + requires :uuid + service.get_port(uuid).headers + end + end + end + end +end diff --git a/lib/fog/openstack/baremetal/models/ports.rb b/lib/fog/openstack/baremetal/models/ports.rb new file mode 100644 index 000000000..d7515b904 --- /dev/null +++ b/lib/fog/openstack/baremetal/models/ports.rb @@ -0,0 +1,48 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/baremetal/models/port' + +module Fog + module OpenStack + class Baremetal + class Ports < Fog::OpenStack::Collection + model Fog::OpenStack::Baremetal::Port + + def all(options = {}) + load_response(service.list_ports_detailed(options), 'ports') + end + + def summary(options = {}) + load_response(service.list_ports(options), 'ports') + end + + def details(options = {}) + Fog::Logger.deprecation("Calling OpenStack[:baremetal].ports.details will be removed, "\ + " call .ports.all for detailed list.") + load(service.list_ports_detailed(options).body['ports']) + end + + def find_by_uuid(uuid) + new(service.get_port(uuid).body) + end + alias get find_by_uuid + + def destroy(uuid) + port = find_by_id(uuid) + port.destroy + end + + def method_missing(method_sym, *arguments, &block) + if method_sym.to_s =~ /^find_by_(.*)$/ + load(service.list_ports_detailed(Regexp.last_match(1) => arguments.first).body['ports']) + else + super + end + end + + def respond_to_missing?(method_sym, include_private = false) + method_sym.to_s.start_with?('find_by_') || super + end + end + end + end +end diff --git a/lib/fog/baremetal/openstack/requests/create_chassis.rb b/lib/fog/openstack/baremetal/requests/create_chassis.rb similarity index 85% rename from lib/fog/baremetal/openstack/requests/create_chassis.rb rename to lib/fog/openstack/baremetal/requests/create_chassis.rb index ba97f6498..a4984fea6 100644 --- a/lib/fog/baremetal/openstack/requests/create_chassis.rb +++ b/lib/fog/openstack/baremetal/requests/create_chassis.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real # Create a new chassis # @@ -31,9 +31,9 @@ def create_chassis(_attributes) response.status = 200 response.headers = { "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new } response.body = data[:chassis_collection].first response diff --git a/lib/fog/baremetal/openstack/requests/create_node.rb b/lib/fog/openstack/baremetal/requests/create_node.rb similarity index 89% rename from lib/fog/baremetal/openstack/requests/create_node.rb rename to lib/fog/openstack/baremetal/requests/create_node.rb index 295aed80e..973120b67 100644 --- a/lib/fog/baremetal/openstack/requests/create_node.rb +++ b/lib/fog/openstack/baremetal/requests/create_node.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real # Create a new node # @@ -41,9 +41,9 @@ def create_node(_attributes) response.status = 200 response.headers = { "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new } response.body = data[:nodes].first response diff --git a/lib/fog/openstack/baremetal/requests/create_port.rb b/lib/fog/openstack/baremetal/requests/create_port.rb new file mode 100644 index 000000000..9df26b816 --- /dev/null +++ b/lib/fog/openstack/baremetal/requests/create_port.rb @@ -0,0 +1,46 @@ +module Fog + module OpenStack + class Baremetal + class Real + # Create a new port + # + # === Attributes === + # address = MAC Address for this port + # extra = Record arbitrary key/value metadata. Can be specified multiple times + # node_uuid = UUID of the node that this port belongs to + def create_port(attributes) + desired_options = [ + :address, + :extra, + :node_uuid + ] + + # Filter only allowed creation attributes + data = attributes.select { |key, _value| desired_options.include?(key.to_sym) } + + request( + body: Fog::JSON.encode(data), + expects: [200, 201], + method: 'POST', + path: 'ports' + ) + end + end + + class Mock + def create_port(_attributes) + response = Excon::Response.new + response.status = 200 + response.headers = { + "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new + } + response.body = data[:ports].first + response + end + end + end + end +end diff --git a/lib/fog/baremetal/openstack/requests/delete_chassis.rb b/lib/fog/openstack/baremetal/requests/delete_chassis.rb similarity index 92% rename from lib/fog/baremetal/openstack/requests/delete_chassis.rb rename to lib/fog/openstack/baremetal/requests/delete_chassis.rb index b2ba49dde..452e088cb 100644 --- a/lib/fog/baremetal/openstack/requests/delete_chassis.rb +++ b/lib/fog/openstack/baremetal/requests/delete_chassis.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def delete_chassis(chassis_uuid) data = { chassis_uuid: chassis_uuid } diff --git a/lib/fog/baremetal/openstack/requests/delete_node.rb b/lib/fog/openstack/baremetal/requests/delete_node.rb similarity index 92% rename from lib/fog/baremetal/openstack/requests/delete_node.rb rename to lib/fog/openstack/baremetal/requests/delete_node.rb index a5e6a6cb1..7a30c486f 100644 --- a/lib/fog/baremetal/openstack/requests/delete_node.rb +++ b/lib/fog/openstack/baremetal/requests/delete_node.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def delete_node(node_uuid) data = { node_ident: node_uuid } diff --git a/lib/fog/openstack/baremetal/requests/delete_port.rb b/lib/fog/openstack/baremetal/requests/delete_port.rb new file mode 100644 index 000000000..087ece563 --- /dev/null +++ b/lib/fog/openstack/baremetal/requests/delete_port.rb @@ -0,0 +1,25 @@ +module Fog + module OpenStack + class Baremetal + class Real + def delete_port(port_uuid) + data = { port_uuid: port_uuid } + request( + body: Fog::JSON.encode(data), + expects: [200, 204], + method: 'DELETE', + path: 'ports' + ) + end + end + + class Mock + def delete_port(_port_uuid) + response = Excon::Response.new + response.status = 200 + response + end + end + end + end +end diff --git a/lib/fog/baremetal/openstack/requests/get_chassis.rb b/lib/fog/openstack/baremetal/requests/get_chassis.rb similarity index 92% rename from lib/fog/baremetal/openstack/requests/get_chassis.rb rename to lib/fog/openstack/baremetal/requests/get_chassis.rb index 4d7d88c51..761d84f8c 100644 --- a/lib/fog/baremetal/openstack/requests/get_chassis.rb +++ b/lib/fog/openstack/baremetal/requests/get_chassis.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def get_chassis(chassis_uuid) request( diff --git a/lib/fog/baremetal/openstack/requests/get_driver.rb b/lib/fog/openstack/baremetal/requests/get_driver.rb similarity index 92% rename from lib/fog/baremetal/openstack/requests/get_driver.rb rename to lib/fog/openstack/baremetal/requests/get_driver.rb index 824edcba2..30c4664f6 100644 --- a/lib/fog/baremetal/openstack/requests/get_driver.rb +++ b/lib/fog/openstack/baremetal/requests/get_driver.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def get_driver(driver_name) request( diff --git a/lib/fog/openstack/baremetal/requests/get_driver_properties.rb b/lib/fog/openstack/baremetal/requests/get_driver_properties.rb new file mode 100644 index 000000000..988ac0685 --- /dev/null +++ b/lib/fog/openstack/baremetal/requests/get_driver_properties.rb @@ -0,0 +1,40 @@ +module Fog + module OpenStack + class Baremetal + class Real + def get_driver_properties(driver_name) + data = { driver_name: driver_name } + request( + body: Fog::JSON.encode(data), + expects: [200, 204], + method: 'GET', + path: "drivers/properties" + ) + end + end + + class Mock + def get_driver_properties(_driver_name) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.body = { + "pxe_deploy_ramdisk" => "UUID (from Glance) of the ramdisk.", + "ipmi_transit_address" => "transit address for bridged request.", + "ipmi_terminal_port" => "node's UDP port to connect to.", + "ipmi_target_channel" => "destination channel for bridged request.", + "ipmi_transit_channel" => "transit channel for bridged request.", + "ipmi_local_address" => "local IPMB address for bridged requests. ", + "ipmi_username" => "username; default is NULL user. Optional.", + "ipmi_address" => "IP address or hostname of the node. Required.", + "ipmi_target_address" => "destination address for bridged request.", + "ipmi_password" => "password. Optional.", + "pxe_deploy_kernel" => "UUID (from Glance) of the deployment kernel.", + "ipmi_priv_level" => "privilege level; default is ADMINISTRATOR. ", + "ipmi_bridging" => "bridging_type." + } + response + end + end + end + end +end diff --git a/lib/fog/baremetal/openstack/requests/get_node.rb b/lib/fog/openstack/baremetal/requests/get_node.rb similarity index 92% rename from lib/fog/baremetal/openstack/requests/get_node.rb rename to lib/fog/openstack/baremetal/requests/get_node.rb index 22b111822..a32d1aefc 100644 --- a/lib/fog/baremetal/openstack/requests/get_node.rb +++ b/lib/fog/openstack/baremetal/requests/get_node.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def get_node(node_id) request( diff --git a/lib/fog/openstack/baremetal/requests/get_port.rb b/lib/fog/openstack/baremetal/requests/get_port.rb new file mode 100644 index 000000000..c397af2fb --- /dev/null +++ b/lib/fog/openstack/baremetal/requests/get_port.rb @@ -0,0 +1,24 @@ +module Fog + module OpenStack + class Baremetal + class Real + def get_port(port_id) + request( + expects: [200, 204], + method: 'GET', + path: "ports/#{port_id}" + ) + end + end + + class Mock + def get_port(_port_id) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.body = data[:ports].first + response + end + end + end + end +end diff --git a/lib/fog/baremetal/openstack/requests/list_chassis.rb b/lib/fog/openstack/baremetal/requests/list_chassis.rb similarity index 86% rename from lib/fog/baremetal/openstack/requests/list_chassis.rb rename to lib/fog/openstack/baremetal/requests/list_chassis.rb index 313ae1d29..a231b3328 100644 --- a/lib/fog/baremetal/openstack/requests/list_chassis.rb +++ b/lib/fog/openstack/baremetal/requests/list_chassis.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def list_chassis(options = {}) request( @@ -20,14 +20,14 @@ def list_chassis(_parameters = nil) "chassis" => [ { "description" => "Sample chassis", - "links" => [ + "links" => [ { "href" => "http =>//localhost:6385/v1/chassis/eaaca217-e7d8-47b4-bb41-3f99f20eed89", - "rel" => "self" + "rel" => "self" }, { "href" => "http =>//localhost:6385/chassis/eaaca217-e7d8-47b4-bb41-3f99f20eed89", - "rel" => "bookmark" + "rel" => "bookmark" } ], "uuid" => Fog::UUID.uuid diff --git a/lib/fog/baremetal/openstack/requests/list_chassis_detailed.rb b/lib/fog/openstack/baremetal/requests/list_chassis_detailed.rb similarity index 93% rename from lib/fog/baremetal/openstack/requests/list_chassis_detailed.rb rename to lib/fog/openstack/baremetal/requests/list_chassis_detailed.rb index 9c4b2b536..7426fab96 100644 --- a/lib/fog/baremetal/openstack/requests/list_chassis_detailed.rb +++ b/lib/fog/openstack/baremetal/requests/list_chassis_detailed.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def list_chassis_detailed(options = {}) request( diff --git a/lib/fog/baremetal/openstack/requests/list_drivers.rb b/lib/fog/openstack/baremetal/requests/list_drivers.rb similarity index 92% rename from lib/fog/baremetal/openstack/requests/list_drivers.rb rename to lib/fog/openstack/baremetal/requests/list_drivers.rb index 42cb99fed..28e4c3c78 100644 --- a/lib/fog/baremetal/openstack/requests/list_drivers.rb +++ b/lib/fog/openstack/baremetal/requests/list_drivers.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def list_drivers(options = {}) request( diff --git a/lib/fog/openstack/baremetal/requests/list_nodes.rb b/lib/fog/openstack/baremetal/requests/list_nodes.rb new file mode 100644 index 000000000..4dadb970a --- /dev/null +++ b/lib/fog/openstack/baremetal/requests/list_nodes.rb @@ -0,0 +1,34 @@ +module Fog + module OpenStack + class Baremetal + class Real + def list_nodes(options = {}) + request( + expects: [200, 204], + method: 'GET', + path: 'nodes', + query: options + ) + end + end + + class Mock + def list_nodes(_options = {}) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.body = { + "nodes" => [{ + "instance_uuid" => Fog::UUID.uuid, + "maintenance" => false, + "power_state" => "power on", + "provision_state" => "active", + "uuid" => Fog::UUID.uuid, + "links" => [] + }] + } + response + end + end + end + end +end diff --git a/lib/fog/baremetal/openstack/requests/list_nodes_detailed.rb b/lib/fog/openstack/baremetal/requests/list_nodes_detailed.rb similarity index 92% rename from lib/fog/baremetal/openstack/requests/list_nodes_detailed.rb rename to lib/fog/openstack/baremetal/requests/list_nodes_detailed.rb index d969930ca..45a2773e8 100644 --- a/lib/fog/baremetal/openstack/requests/list_nodes_detailed.rb +++ b/lib/fog/openstack/baremetal/requests/list_nodes_detailed.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def list_nodes_detailed(options = {}) request( diff --git a/lib/fog/openstack/baremetal/requests/list_ports.rb b/lib/fog/openstack/baremetal/requests/list_ports.rb new file mode 100644 index 000000000..69d7c5fbe --- /dev/null +++ b/lib/fog/openstack/baremetal/requests/list_ports.rb @@ -0,0 +1,42 @@ +module Fog + module OpenStack + class Baremetal + class Real + def list_ports(options = {}) + request( + expects: [200, 204], + method: 'GET', + path: 'ports', + query: options + ) + end + end + + class Mock + def list_ports(_options = {}) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.body = { + "ports" => [ + { + "address" => "fe:54:00:77:07:d9", + "links" => [ + { + "href" => "http://localhost:6385/v1/ports/27e3153e-d5bf-4b7e-b517-fb518e17f34c", + "rel" => "self" + }, + { + "href" => "http://localhost:6385/ports/27e3153e-d5bf-4b7e-b517-fb518e17f34c", + "rel" => "bookmark" + } + ], + "uuid" => Fog::UUID.uuid + } + ] + } + response + end + end + end + end +end diff --git a/lib/fog/baremetal/openstack/requests/list_ports_detailed.rb b/lib/fog/openstack/baremetal/requests/list_ports_detailed.rb similarity index 92% rename from lib/fog/baremetal/openstack/requests/list_ports_detailed.rb rename to lib/fog/openstack/baremetal/requests/list_ports_detailed.rb index 333adcf41..9de70b737 100644 --- a/lib/fog/baremetal/openstack/requests/list_ports_detailed.rb +++ b/lib/fog/openstack/baremetal/requests/list_ports_detailed.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def list_ports_detailed(options = {}) request( diff --git a/lib/fog/baremetal/openstack/requests/patch_chassis.rb b/lib/fog/openstack/baremetal/requests/patch_chassis.rb similarity index 85% rename from lib/fog/baremetal/openstack/requests/patch_chassis.rb rename to lib/fog/openstack/baremetal/requests/patch_chassis.rb index b582048e0..0d9cc1c6a 100644 --- a/lib/fog/baremetal/openstack/requests/patch_chassis.rb +++ b/lib/fog/openstack/baremetal/requests/patch_chassis.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real # Patch a chassis # @@ -28,9 +28,9 @@ def patch_chassis(_chassis_uuid, _patch) response.status = 200 response.headers = { "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new } response.body = data[:chassis_collection].first response diff --git a/lib/fog/baremetal/openstack/requests/patch_node.rb b/lib/fog/openstack/baremetal/requests/patch_node.rb similarity index 84% rename from lib/fog/baremetal/openstack/requests/patch_node.rb rename to lib/fog/openstack/baremetal/requests/patch_node.rb index c32ee04e9..e1d2ab778 100644 --- a/lib/fog/baremetal/openstack/requests/patch_node.rb +++ b/lib/fog/openstack/baremetal/requests/patch_node.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real # Patch a node # @@ -28,9 +28,9 @@ def patch_node(_node_uuid, _patch) response.status = 200 response.headers = { "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new } response.body = data[:nodes].first response diff --git a/lib/fog/baremetal/openstack/requests/patch_port.rb b/lib/fog/openstack/baremetal/requests/patch_port.rb similarity index 84% rename from lib/fog/baremetal/openstack/requests/patch_port.rb rename to lib/fog/openstack/baremetal/requests/patch_port.rb index 70ee2946f..a26314c59 100644 --- a/lib/fog/baremetal/openstack/requests/patch_port.rb +++ b/lib/fog/openstack/baremetal/requests/patch_port.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real # Patch a port # @@ -28,9 +28,9 @@ def patch_port(_port_uuid, _patch) response.status = 200 response.headers = { "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new } response.body = data[:ports].first response diff --git a/lib/fog/baremetal/openstack/requests/set_node_maintenance.rb b/lib/fog/openstack/baremetal/requests/set_node_maintenance.rb similarity index 76% rename from lib/fog/baremetal/openstack/requests/set_node_maintenance.rb rename to lib/fog/openstack/baremetal/requests/set_node_maintenance.rb index 8c1012990..27117b3f0 100644 --- a/lib/fog/baremetal/openstack/requests/set_node_maintenance.rb +++ b/lib/fog/openstack/baremetal/requests/set_node_maintenance.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def set_node_maintenance(node_uuid, parameters = nil) request( @@ -18,9 +18,9 @@ def set_node_maintenance(_node_uuid, _parameters = nil) response.status = 202 response.headers = { "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new } response end diff --git a/lib/fog/baremetal/openstack/requests/set_node_power_state.rb b/lib/fog/openstack/baremetal/requests/set_node_power_state.rb similarity index 79% rename from lib/fog/baremetal/openstack/requests/set_node_power_state.rb rename to lib/fog/openstack/baremetal/requests/set_node_power_state.rb index 9b156c429..eaef4707b 100644 --- a/lib/fog/baremetal/openstack/requests/set_node_power_state.rb +++ b/lib/fog/openstack/baremetal/requests/set_node_power_state.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def set_node_power_state(node_id, power_state) data = { @@ -22,9 +22,9 @@ def set_node_power_state(_node_id, _power_state) response.status = 202 response.headers = { "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new } response.body = data[:nodes].first response diff --git a/lib/fog/baremetal/openstack/requests/set_node_provision_state.rb b/lib/fog/openstack/baremetal/requests/set_node_provision_state.rb similarity index 75% rename from lib/fog/baremetal/openstack/requests/set_node_provision_state.rb rename to lib/fog/openstack/baremetal/requests/set_node_provision_state.rb index 8c6d95b0c..7a950d58c 100644 --- a/lib/fog/baremetal/openstack/requests/set_node_provision_state.rb +++ b/lib/fog/openstack/baremetal/requests/set_node_provision_state.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def set_node_provision_state(node_id, provision_state) data = { @@ -13,7 +13,7 @@ def set_node_provision_state(node_id, provision_state) method: 'PUT', path: "nodes/#{node_id}/states/provision", headers: { - :'X-OpenStack-Ironic-API-Version' => 'latest' + 'X-OpenStack-Ironic-API-Version': 'latest' } ) end @@ -25,9 +25,9 @@ def set_node_provision_state(_node_id, _provision_state) response.status = 202 response.headers = { "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new } response.body = data[:nodes].first response diff --git a/lib/fog/baremetal/openstack/requests/unset_node_maintenance.rb b/lib/fog/openstack/baremetal/requests/unset_node_maintenance.rb similarity index 77% rename from lib/fog/baremetal/openstack/requests/unset_node_maintenance.rb rename to lib/fog/openstack/baremetal/requests/unset_node_maintenance.rb index 232f418dd..0cc09aab6 100644 --- a/lib/fog/baremetal/openstack/requests/unset_node_maintenance.rb +++ b/lib/fog/openstack/baremetal/requests/unset_node_maintenance.rb @@ -1,6 +1,6 @@ module Fog - module Baremetal - class OpenStack + module OpenStack + class Baremetal class Real def unset_node_maintenance(node_uuid, parameters = nil) request( @@ -18,9 +18,9 @@ def unset_node_maintenance(_node_uuid, _parameters = nil) response.status = 202 response.headers = { "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new } response end diff --git a/lib/fog/openstack/compute.rb b/lib/fog/openstack/compute.rb new file mode 100644 index 000000000..b51c483b6 --- /dev/null +++ b/lib/fog/openstack/compute.rb @@ -0,0 +1,392 @@ +module Fog + module OpenStack + class Compute < Fog::Service + SUPPORTED_VERSIONS = /v2\.0|v2\.1/.freeze + SUPPORTED_MICROVERSION = '2.15'.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version + + ## MODELS + # + model_path 'fog/openstack/compute/models' + model :aggregate + collection :aggregates + model :availability_zone + collection :availability_zones + model :server + collection :servers + model :service + collection :services + model :image + collection :images + model :flavor + collection :flavors + model :metadatum + collection :metadata + model :address + collection :addresses + model :security_group + collection :security_groups + model :security_group_rule + collection :security_group_rules + model :key_pair + collection :key_pairs + model :tenant + collection :tenants + model :volume + collection :volumes + model :volume_attachment + collection :volume_attachments + model :network + collection :networks + model :snapshot + collection :snapshots + model :host + collection :hosts + model :server_group + collection :server_groups + model :os_interface + collection :os_interfaces + + ## REQUESTS + # + request_path 'fog/openstack/compute/requests' + + # Aggregate CRUD + request :list_aggregates + request :create_aggregate + request :update_aggregate + request :get_aggregate + request :update_aggregate + request :update_aggregate_metadata + request :add_aggregate_host + request :remove_aggregate_host + request :delete_aggregate + + # Server CRUD + request :list_servers + request :list_servers_detail + request :create_server + request :get_server_details + request :get_server_password + request :update_server + request :delete_server + + # Server Actions + request :server_actions + request :server_action + request :reboot_server + request :rebuild_server + request :resize_server + request :confirm_resize_server + request :revert_resize_server + request :pause_server + request :unpause_server + request :suspend_server + request :resume_server + request :start_server + request :stop_server + request :rescue_server + request :change_server_password + request :add_fixed_ip + request :remove_fixed_ip + request :server_diagnostics + request :boot_from_snapshot + request :reset_server_state + request :add_security_group + request :remove_security_group + request :shelve_server + request :unshelve_server + request :shelve_offload_server + + # Server Extenstions + request :get_console_output + request :get_vnc_console + request :live_migrate_server + request :migrate_server + request :evacuate_server + + # Server Remote Consoles + request :remote_consoles + + # Service CRUD + request :list_services + request :enable_service + request :disable_service + request :disable_service_log_reason + request :delete_service + + # Image CRUD + request :list_images + request :list_images_detail + request :create_image + request :get_image_details + request :delete_image + + # Flavor CRUD + request :list_flavors + request :list_flavors_detail + request :get_flavor_details + request :create_flavor + request :delete_flavor + + # Flavor Actions + request :get_flavor_metadata + request :create_flavor_metadata + request :update_flavor_metadata + request :delete_flavor_metadata + + # Flavor Access + request :add_flavor_access + request :remove_flavor_access + request :list_tenants_with_flavor_access + + # Hypervisor + request :get_hypervisor_statistics + request :get_hypervisor + request :list_hypervisors + request :list_hypervisors_detail + request :list_hypervisor_servers + + # Metadata + request :list_metadata + request :get_metadata + request :set_metadata + request :update_metadata + request :delete_metadata + + # Metadatam + request :delete_meta + request :update_meta + + # Address + request :list_addresses + request :list_address_pools + request :list_all_addresses + request :list_private_addresses + request :list_public_addresses + request :get_address + request :allocate_address + request :associate_address + request :release_address + request :disassociate_address + + # Security Group + request :list_security_groups + request :get_security_group + request :create_security_group + request :create_security_group_rule + request :delete_security_group + request :delete_security_group_rule + request :get_security_group_rule + + # Key Pair + request :list_key_pairs + request :get_key_pair + request :create_key_pair + request :delete_key_pair + + # Tenant + request :set_tenant + request :get_limits + + # Volume + request :list_volumes + request :list_volumes_detail + request :create_volume + request :get_volume_details + request :delete_volume + request :attach_volume + request :detach_volume + request :get_server_volumes + request :list_volume_attachments + + # Snapshot + request :create_snapshot + request :list_snapshots + request :list_snapshots_detail + request :get_snapshot_details + request :delete_snapshot + + # Usage + request :list_usages + request :get_usage + + # Quota + request :get_quota + request :get_quota_defaults + request :update_quota + + # Hosts + request :list_hosts + request :get_host_details + + # Zones + request :list_zones + request :list_zones_detailed + request :list_availability_zones + + # Server Group + request :list_server_groups + request :get_server_group + request :create_server_group + request :delete_server_group + + # Server Os Interfaces + request :list_os_interfaces + request :get_os_interface + request :create_os_interface + request :delete_os_interface + + class Mock + attr_reader :auth_token + attr_reader :auth_token_expiration + attr_reader :current_user + attr_reader :current_tenant + + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + last_modified: { + images: {}, + servers: {}, + key_pairs: {}, + security_groups: {}, + addresses: {} + }, + aggregates: [{ + "availability_zone" => "nova", + "created_at" => "2012-11-16T06:22:23.032493", + "deleted" => false, + "deleted_at" => nil, + "id" => 1, + "name" => "name", + "updated_at" => nil + }], + images: { + "0e09fbd6-43c5-448a-83e9-0d3d05f9747e" => { + "id" => "0e09fbd6-43c5-448a-83e9-0d3d05f9747e", + "name" => "cirros-0.3.0-x86_64-blank", + 'progress' => 100, + 'status' => "ACTIVE", + 'updated' => "", + 'minRam' => 0, + 'minDisk' => 0, + 'metadata' => {}, + 'links' => [{ "href" => "http://nova1:8774/v1.1/admin/images/1", "rel" => "self" }, + { "href" => "http://nova1:8774/admin/images/2", "rel" => "bookmark" }] + } + }, + servers: {}, + key_pairs: {}, + security_groups: { + '0' => { + "id" => 0, + "tenant_id" => Fog::Mock.random_hex(8), + "name" => "default", + "description" => "default", + "rules" => [ + { "id" => 0, + "parent_group_id" => 0, + "from_port" => 68, + "to_port" => 68, + "ip_protocol" => "udp", + "ip_range" => { "cidr" => "0.0.0.0/0" }, + "group" => {} } + ] + } + }, + server_groups: {}, + server_security_group_map: {}, + addresses: {}, + quota: { + 'security_group_rules' => 20, + 'security_groups' => 10, + 'injected_file_content_bytes' => 10240, + 'injected_file_path_bytes' => 256, + 'injected_files' => 5, + 'metadata_items' => 128, + 'floating_ips' => 10, + 'instances' => 10, + 'key_pairs' => 10, + 'gigabytes' => 5000, + 'volumes' => 10, + 'cores' => 20, + 'ram' => 51200 + }, + volumes: {}, + snapshots: {}, + os_interfaces: [ + { + "fixed_ips" => [ + { + "ip_address" => "192.168.1.3", + "subnet_id" => "f8a6e8f8-c2ec-497c-9f23-da9616de54ef" + } + ], + "mac_addr" => "fa:16:3e:4c:2c:30", + "net_id" => "3cb9bc59-5699-4588-a4b1-b87f96708bc6", + "port_id" => "ce531f90-199f-48c0-816c-13e38010b442", + "port_state" => "ACTIVE" + } + ] + } + end + end + + def self.reset + @data = nil + end + + include Fog::OpenStack::Core + + def initialize(options = {}) + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 8774 + management_url.path = '/v1.1/1' + @openstack_management_url = management_url.to_s + end + + def data + self.class.data["#{@openstack_username}-#{@current_tenant}"] + end + + def reset_data + self.class.data.delete("#{@openstack_username}-#{@current_tenant}") + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Compute::NotFound + end + + def default_service_type + %w[compute] + end + + def initialize(options = {}) + @supported_versions = SUPPORTED_VERSIONS + @supported_microversion = SUPPORTED_MICROVERSION + @microversion_key = 'X-OpenStack-Nova-API-Version' + super + end + end + end + end +end diff --git a/lib/fog/compute/openstack/models/address.rb b/lib/fog/openstack/compute/models/address.rb similarity index 90% rename from lib/fog/compute/openstack/models/address.rb rename to lib/fog/openstack/compute/models/address.rb index a74160bbf..33c247303 100644 --- a/lib/fog/compute/openstack/models/address.rb +++ b/lib/fog/openstack/compute/models/address.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Address < Fog::OpenStack::Model identity :id @@ -33,8 +33,9 @@ def server=(new_server) def save raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? + data = service.allocate_address(pool).body['floating_ip'] - new_attributes = data.reject { |key, _value| !['id', 'instance_id', 'ip', 'fixed_ip'].include?(key) } + new_attributes = data.select { |key, _value| ['id', 'instance_id', 'ip', 'fixed_ip'].include?(key) } merge_attributes(new_attributes) if @server self.server = @server diff --git a/lib/fog/openstack/compute/models/addresses.rb b/lib/fog/openstack/compute/models/addresses.rb new file mode 100644 index 000000000..5969106a9 --- /dev/null +++ b/lib/fog/openstack/compute/models/addresses.rb @@ -0,0 +1,28 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/compute/models/address' + +module Fog + module OpenStack + class Compute + class Addresses < Fog::OpenStack::Collection + model Fog::OpenStack::Compute::Address + + def all(options = {}) + load_response(service.list_all_addresses(options), 'floating_ips') + end + + def get(address_id) + if address = service.get_address(address_id).body['floating_ip'] + new(address) + end + rescue Fog::OpenStack::Compute::NotFound + nil + end + + def get_address_pools + service.list_address_pools.body['floating_ip_pools'] + end + end + end + end +end diff --git a/lib/fog/compute/openstack/models/aggregate.rb b/lib/fog/openstack/compute/models/aggregate.rb similarity index 97% rename from lib/fog/compute/openstack/models/aggregate.rb rename to lib/fog/openstack/compute/models/aggregate.rb index ffc77c819..1cafe5184 100644 --- a/lib/fog/compute/openstack/models/aggregate.rb +++ b/lib/fog/openstack/compute/models/aggregate.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Aggregate < Fog::OpenStack::Model identity :id diff --git a/lib/fog/compute/openstack/models/aggregates.rb b/lib/fog/openstack/compute/models/aggregates.rb similarity index 78% rename from lib/fog/compute/openstack/models/aggregates.rb rename to lib/fog/openstack/compute/models/aggregates.rb index 956fb2468..2e4126f57 100644 --- a/lib/fog/compute/openstack/models/aggregates.rb +++ b/lib/fog/openstack/compute/models/aggregates.rb @@ -1,11 +1,11 @@ require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/aggregate' +require 'fog/openstack/compute/models/aggregate' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Aggregates < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::Aggregate + model Fog::OpenStack::Compute::Aggregate def all(options = {}) load_response(service.list_aggregates(options), 'aggregates') diff --git a/lib/fog/openstack/compute/models/availability_zone.rb b/lib/fog/openstack/compute/models/availability_zone.rb new file mode 100644 index 000000000..fad9a1471 --- /dev/null +++ b/lib/fog/openstack/compute/models/availability_zone.rb @@ -0,0 +1,19 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Compute + class AvailabilityZone < Fog::OpenStack::Model + identity :zoneName + + attribute :hosts + attribute :zoneLabel + attribute :zoneState + + def to_s + zoneName + end + end + end + end +end diff --git a/lib/fog/openstack/compute/models/availability_zones.rb b/lib/fog/openstack/compute/models/availability_zones.rb new file mode 100644 index 000000000..b3be66cf7 --- /dev/null +++ b/lib/fog/openstack/compute/models/availability_zones.rb @@ -0,0 +1,22 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/compute/models/availability_zone' + +module Fog + module OpenStack + class Compute + class AvailabilityZones < Fog::OpenStack::Collection + model Fog::OpenStack::Compute::AvailabilityZone + + def all(options = {}) + data = service.list_zones_detailed(options) + load_response(data, 'availabilityZoneInfo') + end + + def summary(options = {}) + data = service.list_zones(options) + load_response(data, 'availabilityZoneInfo') + end + end + end + end +end diff --git a/lib/fog/compute/openstack/models/flavor.rb b/lib/fog/openstack/compute/models/flavor.rb similarity index 86% rename from lib/fog/compute/openstack/models/flavor.rb rename to lib/fog/openstack/compute/models/flavor.rb index d1233057e..4f827bcac 100644 --- a/lib/fog/compute/openstack/models/flavor.rb +++ b/lib/fog/openstack/compute/models/flavor.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Flavor < Fog::OpenStack::Model identity :id @@ -37,25 +37,25 @@ def destroy def metadata service.get_flavor_metadata(id).body['extra_specs'] - rescue Fog::Compute::OpenStack::NotFound + rescue Fog::OpenStack::Compute::NotFound nil end def create_metadata(metadata) service.create_flavor_metadata(id, metadata) - rescue Fog::Compute::OpenStack::NotFound + rescue Fog::OpenStack::Compute::NotFound nil end def update_metadata(key, value) service.update_flavor_metadata(id, key, value) - rescue Fog::Compute::OpenStack::NotFound + rescue Fog::OpenStack::Compute::NotFound nil end def delete_metadata(key) service.delete_flavor_metadata(id, key) - rescue Fog::Compute::OpenStack::NotFound + rescue Fog::OpenStack::Compute::NotFound nil end end diff --git a/lib/fog/compute/openstack/models/flavors.rb b/lib/fog/openstack/compute/models/flavors.rb similarity index 75% rename from lib/fog/compute/openstack/models/flavors.rb rename to lib/fog/openstack/compute/models/flavors.rb index e5d6b754f..c4430e96c 100644 --- a/lib/fog/compute/openstack/models/flavors.rb +++ b/lib/fog/openstack/compute/models/flavors.rb @@ -1,11 +1,11 @@ require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/flavor' +require 'fog/openstack/compute/models/flavor' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Flavors < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::Flavor + model Fog::OpenStack::Compute::Flavor def all(options = {}) data = service.list_flavors_detail(options) @@ -20,7 +20,7 @@ def summary(options = {}) def get(flavor_id) data = service.get_flavor_details(flavor_id).body['flavor'] new(data) - rescue Fog::Compute::OpenStack::NotFound + rescue Fog::OpenStack::Compute::NotFound nil end end diff --git a/lib/fog/compute/openstack/models/host.rb b/lib/fog/openstack/compute/models/host.rb similarity index 81% rename from lib/fog/compute/openstack/models/host.rb rename to lib/fog/openstack/compute/models/host.rb index 637d451ff..bf79e813c 100644 --- a/lib/fog/compute/openstack/models/host.rb +++ b/lib/fog/openstack/compute/models/host.rb @@ -1,9 +1,9 @@ require 'fog/compute/models/server' -require 'fog/compute/openstack/models/metadata' +require 'fog/openstack/compute/models/metadata' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Host < Fog::OpenStack::Model attribute :host_name attribute :service_name @@ -19,7 +19,7 @@ def initialize(attributes) def details service.get_host_details(host_name).body['host'] - rescue Fog::Compute::OpenStack::NotFound + rescue Fog::OpenStack::Compute::NotFound nil end end diff --git a/lib/fog/openstack/compute/models/hosts.rb b/lib/fog/openstack/compute/models/hosts.rb new file mode 100644 index 000000000..39f178d14 --- /dev/null +++ b/lib/fog/openstack/compute/models/hosts.rb @@ -0,0 +1,26 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/compute/models/host' + +module Fog + module OpenStack + class Compute + class Hosts < Fog::OpenStack::Collection + model Fog::OpenStack::Compute::Host + + def all(options = {}) + data = service.list_hosts(options) + load_response(data, 'hosts') + end + + def get(host_name) + if host = service.get_host_details(host_name).body['host'] + new('host_name' => host_name, + 'details' => host) + end + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/compute/models/image.rb b/lib/fog/openstack/compute/models/image.rb new file mode 100644 index 000000000..8f288bd48 --- /dev/null +++ b/lib/fog/openstack/compute/models/image.rb @@ -0,0 +1,47 @@ +require 'fog/openstack/models/model' +require 'fog/openstack/compute/models/metadata' + +module Fog + module OpenStack + class Compute + class Image < Fog::OpenStack::Model + identity :id + + attribute :name + attribute :created_at, aliases: 'created' + attribute :updated_at, aliases: 'updated' + attribute :progress + attribute :status + attribute :minDisk + attribute :minRam + attribute :server, aliases: 'server' + attribute :size, aliases: 'OS-EXT-IMG-SIZE:size' + attribute :metadata + attribute :links + + def metadata + @metadata ||= begin + Fog::OpenStack::Compute::Metadata.new(service: service, + parent: self) + end + end + + def metadata=(new_metadata = {}) + metas = [] + new_metadata.to_hash.each_pair { |k, v| metas << { "key" => k, "value" => v } } + metadata.load(metas) + end + + def destroy + requires :id + service.delete_image(id) + true + end + + def ready? + status == 'ACTIVE' + end + end + end + end +end diff --git a/lib/fog/openstack/compute/models/images.rb b/lib/fog/openstack/compute/models/images.rb new file mode 100644 index 000000000..5aecc5937 --- /dev/null +++ b/lib/fog/openstack/compute/models/images.rb @@ -0,0 +1,38 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/compute/models/image' + +module Fog + module OpenStack + class Compute + class Images < Fog::OpenStack::Collection + attribute :filters + + model Fog::OpenStack::Compute::Image + + attribute :server + + def initialize(attributes) + self.filters ||= {} + super + end + + def all(filters_arg = filters) + filters = filters_arg + data = service.list_images_detail(filters) + images = load_response(data, 'images') + if server + replace(select { |image| image.server_id == server.id }) + end + images + end + + def get(image_id) + data = service.get_image_details(image_id).body['image'] + new(data) + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/compute/openstack/models/key_pair.rb b/lib/fog/openstack/compute/models/key_pair.rb similarity index 75% rename from lib/fog/compute/openstack/models/key_pair.rb rename to lib/fog/openstack/compute/models/key_pair.rb index e395ed390..bdeea2b24 100644 --- a/lib/fog/compute/openstack/models/key_pair.rb +++ b/lib/fog/openstack/compute/models/key_pair.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class KeyPair < Fog::OpenStack::Model identity :name @@ -25,11 +25,11 @@ def save requires :name data = if public_key - service.create_key_pair(name, public_key).body['keypair'] + service.create_key_pair(name, public_key, user_id).body['keypair'] else - service.create_key_pair(name).body['keypair'] + service.create_key_pair(name, nil, user_id).body['keypair'] end - new_attributes = data.reject { |key, _value| !['fingerprint', 'public_key', 'name', 'private_key', 'user_id'].include?(key) } + new_attributes = data.select { |key, _value| ['fingerprint', 'public_key', 'name', 'private_key', 'user_id'].include?(key) } merge_attributes(new_attributes) true end @@ -39,7 +39,7 @@ def write(path = "#{ENV['HOME']}/.ssh/fog_#{Fog.credential}_#{name}.pem") split_private_key = private_key.split(/\n/) File.open(path, "w") do |f| split_private_key.each { |line| f.puts line } - f.chmod 0600 + f.chmod 0o600 end "Key file built: #{path}" else diff --git a/lib/fog/openstack/compute/models/key_pairs.rb b/lib/fog/openstack/compute/models/key_pairs.rb new file mode 100644 index 000000000..468d07ff9 --- /dev/null +++ b/lib/fog/openstack/compute/models/key_pairs.rb @@ -0,0 +1,29 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/compute/models/key_pair' + +module Fog + module OpenStack + class Compute + class KeyPairs < Fog::OpenStack::Collection + model Fog::OpenStack::Compute::KeyPair + + def all(options = {}) + items = [] + service.list_key_pairs(options).body['keypairs'].each do |kp| + items += kp.values + end + # TODO: convert to load_response? + load(items) + end + + def get(key_pair_name) + if key_pair_name + all.select { |kp| kp.name == key_pair_name }.first + end + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/compute/openstack/models/metadata.rb b/lib/fog/openstack/compute/models/metadata.rb similarity index 79% rename from lib/fog/compute/openstack/models/metadata.rb rename to lib/fog/openstack/compute/models/metadata.rb index 5d58d039a..29f410147 100644 --- a/lib/fog/compute/openstack/models/metadata.rb +++ b/lib/fog/openstack/compute/models/metadata.rb @@ -1,16 +1,16 @@ require 'fog/openstack/models/collection' require 'fog/openstack/models/meta_parent' -require 'fog/compute/openstack/models/metadatum' -require 'fog/compute/openstack/models/image' -require 'fog/compute/openstack/models/server' +require 'fog/openstack/compute/models/metadatum' +require 'fog/openstack/compute/models/image' +require 'fog/openstack/compute/models/server' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Metadata < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::Metadatum + model Fog::OpenStack::Compute::Metadatum - include Fog::Compute::OpenStack::MetaParent + include Fog::OpenStack::Compute::MetaParent def all requires :parent @@ -27,7 +27,7 @@ def get(key) metas = [] data.each_pair { |k, v| metas << { "key" => k, "value" => v } } new(metas[0]) - rescue Fog::Compute::OpenStack::NotFound + rescue Fog::OpenStack::Compute::NotFound nil end @@ -50,7 +50,7 @@ def to_hash(data = nil) if data.nil? data = {} each do |meta| - if meta.kind_of?(Fog::Compute::OpenStack::Metadatum) + if meta.kind_of?(Fog::OpenStack::Compute::Metadatum) data.store(meta.key, meta.value) else data.store(meta["key"], meta["value"]) diff --git a/lib/fog/compute/openstack/models/metadatum.rb b/lib/fog/openstack/compute/models/metadatum.rb similarity index 85% rename from lib/fog/compute/openstack/models/metadatum.rb rename to lib/fog/openstack/compute/models/metadatum.rb index d9c03f3ea..431f70af4 100644 --- a/lib/fog/compute/openstack/models/metadatum.rb +++ b/lib/fog/openstack/compute/models/metadatum.rb @@ -2,10 +2,10 @@ require 'fog/openstack/models/meta_parent' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Metadatum < Fog::OpenStack::Model - include Fog::Compute::OpenStack::MetaParent + include Fog::OpenStack::Compute::MetaParent identity :key attribute :value diff --git a/lib/fog/openstack/compute/models/network.rb b/lib/fog/openstack/compute/models/network.rb new file mode 100644 index 000000000..a25f39acb --- /dev/null +++ b/lib/fog/openstack/compute/models/network.rb @@ -0,0 +1,13 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Compute + class Network < Fog::OpenStack::Model + identity :id + attribute :name + attribute :addresses + end + end + end +end diff --git a/lib/fog/openstack/compute/models/networks.rb b/lib/fog/openstack/compute/models/networks.rb new file mode 100644 index 000000000..77f6ad3e5 --- /dev/null +++ b/lib/fog/openstack/compute/models/networks.rb @@ -0,0 +1,30 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/compute/models/network' + +module Fog + module OpenStack + class Compute + class Networks < Fog::OpenStack::Collection + model Fog::OpenStack::Compute::Network + + attribute :server + + def all + requires :server + + networks = [] + server.addresses.each_with_index do |address, index| + networks << { + id: index + 1, + name: address[0], + addresses: address[1].map { |a| a['addr'] } + } + end + + # TODO: convert to load_response? + load(networks) + end + end + end + end +end diff --git a/lib/fog/compute/openstack/models/os_interface.rb b/lib/fog/openstack/compute/models/os_interface.rb similarity index 88% rename from lib/fog/compute/openstack/models/os_interface.rb rename to lib/fog/openstack/compute/models/os_interface.rb index 1fb316635..465d5393a 100644 --- a/lib/fog/compute/openstack/models/os_interface.rb +++ b/lib/fog/openstack/compute/models/os_interface.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class OsInterface < Fog::OpenStack::Model identity :port_id attribute :fixed_ips, type: :array diff --git a/lib/fog/compute/openstack/models/os_interfaces.rb b/lib/fog/openstack/compute/models/os_interfaces.rb similarity index 78% rename from lib/fog/compute/openstack/models/os_interfaces.rb rename to lib/fog/openstack/compute/models/os_interfaces.rb index 8a77c7c88..5a06483ac 100644 --- a/lib/fog/compute/openstack/models/os_interfaces.rb +++ b/lib/fog/openstack/compute/models/os_interfaces.rb @@ -1,11 +1,11 @@ require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/os_interface' +require 'fog/openstack/compute/models/os_interface' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class OsInterfaces < Fog::OpenStack::Collection - model Fog::Compute::OpenStack::OsInterface + model Fog::OpenStack::Compute::OsInterface attribute :server diff --git a/lib/fog/openstack/compute/models/security_group.rb b/lib/fog/openstack/compute/models/security_group.rb new file mode 100644 index 000000000..8601f6cc5 --- /dev/null +++ b/lib/fog/openstack/compute/models/security_group.rb @@ -0,0 +1,57 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Compute + class SecurityGroup < Fog::OpenStack::Model + identity :id + + attribute :name + attribute :description + attribute :security_group_rules, aliases: "rules" + attribute :tenant_id + + def security_group_rules + Fog::OpenStack::Compute::SecurityGroupRules.new(service: service).load(attributes[:security_group_rules]) + end + + def rules + Fog::Logger.deprecation('#rules is deprecated. Use #security_group_rules instead') + attributes[:security_group_rules] + end + + # no one should be calling this because it doesn't do anything + # useful but we deprecated the rules attribute and need to maintain the API + def rules=(new_rules) + Fog::Logger.deprecation('#rules= is deprecated. Use the Fog::OpenStack::Compute::SecurityGroupRules collection to create new rules.') + attributes[:security_group_rules] = new_rules + end + + def save + requires :name, :description + data = service.create_security_group(name, description) + merge_attributes(data.body['security_group']) + true + end + + def destroy + requires :id + service.delete_security_group(id) + true + end + + def create_security_group_rule(min, max, ip_protocol = "tcp", cidr = "0.0.0.0/0", group_id = nil) + Fog::Logger.deprecation('#create_security_group_rule is deprecated. Use the Fog::OpenStack::Compute::SecurityGroupRules collection to create new rules.') + requires :id + service.create_security_group_rule(id, ip_protocol, min, max, cidr, group_id) + end + + def delete_security_group_rule(rule_id) + Fog::Logger.deprecation('#create_security_group_rule is deprecated. Use the Fog::OpenStack::Compute::SecurityGroupRule objects to destroy rules.') + service.delete_security_group_rule(rule_id) + true + end + end + end + end +end diff --git a/lib/fog/openstack/compute/models/security_group_rule.rb b/lib/fog/openstack/compute/models/security_group_rule.rb new file mode 100644 index 000000000..bcbf017b2 --- /dev/null +++ b/lib/fog/openstack/compute/models/security_group_rule.rb @@ -0,0 +1,32 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Compute + class SecurityGroupRule < Fog::OpenStack::Model + identity :id + + attribute :from_port + attribute :group + attribute :ip_protocol + attribute :to_port + attribute :parent_group_id + attribute :ip_range + + def save + requires :ip_protocol, :from_port, :to_port, :parent_group_id + cidr = ip_range && ip_range["cidr"] + if rule = service.create_security_group_rule(parent_group_id, ip_protocol, from_port, to_port, cidr, group).data[:body] + merge_attributes(rule["security_group_rule"]) + end + end + + def destroy + requires :id + service.delete_security_group_rule(id) + true + end + end + end + end +end diff --git a/lib/fog/openstack/compute/models/security_group_rules.rb b/lib/fog/openstack/compute/models/security_group_rules.rb new file mode 100644 index 000000000..bbf39d5f6 --- /dev/null +++ b/lib/fog/openstack/compute/models/security_group_rules.rb @@ -0,0 +1,21 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/compute/models/security_group_rule' + +module Fog + module OpenStack + class Compute + class SecurityGroupRules < Fog::OpenStack::Collection + model Fog::OpenStack::Compute::SecurityGroupRule + + def get(security_group_rule_id) + if security_group_rule_id + body = service.get_security_group_rule(security_group_rule_id).body + new(body['security_group_rule']) + end + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/compute/models/security_groups.rb b/lib/fog/openstack/compute/models/security_groups.rb new file mode 100644 index 000000000..cbcf1f110 --- /dev/null +++ b/lib/fog/openstack/compute/models/security_groups.rb @@ -0,0 +1,24 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/compute/models/security_group' + +module Fog + module OpenStack + class Compute + class SecurityGroups < Fog::OpenStack::Collection + model Fog::OpenStack::Compute::SecurityGroup + + def all(options = {}) + load_response(service.list_security_groups(options), 'security_groups') + end + + def get(security_group_id) + if security_group_id + new(service.get_security_group(security_group_id).body['security_group']) + end + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/compute/openstack/models/server.rb b/lib/fog/openstack/compute/models/server.rb similarity index 92% rename from lib/fog/compute/openstack/models/server.rb rename to lib/fog/openstack/compute/models/server.rb index ec0d525a8..eb04ec164 100644 --- a/lib/fog/compute/openstack/models/server.rb +++ b/lib/fog/openstack/compute/models/server.rb @@ -1,9 +1,9 @@ require 'fog/compute/models/server' -require 'fog/compute/openstack/models/metadata' +require 'fog/openstack/compute/models/metadata' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Server < Fog::Compute::Server identity :id attribute :instance_name, aliases: 'OS-EXT-SRV-ATTR:instance_name' @@ -74,15 +74,16 @@ def initialize(attributes = {}) def metadata @metadata ||= begin - Fog::Compute::OpenStack::Metadata.new(service: service, + Fog::OpenStack::Compute::Metadata.new(service: service, parent: self) end end def metadata=(new_metadata = {}) return unless new_metadata + metas = [] - new_metadata.each_pair { |k, v| metas << { "key" => k, "value" => v } } + new_metadata.each { |k, v| metas << { "key" => k, "value" => v } } @metadata = metadata.load(metas) end @@ -233,7 +234,7 @@ def security_groups groups = service.list_security_groups(server_id: id).body['security_groups'] groups.map do |group| - Fog::Compute::OpenStack::SecurityGroup.new group.merge(service: service) + Fog::OpenStack::Compute::SecurityGroup.new group.merge(service: service) end else service.security_groups.all @@ -365,22 +366,23 @@ def detach_volume(volume_id) def save raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? + requires :flavor_ref, :name requires_one :image_ref, :block_device_mapping, :block_device_mapping_v2 options = { - 'personality' => personality, - 'accessIPv4' => accessIPv4, - 'accessIPv6' => accessIPv6, - 'availability_zone' => availability_zone, - 'user_data' => user_data_encoded, - 'key_name' => key_name, - 'config_drive' => config_drive, - 'security_groups' => @security_groups, - 'min_count' => @min_count, - 'max_count' => @max_count, - 'nics' => @nics, - 'os:scheduler_hints' => @os_scheduler_hints, - 'block_device_mapping' => @block_device_mapping, + 'personality' => personality, + 'accessIPv4' => accessIPv4, + 'accessIPv6' => accessIPv6, + 'availability_zone' => availability_zone, + 'user_data' => user_data_encoded, + 'key_name' => key_name, + 'config_drive' => config_drive, + 'security_groups' => @security_groups, + 'min_count' => @min_count, + 'max_count' => @max_count, + 'nics' => @nics, + 'os:scheduler_hints' => @os_scheduler_hints, + 'block_device_mapping' => @block_device_mapping, 'block_device_mapping_v2' => @block_device_mapping_v2 } options['metadata'] = metadata.to_hash unless @metadata.nil? diff --git a/lib/fog/compute/openstack/models/server_group.rb b/lib/fog/openstack/compute/models/server_group.rb similarity index 94% rename from lib/fog/compute/openstack/models/server_group.rb rename to lib/fog/openstack/compute/models/server_group.rb index a638229b8..ce998161b 100644 --- a/lib/fog/compute/openstack/models/server_group.rb +++ b/lib/fog/openstack/compute/models/server_group.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class ServerGroup < Fog::OpenStack::Model identity :id attribute :name @@ -14,6 +14,7 @@ class ServerGroup < Fog::OpenStack::Model def self.validate_server_group_policy(policy) raise ArgumentError, "#{policy} is an invalid policy... must use one of #{VALID_SERVER_GROUP_POLICIES.join(', ')}" \ unless VALID_SERVER_GROUP_POLICIES.include? policy + true end end diff --git a/lib/fog/openstack/compute/models/server_groups.rb b/lib/fog/openstack/compute/models/server_groups.rb new file mode 100644 index 000000000..901657654 --- /dev/null +++ b/lib/fog/openstack/compute/models/server_groups.rb @@ -0,0 +1,28 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/compute/models/server_group' + +module Fog + module OpenStack + class Compute + class ServerGroups < Fog::OpenStack::Collection + model Fog::OpenStack::Compute::ServerGroup + + def all(options = {}) + load_response(service.list_server_groups(options), 'server_groups') + end + + def get(server_group_id) + if server_group_id + new(service.get_server_group(server_group_id).body['server_group']) + end + rescue Fog::OpenStack::Compute::NotFound + nil + end + + def create(*args) + new(service.create_server_group(*args).body['server_group']) + end + end + end + end +end diff --git a/lib/fog/compute/openstack/models/servers.rb b/lib/fog/openstack/compute/models/servers.rb similarity index 75% rename from lib/fog/compute/openstack/models/servers.rb rename to lib/fog/openstack/compute/models/servers.rb index 8a0e9288f..b9864c7c0 100644 --- a/lib/fog/compute/openstack/models/servers.rb +++ b/lib/fog/openstack/compute/models/servers.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/compute/openstack/models/server' +require 'fog/openstack/compute/models/server' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Servers < Fog::OpenStack::Collection attribute :filters - model Fog::Compute::OpenStack::Server + model Fog::OpenStack::Compute::Server def initialize(attributes) self.filters ||= {} @@ -27,11 +27,11 @@ def summary(filters_arg = filters) end # Creates a new server and populates ssh keys - # @return [Fog::Compute::OpenStack::Server] - # @raise [Fog::Compute::OpenStack::NotFound] - HTTP 404 - # @raise [Fog::Compute::OpenStack::BadRequest] - HTTP 400 - # @raise [Fog::Compute::OpenStack::InternalServerError] - HTTP 500 - # @raise [Fog::Compute::OpenStack::ServiceError] + # @return [Fog::OpenStack::Compute::Server] + # @raise [Fog::OpenStack::Compute::NotFound] - HTTP 404 + # @raise [Fog::OpenStack::Compute::BadRequest] - HTTP 400 + # @raise [Fog::OpenStack::Compute::InternalServerError] - HTTP 500 + # @raise [Fog::OpenStack::Compute::ServiceError] # @example # service.servers.bootstrap :name => 'bootstrap-server', # :flavor_ref => service.flavors.first.id, @@ -50,7 +50,7 @@ def get(server_id) if server = service.get_server_details(server_id).body['server'] new(server) end - rescue Fog::Compute::OpenStack::NotFound + rescue Fog::OpenStack::Compute::NotFound nil end end diff --git a/lib/fog/openstack/compute/models/service.rb b/lib/fog/openstack/compute/models/service.rb new file mode 100644 index 000000000..e36471dbb --- /dev/null +++ b/lib/fog/openstack/compute/models/service.rb @@ -0,0 +1,42 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Compute + class Service < Fog::OpenStack::Model + identity :id + + attribute :binary + attribute :host + attribute :state + attribute :status + attribute :updated_at + attribute :zone + + # detailed + attribute :disabled_reason + + def enable + requires :binary, :host + service.enable_service(host, binary) + end + + def disable + requires :binary, :host + service.disable_service(host, binary) + end + + def disable_and_log_reason + requires :binary, :host, :disabled_reason + service.disable_service_log_reason(host, binary, disabled_reason) + end + + def destroy + requires :id + service.delete_service(id) + true + end + end + end + end +end diff --git a/lib/fog/openstack/compute/models/services.rb b/lib/fog/openstack/compute/models/services.rb new file mode 100644 index 000000000..3331dbd02 --- /dev/null +++ b/lib/fog/openstack/compute/models/services.rb @@ -0,0 +1,35 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/compute/models/service' + +module Fog + module OpenStack + class Compute + class Services < Fog::OpenStack::Collection + model Fog::OpenStack::Compute::Service + + def all(options = {}) + load_response(service.list_services(options), 'services') + end + + alias summary all + + def details(options = {}) + Fog::Logger.deprecation('Calling OpenStack[:compute].services.details is deprecated, use .services.all') + all(options) + end + + def get(service_id) + # OpenStack API currently does not support getting single service from it + # There is a blueprint https://blueprints.launchpad.net/nova/+spec/get-service-by-id + # with spec proposal patch https://review.openstack.org/#/c/172412/ but this is abandoned. + serv = service.list_services.body['services'].detect do |s| + s['id'] == service_id + end + new(serv) if serv + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/compute/models/snapshot.rb b/lib/fog/openstack/compute/models/snapshot.rb new file mode 100644 index 000000000..8eb46cad4 --- /dev/null +++ b/lib/fog/openstack/compute/models/snapshot.rb @@ -0,0 +1,32 @@ +require 'fog/openstack/models/model' +require 'fog/openstack/compute/models/metadata' + +module Fog + module OpenStack + class Compute + class Snapshot < Fog::OpenStack::Model + identity :id + + attribute :name, aliases: 'displayName' + attribute :description, aliases: 'displayDescription' + attribute :volume_id, aliases: 'volumeId' + attribute :created_at, aliases: 'createdAt' + attribute :status + attribute :size + + def save(force = false) + requires :volume_id, :name, :description + data = service.create_snapshot(volume_id, name, description, force) + merge_attributes(data.body['snapshot']) + true + end + + def destroy + requires :id + service.delete_snapshot(id) + true + end + end + end + end +end diff --git a/lib/fog/openstack/compute/models/snapshots.rb b/lib/fog/openstack/compute/models/snapshots.rb new file mode 100644 index 000000000..110da6e2a --- /dev/null +++ b/lib/fog/openstack/compute/models/snapshots.rb @@ -0,0 +1,37 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/compute/models/snapshot' + +module Fog + module OpenStack + class Compute + class Snapshots < Fog::OpenStack::Collection + model Fog::OpenStack::Compute::Snapshot + + def all(options = {}) + if !options.kind_of?(Hash) + if options + Fog::Logger.deprecation('Calling OpenStack[:compute].snapshots.all(true) is deprecated, use .snapshots.all') + else + Fog::Logger.deprecation('Calling OpenStack[:compute].snapshots.all(false) is deprecated, use .snapshots.summary') + end + load_response(service.list_snapshots(options), 'snapshots') + else + load_response(service.list_snapshots_detail(options), 'snapshots') + end + end + + def summary(options = {}) + load_response(service.list_snapshots(options), 'snapshots') + end + + def get(snapshot_id) + if snapshot = service.get_snapshot_details(snapshot_id).body['snapshot'] + new(snapshot) + end + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/compute/models/tenant.rb b/lib/fog/openstack/compute/models/tenant.rb new file mode 100644 index 000000000..7553297e7 --- /dev/null +++ b/lib/fog/openstack/compute/models/tenant.rb @@ -0,0 +1,24 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Compute + class Tenant < Fog::OpenStack::Model + identity :id + + attribute :description + attribute :enabled + attribute :name + + def to_s + name + end + + def usage(start_date, end_date) + requires :id + service.get_usage(id, start_date, end_date).body['tenant_usage'] + end + end + end + end +end diff --git a/lib/fog/openstack/compute/models/tenants.rb b/lib/fog/openstack/compute/models/tenants.rb new file mode 100644 index 000000000..a00d6c1f3 --- /dev/null +++ b/lib/fog/openstack/compute/models/tenants.rb @@ -0,0 +1,24 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/compute/models/tenant' + +module Fog + module OpenStack + class Compute + class Tenants < Fog::OpenStack::Collection + model Fog::OpenStack::Compute::Tenant + + def all + load_response(service.list_tenants, 'tenants') + end + + def usages(start_date = nil, end_date = nil, details = false) + service.list_usages(start_date, end_date, details).body['tenant_usages'] + end + + def get(id) + find { |tenant| tenant.id == id } + end + end + end + end +end diff --git a/lib/fog/openstack/compute/models/volume.rb b/lib/fog/openstack/compute/models/volume.rb new file mode 100644 index 000000000..7808e0bb8 --- /dev/null +++ b/lib/fog/openstack/compute/models/volume.rb @@ -0,0 +1,52 @@ +require 'fog/openstack/models/model' +require 'fog/openstack/compute/models/metadata' + +module Fog + module OpenStack + class Compute + class Volume < Fog::OpenStack::Model + identity :id + + attribute :name, aliases: 'displayName' + attribute :description, aliases: 'displayDescription' + attribute :status + attribute :size + attribute :type, aliases: 'volumeType' + attribute :snapshot_id, aliases: 'snapshotId' + attribute :availability_zone, aliases: 'availabilityZone' + attribute :created_at, aliases: 'createdAt' + attribute :attachments + + def save + requires :name, :description, :size + data = service.create_volume(name, description, size, attributes) + merge_attributes(data.body['volume']) + true + end + + def destroy + requires :id + service.delete_volume(id) + true + end + + def attach(server_id, name) + requires :id + data = service.attach_volume(id, server_id, name) + merge_attributes(attachments: attachments << data.body['volumeAttachment']) + true + end + + def detach(server_id, attachment_id) + requires :id + service.detach_volume(server_id, attachment_id) + true + end + + def ready? + status == "available" + end + end + end + end +end diff --git a/lib/fog/compute/openstack/models/volume_attachment.rb b/lib/fog/openstack/compute/models/volume_attachment.rb similarity index 85% rename from lib/fog/compute/openstack/models/volume_attachment.rb rename to lib/fog/openstack/compute/models/volume_attachment.rb index 8297bd475..41727a1f6 100644 --- a/lib/fog/compute/openstack/models/volume_attachment.rb +++ b/lib/fog/openstack/compute/models/volume_attachment.rb @@ -1,8 +1,8 @@ require 'fog/core/model' module Fog - module Compute - class OpenStack + module OpenStack + class Compute class VolumeAttachment < Fog::Model identity :id diff --git a/lib/fog/openstack/compute/models/volume_attachments.rb b/lib/fog/openstack/compute/models/volume_attachments.rb new file mode 100644 index 000000000..6c5046741 --- /dev/null +++ b/lib/fog/openstack/compute/models/volume_attachments.rb @@ -0,0 +1,20 @@ +require 'fog/core/collection' + +module Fog + module OpenStack + class Compute + class VolumeAttachments < Fog::Collection + model Fog::OpenStack::Compute::VolumeAttachment + + def get(server_id) + if server_id + puts service.list_volume_attachments(server_id).body + load(service.list_volume_attachments(server_id).body['volumeAttachments']) + end + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/compute/models/volumes.rb b/lib/fog/openstack/compute/models/volumes.rb new file mode 100644 index 000000000..843cdf6db --- /dev/null +++ b/lib/fog/openstack/compute/models/volumes.rb @@ -0,0 +1,37 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/compute/models/volume' + +module Fog + module OpenStack + class Compute + class Volumes < Fog::OpenStack::Collection + model Fog::OpenStack::Compute::Volume + + def all(options = true) + if !options.kind_of?(Hash) + if options + Fog::Logger.deprecation('Calling OpenStack[:compute].volumes.all(true) is deprecated, use .volumes.all') + else + Fog::Logger.deprecation('Calling OpenStack[:compute].volumes.all(false) is deprecated, use .volumes.summary') + end + load_response(service.list_volumes(options), 'volumes') + else + load_response(service.list_volumes_detail(options), 'volumes') + end + end + + def summary(options = {}) + load_response(service.list_volumes(options), 'volumes') + end + + def get(volume_id) + if volume = service.get_volume_details(volume_id).body['volume'] + new(volume) + end + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/add_aggregate_host.rb b/lib/fog/openstack/compute/requests/add_aggregate_host.rb similarity index 81% rename from lib/fog/compute/openstack/requests/add_aggregate_host.rb rename to lib/fog/openstack/compute/requests/add_aggregate_host.rb index 0ae5d414c..a9e0b632a 100644 --- a/lib/fog/compute/openstack/requests/add_aggregate_host.rb +++ b/lib/fog/openstack/compute/requests/add_aggregate_host.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def add_aggregate_host(uuid, host_uuid) data = { 'add_host' => { 'host' => host_uuid } } @@ -18,9 +18,9 @@ def add_aggregate_host(_uuid, _host_uuid) response = Excon::Response.new response.status = 200 response.headers = { - "Content-Type" => "text/html; charset=UTF-8", + "Content-Type" => "text/html; charset=UTF-8", "Content-Length" => "0", - "Date" => Date.new + "Date" => Date.new } response end diff --git a/lib/fog/compute/openstack/requests/add_fixed_ip.rb b/lib/fog/openstack/compute/requests/add_fixed_ip.rb similarity index 94% rename from lib/fog/compute/openstack/requests/add_fixed_ip.rb rename to lib/fog/openstack/compute/requests/add_fixed_ip.rb index db4fa8461..c3e6c4256 100644 --- a/lib/fog/compute/openstack/requests/add_fixed_ip.rb +++ b/lib/fog/openstack/compute/requests/add_fixed_ip.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Add an IP address on a network. # diff --git a/lib/fog/compute/openstack/requests/add_flavor_access.rb b/lib/fog/openstack/compute/requests/add_flavor_access.rb similarity index 95% rename from lib/fog/compute/openstack/requests/add_flavor_access.rb rename to lib/fog/openstack/compute/requests/add_flavor_access.rb index b6cbc28d7..5b03d638d 100644 --- a/lib/fog/compute/openstack/requests/add_flavor_access.rb +++ b/lib/fog/openstack/compute/requests/add_flavor_access.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def add_flavor_access(flavor_ref, tenant_id) request( diff --git a/lib/fog/compute/openstack/requests/add_security_group.rb b/lib/fog/openstack/compute/requests/add_security_group.rb similarity index 91% rename from lib/fog/compute/openstack/requests/add_security_group.rb rename to lib/fog/openstack/compute/requests/add_security_group.rb index 69c6caeed..6936311e4 100644 --- a/lib/fog/compute/openstack/requests/add_security_group.rb +++ b/lib/fog/openstack/compute/requests/add_security_group.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def add_security_group(server_id, group_name) body = { 'addSecurityGroup' => { "name" => group_name } } diff --git a/lib/fog/openstack/compute/requests/allocate_address.rb b/lib/fog/openstack/compute/requests/allocate_address.rb new file mode 100644 index 000000000..048168053 --- /dev/null +++ b/lib/fog/openstack/compute/requests/allocate_address.rb @@ -0,0 +1,39 @@ +module Fog + module OpenStack + class Compute + class Real + def allocate_address(pool = nil) + request( + body: Fog::JSON.encode('pool' => pool), + expects: [200, 202], + method: 'POST', + path: 'os-floating-ips' + ) + end + end + + class Mock + def allocate_address(_pool = nil) + response = Excon::Response.new + response.status = 200 + response.headers = { + "X-Compute-Request-Id" => "req-d4a21158-a86c-44a6-983a-e25645907f26", + "Content-Type" => "application/json", + "Content-Length" => "105", + "Date" => Date.new + } + response.body = { + "floating_ip" => { + "instance_id" => nil, + "ip" => "192.168.27.132", + "fixed_ip" => nil, + "id" => 4, + "pool" => "nova" + } + } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/associate_address.rb b/lib/fog/openstack/compute/requests/associate_address.rb similarity index 85% rename from lib/fog/compute/openstack/requests/associate_address.rb rename to lib/fog/openstack/compute/requests/associate_address.rb index 704e4e275..ddebbc2bf 100644 --- a/lib/fog/compute/openstack/requests/associate_address.rb +++ b/lib/fog/openstack/compute/requests/associate_address.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def associate_address(server_id, ip_address) body = { "addFloatingIp" => { "address" => ip_address } } @@ -18,9 +18,9 @@ def associate_address(server_id, ip_address) response = Excon::Response.new response.status = 202 response.headers = { - "Content-Type" => "text/html, charset=UTF-8", + "Content-Type" => "text/html, charset=UTF-8", "Content-Length" => "0", - "Date" => Date.new + "Date" => Date.new } response end diff --git a/lib/fog/compute/openstack/requests/attach_volume.rb b/lib/fog/openstack/compute/requests/attach_volume.rb similarity index 80% rename from lib/fog/compute/openstack/requests/attach_volume.rb rename to lib/fog/openstack/compute/requests/attach_volume.rb index cd3400d9d..49598c2f1 100644 --- a/lib/fog/compute/openstack/requests/attach_volume.rb +++ b/lib/fog/openstack/compute/requests/attach_volume.rb @@ -1,19 +1,19 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def attach_volume(volume_id, server_id, device) data = { 'volumeAttachment' => { 'volumeId' => volume_id.to_s, - 'device' => device + 'device' => device } } request( body: Fog::JSON.encode(data), expects: [200, 202], method: 'POST', - path: "servers/%s/os-volume_attachments" % [server_id] + path: format("servers/%s/os-volume_attachments", server_id) ) end end @@ -23,10 +23,10 @@ def attach_volume(volume_id, server_id, device) response = Excon::Response.new response.status = 200 data = { - 'id' => volume_id, + 'id' => volume_id, 'volumeId' => volume_id, 'serverId' => server_id, - 'device' => device + 'device' => device } self.data[:volumes][volume_id]['attachments'] << data self.data[:volumes][volume_id]['status'] = 'in-use' diff --git a/lib/fog/compute/openstack/requests/boot_from_snapshot.rb b/lib/fog/openstack/compute/requests/boot_from_snapshot.rb similarity index 87% rename from lib/fog/compute/openstack/requests/boot_from_snapshot.rb rename to lib/fog/openstack/compute/requests/boot_from_snapshot.rb index 916f3b9b9..f8ebfcef6 100644 --- a/lib/fog/compute/openstack/requests/boot_from_snapshot.rb +++ b/lib/fog/openstack/compute/requests/boot_from_snapshot.rb @@ -1,13 +1,13 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def boot_from_snapshot(name, image_ref, flavor_ref, options = {}) data = { 'server' => { 'flavorRef' => flavor_ref, - 'imageRef' => image_ref, - 'name' => name + 'imageRef' => image_ref, + 'name' => name } } @@ -23,7 +23,7 @@ def boot_from_snapshot(name, image_ref, flavor_ref, options = {}) options['personality'].each do |file| data['server']['personality'] << { 'contents' => Base64.encode64(file['contents']), - 'path' => file['path'] + 'path' => file['path'] } end end diff --git a/lib/fog/compute/openstack/requests/change_server_password.rb b/lib/fog/openstack/compute/requests/change_server_password.rb similarity index 92% rename from lib/fog/compute/openstack/requests/change_server_password.rb rename to lib/fog/openstack/compute/requests/change_server_password.rb index 01b9c1eeb..c4cd79825 100644 --- a/lib/fog/compute/openstack/requests/change_server_password.rb +++ b/lib/fog/openstack/compute/requests/change_server_password.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def change_server_password(server_id, admin_password) body = { 'changePassword' => { 'adminPass' => admin_password } } diff --git a/lib/fog/compute/openstack/requests/confirm_resize_server.rb b/lib/fog/openstack/compute/requests/confirm_resize_server.rb similarity index 91% rename from lib/fog/compute/openstack/requests/confirm_resize_server.rb rename to lib/fog/openstack/compute/requests/confirm_resize_server.rb index 85b57c1b8..cdd412cdf 100644 --- a/lib/fog/compute/openstack/requests/confirm_resize_server.rb +++ b/lib/fog/openstack/compute/requests/confirm_resize_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def confirm_resize_server(server_id) body = { 'confirmResize' => nil } diff --git a/lib/fog/compute/openstack/requests/create_aggregate.rb b/lib/fog/openstack/compute/requests/create_aggregate.rb similarity index 86% rename from lib/fog/compute/openstack/requests/create_aggregate.rb rename to lib/fog/openstack/compute/requests/create_aggregate.rb index 237b9191f..4765e5c70 100644 --- a/lib/fog/compute/openstack/requests/create_aggregate.rb +++ b/lib/fog/openstack/compute/requests/create_aggregate.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def create_aggregate(name, options = {}) data = { @@ -29,9 +29,9 @@ def create_aggregate(_name, _options = {}) response = Excon::Response.new response.status = 200 response.headers = { - "Content-Type" => "text/html; charset=UTF-8", + "Content-Type" => "text/html; charset=UTF-8", "Content-Length" => "0", - "Date" => Date.new + "Date" => Date.new } response.body = { 'aggregate' => data[:aggregates].first } response diff --git a/lib/fog/openstack/compute/requests/create_flavor.rb b/lib/fog/openstack/compute/requests/create_flavor.rb new file mode 100644 index 000000000..fd6a7e57f --- /dev/null +++ b/lib/fog/openstack/compute/requests/create_flavor.rb @@ -0,0 +1,75 @@ +module Fog + module OpenStack + class Compute + class Real + # PARAMETERS # + # name = Name of flavor + # ram = Memory in MB + # vcpus = Number of VCPUs + # disk = Size of local disk in GB + # swap = Swap space in MB + # rxtx_factor = RX/TX factor + def create_flavor(attributes) + data = { + 'flavor' => { + 'name' => attributes[:name], + 'ram' => attributes[:ram], + 'vcpus' => attributes[:vcpus], + 'disk' => attributes[:disk], + 'id' => attributes[:flavor_id], + 'swap' => attributes[:swap], + 'OS-FLV-EXT-DATA:ephemeral' => attributes[:ephemeral], + 'os-flavor-access:is_public' => attributes[:is_public], + 'rxtx_factor' => attributes[:rxtx_factor] + } + } + + request( + body: Fog::JSON.encode(data), + expects: 200, + method: 'POST', + path: 'flavors' + ) + end + end + + class Mock + def create_flavor(attributes) + response = Excon::Response.new + response.status = 200 + response.headers = { + "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new + } + response.body = { + "flavor" => { + "vcpus" => attributes[:vcpus], + "disk" => attributes[:disk], + "name" => attributes[:name], + "links" => [ + { + "href" => "http://192.168.27.100:8774/v1.1/6733e93c5f5c4eb1bcabc6902ba208d6/flavors/11", + "rel" => "self" + }, + { + "href" => "http://192.168.27.100:8774/6733e93c5f5c4eb1bcabc6902ba208d6/flavors/11", + "rel" => "bookmark" + } + ], + "rxtx_factor" => attributes[:rxtx_factor] || 1.0, + "OS-FLV-EXT-DATA:ephemeral" => attributes[:ephemeral] || 0, + "os-flavor-access:is_public" => attributes[:is_public] || false, + "OS-FLV-DISABLED:disabled" => attributes[:disabled] || false, + "ram" => attributes[:ram], + "id" => "11", + "swap" => attributes[:swap] || "" + } + } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/create_flavor_metadata.rb b/lib/fog/openstack/compute/requests/create_flavor_metadata.rb similarity index 80% rename from lib/fog/compute/openstack/requests/create_flavor_metadata.rb rename to lib/fog/openstack/compute/requests/create_flavor_metadata.rb index aafb30077..2947ca2a5 100644 --- a/lib/fog/compute/openstack/requests/create_flavor_metadata.rb +++ b/lib/fog/openstack/compute/requests/create_flavor_metadata.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def create_flavor_metadata(flavor_ref, metadata) data = { @@ -22,9 +22,9 @@ def create_flavor_metadata(_flavor_ref, _metadata) response.status = 200 response.headers = { "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new } response.body = { "extra_specs" => { "cpu_arch" => "x86_64" diff --git a/lib/fog/openstack/compute/requests/create_image.rb b/lib/fog/openstack/compute/requests/create_image.rb new file mode 100644 index 000000000..340b1bd8e --- /dev/null +++ b/lib/fog/openstack/compute/requests/create_image.rb @@ -0,0 +1,44 @@ +module Fog + module OpenStack + class Compute + class Real + def create_image(server_id, name, metadata = {}) + body = { 'createImage' => { + 'name' => name, + 'metadata' => metadata + } } + data = server_action(server_id, body) + image_id = data.headers["Location"].scan(%r{.*/(.*)}).flatten[0] + get_image_details(image_id) + end + end + + class Mock + def create_image(server_id, name, metadata = {}) + response = Excon::Response.new + response.status = 202 + + img_id = Fog::Mock.random_numbers(6).to_s + + data = { + 'id' => img_id, + 'server' => { "id" => "3", "links" => [{ "href" => "http://nova1:8774/admin/servers/#{server_id}", "rel" => "bookmark" }] }, + 'links' => [{ "href" => "http://nova1:8774/v1.1/admin/images/#{img_id}", "rel" => "self" }, { "href" => "http://nova1:8774/admin/images/#{img_id}", "rel" => "bookmark" }], + 'metadata' => metadata || {}, + 'name' => name || "server_#{rand(999)}", + 'progress' => 0, + 'status' => 'SAVING', + 'minDisk' => 0, + 'minRam' => 0, + 'updated' => "", + 'created' => "" + } + self.data[:last_modified][:images][data['id']] = Time.now + self.data[:images][data['id']] = data + response.body = { 'image' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/create_key_pair.rb b/lib/fog/openstack/compute/requests/create_key_pair.rb new file mode 100644 index 000000000..2a2967118 --- /dev/null +++ b/lib/fog/openstack/compute/requests/create_key_pair.rb @@ -0,0 +1,48 @@ +module Fog + module OpenStack + class Compute + class Real + def create_key_pair(key_name, public_key = nil, user_id = nil) + data = { + 'keypair' => { + 'name' => key_name + } + } + + data['keypair']['public_key'] = public_key unless public_key.nil? + data['keypair']['user_id'] = user_id unless user_id.nil? + + request( + body: Fog::JSON.encode(data), + expects: [200, 201], + method: 'POST', + path: 'os-keypairs' + ) + end + end + + class Mock + def create_key_pair(key_name, _public_key = nil) + response = Excon::Response.new + response.status = 200 + response.headers = { + "X-Compute-Request-Id" => "req-c373a42c-2825-4e60-8d34-99416ea850be", + "Content-Type" => "application/json", + "Content-Length" => "1289", + "Date" => Date.new + } + response.body = { + "keypair" => { + "public_key" => "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCdAZLjljntJbLVVkNHjWFSoKen2nZbk39ZfqhZJOMdeFdz02GWBS45rcuboeGg/gozKRwsLu4N6NLPlYtbK/NapJIvgO/djBp+FQG1QZNtLPsx7j4hVJac3yISGms+Xtu4cEv6j5sFDzAgTQbWez0Z1+9qOq9ngdaoW+YClfQ== vagrant@nova\n", + "private_key" => "-----BEGIN RSA PRIVATE KEY-----\nMIICXgIBAAKBgQDCdAZLjljn1tJbLVVkNHjWFSoKen2nZbk39ZfqhZJOMdeFdz02\nGWBS45rcuHboeGg/gozKRwsLu4N6NLPlYtbK/NapJIvgO/djBp+FQG1QZNtLPsx7\nj4hVJac3yISGms+Xtu4cEv6j5sFDzAgTQbWez0Z1+9qOq9ngdaoW+YClfQIDAQAB\nAoGBALBoT9m1vuQ82EONQf2RONqHAsfUzi/SMhEZRgOlv9AemXZkcWyl4uPvxmtd\nEcreiTystAtCHjw7lhCExXthipevUjtIAAt+b3pMn6Oyjad3IRvde6atMdjrje43\n/nftYtuXYyJTsvwEvLYqSioLQ0Nn/XDKhOpcM5tejDHOH35lAkEA+H4r7y9X521u\nIABVAezBWaT/wvdMjx5cwfyYEQjnI1bxfRIqkgoY5gDDBdVbT75UTsHHbHLORQcw\nRjRvS2zgewJBAMhT6eyMonJvHHvC5RcchcY+dWkscIKoOzeyUKMb+7tERQa9/UN2\njYb+jdM0VyL0ruLFwYtl2m34gfmhcXgIvGcCQGzKMEnjHEUBr7jq7EyPbobkqeSd\niDMQQ+PZxmmO0EK0ib0L+v881HG926PuKK/cz+Q7Cif8iznFT+ksg50t6YkCQQC9\nwfcAskqieSuS9A9LcCIrojhXctf0e+T0Ij2N89DlF4sHEuqXf/IZ4IB5gsfTfdE3\nUDnAkK9yogaEbu/r0uKbAkEAy5kl71bIqvKTKsY2mES9ziVxfftl/9UIi5LI+QHb\nmC/c6cTrGVCM71fi2GMxGgBeEea4+7xwoWTL4CxA00kmTg==\n-----END RSA PRIVATE KEY-----\n", + "user_id" => "admin", + "name" => key_name, + "fingerprint" => "97:86:f4:15:68:0c:7b:a7:e5:8f:f0:bd:1f:27:65:ad" + } + } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/create_os_interface.rb b/lib/fog/openstack/compute/requests/create_os_interface.rb similarity index 96% rename from lib/fog/compute/openstack/requests/create_os_interface.rb rename to lib/fog/openstack/compute/requests/create_os_interface.rb index f16917af5..5be2c5230 100644 --- a/lib/fog/compute/openstack/requests/create_os_interface.rb +++ b/lib/fog/openstack/compute/requests/create_os_interface.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # === Parameters # * server_id <~String> diff --git a/lib/fog/openstack/compute/requests/create_security_group.rb b/lib/fog/openstack/compute/requests/create_security_group.rb new file mode 100644 index 000000000..5c0d6a1d2 --- /dev/null +++ b/lib/fog/openstack/compute/requests/create_security_group.rb @@ -0,0 +1,51 @@ +module Fog + module OpenStack + class Compute + class Real + def create_security_group(name, description) + data = { + 'security_group' => { + 'name' => name, + 'description' => description + } + } + + request( + body: Fog::JSON.encode(data), + expects: 200, + method: 'POST', + path: 'os-security-groups' + ) + end + end + + class Mock + def create_security_group(name, description) + Fog::OpenStack::Identity.new(openstack_auth_url: credentials[:openstack_auth_url], openstack_identity_api_version: 'v2.0') + tenant_id = Fog::OpenStack::Identity::V2::Mock.data[current_tenant][:tenants].keys.first + security_group_id = Fog::Mock.random_numbers(2).to_i + 1 + data[:security_groups][security_group_id.to_s] = { + 'tenant_id' => tenant_id, + 'rules' => [], + 'id' => security_group_id, + 'name' => name, + 'description' => description + } + + response = Excon::Response.new + response.status = 200 + response.headers = { + 'X-Compute-Request-Id' => "req-#{Fog::Mock.random_hex(32)}", + 'Content-Type' => 'application/json', + 'Content-Length' => Fog::Mock.random_numbers(3).to_s, + 'Date' => Date.new + } + response.body = { + 'security_group' => data[:security_groups][security_group_id.to_s] + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/create_security_group_rule.rb b/lib/fog/openstack/compute/requests/create_security_group_rule.rb new file mode 100644 index 000000000..fa8b471f8 --- /dev/null +++ b/lib/fog/openstack/compute/requests/create_security_group_rule.rb @@ -0,0 +1,57 @@ +module Fog + module OpenStack + class Compute + class Real + def create_security_group_rule(parent_group_id, ip_protocol, from_port, to_port, cidr, group_id = nil) + data = { + 'security_group_rule' => { + 'parent_group_id' => parent_group_id, + 'ip_protocol' => ip_protocol, + 'from_port' => from_port, + 'to_port' => to_port, + 'cidr' => cidr, + 'group_id' => group_id + } + } + + request( + expects: 200, + method: 'POST', + body: Fog::JSON.encode(data), + path: 'os-security-group-rules' + ) + end + end + + class Mock + def create_security_group_rule(parent_group_id, ip_protocol, from_port, to_port, cidr, group_id = nil) + parent_group_id = parent_group_id.to_i + response = Excon::Response.new + response.status = 200 + response.headers = { + 'X-Compute-Request-Id' => "req-#{Fog::Mock.random_hex(32)}", + 'Content-Type' => 'application/json', + 'Content-Length' => Fog::Mock.random_numbers(3).to_s, + 'Date' => Date.new + } + rule = { + 'id' => Fog::Mock.random_numbers(2).to_i, + 'from_port' => from_port, + 'group' => group_id || {}, + 'ip_protocol' => ip_protocol, + 'to_port' => to_port, + 'parent_group_id' => parent_group_id, + 'ip_range' => { + 'cidr' => cidr + } + } + data[:security_groups][parent_group_id.to_s]['rules'].push(rule) + response.body = { + 'security_group_rule' => rule + } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/create_server.rb b/lib/fog/openstack/compute/requests/create_server.rb similarity index 77% rename from lib/fog/compute/openstack/requests/create_server.rb rename to lib/fog/openstack/compute/requests/create_server.rb index 9dcc85a79..830cddbde 100644 --- a/lib/fog/compute/openstack/requests/create_server.rb +++ b/lib/fog/openstack/compute/requests/create_server.rb @@ -1,12 +1,12 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def create_server(name, image_ref, flavor_ref, options = {}) data = { 'server' => { 'flavorRef' => flavor_ref, - 'name' => name + 'name' => name } } data['server']['imageRef'] = image_ref if image_ref @@ -23,7 +23,7 @@ def create_server(name, image_ref, flavor_ref, options = {}) # security names requires a hash with a name prefix data['server']['security_groups'] = Array(options['security_groups']).map do |sg| - name = if sg.kind_of?(Fog::Compute::OpenStack::SecurityGroup) + name = if sg.kind_of?(Fog::OpenStack::Compute::SecurityGroup) sg.name else sg @@ -37,7 +37,7 @@ def create_server(name, image_ref, flavor_ref, options = {}) options['personality'].each do |file| data['server']['personality'] << { 'contents' => Base64.encode64(file['contents'] || file[:contents]), - 'path' => file['path'] || file[:path] + 'path' => file['path'] || file[:path] } end end @@ -70,9 +70,9 @@ def create_server(name, image_ref, flavor_ref, options = {}) data['server']['block_device_mapping'] = [block_device_mapping].flatten.collect do |mapping| { 'delete_on_termination' => mapping[:delete_on_termination], - 'device_name' => mapping[:device_name], - 'volume_id' => mapping[:volume_id], - 'volume_size' => mapping[:volume_size] + 'device_name' => mapping[:device_name], + 'volume_id' => mapping[:volume_id], + 'volume_size' => mapping[:volume_size] } end end @@ -94,7 +94,7 @@ def create_server(name, image_ref, flavor_ref, options = {}) response.status = 202 server_id = Fog::Mock.random_numbers(6).to_s - identity = Fog::Identity::OpenStack.new openstack_auth_url: credentials[:openstack_auth_url] + identity = Fog::OpenStack::Identity.new(openstack_auth_url: credentials[:openstack_auth_url], openstack_identity_api_version: 'v2.0') user = identity.users.find do |u| u.name == @openstack_username end @@ -109,21 +109,21 @@ def create_server(name, image_ref, flavor_ref, options = {}) end mock_data = { - 'addresses' => { "Private" => [{ "addr" => Fog::Mock.random_ip }] }, - 'flavor' => { "id" => flavor_ref, "links" => [{ "href" => "http://nova1:8774/admin/flavors/1", "rel" => "bookmark" }] }, - 'id' => server_id, - 'image' => { "id" => image_ref, "links" => [{ "href" => "http://nova1:8774/admin/images/#{image_ref}", "rel" => "bookmark" }] }, - 'links' => [{ "href" => "http://nova1:8774/v1.1/admin/servers/5", "rel" => "self" }, { "href" => "http://nova1:8774/admin/servers/5", "rel" => "bookmark" }], - 'hostId' => "123456789ABCDEF01234567890ABCDEF", - 'metadata' => options['metadata'] || {}, - 'name' => name || "server_#{rand(999)}", - 'accessIPv4' => options['accessIPv4'] || "", - 'accessIPv6' => options['accessIPv6'] || "", - 'progress' => 0, - 'status' => 'BUILD', - 'created' => '2012-09-27T00:04:18Z', - 'updated' => '2012-09-27T00:04:27Z', - 'user_id' => user_id, + 'addresses' => { "Private" => [{ "addr" => Fog::Mock.random_ip }] }, + 'flavor' => { "id" => flavor_ref, "links" => [{ "href" => "http://nova1:8774/admin/flavors/1", "rel" => "bookmark" }] }, + 'id' => server_id, + 'image' => { "id" => image_ref, "links" => [{ "href" => "http://nova1:8774/admin/images/#{image_ref}", "rel" => "bookmark" }] }, + 'links' => [{ "href" => "http://nova1:8774/v1.1/admin/servers/5", "rel" => "self" }, { "href" => "http://nova1:8774/admin/servers/5", "rel" => "bookmark" }], + 'hostId' => "123456789ABCDEF01234567890ABCDEF", + 'metadata' => options['metadata'] || {}, + 'name' => name || "server_#{rand(999)}", + 'accessIPv4' => options['accessIPv4'] || "", + 'accessIPv6' => options['accessIPv6'] || "", + 'progress' => 0, + 'status' => 'BUILD', + 'created' => '2012-09-27T00:04:18Z', + 'updated' => '2012-09-27T00:04:27Z', + 'user_id' => user_id, 'config_drive' => options['config_drive'] || '' } @@ -142,8 +142,8 @@ def create_server(name, image_ref, flavor_ref, options = {}) else { 'adminPass' => 'password', - 'id' => server_id, - 'links' => mock_data['links'] + 'id' => server_id, + 'links' => mock_data['links'] } end @@ -158,7 +158,7 @@ def create_server(name, image_ref, flavor_ref, options = {}) security_groups = options['security_groups'] if security_groups groups = Array(security_groups).map do |sg| - if sg.kind_of?(Fog::Compute::OpenStack::SecurityGroup) + if sg.kind_of?(Fog::OpenStack::Compute::SecurityGroup) sg.name else sg diff --git a/lib/fog/compute/openstack/requests/create_server_group.rb b/lib/fog/openstack/compute/requests/create_server_group.rb similarity index 76% rename from lib/fog/compute/openstack/requests/create_server_group.rb rename to lib/fog/openstack/compute/requests/create_server_group.rb index 1f5dc1ec5..1b7eae88e 100644 --- a/lib/fog/compute/openstack/requests/create_server_group.rb +++ b/lib/fog/openstack/compute/requests/create_server_group.rb @@ -1,12 +1,12 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def create_server_group(name, policy) - Fog::Compute::OpenStack::ServerGroup.validate_server_group_policy policy + Fog::OpenStack::Compute::ServerGroup.validate_server_group_policy policy body = { 'server_group' => { - 'name' => name, + 'name' => name, 'policies' => [policy] } } request( @@ -20,7 +20,7 @@ def create_server_group(name, policy) class Mock def create_server_group(name, policy) - Fog::Compute::OpenStack::ServerGroup.validate_server_group_policy policy + Fog::OpenStack::Compute::ServerGroup.validate_server_group_policy policy id = SecureRandom.uuid data[:server_groups][id] = { name: name, policies: [policy], members: [] } get_server_group id diff --git a/lib/fog/openstack/compute/requests/create_snapshot.rb b/lib/fog/openstack/compute/requests/create_snapshot.rb new file mode 100644 index 000000000..fa9ac97b7 --- /dev/null +++ b/lib/fog/openstack/compute/requests/create_snapshot.rb @@ -0,0 +1,51 @@ +module Fog + module OpenStack + class Compute + class Real + def create_snapshot(volume_id, name, description, force = false) + data = { + 'snapshot' => { + 'volume_id' => volume_id, + 'display_name' => name, + 'display_description' => description, + 'force' => force + } + } + + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'POST', + path: "os-snapshots" + ) + end + end + + class Mock + def create_snapshot(volume_id, name, description, _force = false) + volume_response = get_volume_details(volume_id) + volume = volume_response.data[:body]['volume'] + if volume.nil? + raise Fog::OpenStack::Compute::NotFound + else + response = Excon::Response.new + data = { + "status" => "availble", + "name" => name, + "created_at" => Time.now, + "description" => description, + "volume_id" => volume_id, + "id" => Fog::Mock.random_numbers(2), + "size" => volume['size'] + } + + self.data[:snapshots][data['id']] = data + response.body = { "snapshot" => data } + response.status = 202 + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/create_volume.rb b/lib/fog/openstack/compute/requests/create_volume.rb new file mode 100644 index 000000000..d3af35abd --- /dev/null +++ b/lib/fog/openstack/compute/requests/create_volume.rb @@ -0,0 +1,55 @@ +module Fog + module OpenStack + class Compute + class Real + def create_volume(name, description, size, options = {}) + data = { + 'volume' => { + 'display_name' => name, + 'display_description' => description, + 'size' => size + } + } + + vanilla_options = [ + :snapshot_id, + :availability_zone, + :volume_type, + :metadata + ] + + vanilla_options.select { |o| options[o] }.each do |key| + data['volume'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'POST', + path: 'os-volumes' + ) + end + end + + class Mock + def create_volume(name, description, size, options = {}) + response = Excon::Response.new + response.status = 202 + data = { 'id' => Fog::Mock.random_numbers(2), + 'displayName' => name, + 'displayDescription' => description, + 'size' => size, + 'status' => 'creating', + 'snapshotId' => options[:snapshot_id], + 'volumeType' => options[:volume_type] || 'None', + 'availabilityZone' => options[:availability_zone] || 'nova', + 'createdAt' => Time.now.strftime('%FT%T.%6N'), + 'attachments' => [], 'metadata' => options[:metadata] || {} } + self.data[:volumes][data['id']] = data + response.body = { 'volume' => data } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/delete_aggregate.rb b/lib/fog/openstack/compute/requests/delete_aggregate.rb similarity index 78% rename from lib/fog/compute/openstack/requests/delete_aggregate.rb rename to lib/fog/openstack/compute/requests/delete_aggregate.rb index dc9e24707..53d76455a 100644 --- a/lib/fog/compute/openstack/requests/delete_aggregate.rb +++ b/lib/fog/openstack/compute/requests/delete_aggregate.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def delete_aggregate(uuid) request( @@ -16,9 +16,9 @@ def delete_aggregate(_uuid) response = Excon::Response.new response.status = 200 response.headers = { - "Content-Type" => "text/html; charset=UTF-8", + "Content-Type" => "text/html; charset=UTF-8", "Content-Length" => "0", - "Date" => Date.new + "Date" => Date.new } response end diff --git a/lib/fog/compute/openstack/requests/delete_flavor.rb b/lib/fog/openstack/compute/requests/delete_flavor.rb similarity index 77% rename from lib/fog/compute/openstack/requests/delete_flavor.rb rename to lib/fog/openstack/compute/requests/delete_flavor.rb index 9d36d7348..1680c0d8c 100644 --- a/lib/fog/compute/openstack/requests/delete_flavor.rb +++ b/lib/fog/openstack/compute/requests/delete_flavor.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def delete_flavor(flavor_id) request( @@ -16,9 +16,9 @@ def delete_flavor(_flavor_id) response = Excon::Response.new response.status = 202 response.headers = { - "Content-Type" => "text/html; charset=UTF-8", + "Content-Type" => "text/html; charset=UTF-8", "Content-Length" => "0", - "Date" => Date.new + "Date" => Date.new } response end diff --git a/lib/fog/compute/openstack/requests/delete_flavor_metadata.rb b/lib/fog/openstack/compute/requests/delete_flavor_metadata.rb similarity index 76% rename from lib/fog/compute/openstack/requests/delete_flavor_metadata.rb rename to lib/fog/openstack/compute/requests/delete_flavor_metadata.rb index efc3e4ca9..1cd0436e1 100644 --- a/lib/fog/compute/openstack/requests/delete_flavor_metadata.rb +++ b/lib/fog/openstack/compute/requests/delete_flavor_metadata.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def delete_flavor_metadata(flavor_ref, key) request( @@ -17,9 +17,9 @@ def delete_flavor_metadata(_flavor_ref, _key) response.status = 200 response.headers = { "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new } response.body = nil response diff --git a/lib/fog/openstack/compute/requests/delete_image.rb b/lib/fog/openstack/compute/requests/delete_image.rb new file mode 100644 index 000000000..69fddfe63 --- /dev/null +++ b/lib/fog/openstack/compute/requests/delete_image.rb @@ -0,0 +1,36 @@ +module Fog + module OpenStack + class Compute + class Real + def delete_image(image_id) + request( + expects: 204, + method: 'DELETE', + path: "images/#{image_id}" + ) + end + end + + class Mock + def delete_image(image_id) + response = Excon::Response.new + image = list_images_detail.body['images'].find { |im| im['id'] == image_id } + if image + if image['status'] == 'SAVING' + response.status = 409 + raise(Excon::Errors.status_error({ expects: 202 }, response)) + else + data[:last_modified][:images].delete(image_id) + data[:images].delete(image_id) + response.status = 202 + end + response + else + response.status = 400 + raise(Excon::Errors.status_error({ expects: 202 }, response)) + end + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/delete_key_pair.rb b/lib/fog/openstack/compute/requests/delete_key_pair.rb new file mode 100644 index 000000000..e159fadfb --- /dev/null +++ b/lib/fog/openstack/compute/requests/delete_key_pair.rb @@ -0,0 +1,31 @@ +module Fog + module OpenStack + class Compute + class Real + def delete_key_pair(key_name, user_id = nil) + options = {} + options[:user_id] = user_id unless user_id.nil? + request( + expects: [202, 204], + method: 'DELETE', + path: "os-keypairs/#{Fog::OpenStack.escape(key_name)}" + ) + end + end + + class Mock + def delete_key_pair(_key_name) + response = Excon::Response.new + response.status = 202 + response.headers = { + "Content-Type" => "text/html; charset=UTF-8", + "Content-Length" => "0", + "Date" => Date.new + } + response.body = {} + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/delete_meta.rb b/lib/fog/openstack/compute/requests/delete_meta.rb similarity index 84% rename from lib/fog/compute/openstack/requests/delete_meta.rb rename to lib/fog/openstack/compute/requests/delete_meta.rb index a7747a8f1..66c66a5cd 100644 --- a/lib/fog/compute/openstack/requests/delete_meta.rb +++ b/lib/fog/openstack/compute/requests/delete_meta.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def delete_meta(collection_name, parent_id, key) request( @@ -15,13 +15,13 @@ class Mock def delete_meta(collection_name, parent_id, _key) if collection_name == "images" unless list_images_detail.body['images'].find { |image| image['id'] == parent_id } - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end if collection_name == "servers" unless list_servers_detail.body['servers'].find { |server| server['id'] == parent_id } - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end diff --git a/lib/fog/openstack/compute/requests/delete_metadata.rb b/lib/fog/openstack/compute/requests/delete_metadata.rb new file mode 100644 index 000000000..9a46f442c --- /dev/null +++ b/lib/fog/openstack/compute/requests/delete_metadata.rb @@ -0,0 +1,23 @@ +module Fog + module OpenStack + class Compute + class Real + def delete_metadata(collection_name, parent_id, key) + request( + expects: 204, + method: 'DELETE', + path: "#{collection_name}/#{parent_id}/metadata/#{key}" + ) + end + end + + class Mock + def delete_metadata(_collection_name, _parent_id, _key) + response = Excon::Response.new + response.status = 204 + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/delete_os_interface.rb b/lib/fog/openstack/compute/requests/delete_os_interface.rb similarity index 92% rename from lib/fog/compute/openstack/requests/delete_os_interface.rb rename to lib/fog/openstack/compute/requests/delete_os_interface.rb index 6d9ed4016..5a8eadc4e 100644 --- a/lib/fog/compute/openstack/requests/delete_os_interface.rb +++ b/lib/fog/openstack/compute/requests/delete_os_interface.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # === Parameters # * server_id <~String> diff --git a/lib/fog/openstack/compute/requests/delete_security_group.rb b/lib/fog/openstack/compute/requests/delete_security_group.rb new file mode 100644 index 000000000..fa06bc3c5 --- /dev/null +++ b/lib/fog/openstack/compute/requests/delete_security_group.rb @@ -0,0 +1,31 @@ +module Fog + module OpenStack + class Compute + class Real + def delete_security_group(security_group_id) + request( + expects: 202, + method: 'DELETE', + path: "os-security-groups/#{security_group_id}" + ) + end + end + + class Mock + def delete_security_group(security_group_id) + data[:security_groups].delete security_group_id.to_s + + response = Excon::Response.new + response.status = 202 + response.headers = { + "Content-Type" => "text/html; charset=UTF-8", + "Content-Length" => "0", + "Date" => Date.new + } + response.body = {} + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/delete_security_group_rule.rb b/lib/fog/openstack/compute/requests/delete_security_group_rule.rb new file mode 100644 index 000000000..e91be1fb4 --- /dev/null +++ b/lib/fog/openstack/compute/requests/delete_security_group_rule.rb @@ -0,0 +1,31 @@ +module Fog + module OpenStack + class Compute + class Real + def delete_security_group_rule(security_group_rule_id) + request( + expects: 202, + method: 'DELETE', + path: "os-security-group-rules/#{security_group_rule_id}" + ) + end + end + + class Mock + def delete_security_group_rule(security_group_rule_id) + security_group = data[:security_groups].values.find { |sg| sg["rules"].find { |sgr| sgr["id"].to_s == security_group_rule_id.to_s } } + security_group["rules"].reject! { |sgr| sgr["id"] == security_group_rule_id } + response = Excon::Response.new + response.status = 202 + response.headers = { + "Content-Type" => "text/html; charset=UTF-8", + "Content-Length" => "0", + "Date" => Date.new + } + response.body = {} + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/delete_server.rb b/lib/fog/openstack/compute/requests/delete_server.rb similarity index 92% rename from lib/fog/compute/openstack/requests/delete_server.rb rename to lib/fog/openstack/compute/requests/delete_server.rb index 6e542740d..22e20996b 100644 --- a/lib/fog/compute/openstack/requests/delete_server.rb +++ b/lib/fog/openstack/compute/requests/delete_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def delete_server(server_id) request( @@ -31,7 +31,7 @@ def delete_server(server_id) end response else - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end end diff --git a/lib/fog/compute/openstack/requests/delete_server_group.rb b/lib/fog/openstack/compute/requests/delete_server_group.rb similarity index 79% rename from lib/fog/compute/openstack/requests/delete_server_group.rb rename to lib/fog/openstack/compute/requests/delete_server_group.rb index 9d7394c31..5b59d5a85 100644 --- a/lib/fog/compute/openstack/requests/delete_server_group.rb +++ b/lib/fog/openstack/compute/requests/delete_server_group.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def delete_server_group(group_id) request( @@ -16,9 +16,9 @@ def delete_server_group(group_id) response = Excon::Response.new response.status = data[:server_groups].delete(group_id) ? 204 : 404 response.headers = { - "Content-Type" => "text/html; charset=UTF-8", + "Content-Type" => "text/html; charset=UTF-8", "Content-Length" => "0", - "Date" => Date.new + "Date" => Date.new } response end diff --git a/lib/fog/openstack/compute/requests/delete_service.rb b/lib/fog/openstack/compute/requests/delete_service.rb new file mode 100644 index 000000000..d13174858 --- /dev/null +++ b/lib/fog/openstack/compute/requests/delete_service.rb @@ -0,0 +1,34 @@ +module Fog + module OpenStack + class Compute + class Real + def delete_service(uuid, optional_params = nil) + # Encode all params + if optional_params + optional_params = optional_params.each { |k, v| optional_params[k] = URI.encode_www_form_component(v) } + end + + request( + expects: [202, 204], + method: 'DELETE', + path: "os-services/#{uuid}", + query: optional_params + ) + end + end + + class Mock + def delete_service(_host, _binary, _optional_params = nil) + response = Excon::Response.new + response.status = 204 + response.headers = { + "Content-Type" => "text/html; charset=UTF-8", + "Content-Length" => "0", + "Date" => Date.new + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/delete_snapshot.rb b/lib/fog/openstack/compute/requests/delete_snapshot.rb new file mode 100644 index 000000000..460fcf282 --- /dev/null +++ b/lib/fog/openstack/compute/requests/delete_snapshot.rb @@ -0,0 +1,28 @@ +module Fog + module OpenStack + class Compute + class Real + def delete_snapshot(snapshot_id) + request( + expects: 202, + method: 'DELETE', + path: "os-snapshots/#{snapshot_id}" + ) + end + end + + class Mock + def delete_snapshot(snapshot_id) + response = Excon::Response.new + response.status = 204 + if list_snapshots_detail.body['snapshots'].find { |snap| snap['id'] == snapshot_id } + data[:snapshots].delete(snapshot_id) + else + raise Fog::OpenStack::Compute::NotFound + end + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/delete_volume.rb b/lib/fog/openstack/compute/requests/delete_volume.rb new file mode 100644 index 000000000..fc7691f2c --- /dev/null +++ b/lib/fog/openstack/compute/requests/delete_volume.rb @@ -0,0 +1,28 @@ +module Fog + module OpenStack + class Compute + class Real + def delete_volume(volume_id) + request( + expects: 202, + method: 'DELETE', + path: "os-volumes/#{volume_id}" + ) + end + end + + class Mock + def delete_volume(volume_id) + response = Excon::Response.new + if list_volumes.body['volumes'].map { |v| v['id'] }.include? volume_id + data[:volumes].delete(volume_id) + response.status = 204 + response + else + raise Fog::OpenStack::Compute::NotFound + end + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/detach_volume.rb b/lib/fog/openstack/compute/requests/detach_volume.rb similarity index 78% rename from lib/fog/compute/openstack/requests/detach_volume.rb rename to lib/fog/openstack/compute/requests/detach_volume.rb index 8a750810a..03dff9682 100644 --- a/lib/fog/compute/openstack/requests/detach_volume.rb +++ b/lib/fog/openstack/compute/requests/detach_volume.rb @@ -1,12 +1,12 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def detach_volume(server_id, attachment_id) request( expects: 202, method: 'DELETE', - path: "servers/%s/os-volume_attachments/%s" % [server_id, attachment_id] + path: format("servers/%s/os-volume_attachments/%s", server_id, attachment_id) ) end end @@ -20,7 +20,7 @@ def detach_volume(server_id, attachment_id) response.status = 202 response else - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end end diff --git a/lib/fog/compute/openstack/requests/disable_service.rb b/lib/fog/openstack/compute/requests/disable_service.rb similarity index 77% rename from lib/fog/compute/openstack/requests/disable_service.rb rename to lib/fog/openstack/compute/requests/disable_service.rb index 5ad975f22..ca07b239d 100644 --- a/lib/fog/compute/openstack/requests/disable_service.rb +++ b/lib/fog/openstack/compute/requests/disable_service.rb @@ -1,12 +1,14 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def disable_service(host, binary, optional_params = nil) data = { "host" => host, "binary" => binary } # Encode all params - optional_params = optional_params.each { |k, v| optional_params[k] = URI.encode(v) } if optional_params + if optional_params + optional_params = optional_params.each { |k, v| optional_params[k] = URI.encode_www_form_component(v) } + end request( body: Fog::JSON.encode(data), @@ -24,7 +26,7 @@ def disable_service(_host, _binary, _optional_params = nil) response.status = 200 response.body = { "service" => { - "host" => "host1", + "host" => "host1", "binary" => "nova-compute", "status" => "disabled" } diff --git a/lib/fog/openstack/compute/requests/disable_service_log_reason.rb b/lib/fog/openstack/compute/requests/disable_service_log_reason.rb new file mode 100644 index 000000000..c113e5c40 --- /dev/null +++ b/lib/fog/openstack/compute/requests/disable_service_log_reason.rb @@ -0,0 +1,40 @@ +module Fog + module OpenStack + class Compute + class Real + def disable_service_log_reason(host, binary, disabled_reason, optional_params = nil) + data = { "host" => host, "binary" => binary, "disabled_reason" => disabled_reason } + + # Encode all params + if optional_params + optional_params = optional_params.each { |k, v| optional_params[k] = URI.encode_www_form_component(v) } + end + + request( + body: Fog::JSON.encode(data), + expects: 200, + method: 'PUT', + path: "os-services/disable-log-reason", + query: optional_params + ) + end + end + + class Mock + def disable_service_log_reason(_host, _binary, _disabled_reason, _optional_params = nil) + response = Excon::Response.new + response.status = 200 + response.body = { + "service" => { + "host" => "host1", + "binary" => "nova-compute", + "status" => "disabled", + "disabled_reason" => "test2" + } + } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/disassociate_address.rb b/lib/fog/openstack/compute/requests/disassociate_address.rb similarity index 78% rename from lib/fog/compute/openstack/requests/disassociate_address.rb rename to lib/fog/openstack/compute/requests/disassociate_address.rb index 37379d71f..3f2999017 100644 --- a/lib/fog/compute/openstack/requests/disassociate_address.rb +++ b/lib/fog/openstack/compute/requests/disassociate_address.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def disassociate_address(server_id, ip_address) body = { "removeFloatingIp" => { "address" => ip_address } } @@ -13,9 +13,9 @@ def disassociate_address(_server_id, _ip_address) response = Excon::Response.new response.status = 202 response.headers = { - "Content-Type" => "text/html, charset=UTF-8", + "Content-Type" => "text/html, charset=UTF-8", "Content-Length" => "0", - "Date" => Date.new + "Date" => Date.new } response end diff --git a/lib/fog/compute/openstack/requests/enable_service.rb b/lib/fog/openstack/compute/requests/enable_service.rb similarity index 77% rename from lib/fog/compute/openstack/requests/enable_service.rb rename to lib/fog/openstack/compute/requests/enable_service.rb index e450f6be7..1a8ace344 100644 --- a/lib/fog/compute/openstack/requests/enable_service.rb +++ b/lib/fog/openstack/compute/requests/enable_service.rb @@ -1,12 +1,14 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def enable_service(host, binary, optional_params = nil) data = { "host" => host, "binary" => binary } # Encode all params - optional_params = optional_params.each { |k, v| optional_params[k] = URI.encode(v) } if optional_params + if optional_params + optional_params = optional_params.each { |k, v| optional_params[k] = URI.encode_www_form_component(v) } + end request( body: Fog::JSON.encode(data), @@ -24,7 +26,7 @@ def enable_service(_host, _binary, _optional_params = nil) response.status = 200 response.body = { "service" => { - "host" => "host1", + "host" => "host1", "binary" => "nova-compute", "status" => "enabled" } diff --git a/lib/fog/compute/openstack/requests/evacuate_server.rb b/lib/fog/openstack/compute/requests/evacuate_server.rb similarity index 79% rename from lib/fog/compute/openstack/requests/evacuate_server.rb rename to lib/fog/openstack/compute/requests/evacuate_server.rb index 9efcc43c2..2622e9be2 100644 --- a/lib/fog/compute/openstack/requests/evacuate_server.rb +++ b/lib/fog/openstack/compute/requests/evacuate_server.rb @@ -1,11 +1,15 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def evacuate_server(server_id, host = nil, on_shared_storage = nil, admin_password = nil) evacuate = {} evacuate['host'] = host if host - evacuate['onSharedStorage'] = on_shared_storage if on_shared_storage + + if !microversion_newer_than?('2.13') && on_shared_storage + evacuate['onSharedStorage'] = on_shared_storage + end + evacuate['adminPass'] = admin_password if admin_password body = { 'evacuate' => evacuate diff --git a/lib/fog/openstack/compute/requests/get_address.rb b/lib/fog/openstack/compute/requests/get_address.rb new file mode 100644 index 000000000..fd9f330f2 --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_address.rb @@ -0,0 +1,38 @@ +module Fog + module OpenStack + class Compute + class Real + def get_address(address_id) + request( + expects: [200], + method: 'GET', + path: "os-floating-ips/#{address_id}" + ) + end + end + + class Mock + def get_address(_address_id) + response = Excon::Response.new + response.status = 200 + response.headers = { + "X-Compute-Request-Id" => "req-d4a21158-a86c-44a6-983a-e25645907f26", + "Content-Type" => "application/json", + "Content-Length" => "105", + "Date" => Date.new + } + response.body = { + "floating_ip" => { + "instance_id" => nil, + "ip" => "192.168.27.129", + "fixed_ip" => nil, + "id" => 1, + "pool" => "nova" + } + } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/get_aggregate.rb b/lib/fog/openstack/compute/requests/get_aggregate.rb similarity index 92% rename from lib/fog/compute/openstack/requests/get_aggregate.rb rename to lib/fog/openstack/compute/requests/get_aggregate.rb index 3cfddfde7..b000525a0 100644 --- a/lib/fog/compute/openstack/requests/get_aggregate.rb +++ b/lib/fog/openstack/compute/requests/get_aggregate.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def get_aggregate(uuid) request( diff --git a/lib/fog/compute/openstack/requests/get_console_output.rb b/lib/fog/openstack/compute/requests/get_console_output.rb similarity index 92% rename from lib/fog/compute/openstack/requests/get_console_output.rb rename to lib/fog/openstack/compute/requests/get_console_output.rb index f0b666a32..a29da59b2 100644 --- a/lib/fog/compute/openstack/requests/get_console_output.rb +++ b/lib/fog/openstack/compute/requests/get_console_output.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def get_console_output(server_id, log_length) body = { diff --git a/lib/fog/compute/openstack/requests/get_flavor_details.rb b/lib/fog/openstack/compute/requests/get_flavor_details.rb similarity index 95% rename from lib/fog/compute/openstack/requests/get_flavor_details.rb rename to lib/fog/openstack/compute/requests/get_flavor_details.rb index 0e0a53992..016e93dba 100644 --- a/lib/fog/compute/openstack/requests/get_flavor_details.rb +++ b/lib/fog/openstack/compute/requests/get_flavor_details.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def get_flavor_details(flavor_ref) request( @@ -30,7 +30,7 @@ def get_flavor_details(flavor_ref) } response else - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end end diff --git a/lib/fog/compute/openstack/requests/get_flavor_metadata.rb b/lib/fog/openstack/compute/requests/get_flavor_metadata.rb similarity index 93% rename from lib/fog/compute/openstack/requests/get_flavor_metadata.rb rename to lib/fog/openstack/compute/requests/get_flavor_metadata.rb index 129d4bc0a..5ddc3e6b1 100644 --- a/lib/fog/compute/openstack/requests/get_flavor_metadata.rb +++ b/lib/fog/openstack/compute/requests/get_flavor_metadata.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def get_flavor_metadata(flavor_ref) request( diff --git a/lib/fog/openstack/compute/requests/get_host_details.rb b/lib/fog/openstack/compute/requests/get_host_details.rb new file mode 100644 index 000000000..64ccd1c2b --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_host_details.rb @@ -0,0 +1,60 @@ +module Fog + module OpenStack + class Compute + class Real + def get_host_details(host) + request( + expects: [200, 203], + method: 'GET', + path: "os-hosts/#{host}" + ) + end + end + + class Mock + def get_host_details(_host) + response = Excon::Response.new + response.status = 200 + response.body = { "host" => [ + { "resource" => { + "project" => "(total)", + "memory_mb" => 64427, + "host" => "cn28.la-1-3.morphcloud.net", + "cpu" => 12, + "disk_gb" => 1608 + } }, + { "resource" => { + "project" => "(used_now)", + "memory_mb" => 1753, + "host" => "cn28.la-1-3.morphcloud.net", + "cpu" => 3, + "disk_gb" => 33 + } }, + { "resource" => { + "project" => "(used_max)", + "memory_mb" => 7168, + "host" => "cn28.la-1-3.morphcloud.net", + "cpu" => 3, + "disk_gb" => 45 + } }, + { "resource" => { + "project" => "bf8301f5164f4790889a1bc2bfb16d99", + "memory_mb" => 5120, + "host" => "cn28.la-1-3.morphcloud.net", + "cpu" => 2, + "disk_gb" => 35 + } }, + { "resource" => { + "project" => "3bb4d0301c5f47d5b4d96a361fcf96f4", + "memory_mb" => 2048, + "host" => "cn28.la-1-3.morphcloud.net", + "cpu" => 1, + "disk_gb" => 10 + } } + ] } + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/get_hypervisor.rb b/lib/fog/openstack/compute/requests/get_hypervisor.rb new file mode 100644 index 000000000..acf9be7ca --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_hypervisor.rb @@ -0,0 +1,64 @@ +module Fog + module OpenStack + class Compute + class Real + def get_hypervisor(hypervisor_id) + request( + expects: 200, + method: 'GET', + path: "os-hypervisors/#{hypervisor_id}" + ) + end + end + + class Mock + def get_hypervisor(hypervisor_id) + response = Excon::Response.new + response.status = 200 + response.body = { + "hypervisor" => { + "cpu_info" => { + "arch" => "x86_64", + "model" => "Nehalem", + "vendor" => "Intel", + "features" => [ + "pge", + "clflush" + ], + "topology" => { + "cores" => 1, + "threads" => 1, + "sockets" => 4 + } + }, + "current_workload" => 0, + "status" => "enabled", + "state" => "up", + "disk_available_least" => 0, + "host_ip" => "1.1.1.1", + "free_disk_gb" => 1028, + "free_ram_mb" => 7680, + "hypervisor_hostname" => "fake-mini", + "hypervisor_type" => "fake", + "hypervisor_version" => 1000, + "id" => hypervisor_id, + "local_gb" => 1028, + "local_gb_used" => 0, + "memory_mb" => 8192, + "memory_mb_used" => 512, + "running_vms" => 0, + "service" => { + "host" => "host1", + "id" => 7, + "disabled_reason" => null + }, + "vcpus" => 1, + "vcpus_used" => 0 + } + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/get_hypervisor_statistics.rb b/lib/fog/openstack/compute/requests/get_hypervisor_statistics.rb new file mode 100644 index 000000000..9fcbf365d --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_hypervisor_statistics.rb @@ -0,0 +1,39 @@ +module Fog + module OpenStack + class Compute + class Real + def get_hypervisor_statistics(_tenant_id) + request( + expects: 200, + method: 'GET', + path: "os-hypervisors/statistics" + ) + end + end + + class Mock + def get_hypervisor_statistics(_tenant_id) + response = Excon::Response.new + response.status = 200 + response.body = { + "hypervisor_statistics" => { + "count" => 1, + "current_workload" => 0, + "disk_available_least" => 0, + "free_disk_gb" => 1028, + "free_ram_mb" => 7680, + "local_gb" => 1028, + "local_gb_used" => 0, + "memory_mb" => 8192, + "memory_mb_used" => 512, + "running_vms" => 0, + "vcpus" => 1, + "vcpus_used" => 0 + } + } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/get_image_details.rb b/lib/fog/openstack/compute/requests/get_image_details.rb similarity index 87% rename from lib/fog/compute/openstack/requests/get_image_details.rb rename to lib/fog/openstack/compute/requests/get_image_details.rb index af3a797c8..854bf1420 100644 --- a/lib/fog/compute/openstack/requests/get_image_details.rb +++ b/lib/fog/openstack/compute/requests/get_image_details.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def get_image_details(image_id) request( @@ -20,7 +20,7 @@ def get_image_details(image_id) response.body = { 'image' => image } response else - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end end diff --git a/lib/fog/compute/openstack/requests/get_key_pair.rb b/lib/fog/openstack/compute/requests/get_key_pair.rb similarity index 85% rename from lib/fog/compute/openstack/requests/get_key_pair.rb rename to lib/fog/openstack/compute/requests/get_key_pair.rb index 7b8d49556..184443d68 100644 --- a/lib/fog/compute/openstack/requests/get_key_pair.rb +++ b/lib/fog/openstack/compute/requests/get_key_pair.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def get_key_pair(key_name) request( @@ -17,13 +17,13 @@ def delete_key_pair(key_name) response.status = 200 response.headers = { "X-Compute-Request-Id" => "req-c373a42c-2825-4e60-8d34-99416ea850be", - "Content-Type" => "application/json", - "Content-Length" => "1289", - "Date" => Date.new + "Content-Type" => "application/json", + "Content-Length" => "1289", + "Date" => Date.new } response.body = { "keypair" => { - "public_key" => "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCdAZLjljntJbLVVkNHjWFSoKen2nZbk39ZfqhZJOMdeFdz"\ + "public_key" => "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCdAZLjljntJbLVVkNHjWFSoKen2nZbk39ZfqhZJOMdeFdz"\ "02GWBS45rcuboeGg/gozKRwsLu4N6NLPlYtbK/NapJIvgO/djBp+FQG1QZNtLPsx7j4hVJac3yISGms+Xtu4c"\ "Ev6j5sFDzAgTQbWez0Z1+9qOq9ngdaoW+YClfQ== vagrant@nova\n", "private_key" => "-----BEGIN RSA PRIVATE KEY-----\nMIICXgIBAAKBgQDCdAZLjljn1tJbLVVkNHjWFSoKen2nZbk39Zfq"\ @@ -37,8 +37,8 @@ def delete_key_pair(key_name) "50t6YkCQQC9\nwfcAskqieSuS9A9LcCIrojhXctf0e+T0Ij2N89DlF4sHEuqXf/IZ4IB5gsfTfdE3\nUDnAkK"\ "9yogaEbu/r0uKbAkEAy5kl71bIqvKTKsY2mES9ziVxfftl/9UIi5LI+QHb\nmC/c6cTrGVCM71fi2GMxGgBeE"\ "ea4+7xwoWTL4CxA00kmTg==\n-----END RSA PRIVATE KEY-----\n", - "user_id" => "admin", - "name" => key_name, + "user_id" => "admin", + "name" => key_name, "fingerprint" => "97:86:f4:15:68:0c:7b:a7:e5:8f:f0:bd:1f:27:65:ad" } } diff --git a/lib/fog/openstack/compute/requests/get_limits.rb b/lib/fog/openstack/compute/requests/get_limits.rb new file mode 100644 index 000000000..e7cdb9ded --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_limits.rb @@ -0,0 +1,94 @@ +module Fog + module OpenStack + class Compute + # http://developer.openstack.org/api-ref-compute-v2.1.html#showlimits + + class Real + def get_limits(options = {}) + request( + expects: 200, + method: 'GET', + path: '/limits', + query: options + ) + end + end + + class Mock + def get_limits(_options = {}) + rate_limits = [ + { 'regex' => '.*', + 'limit' => [ + { 'next-available' => '2012-11-22T16:13:44Z', + 'unit' => 'MINUTE', + 'verb' => 'POST', + 'remaining' => 9, + 'value' => 10 }, + { 'next-available' => '2012-11-23T00:46:14Z', + 'unit' => 'MINUTE', + 'verb' => 'PUT', + 'remaining' => 10, + 'value' => 10 }, + { 'next-available' => '2012-11-22T16:14:30Z', + 'unit' => 'MINUTE', + 'verb' => 'DELETE', + 'remaining' => 99, + 'value' => 100 } + ], + 'uri' => '*' }, + { 'regex' => '^/servers', + 'limit' => [ + { 'next-available' => '2012-11-23T00:46:14Z', + 'unit' => 'DAY', + 'verb' => 'POST', + 'remaining' => 50, + 'value' => 50 } + ], + 'uri' => '*/servers' }, + { 'regex' => '.*changes-since.*', + 'limit' => [ + { 'next-available' => '2012-11-23T00:46:14Z', + 'unit' => 'MINUTE', + 'verb' => 'GET', + 'remaining' => 3, + 'value' => 3 } + ], + 'uri' => '*changes-since*' } + ] + + absolute_limits = { + # Max + 'maxServerMeta' => 128, + 'maxTotalInstances' => 10, + 'maxPersonality' => 5, + 'maxImageMeta' => 128, + 'maxPersonalitySize' => 10240, + 'maxSecurityGroupRules' => 20, + 'maxTotalKeypairs' => 100, + 'maxSecurityGroups' => 10, + 'maxTotalCores' => 20, + 'maxTotalFloatingIps' => 10, + 'maxTotalRAMSize' => 51200, + + # Used + 'totalCoresUsed' => -1, + 'totalRAMUsed' => -2048, + 'totalInstancesUsed' => -1, + 'totalSecurityGroupsUsed' => 0, + 'totalFloatingIpsUsed' => 0 + } + + Excon::Response.new( + status: 200, + body: { + 'limits' => { + 'rate' => rate_limits, + 'absolute' => absolute_limits + } + } + ) + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/get_metadata.rb b/lib/fog/openstack/compute/requests/get_metadata.rb similarity index 93% rename from lib/fog/compute/openstack/requests/get_metadata.rb rename to lib/fog/openstack/compute/requests/get_metadata.rb index aa9cec4c4..c8dd2f37d 100644 --- a/lib/fog/compute/openstack/requests/get_metadata.rb +++ b/lib/fog/openstack/compute/requests/get_metadata.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def get_metadata(collection_name, parent_id, key) request( diff --git a/lib/fog/compute/openstack/requests/get_os_interface.rb b/lib/fog/openstack/compute/requests/get_os_interface.rb similarity index 93% rename from lib/fog/compute/openstack/requests/get_os_interface.rb rename to lib/fog/openstack/compute/requests/get_os_interface.rb index 942516659..38ac8bdb5 100644 --- a/lib/fog/compute/openstack/requests/get_os_interface.rb +++ b/lib/fog/openstack/compute/requests/get_os_interface.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def get_os_interface(server_id, port_id) request( diff --git a/lib/fog/openstack/compute/requests/get_quota.rb b/lib/fog/openstack/compute/requests/get_quota.rb new file mode 100644 index 000000000..c7b13ad5c --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_quota.rb @@ -0,0 +1,26 @@ +module Fog + module OpenStack + class Compute + class Real + def get_quota(tenant_id) + request( + expects: 200, + method: 'GET', + path: "/os-quota-sets/#{tenant_id}" + ) + end + end + + class Mock + def get_quota(tenant_id) + response = Excon::Response.new + response.status = 200 + response.body = { + 'quota_set' => (data[:quota_updated] || data[:quota]).merge('id' => tenant_id) + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/get_quota_defaults.rb b/lib/fog/openstack/compute/requests/get_quota_defaults.rb new file mode 100644 index 000000000..51aa13545 --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_quota_defaults.rb @@ -0,0 +1,26 @@ +module Fog + module OpenStack + class Compute + class Real + def get_quota_defaults(tenant_id) + request( + expects: 200, + method: 'GET', + path: "/os-quota-sets/#{tenant_id}/defaults" + ) + end + end + + class Mock + def get_quota_defaults(tenant_id) + response = Excon::Response.new + response.status = 200 + response.body = { + 'quota_set' => data[:quota].merge('id' => tenant_id) + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/get_security_group.rb b/lib/fog/openstack/compute/requests/get_security_group.rb new file mode 100644 index 000000000..717bc1112 --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_security_group.rb @@ -0,0 +1,37 @@ +module Fog + module OpenStack + class Compute + class Real + def get_security_group(security_group_id) + request( + expects: [200], + method: 'GET', + path: "os-security-groups/#{security_group_id}" + ) + end + end + + class Mock + def get_security_group(security_group_id) + security_group = data[:security_groups][security_group_id.to_s] + response = Excon::Response.new + if security_group + response.status = 200 + response.headers = { + "X-Compute-Request-Id" => "req-63a90344-7c4d-42e2-936c-fd748bced1b3", + "Content-Type" => "application/json", + "Content-Length" => "167", + "Date" => Date.new + } + response.body = { + "security_group" => security_group + } + else + raise Fog::OpenStack::Compute::NotFound, "Security group #{security_group_id} does not exist" + end + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/get_security_group_rule.rb b/lib/fog/openstack/compute/requests/get_security_group_rule.rb new file mode 100644 index 000000000..169ea0bd9 --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_security_group_rule.rb @@ -0,0 +1,38 @@ +module Fog + module OpenStack + class Compute + class Real + def get_security_group_rule(security_group_rule_id) + request( + expects: [200], + method: 'GET', + path: "os-security-group-rules/#{security_group_rule_id}" + ) + end + end + + class Mock + def get_security_group_rule(security_group_rule_id) + security_group_rule = nil + data[:security_groups].find { |_id, sg| security_group_rule = sg["rules"].find { |sgr| sgr["id"].to_s == security_group_rule_id.to_s } } + response = Excon::Response.new + if security_group_rule + response.status = 200 + response.headers = { + "X-Compute-Request-Id" => "req-63a90344-7c4d-42e2-936c-fd748bced1b3", + "Content-Type" => "application/json", + "Content-Length" => "167", + "Date" => Date.new + } + response.body = { + "security_group_rule" => security_group_rule + } + else + raise Fog::OpenStack::Compute::NotFound, "Security group rule #{security_group_rule_id} does not exist" + end + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/get_server_details.rb b/lib/fog/openstack/compute/requests/get_server_details.rb similarity index 87% rename from lib/fog/compute/openstack/requests/get_server_details.rb rename to lib/fog/openstack/compute/requests/get_server_details.rb index 48974a0f3..dfedb52cb 100644 --- a/lib/fog/compute/openstack/requests/get_server_details.rb +++ b/lib/fog/openstack/compute/requests/get_server_details.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def get_server_details(server_id) request( @@ -20,7 +20,7 @@ def get_server_details(server_id) response.body = { 'server' => server } response else - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end end diff --git a/lib/fog/openstack/compute/requests/get_server_group.rb b/lib/fog/openstack/compute/requests/get_server_group.rb new file mode 100644 index 000000000..bfab35cca --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_server_group.rb @@ -0,0 +1,38 @@ +module Fog + module OpenStack + class Compute + class Real + def get_server_group(group_id) + request( + expects: 200, + method: 'GET', + path: "/os-server-groups/#{group_id}" + ) + end + end + + class Mock + def get_server_group(group_id) + grp = data[:server_groups][group_id] + response = Excon::Response.new + response.status = 200 + response.headers = { + "Content-Type" => "text/html; charset=UTF-8", + "Content-Length" => "0", + "Date" => Date.new + } + response.body = { 'server_group' => { + 'id' => group_id, + 'name' => grp[:name], + 'policies' => grp[:policies], + 'members' => grp[:members], + 'metadata' => {}, + 'project_id' => 'test-project', + 'user_id' => 'test-user' + } } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/get_server_password.rb b/lib/fog/openstack/compute/requests/get_server_password.rb similarity index 87% rename from lib/fog/compute/openstack/requests/get_server_password.rb rename to lib/fog/openstack/compute/requests/get_server_password.rb index b59ab9433..9614eeaf4 100644 --- a/lib/fog/compute/openstack/requests/get_server_password.rb +++ b/lib/fog/openstack/compute/requests/get_server_password.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def get_server_password(server_id) request( @@ -20,7 +20,7 @@ def get_server_password(server_id) response.body = { 'server' => server } response else - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end end diff --git a/lib/fog/compute/openstack/requests/get_server_volumes.rb b/lib/fog/openstack/compute/requests/get_server_volumes.rb similarity index 86% rename from lib/fog/compute/openstack/requests/get_server_volumes.rb rename to lib/fog/openstack/compute/requests/get_server_volumes.rb index 9307dc6cd..c9f2103f0 100644 --- a/lib/fog/compute/openstack/requests/get_server_volumes.rb +++ b/lib/fog/openstack/compute/requests/get_server_volumes.rb @@ -1,12 +1,12 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def get_server_volumes(server_id) request( expects: 200, method: 'GET', - path: "/servers/#{server_id}/os-volume_attachments" + path: "servers/#{server_id}/os-volume_attachments" ) end end diff --git a/lib/fog/openstack/compute/requests/get_snapshot_details.rb b/lib/fog/openstack/compute/requests/get_snapshot_details.rb new file mode 100644 index 000000000..c54134e90 --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_snapshot_details.rb @@ -0,0 +1,30 @@ +module Fog + module OpenStack + class Compute + class Real + def get_snapshot_details(snapshot_id) + request( + expects: 200, + method: 'GET', + path: "os-snapshots/#{snapshot_id}" + ) + end + end + + class Mock + def get_snapshot_details(snapshot_id) + response = Excon::Response.new + if snapshot = list_snapshots_detail.body['snapshots'].find do |snap| + snap['id'] == snapshot_id + end + response.status = 200 + response.body = { 'snapshot' => snapshot } + response + else + raise Fog::OpenStack::Compute::NotFound + end + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/get_usage.rb b/lib/fog/openstack/compute/requests/get_usage.rb new file mode 100644 index 000000000..a2fa5c6de --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_usage.rb @@ -0,0 +1,48 @@ +module Fog + module OpenStack + class Compute + class Real + def get_usage(tenant_id, date_start, date_end) + params = {} + params[:start] = date_start.utc.iso8601.chop! + params[:end] = date_end.utc.iso8601.chop! + request( + expects: [200, 203], + method: 'GET', + path: "os-simple-tenant-usage/#{tenant_id}", + query: params + ) + end + end + + class Mock + def get_usage(tenant_id, date_start, date_end) + response = Excon::Response.new + response.status = 200 + response.body = { "tenant_usage" => + { "total_memory_mb_usage" => 0.0, + "total_vcpus_usage" => 0.0, + "total_hours" => 0.0, + "tenant_id" => tenant_id, + "stop" => date_start, + "start" => date_end, + "total_local_gb_usage" => 0.0, + "server_usages" => [{ + "hours" => 0.0, + "uptime" => 69180, + "local_gb" => 0, + "ended_at" => nil, + "name" => "test server", + "tenant_id" => tenant_id, + "vcpus" => 1, + "memory_mb" => 512, + "state" => "active", + "flavor" => "m1.tiny", + "started_at" => "2012-03-05 09:11:44" + }] } } + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/get_vnc_console.rb b/lib/fog/openstack/compute/requests/get_vnc_console.rb new file mode 100644 index 000000000..527cf156c --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_vnc_console.rb @@ -0,0 +1,49 @@ +module Fog + module OpenStack + class Compute + class Real + # Get a vnc console for an instance. + # For microversion < 2.6 as it has been replaced with remote-consoles + # + # === Parameters + # * server_id <~String> - The ID of the server. + # * console_type <~String> - Type of vnc console to get ('novnc' or 'xvpvnc'). + # === Returns + # * response <~Excon::Response>: + # * body <~Hash>: + # * url <~String> + # * type <~String> + def get_vnc_console(server_id, console_type) + fixed_microversion = nil + if microversion_newer_than?('2.5') + fixed_microversion = @microversion + @microversion = '2.5' + end + + body = { + 'os-getVNCConsole' => { + 'type' => console_type + } + } + result = server_action(server_id, body) + @microversion = fixed_microversion if fixed_microversion + result + end + end + + class Mock + def get_vnc_console(_server_id, _console_type) + response = Excon::Response.new + response.status = 200 + response.body = { + "console" => { + "url" => "http://192.168.27.100:6080/vnc_auto.html?token=c3606020-d1b7-445d-a88f-f7af48dd6a20", + "type" => "novnc" + } + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/get_volume_details.rb b/lib/fog/openstack/compute/requests/get_volume_details.rb new file mode 100644 index 000000000..5a8290b3a --- /dev/null +++ b/lib/fog/openstack/compute/requests/get_volume_details.rb @@ -0,0 +1,32 @@ +module Fog + module OpenStack + class Compute + class Real + def get_volume_details(volume_id) + request( + expects: 200, + method: 'GET', + path: "os-volumes/#{volume_id}" + ) + end + end + + class Mock + def get_volume_details(volume_id) + response = Excon::Response.new + if data = self.data[:volumes][volume_id] + if data['status'] == 'creating' \ + && Time.now - Time.parse(data['createdAt']) >= Fog::Mock.delay + data['status'] = 'available' + end + response.status = 200 + response.body = { 'volume' => data } + response + else + raise Fog::OpenStack::Compute::NotFound + end + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/list_address_pools.rb b/lib/fog/openstack/compute/requests/list_address_pools.rb similarity index 93% rename from lib/fog/compute/openstack/requests/list_address_pools.rb rename to lib/fog/openstack/compute/requests/list_address_pools.rb index 695a93f38..29d81c91d 100644 --- a/lib/fog/compute/openstack/requests/list_address_pools.rb +++ b/lib/fog/openstack/compute/requests/list_address_pools.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_address_pools request( diff --git a/lib/fog/compute/openstack/requests/list_addresses.rb b/lib/fog/openstack/compute/requests/list_addresses.rb similarity index 87% rename from lib/fog/compute/openstack/requests/list_addresses.rb rename to lib/fog/openstack/compute/requests/list_addresses.rb index 17b75f31a..b7d7599bc 100644 --- a/lib/fog/compute/openstack/requests/list_addresses.rb +++ b/lib/fog/openstack/compute/requests/list_addresses.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_addresses(server_id) request( @@ -20,7 +20,7 @@ def list_addresses(server_id) response.body = { 'addresses' => server['addresses'] } response else - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end end diff --git a/lib/fog/openstack/compute/requests/list_aggregates.rb b/lib/fog/openstack/compute/requests/list_aggregates.rb new file mode 100644 index 000000000..85532bfd8 --- /dev/null +++ b/lib/fog/openstack/compute/requests/list_aggregates.rb @@ -0,0 +1,37 @@ +module Fog + module OpenStack + class Compute + class Real + def list_aggregates(options = {}) + request( + expects: [200, 203], + method: 'GET', + path: 'os-aggregates', + query: options + ) + end + end + + class Mock + def list_aggregates(_options = {}) + response = Excon::Response.new + response.status = 200 + response.body = { 'aggregates' => [{ + "availability_zone" => "nova", + "created_at" => "2012-11-16T06:22:23.032493", + "deleted" => false, + "deleted_at" => nil, + "metadata" => { + "availability_zone" => "nova" + }, + "id" => 1, + "name" => "name", + "updated_at" => nil + }] } + + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/list_all_addresses.rb b/lib/fog/openstack/compute/requests/list_all_addresses.rb new file mode 100644 index 000000000..c6ff8fd39 --- /dev/null +++ b/lib/fog/openstack/compute/requests/list_all_addresses.rb @@ -0,0 +1,62 @@ +module Fog + module OpenStack + class Compute + class Real + def list_all_addresses(options = {}) + request( + expects: [200, 203], + method: 'GET', + path: "os-floating-ips", + query: options + ) + end + end + + class Mock + def list_all_addresses(_options = {}) + response = Excon::Response.new + response.status = 200 + response.headers = { + "X-Compute-Request-Id" => "req-d4a21158-a86c-44a6-983a-e25645907f26", + "Content-Type" => "application/json", + "Content-Length" => "378", + "Date" => Date.new + } + response.body = { + "floating_ips" => [ + { + "instance_id" => nil, + "ip" => "192.168.27.129", + "fixed_ip" => nil, + "id" => 1, + "pool" => "nova" + }, + { + "instance_id" => nil, + "ip" => "192.168.27.130", + "fixed_ip" => nil, + "id" => 2, + "pool" => "nova" + }, + { + "instance_id" => nil, + "ip" => "192.168.27.131", + "fixed_ip" => nil, + "id" => 3, + "pool" => "nova" + }, + { + "instance_id" => nil, + "ip" => "192.168.27.132", + "fixed_ip" => nil, + "id" => 4, + "pool" => "nova" + } + ] + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/list_availability_zones.rb b/lib/fog/openstack/compute/requests/list_availability_zones.rb new file mode 100644 index 000000000..7a2824b90 --- /dev/null +++ b/lib/fog/openstack/compute/requests/list_availability_zones.rb @@ -0,0 +1,22 @@ +module Fog + module OpenStack + class Compute + class Real + def list_availability_zones(options = {}) + params = options + + request( + expects: [200], + method: 'GET', + path: "os-availability-zone", + query: params + ) + end + end + + class Mock + def list_endpoints; end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/list_flavors.rb b/lib/fog/openstack/compute/requests/list_flavors.rb similarity index 97% rename from lib/fog/compute/openstack/requests/list_flavors.rb rename to lib/fog/openstack/compute/requests/list_flavors.rb index 43a444488..0daf60c12 100644 --- a/lib/fog/compute/openstack/requests/list_flavors.rb +++ b/lib/fog/openstack/compute/requests/list_flavors.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_flavors(options = {}) request( diff --git a/lib/fog/compute/openstack/requests/list_flavors_detail.rb b/lib/fog/openstack/compute/requests/list_flavors_detail.rb similarity index 97% rename from lib/fog/compute/openstack/requests/list_flavors_detail.rb rename to lib/fog/openstack/compute/requests/list_flavors_detail.rb index 7e3d79b08..f16421438 100644 --- a/lib/fog/compute/openstack/requests/list_flavors_detail.rb +++ b/lib/fog/openstack/compute/requests/list_flavors_detail.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_flavors_detail(options = {}) request( diff --git a/lib/fog/compute/openstack/requests/list_hosts.rb b/lib/fog/openstack/compute/requests/list_hosts.rb similarity index 93% rename from lib/fog/compute/openstack/requests/list_hosts.rb rename to lib/fog/openstack/compute/requests/list_hosts.rb index 93feb90cc..155823621 100644 --- a/lib/fog/compute/openstack/requests/list_hosts.rb +++ b/lib/fog/openstack/compute/requests/list_hosts.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_hosts(options = {}) request( diff --git a/lib/fog/compute/openstack/requests/list_hypervisor_servers.rb b/lib/fog/openstack/compute/requests/list_hypervisor_servers.rb similarity index 80% rename from lib/fog/compute/openstack/requests/list_hypervisor_servers.rb rename to lib/fog/openstack/compute/requests/list_hypervisor_servers.rb index 2f3a53fcc..c81458149 100644 --- a/lib/fog/compute/openstack/requests/list_hypervisor_servers.rb +++ b/lib/fog/openstack/compute/requests/list_hypervisor_servers.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_hypervisor_servers(hypervisor_id, options = {}) request( @@ -19,10 +19,10 @@ def list_hypervisor_servers(hypervisor_id, _options = {}) response.body = { 'hypervisors' => [ { "hypervisor_hostname" => "fake-mini", - "id" => hypervisor_id, - "state" => "up", - "status" => "enabled", - "servers" => [ + "id" => hypervisor_id, + "state" => "up", + "status" => "enabled", + "servers" => [ { "name" => "test_server1", "uuid" => "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" diff --git a/lib/fog/compute/openstack/requests/list_hypervisors.rb b/lib/fog/openstack/compute/requests/list_hypervisors.rb similarity index 94% rename from lib/fog/compute/openstack/requests/list_hypervisors.rb rename to lib/fog/openstack/compute/requests/list_hypervisors.rb index 4cfe24de2..dc57f08fd 100644 --- a/lib/fog/compute/openstack/requests/list_hypervisors.rb +++ b/lib/fog/openstack/compute/requests/list_hypervisors.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_hypervisors(options = {}) request( diff --git a/lib/fog/openstack/compute/requests/list_hypervisors_detail.rb b/lib/fog/openstack/compute/requests/list_hypervisors_detail.rb new file mode 100644 index 000000000..8d56cfcde --- /dev/null +++ b/lib/fog/openstack/compute/requests/list_hypervisors_detail.rb @@ -0,0 +1,71 @@ +module Fog + module OpenStack + class Compute + class Real + def list_hypervisors_detail(options = {}) + request( + expects: 200, + method: 'GET', + path: 'os-hypervisors/detail', + query: options + ) + end + end + + class Mock + def list_hypervisors_detail(_options = {}) + response = Excon::Response.new + response.status = 200 + response.body = { + "hypervisors" => [{ + "cpu_info" => { + "arch" => "x86_64", + "model" => "Nehalem", + "vendor" => "Intel", + "features" => [ + "pge", + "clflush" + ], + "topology" => { + "cores" => 1, + "threads" => 1, + "sockets" => 4 + } + }, + "current_workload" => 0, + "status" => "enabled", + "state" => "up", + "disk_available_least" => 0, + "host_ip" => "1.1.1.1", + "free_disk_gb" => 1028, + "free_ram_mb" => 7680, + "hypervisor_hostname" => "fake-mini", + "hypervisor_type" => "fake", + "hypervisor_version" => 1000, + "id" => 2, + "local_gb" => 1028, + "local_gb_used" => 0, + "memory_mb" => 8192, + "memory_mb_used" => 512, + "running_vms" => 0, + "service" => { + "host" => "host1", + "id" => 7, + "disabled_reason" => null + }, + "vcpus" => 1, + "vcpus_used" => 0 + }], + "hypervisors_links" => [ + { + "href" => "http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/hypervisors/detail?limit=1&marker=2", + "rel" => "next" + } + ] + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/list_images.rb b/lib/fog/openstack/compute/requests/list_images.rb new file mode 100644 index 000000000..4a94a7767 --- /dev/null +++ b/lib/fog/openstack/compute/requests/list_images.rb @@ -0,0 +1,29 @@ +module Fog + module OpenStack + class Compute + class Real + def list_images + request( + expects: [200, 203], + method: 'GET', + path: 'images' + ) + end + end + + class Mock + def list_images + response = Excon::Response.new + data = list_images_detail.body['images'] + images = [] + data.each do |image| + images << image.select { |key, _value| ['id', 'name', 'links'].include?(key) } + end + response.status = [200, 203][rand(2)] + response.body = { 'images' => images } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/list_images_detail.rb b/lib/fog/openstack/compute/requests/list_images_detail.rb similarity index 83% rename from lib/fog/compute/openstack/requests/list_images_detail.rb rename to lib/fog/openstack/compute/requests/list_images_detail.rb index 61c4b0429..108c6e27c 100644 --- a/lib/fog/compute/openstack/requests/list_images_detail.rb +++ b/lib/fog/openstack/compute/requests/list_images_detail.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_images_detail(filters = {}) request( @@ -27,7 +27,7 @@ def list_images_detail(_filters = {}) end response.status = [200, 203][rand(2)] - response.body = { 'images' => images.map { |image| image.reject { |key, _value| !['id', 'name', 'links', 'minRam', 'minDisk', 'metadata', 'status', 'updated'].include?(key) } } } + response.body = { 'images' => images.map { |image| image.select { |key, _value| ['id', 'name', 'links', 'minRam', 'minDisk', 'metadata', 'status', 'updated'].include?(key) } } } response end end diff --git a/lib/fog/openstack/compute/requests/list_key_pairs.rb b/lib/fog/openstack/compute/requests/list_key_pairs.rb new file mode 100644 index 000000000..4f3e8f397 --- /dev/null +++ b/lib/fog/openstack/compute/requests/list_key_pairs.rb @@ -0,0 +1,39 @@ +module Fog + module OpenStack + class Compute + class Real + def list_key_pairs(options = {}) + request( + expects: [200, 203], + method: 'GET', + path: 'os-keypairs', + query: options + ) + end + end + + class Mock + def list_key_pairs(_options = {}) + response = Excon::Response.new + response.status = 200 + response.headers = { + "X-Compute-Request-Id" => "req-c373a42c-2825-4e60-8d34-99416ea850be", + "Content-Type" => "application/json", + "Content-Length" => "360", + "Date" => Date.new + } + response.body = { + "keypairs" => [{ + "keypair" => { + "public_key" => "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCdAZLjln1tJbLVVkNHjWFSoKen2nZbk39ZfqhZJOMdeFdz02GWBS4rcuHboeGg/gozKRwsLu4N6NLPlYtbK/NapJIvgO/djBp+FG1QZNtLPsx7j4hVJac3yISGms+Xtu4cEv6j5sFDzAgTQbWz0Z1+9qOq9ngdaoW+YClfQ== vagrant@nova\n", + "name" => "test_key", + "fingerprint" => "97:86:f4:15:68:0c:7b:a7:e5:8f:f0:bd:1f:27:65:ad" + } + }] + } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/list_metadata.rb b/lib/fog/openstack/compute/requests/list_metadata.rb similarity index 93% rename from lib/fog/compute/openstack/requests/list_metadata.rb rename to lib/fog/openstack/compute/requests/list_metadata.rb index 964090ef3..92f99db53 100644 --- a/lib/fog/compute/openstack/requests/list_metadata.rb +++ b/lib/fog/openstack/compute/requests/list_metadata.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_metadata(collection_name, parent_id) request( diff --git a/lib/fog/compute/openstack/requests/list_os_interfaces.rb b/lib/fog/openstack/compute/requests/list_os_interfaces.rb similarity index 92% rename from lib/fog/compute/openstack/requests/list_os_interfaces.rb rename to lib/fog/openstack/compute/requests/list_os_interfaces.rb index fe3def5ae..576b10002 100644 --- a/lib/fog/compute/openstack/requests/list_os_interfaces.rb +++ b/lib/fog/openstack/compute/requests/list_os_interfaces.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_os_interfaces(server_id) request( diff --git a/lib/fog/compute/openstack/requests/list_private_addresses.rb b/lib/fog/openstack/compute/requests/list_private_addresses.rb similarity index 88% rename from lib/fog/compute/openstack/requests/list_private_addresses.rb rename to lib/fog/openstack/compute/requests/list_private_addresses.rb index 4b61165e9..06616e451 100644 --- a/lib/fog/compute/openstack/requests/list_private_addresses.rb +++ b/lib/fog/openstack/compute/requests/list_private_addresses.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_private_addresses(server_id) request( @@ -20,7 +20,7 @@ def list_private_addresses(server_id) response.body = { 'private' => server['addresses']['private'] } response else - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end end diff --git a/lib/fog/compute/openstack/requests/list_public_addresses.rb b/lib/fog/openstack/compute/requests/list_public_addresses.rb similarity index 88% rename from lib/fog/compute/openstack/requests/list_public_addresses.rb rename to lib/fog/openstack/compute/requests/list_public_addresses.rb index ebdd1b4b4..d631f0f21 100644 --- a/lib/fog/compute/openstack/requests/list_public_addresses.rb +++ b/lib/fog/openstack/compute/requests/list_public_addresses.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_public_addresses(server_id) request( @@ -20,7 +20,7 @@ def list_public_addresses(server_id) response.body = { 'public' => server['addresses']['public'] } response else - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end end diff --git a/lib/fog/openstack/compute/requests/list_security_groups.rb b/lib/fog/openstack/compute/requests/list_security_groups.rb new file mode 100644 index 000000000..7bfffcdd9 --- /dev/null +++ b/lib/fog/openstack/compute/requests/list_security_groups.rb @@ -0,0 +1,67 @@ +module Fog + module OpenStack + class Compute + class Real + def list_security_groups(options = {}) + path = "os-security-groups" + + if options.kind_of?(Hash) + server_id = options.delete(:server_id) + query = options + else + # Backwards compatibility layer, only server_id was passed as first parameter previously + Fog::Logger.deprecation('Calling OpenStack[:compute].list_security_groups(server_id) is deprecated, use .list_security_groups(:server_id => value) instead') + server_id = options + query = {} + end + + if server_id + path = "servers/#{server_id}/#{path}" + end + + request( + expects: [200], + method: 'GET', + path: path, + query: query + ) + end + end + + class Mock + def list_security_groups(options = {}) + server_id = if options.kind_of?(Hash) + options.delete(:server_id) + else + options + end + + security_groups = data[:security_groups].values + + groups = if server_id + server_group_names = + Array(data[:server_security_group_map][server_id]) + + server_group_names.map do |name| + security_groups.find do |sg| + sg['name'] == name + end + end.compact + else + security_groups + end + + Excon::Response.new( + body: { 'security_groups' => groups }, + headers: { + "X-Compute-Request-Id" => "req-#{Fog::Mock.random_base64(36)}", + "Content-Type" => "application/json", + "Date" => Date.new + }, + status: 200 + ) + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/list_server_groups.rb b/lib/fog/openstack/compute/requests/list_server_groups.rb similarity index 94% rename from lib/fog/compute/openstack/requests/list_server_groups.rb rename to lib/fog/openstack/compute/requests/list_server_groups.rb index 607a92e24..cd6fd3e89 100644 --- a/lib/fog/compute/openstack/requests/list_server_groups.rb +++ b/lib/fog/openstack/compute/requests/list_server_groups.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_server_groups(options = {}) request( diff --git a/lib/fog/compute/openstack/requests/list_servers.rb b/lib/fog/openstack/compute/requests/list_servers.rb similarity index 85% rename from lib/fog/compute/openstack/requests/list_servers.rb rename to lib/fog/openstack/compute/requests/list_servers.rb index c9961fb46..f42af6a5f 100644 --- a/lib/fog/compute/openstack/requests/list_servers.rb +++ b/lib/fog/openstack/compute/requests/list_servers.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_servers(options = {}) params = options.dup @@ -24,7 +24,7 @@ def list_servers(_options = {}) data = list_servers_detail.body['servers'] servers = [] data.each do |server| - servers << server.reject { |key, _value| !['id', 'name', 'links'].include?(key) } + servers << server.select { |key, _value| ['id', 'name', 'links'].include?(key) } end response.status = [200, 203][rand(2)] response.body = { 'servers' => servers } diff --git a/lib/fog/compute/openstack/requests/list_servers_detail.rb b/lib/fog/openstack/compute/requests/list_servers_detail.rb similarity index 96% rename from lib/fog/compute/openstack/requests/list_servers_detail.rb rename to lib/fog/openstack/compute/requests/list_servers_detail.rb index 12376302f..67b38c0e2 100644 --- a/lib/fog/compute/openstack/requests/list_servers_detail.rb +++ b/lib/fog/openstack/compute/requests/list_servers_detail.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Available filters: name, status, image, flavor, changes_since, reservation_id def list_servers_detail(options = {}) diff --git a/lib/fog/openstack/compute/requests/list_services.rb b/lib/fog/openstack/compute/requests/list_services.rb new file mode 100644 index 000000000..b0be1fc6c --- /dev/null +++ b/lib/fog/openstack/compute/requests/list_services.rb @@ -0,0 +1,66 @@ +module Fog + module OpenStack + class Compute + class Real + def list_services(parameters = nil) + request( + expects: [200, 203], + method: 'GET', + path: 'os-services', + query: parameters + ) + end + end + + class Mock + def list_services(_parameters = nil) + response = Excon::Response.new + response.status = 200 + response.body = { + "services" => [{ + "id" => 1, + "binary" => "nova-scheduler", + "host" => "host1", + "state" => "up", + "status" => "disabled", + "updated_at" => "2012-10-29T13:42:02.000000", + "zone" => "internal", + "disabled_reason" => "test2" + }, + { + "id" => 2, + "binary" => "nova-compute", + "host" => "host1", + "state" => "up", + "status" => "disabled", + "updated_at" => "2012-10-29T13:42:05.000000", + "zone" => "nova", + "disabled_reason" => "test2" + }, + { + "id" => 3, + "binary" => "nova-scheduler", + "host" => "host2", + "state" => "down", + "status" => "enabled", + "updated_at" => "2012-09-19T06:55:34.000000", + "zone" => "internal", + "disabled_reason" => "nil" + }, + { + "id" => 4, + "binary" => "nova-compute", + "host" => "host2", + "state" => "down", + "status" => "disabled", + "updated_at" => "2012-09-18T08:03:38.000000", + "zone" => "nova", + "disabled_reason" => "test2" + }] + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/list_snapshots.rb b/lib/fog/openstack/compute/requests/list_snapshots.rb new file mode 100644 index 000000000..4de508d0e --- /dev/null +++ b/lib/fog/openstack/compute/requests/list_snapshots.rb @@ -0,0 +1,40 @@ +module Fog + module OpenStack + class Compute + class Real + def list_snapshots(options = true) + if options.kind_of?(Hash) + path = 'os-snapshots' + query = options + else + # Backwards compatibility layer, when 'detailed' boolean was sent as first param + if options + Fog::Logger.deprecation('Calling OpenStack[:compute].list_snapshots(true) is deprecated, use .list_snapshots_detail instead') + else + Fog::Logger.deprecation('Calling OpenStack[:compute].list_snapshots(false) is deprecated, use .list_snapshots({}) instead') + end + path = options ? 'os-snapshots/detail' : 'os-snapshots' + query = {} + end + + request( + expects: 200, + method: 'GET', + path: path, + query: query + ) + end + end + + class Mock + def list_snapshots(_options = true) + response = Excon::Response.new + response.status = 200 + snapshots = data[:snapshots].values + response.body = { 'snapshots' => snapshots } + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/list_snapshots_detail.rb b/lib/fog/openstack/compute/requests/list_snapshots_detail.rb new file mode 100644 index 000000000..e1bf80a2b --- /dev/null +++ b/lib/fog/openstack/compute/requests/list_snapshots_detail.rb @@ -0,0 +1,26 @@ +module Fog + module OpenStack + class Compute + class Real + def list_snapshots_detail(options = {}) + request( + expects: 200, + method: 'GET', + path: 'os-snapshots/detail', + query: options + ) + end + end + + class Mock + def list_snapshots_detail(_options = {}) + response = Excon::Response.new + response.status = 200 + snapshots = data[:snapshots].values + response.body = { 'snapshots' => snapshots } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/list_tenants_with_flavor_access.rb b/lib/fog/openstack/compute/requests/list_tenants_with_flavor_access.rb similarity index 94% rename from lib/fog/compute/openstack/requests/list_tenants_with_flavor_access.rb rename to lib/fog/openstack/compute/requests/list_tenants_with_flavor_access.rb index a340d2f9b..7bac4eb24 100644 --- a/lib/fog/compute/openstack/requests/list_tenants_with_flavor_access.rb +++ b/lib/fog/openstack/compute/requests/list_tenants_with_flavor_access.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_tenants_with_flavor_access(flavor_ref) request( diff --git a/lib/fog/openstack/compute/requests/list_usages.rb b/lib/fog/openstack/compute/requests/list_usages.rb new file mode 100644 index 000000000..873d000fc --- /dev/null +++ b/lib/fog/openstack/compute/requests/list_usages.rb @@ -0,0 +1,38 @@ +module Fog + module OpenStack + class Compute + class Real + def list_usages(date_start = nil, date_end = nil, detailed = false) + params = {} + params[:start] = date_start.iso8601.gsub(/\+.*/, '') if date_start + params[:end] = date_end.iso8601.gsub(/\+.*/, '') if date_end + params[:detailed] = (detailed ? '1' : '0') if detailed + + request( + expects: [200, 203], + method: 'GET', + path: 'os-simple-tenant-usage', + query: params + ) + end + end + + class Mock + def list_usages(_date_start = nil, _date_end = nil, _detailed = false) + response = Excon::Response.new + response.status = 200 + response.body = { "tenant_usages" => [{ + "total_memory_mb_usage" => 0.00036124444444444445, + "total_vcpus_usage" => 7.055555555555556e-07, + "start" => "2012-03-06 05:05:56.349001", + "tenant_id" => "b97c8abba0c44a0987c63b858a4823e5", + "stop" => "2012-03-06 05:05:56.349255", + "total_hours" => 7.055555555555556e-07, + "total_local_gb_usage" => 0.0 + }] } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/list_volume_attachments.rb b/lib/fog/openstack/compute/requests/list_volume_attachments.rb similarity index 95% rename from lib/fog/compute/openstack/requests/list_volume_attachments.rb rename to lib/fog/openstack/compute/requests/list_volume_attachments.rb index 94e0f51e2..d66b20b63 100644 --- a/lib/fog/compute/openstack/requests/list_volume_attachments.rb +++ b/lib/fog/openstack/compute/requests/list_volume_attachments.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_volume_attachments(server_id) request( diff --git a/lib/fog/openstack/compute/requests/list_volumes.rb b/lib/fog/openstack/compute/requests/list_volumes.rb new file mode 100644 index 000000000..29f69497f --- /dev/null +++ b/lib/fog/openstack/compute/requests/list_volumes.rb @@ -0,0 +1,39 @@ +module Fog + module OpenStack + class Compute + class Real + def list_volumes(options = true) + if options.kind_of?(Hash) + path = 'os-volumes' + query = options + else + # Backwards compatibility layer, when 'detailed' boolean was sent as first param + if options + Fog::Logger.deprecation('Calling OpenStack[:compute].list_volumes(true) is deprecated, use .list_volumes_detail instead') + else + Fog::Logger.deprecation('Calling OpenStack[:compute].list_volumes(false) is deprecated, use .list_volumes({}) instead') + end + path = options ? 'os-volumes/detail' : 'os-volumes' + query = {} + end + + request( + expects: 200, + method: 'GET', + path: path, + query: query + ) + end + end + + class Mock + def list_volumes(_options = true) + Excon::Response.new( + body: { 'volumes' => data[:volumes].values }, + status: 200 + ) + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/list_volumes_detail.rb b/lib/fog/openstack/compute/requests/list_volumes_detail.rb similarity index 92% rename from lib/fog/compute/openstack/requests/list_volumes_detail.rb rename to lib/fog/openstack/compute/requests/list_volumes_detail.rb index 8db789b1a..282a4dfeb 100644 --- a/lib/fog/compute/openstack/requests/list_volumes_detail.rb +++ b/lib/fog/openstack/compute/requests/list_volumes_detail.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_volumes_detail(options = {}) request( diff --git a/lib/fog/openstack/compute/requests/list_zones.rb b/lib/fog/openstack/compute/requests/list_zones.rb new file mode 100644 index 000000000..f9e61903a --- /dev/null +++ b/lib/fog/openstack/compute/requests/list_zones.rb @@ -0,0 +1,33 @@ +module Fog + module OpenStack + class Compute + class Real + def list_zones(options = {}) + request( + expects: 200, + method: 'GET', + path: 'os-availability-zone', + query: options + ) + end + end + + class Mock + def list_zones(_options = {}) + Excon::Response.new( + body: { "availabilityZoneInfo" => [ + { + "zoneState" => { + "available" => true + }, + "hosts" => nil, + "zoneName" => "nova" + } + ] }, + status: 200 + ) + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/list_zones_detailed.rb b/lib/fog/openstack/compute/requests/list_zones_detailed.rb similarity index 78% rename from lib/fog/compute/openstack/requests/list_zones_detailed.rb rename to lib/fog/openstack/compute/requests/list_zones_detailed.rb index 48e03ef52..22c623920 100644 --- a/lib/fog/compute/openstack/requests/list_zones_detailed.rb +++ b/lib/fog/openstack/compute/requests/list_zones_detailed.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def list_zones_detailed(options = {}) request( @@ -24,23 +24,23 @@ def list_zones_detailed(_options = {}) "hosts" => { "instack.localdomain" => { "nova-conductor" => { - "available" => true, - "active" => true, + "available" => true, + "active" => true, "updated_at" => "2015-07-22T07:40:08.000000" }, "nova-scheduler" => { - "available" => true, - "active" => true, + "available" => true, + "active" => true, "updated_at" => "2015-07-22T07:40:04.000000" }, "nova-consoleauth" => { - "available" => true, - "active" => true, + "available" => true, + "active" => true, "updated_at" => "2015-07-22T07:40:09.000000" } } }, - "zoneName" => "internal" + "zoneName" => "internal" }, { "zoneState" => { @@ -49,8 +49,8 @@ def list_zones_detailed(_options = {}) "hosts" => { "instack.localdomain" => { "nova-compute" => { - "available" => true, - "active" => true, + "available" => true, + "active" => true, "updated_at" => "2015-07-22T07:40:04.000000" } } diff --git a/lib/fog/compute/openstack/requests/live_migrate_server.rb b/lib/fog/openstack/compute/requests/live_migrate_server.rb similarity index 80% rename from lib/fog/compute/openstack/requests/live_migrate_server.rb rename to lib/fog/openstack/compute/requests/live_migrate_server.rb index 3881c207e..9eabd3b7c 100644 --- a/lib/fog/compute/openstack/requests/live_migrate_server.rb +++ b/lib/fog/openstack/compute/requests/live_migrate_server.rb @@ -1,12 +1,12 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def live_migrate_server(server_id, host, block_migration, disk_over_commit) body = { 'os-migrateLive' => { - 'host' => host, - 'block_migration' => block_migration, + 'host' => host, + 'block_migration' => block_migration, 'disk_over_commit' => disk_over_commit } } diff --git a/lib/fog/compute/openstack/requests/migrate_server.rb b/lib/fog/openstack/compute/requests/migrate_server.rb similarity index 90% rename from lib/fog/compute/openstack/requests/migrate_server.rb rename to lib/fog/openstack/compute/requests/migrate_server.rb index ff7cb1a2b..0deefd4cf 100644 --- a/lib/fog/compute/openstack/requests/migrate_server.rb +++ b/lib/fog/openstack/compute/requests/migrate_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def migrate_server(server_id) body = { 'migrate' => nil } diff --git a/lib/fog/compute/openstack/requests/pause_server.rb b/lib/fog/openstack/compute/requests/pause_server.rb similarity index 92% rename from lib/fog/compute/openstack/requests/pause_server.rb rename to lib/fog/openstack/compute/requests/pause_server.rb index 178e83f4b..f44641ed0 100644 --- a/lib/fog/compute/openstack/requests/pause_server.rb +++ b/lib/fog/openstack/compute/requests/pause_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Pause the server. # diff --git a/lib/fog/compute/openstack/requests/reboot_server.rb b/lib/fog/openstack/compute/requests/reboot_server.rb similarity index 91% rename from lib/fog/compute/openstack/requests/reboot_server.rb rename to lib/fog/openstack/compute/requests/reboot_server.rb index 63a8dd988..f757356a9 100644 --- a/lib/fog/compute/openstack/requests/reboot_server.rb +++ b/lib/fog/openstack/compute/requests/reboot_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def reboot_server(server_id, type = 'SOFT') body = { 'reboot' => { 'type' => type } } diff --git a/lib/fog/compute/openstack/requests/rebuild_server.rb b/lib/fog/openstack/compute/requests/rebuild_server.rb similarity index 89% rename from lib/fog/compute/openstack/requests/rebuild_server.rb rename to lib/fog/openstack/compute/requests/rebuild_server.rb index 9137edacd..20fda7d56 100644 --- a/lib/fog/compute/openstack/requests/rebuild_server.rb +++ b/lib/fog/openstack/compute/requests/rebuild_server.rb @@ -1,11 +1,11 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def rebuild_server(server_id, image_ref, name, admin_pass = nil, metadata = nil, personality = nil) body = { 'rebuild' => { 'imageRef' => image_ref, - 'name' => name + 'name' => name } } body['rebuild']['adminPass'] = admin_pass if admin_pass body['rebuild']['metadata'] = metadata if metadata @@ -14,7 +14,7 @@ def rebuild_server(server_id, image_ref, name, admin_pass = nil, metadata = nil, personality.each do |file| body['rebuild']['personality'] << { 'contents' => Base64.encode64(file['contents']), - 'path' => file['path'] + 'path' => file['path'] } end end diff --git a/lib/fog/compute/openstack/requests/release_address.rb b/lib/fog/openstack/compute/requests/release_address.rb similarity index 79% rename from lib/fog/compute/openstack/requests/release_address.rb rename to lib/fog/openstack/compute/requests/release_address.rb index 6770f5b0e..7f534216d 100644 --- a/lib/fog/compute/openstack/requests/release_address.rb +++ b/lib/fog/openstack/compute/requests/release_address.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def release_address(address_id) request( @@ -16,9 +16,9 @@ def release_address(_address_id) response = Excon::Response.new response.status = 202 response.headers = { - "Content-Type" => "text/html; charset=UTF-8", + "Content-Type" => "text/html; charset=UTF-8", "Content-Length" => "0", - "Date" => Date.new + "Date" => Date.new } response.body = {} response diff --git a/lib/fog/openstack/compute/requests/remote_consoles.rb b/lib/fog/openstack/compute/requests/remote_consoles.rb new file mode 100644 index 000000000..0e6c313e9 --- /dev/null +++ b/lib/fog/openstack/compute/requests/remote_consoles.rb @@ -0,0 +1,54 @@ +module Fog + module OpenStack + class Compute + class Real + # Get a vnc console for an instance. + # For microversion >= 2.6 + # + # === Parameters + # * server_id <~String> - The ID of the server. + # * protocol <~String> - The protocol of remote console. The valid values are vnc, spice, rdp, serial and mks. + # The protocol mks is added since Microversion 2.8. + # * type <~String> - The type of remote console. The valid values are novnc, xvpvnc, rdp-html5, spice-html5, + # serial, and webmks. The type webmks is added since Microversion 2.8. + # === Returns + # * response <~Excon::Response>: + # * body <~Hash>: + # * url <~String> + # * type <~String> + # * protocol <~String> + def remote_consoles(server_id, protocol, type) + if microversion_newer_than?('2.6') + body = { + 'remote_console' => { + 'protocol' => protocol, 'type' => type + } + } + + request( + body: Fog::JSON.encode(body), + expects: 200, + method: 'POST', + path: "servers/#{server_id}/remote-consoles" + ) + end + end + end + + class Mock + def remote_consoles(_server_id, _protocol, _type) + response = Excon::Response.new + response.status = 200 + response.body = { + "remote_console" => { + "url" => "http://192.168.27.100:6080/vnc_auto.html?token=e629bcbf-6f9e-4276-9ea1-d6eb0e618da5", + "type" => "novnc", + "protocol" => "vnc" + } + } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/remove_aggregate_host.rb b/lib/fog/openstack/compute/requests/remove_aggregate_host.rb similarity index 81% rename from lib/fog/compute/openstack/requests/remove_aggregate_host.rb rename to lib/fog/openstack/compute/requests/remove_aggregate_host.rb index 4b434a4ab..6f94d09c0 100644 --- a/lib/fog/compute/openstack/requests/remove_aggregate_host.rb +++ b/lib/fog/openstack/compute/requests/remove_aggregate_host.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def remove_aggregate_host(uuid, host_uuid) data = { 'remove_host' => { 'host' => host_uuid } } @@ -18,9 +18,9 @@ def remove_aggregate_host(_uuid, _host_uuid) response = Excon::Response.new response.status = 200 response.headers = { - "Content-Type" => "text/html; charset=UTF-8", + "Content-Type" => "text/html; charset=UTF-8", "Content-Length" => "0", - "Date" => Date.new + "Date" => Date.new } response end diff --git a/lib/fog/compute/openstack/requests/remove_fixed_ip.rb b/lib/fog/openstack/compute/requests/remove_fixed_ip.rb similarity index 94% rename from lib/fog/compute/openstack/requests/remove_fixed_ip.rb rename to lib/fog/openstack/compute/requests/remove_fixed_ip.rb index ea1024145..d35add92b 100644 --- a/lib/fog/compute/openstack/requests/remove_fixed_ip.rb +++ b/lib/fog/openstack/compute/requests/remove_fixed_ip.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Remove an IP address. # diff --git a/lib/fog/compute/openstack/requests/remove_flavor_access.rb b/lib/fog/openstack/compute/requests/remove_flavor_access.rb similarity index 94% rename from lib/fog/compute/openstack/requests/remove_flavor_access.rb rename to lib/fog/openstack/compute/requests/remove_flavor_access.rb index cf18338e7..d63d5cf8d 100644 --- a/lib/fog/compute/openstack/requests/remove_flavor_access.rb +++ b/lib/fog/openstack/compute/requests/remove_flavor_access.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def remove_flavor_access(flavor_ref, tenant_id) request( diff --git a/lib/fog/compute/openstack/requests/remove_security_group.rb b/lib/fog/openstack/compute/requests/remove_security_group.rb similarity index 92% rename from lib/fog/compute/openstack/requests/remove_security_group.rb rename to lib/fog/openstack/compute/requests/remove_security_group.rb index f75518a44..aac00efa8 100644 --- a/lib/fog/compute/openstack/requests/remove_security_group.rb +++ b/lib/fog/openstack/compute/requests/remove_security_group.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def remove_security_group(server_id, group_name) body = { 'removeSecurityGroup' => { "name" => group_name } } diff --git a/lib/fog/compute/openstack/requests/rescue_server.rb b/lib/fog/openstack/compute/requests/rescue_server.rb similarity index 92% rename from lib/fog/compute/openstack/requests/rescue_server.rb rename to lib/fog/openstack/compute/requests/rescue_server.rb index c4f1b86dd..5e60bca93 100644 --- a/lib/fog/compute/openstack/requests/rescue_server.rb +++ b/lib/fog/openstack/compute/requests/rescue_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Rescue the server. # diff --git a/lib/fog/compute/openstack/requests/reset_server_state.rb b/lib/fog/openstack/compute/requests/reset_server_state.rb similarity index 92% rename from lib/fog/compute/openstack/requests/reset_server_state.rb rename to lib/fog/openstack/compute/requests/reset_server_state.rb index d32c19948..d5690d1d7 100644 --- a/lib/fog/compute/openstack/requests/reset_server_state.rb +++ b/lib/fog/openstack/compute/requests/reset_server_state.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def reset_server_state(server_id, status) body = { 'os-resetState' => { 'state' => status } } diff --git a/lib/fog/compute/openstack/requests/resize_server.rb b/lib/fog/openstack/compute/requests/resize_server.rb similarity index 91% rename from lib/fog/compute/openstack/requests/resize_server.rb rename to lib/fog/openstack/compute/requests/resize_server.rb index 4ba657680..ea7215354 100644 --- a/lib/fog/compute/openstack/requests/resize_server.rb +++ b/lib/fog/openstack/compute/requests/resize_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def resize_server(server_id, flavor_ref) body = { 'resize' => { 'flavorRef' => flavor_ref } } diff --git a/lib/fog/compute/openstack/requests/resume_server.rb b/lib/fog/openstack/compute/requests/resume_server.rb similarity index 92% rename from lib/fog/compute/openstack/requests/resume_server.rb rename to lib/fog/openstack/compute/requests/resume_server.rb index 53fb14e97..328226c20 100644 --- a/lib/fog/compute/openstack/requests/resume_server.rb +++ b/lib/fog/openstack/compute/requests/resume_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Resume the server. # diff --git a/lib/fog/compute/openstack/requests/revert_resize_server.rb b/lib/fog/openstack/compute/requests/revert_resize_server.rb similarity index 94% rename from lib/fog/compute/openstack/requests/revert_resize_server.rb rename to lib/fog/openstack/compute/requests/revert_resize_server.rb index 86de6a690..518351c8b 100644 --- a/lib/fog/compute/openstack/requests/revert_resize_server.rb +++ b/lib/fog/openstack/compute/requests/revert_resize_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def revert_resize_server(server_id) body = { 'revertResize' => nil } diff --git a/lib/fog/compute/openstack/requests/server_action.rb b/lib/fog/openstack/compute/requests/server_action.rb similarity index 89% rename from lib/fog/compute/openstack/requests/server_action.rb rename to lib/fog/openstack/compute/requests/server_action.rb index 261a3b174..57c9ea294 100644 --- a/lib/fog/compute/openstack/requests/server_action.rb +++ b/lib/fog/openstack/compute/requests/server_action.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def server_action(server_id, body, expects = [200, 202]) request( diff --git a/lib/fog/openstack/compute/requests/server_actions.rb b/lib/fog/openstack/compute/requests/server_actions.rb new file mode 100644 index 000000000..ba33b02ea --- /dev/null +++ b/lib/fog/openstack/compute/requests/server_actions.rb @@ -0,0 +1,38 @@ +module Fog + module OpenStack + class Compute + class Real + # Retrieve server actions. + # + # === Parameters + # * server_id <~String> - The ID of the server to query for available actions. + # === Returns + # * actions <~Array> + def server_actions(server_id) + request( + expects: 200, + method: 'GET', + path: "servers/#{server_id}/os-instance-actions" + ).body['instanceActions'] + end + end + + class Mock + def server_actions(server_id) + response = Excon::Response.new + response.status = 200 + response.body = [{ + 'instance_uuid' => server_id, + 'user_id' => '7067d67a2b23435ca2366588680b66c3', + 'start_time' => Time.now.iso8601, + 'request_id' => "req-#{server_id}", + 'action' => 'stop', + 'message' => nil, + 'project_id' => '9d5d0b877cf449fdae078659cfa12e86' + }] + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/server_diagnostics.rb b/lib/fog/openstack/compute/requests/server_diagnostics.rb similarity index 93% rename from lib/fog/compute/openstack/requests/server_diagnostics.rb rename to lib/fog/openstack/compute/requests/server_diagnostics.rb index e58492eef..f826259c6 100644 --- a/lib/fog/compute/openstack/requests/server_diagnostics.rb +++ b/lib/fog/openstack/compute/requests/server_diagnostics.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Retrieve server diagnostics. # diff --git a/lib/fog/compute/openstack/requests/set_metadata.rb b/lib/fog/openstack/compute/requests/set_metadata.rb similarity index 86% rename from lib/fog/compute/openstack/requests/set_metadata.rb rename to lib/fog/openstack/compute/requests/set_metadata.rb index 705d025da..0e16f3afd 100644 --- a/lib/fog/compute/openstack/requests/set_metadata.rb +++ b/lib/fog/openstack/compute/requests/set_metadata.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def set_metadata(collection_name, parent_id, metadata = {}) request( @@ -16,13 +16,13 @@ class Mock def set_metadata(collection_name, parent_id, metadata = {}) if collection_name == "images" unless list_images_detail.body['images'].find { |image| image['id'] == parent_id } - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end if collection_name == "servers" unless list_servers_detail.body['servers'].find { |server| server['id'] == parent_id } - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end diff --git a/lib/fog/openstack/compute/requests/set_tenant.rb b/lib/fog/openstack/compute/requests/set_tenant.rb new file mode 100644 index 000000000..e3ae500dc --- /dev/null +++ b/lib/fog/openstack/compute/requests/set_tenant.rb @@ -0,0 +1,19 @@ +module Fog + module OpenStack + class Compute + class Real + def set_tenant(tenant) + @openstack_must_reauthenticate = true + @openstack_tenant = tenant.to_s + authenticate + end + end + + class Mock + def set_tenant(_tenant) + true + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/shelve_offload_server.rb b/lib/fog/openstack/compute/requests/shelve_offload_server.rb similarity index 93% rename from lib/fog/compute/openstack/requests/shelve_offload_server.rb rename to lib/fog/openstack/compute/requests/shelve_offload_server.rb index 5199b03a5..43e79f261 100644 --- a/lib/fog/compute/openstack/requests/shelve_offload_server.rb +++ b/lib/fog/openstack/compute/requests/shelve_offload_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Shelve Off load the server. Data and resource associations are deleted. # diff --git a/lib/fog/compute/openstack/requests/shelve_server.rb b/lib/fog/openstack/compute/requests/shelve_server.rb similarity index 92% rename from lib/fog/compute/openstack/requests/shelve_server.rb rename to lib/fog/openstack/compute/requests/shelve_server.rb index fb203a1c9..06ce123af 100644 --- a/lib/fog/compute/openstack/requests/shelve_server.rb +++ b/lib/fog/openstack/compute/requests/shelve_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Shelve the server. # diff --git a/lib/fog/compute/openstack/requests/start_server.rb b/lib/fog/openstack/compute/requests/start_server.rb similarity index 92% rename from lib/fog/compute/openstack/requests/start_server.rb rename to lib/fog/openstack/compute/requests/start_server.rb index a636cb1bf..705b75379 100644 --- a/lib/fog/compute/openstack/requests/start_server.rb +++ b/lib/fog/openstack/compute/requests/start_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Start the server. # diff --git a/lib/fog/compute/openstack/requests/stop_server.rb b/lib/fog/openstack/compute/requests/stop_server.rb similarity index 92% rename from lib/fog/compute/openstack/requests/stop_server.rb rename to lib/fog/openstack/compute/requests/stop_server.rb index d49a8de62..7a25c4fa9 100644 --- a/lib/fog/compute/openstack/requests/stop_server.rb +++ b/lib/fog/openstack/compute/requests/stop_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Stop the server. # diff --git a/lib/fog/compute/openstack/requests/suspend_server.rb b/lib/fog/openstack/compute/requests/suspend_server.rb similarity index 92% rename from lib/fog/compute/openstack/requests/suspend_server.rb rename to lib/fog/openstack/compute/requests/suspend_server.rb index c3623308e..8fd0a702c 100644 --- a/lib/fog/compute/openstack/requests/suspend_server.rb +++ b/lib/fog/openstack/compute/requests/suspend_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Suspend the server. # diff --git a/lib/fog/compute/openstack/requests/unpause_server.rb b/lib/fog/openstack/compute/requests/unpause_server.rb similarity index 92% rename from lib/fog/compute/openstack/requests/unpause_server.rb rename to lib/fog/openstack/compute/requests/unpause_server.rb index bf4e2fe39..042957a5c 100644 --- a/lib/fog/compute/openstack/requests/unpause_server.rb +++ b/lib/fog/openstack/compute/requests/unpause_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Unpause the server. # diff --git a/lib/fog/compute/openstack/requests/unshelve_server.rb b/lib/fog/openstack/compute/requests/unshelve_server.rb similarity index 92% rename from lib/fog/compute/openstack/requests/unshelve_server.rb rename to lib/fog/openstack/compute/requests/unshelve_server.rb index 73ee005fe..d339c6ef1 100644 --- a/lib/fog/compute/openstack/requests/unshelve_server.rb +++ b/lib/fog/openstack/compute/requests/unshelve_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real # Unshelve the server. # diff --git a/lib/fog/compute/openstack/requests/update_aggregate.rb b/lib/fog/openstack/compute/requests/update_aggregate.rb similarity index 85% rename from lib/fog/compute/openstack/requests/update_aggregate.rb rename to lib/fog/openstack/compute/requests/update_aggregate.rb index 179487611..44cae00f5 100644 --- a/lib/fog/compute/openstack/requests/update_aggregate.rb +++ b/lib/fog/openstack/compute/requests/update_aggregate.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def update_aggregate(uuid, options = {}) vanilla_options = [:name, :availability_zone] @@ -24,9 +24,9 @@ def update_aggregate(_uuid, _options = {}) response = Excon::Response.new response.status = 200 response.headers = { - "Content-Type" => "text/html; charset=UTF-8", + "Content-Type" => "text/html; charset=UTF-8", "Content-Length" => "0", - "Date" => Date.new + "Date" => Date.new } response.body = { 'aggregate' => data[:aggregates].first } response diff --git a/lib/fog/compute/openstack/requests/update_aggregate_metadata.rb b/lib/fog/openstack/compute/requests/update_aggregate_metadata.rb similarity index 82% rename from lib/fog/compute/openstack/requests/update_aggregate_metadata.rb rename to lib/fog/openstack/compute/requests/update_aggregate_metadata.rb index 5ff1c6ed4..7bb30c3e9 100644 --- a/lib/fog/compute/openstack/requests/update_aggregate_metadata.rb +++ b/lib/fog/openstack/compute/requests/update_aggregate_metadata.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def update_aggregate_metadata(uuid, metadata = {}) data = { 'set_metadata' => { 'metadata' => metadata } } @@ -18,9 +18,9 @@ def update_aggregate_metadata(_uuid, _metadata = {}) response = Excon::Response.new response.status = 200 response.headers = { - "Content-Type" => "text/html; charset=UTF-8", + "Content-Type" => "text/html; charset=UTF-8", "Content-Length" => "0", - "Date" => Date.new + "Date" => Date.new } response end diff --git a/lib/fog/compute/openstack/requests/update_flavor_metadata.rb b/lib/fog/openstack/compute/requests/update_flavor_metadata.rb similarity index 79% rename from lib/fog/compute/openstack/requests/update_flavor_metadata.rb rename to lib/fog/openstack/compute/requests/update_flavor_metadata.rb index 31970c139..ab30d26c2 100644 --- a/lib/fog/compute/openstack/requests/update_flavor_metadata.rb +++ b/lib/fog/openstack/compute/requests/update_flavor_metadata.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def update_flavor_metadata(flavor_ref, key, value) data = { key => value } @@ -20,9 +20,9 @@ def update_flavor_metadata(_flavor_ref, key, value) response.status = 200 response.headers = { "X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf", - "Content-Type" => "application/json", - "Content-Length" => "356", - "Date" => Date.new + "Content-Type" => "application/json", + "Content-Length" => "356", + "Date" => Date.new } response.body = { key => value } response diff --git a/lib/fog/compute/openstack/requests/update_meta.rb b/lib/fog/openstack/compute/requests/update_meta.rb similarity index 87% rename from lib/fog/compute/openstack/requests/update_meta.rb rename to lib/fog/openstack/compute/requests/update_meta.rb index 1114bc465..5a377b90c 100644 --- a/lib/fog/compute/openstack/requests/update_meta.rb +++ b/lib/fog/openstack/compute/requests/update_meta.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def update_meta(collection_name, parent_id, key, value) request( @@ -16,13 +16,13 @@ class Mock def update_meta(collection_name, parent_id, key, value) if collection_name == "images" unless list_images_detail.body['images'].find { |image| image['id'] == parent_id } - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end if collection_name == "servers" unless list_servers_detail.body['servers'].find { |server| server['id'] == parent_id } - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end diff --git a/lib/fog/openstack/compute/requests/update_metadata.rb b/lib/fog/openstack/compute/requests/update_metadata.rb new file mode 100644 index 000000000..b8da3612b --- /dev/null +++ b/lib/fog/openstack/compute/requests/update_metadata.rb @@ -0,0 +1,38 @@ +module Fog + module OpenStack + class Compute + class Real + def update_metadata(collection_name, parent_id, metadata = {}) + request( + body: Fog::JSON.encode('metadata' => metadata), + expects: 200, + method: 'POST', + path: "#{collection_name}/#{parent_id}/metadata" + ) + end + end + + class Mock + def update_metadata(collection_name, parent_id, metadata = {}) + if collection_name == "images" + unless list_images_detail.body['images'].find { |image| image['id'] == parent_id } + raise Fog::OpenStack::Compute::NotFound + end + end + + if collection_name == "servers" + unless list_servers_detail.body['servers'].find { |server| server['id'] == parent_id } + raise Fog::OpenStack::Compute::NotFound + end + end + + # FIXME: join w/ existing metadata here + response = Excon::Response.new + response.body = { "metadata" => metadata } + response.status = 200 + response + end + end + end + end +end diff --git a/lib/fog/openstack/compute/requests/update_quota.rb b/lib/fog/openstack/compute/requests/update_quota.rb new file mode 100644 index 000000000..f586b1c14 --- /dev/null +++ b/lib/fog/openstack/compute/requests/update_quota.rb @@ -0,0 +1,27 @@ +module Fog + module OpenStack + class Compute + class Real + def update_quota(tenant_id, options = {}) + request( + body: Fog::JSON.encode('quota_set' => options), + expects: 200, + method: 'PUT', + path: "/os-quota-sets/#{tenant_id}" + ) + end + end + + class Mock + def update_quota(_tenant_id, options = {}) + data[:quota_updated] = data[:quota].merge options + + response = Excon::Response.new + response.status = 200 + response.body = { 'quota_set' => data[:quota_updated] } + response + end + end + end + end +end diff --git a/lib/fog/compute/openstack/requests/update_server.rb b/lib/fog/openstack/compute/requests/update_server.rb similarity index 89% rename from lib/fog/compute/openstack/requests/update_server.rb rename to lib/fog/openstack/compute/requests/update_server.rb index 0ddc5767d..345d64374 100644 --- a/lib/fog/compute/openstack/requests/update_server.rb +++ b/lib/fog/openstack/compute/requests/update_server.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute class Real def update_server(server_id, options = {}) request( @@ -23,7 +23,7 @@ def update_server(server_id, options = {}) response.status = 200 response else - raise Fog::Compute::OpenStack::NotFound + raise Fog::OpenStack::Compute::NotFound end end end diff --git a/lib/fog/openstack/container_infra.rb b/lib/fog/openstack/container_infra.rb new file mode 100644 index 000000000..63c508200 --- /dev/null +++ b/lib/fog/openstack/container_infra.rb @@ -0,0 +1,144 @@ +module Fog + module OpenStack + class ContainerInfra < Fog::Service + SUPPORTED_VERSIONS = /v1/.freeze + SUPPORTED_MICROVERSION = '1.3'.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version + + model_path 'fog/openstack/container_infra/models' + + model :bay + collection :bays + model :bay_model + collection :bay_models + model :certificate + collection :certificates + model :cluster + collection :clusters + model :cluster_template + collection :cluster_templates + + request_path 'fog/openstack/container_infra/requests' + + # Bay CRUD + request :create_bay + request :delete_bay + request :get_bay + request :list_bays + request :update_bay + + # Bay Model CRUD + request :create_bay_model + request :delete_bay_model + request :get_bay_model + request :list_bay_models + request :update_bay_model + + # Certificate CRUD + request :create_certificate + request :get_certificate + + # Cluster CRUD + request :create_cluster + request :delete_cluster + request :get_cluster + request :list_clusters + request :update_cluster + + # Cluster Template CRUD + request :create_cluster_template + request :delete_cluster_template + request :get_cluster_template + request :list_cluster_templates + request :update_cluster_template + + class Mock + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + users: {}, + tenants: {} + } + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 9511 + management_url.path = '/v1' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].find { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_management_url: @openstack_management_url } + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::ContainerInfra::NotFound + end + + def default_path_prefix + 'v1' + end + + def default_service_type + %w[container-infra] + end + + def request(options = {}) + options[:headers] = { 'OpenStack-API-Version' => "container-infra #{SUPPORTED_MICROVERSION}" } + super(options) + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/models/base.rb b/lib/fog/openstack/container_infra/models/base.rb new file mode 100644 index 000000000..ec013d6c9 --- /dev/null +++ b/lib/fog/openstack/container_infra/models/base.rb @@ -0,0 +1,19 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class ContainerInfra + class Base < Fog::OpenStack::Model + def convert_update_params(params) + params = params.map do |key, value| + { + "path" => "/#{key}", + "op" => value ? "replace" : "remove" + }.merge(value ? { "value" => value } : {}) + end + params.each { |k, v| params[k] = v.to_s.capitalize if [true, false].include?(v) } + end + end + end + end +end diff --git a/lib/fog/container_infra/openstack/models/bay.rb b/lib/fog/openstack/container_infra/models/bay.rb similarity index 92% rename from lib/fog/container_infra/openstack/models/bay.rb rename to lib/fog/openstack/container_infra/models/bay.rb index c8f2382c3..a02dd7a1d 100644 --- a/lib/fog/container_infra/openstack/models/bay.rb +++ b/lib/fog/openstack/container_infra/models/bay.rb @@ -1,9 +1,9 @@ require_relative 'base' module Fog - module ContainerInfra - class OpenStack - class Bay < Fog::ContainerInfra::OpenStack::Base + module OpenStack + class ContainerInfra + class Bay < Fog::OpenStack::ContainerInfra::Base identity :uuid attribute :api_address diff --git a/lib/fog/container_infra/openstack/models/bay_model.rb b/lib/fog/openstack/container_infra/models/bay_model.rb similarity index 94% rename from lib/fog/container_infra/openstack/models/bay_model.rb rename to lib/fog/openstack/container_infra/models/bay_model.rb index ac6ef0e94..eadc8ac56 100644 --- a/lib/fog/container_infra/openstack/models/bay_model.rb +++ b/lib/fog/openstack/container_infra/models/bay_model.rb @@ -1,9 +1,9 @@ require_relative 'base' module Fog - module ContainerInfra - class OpenStack - class BayModel < Fog::ContainerInfra::OpenStack::Base + module OpenStack + class ContainerInfra + class BayModel < Fog::OpenStack::ContainerInfra::Base identity :uuid attribute :apiserver_port diff --git a/lib/fog/openstack/container_infra/models/bay_models.rb b/lib/fog/openstack/container_infra/models/bay_models.rb new file mode 100644 index 000000000..8325bddde --- /dev/null +++ b/lib/fog/openstack/container_infra/models/bay_models.rb @@ -0,0 +1,23 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/container_infra/models/bay_model' + +module Fog + module OpenStack + class ContainerInfra + class BayModels < Fog::OpenStack::Collection + model Fog::OpenStack::ContainerInfra::BayModel + + def all + load_response(service.list_bay_models, 'baymodels') + end + + def get(bay_model_uuid_or_name) + resource = service.get_bay_model(bay_model_uuid_or_name).body + new(resource) + rescue Fog::OpenStack::ContainerInfra::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/models/bays.rb b/lib/fog/openstack/container_infra/models/bays.rb new file mode 100644 index 000000000..88882b41d --- /dev/null +++ b/lib/fog/openstack/container_infra/models/bays.rb @@ -0,0 +1,23 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/container_infra/models/bay' + +module Fog + module OpenStack + class ContainerInfra + class Bays < Fog::OpenStack::Collection + model Fog::OpenStack::ContainerInfra::Bay + + def all + load_response(service.list_bays, "bays") + end + + def get(bay_uuid_or_name) + resource = service.get_bay(bay_uuid_or_name).body + new(resource) + rescue Fog::OpenStack::ContainerInfra::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/models/certificate.rb b/lib/fog/openstack/container_infra/models/certificate.rb new file mode 100644 index 000000000..2d21dcd12 --- /dev/null +++ b/lib/fog/openstack/container_infra/models/certificate.rb @@ -0,0 +1,20 @@ +require_relative 'base' + +module Fog + module OpenStack + class ContainerInfra + class Certificate < Fog::OpenStack::ContainerInfra::Base + identity :bay_uuid + + attribute :pem + attribute :csr + + def create + requires :csr, :bay_uuid + merge_attributes(service.create_certificate(attributes).body) + self + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/models/certificates.rb b/lib/fog/openstack/container_infra/models/certificates.rb new file mode 100644 index 000000000..5f8508300 --- /dev/null +++ b/lib/fog/openstack/container_infra/models/certificates.rb @@ -0,0 +1,24 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/container_infra/models/certificate' + +module Fog + module OpenStack + class ContainerInfra + class Certificates < Fog::OpenStack::Collection + model Fog::OpenStack::ContainerInfra::Certificate + + def create(bay_uuid) + resource = service.create_certificate(bay_uuid).body + new(resource) + end + + def get(bay_uuid) + resource = service.get_certificate(bay_uuid).body + new(resource) + rescue Fog::OpenStack::ContainerInfra::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/container_infra/openstack/models/cluster.rb b/lib/fog/openstack/container_infra/models/cluster.rb similarity index 92% rename from lib/fog/container_infra/openstack/models/cluster.rb rename to lib/fog/openstack/container_infra/models/cluster.rb index 87eb9ded6..33a5c93cc 100644 --- a/lib/fog/container_infra/openstack/models/cluster.rb +++ b/lib/fog/openstack/container_infra/models/cluster.rb @@ -1,9 +1,9 @@ require_relative 'base' module Fog - module ContainerInfra - class OpenStack - class Cluster < Fog::ContainerInfra::OpenStack::Base + module OpenStack + class ContainerInfra + class Cluster < Fog::OpenStack::ContainerInfra::Base identity :uuid attribute :api_address diff --git a/lib/fog/container_infra/openstack/models/cluster_template.rb b/lib/fog/openstack/container_infra/models/cluster_template.rb similarity index 93% rename from lib/fog/container_infra/openstack/models/cluster_template.rb rename to lib/fog/openstack/container_infra/models/cluster_template.rb index ec00962b2..87a4fbc84 100644 --- a/lib/fog/container_infra/openstack/models/cluster_template.rb +++ b/lib/fog/openstack/container_infra/models/cluster_template.rb @@ -1,9 +1,9 @@ require_relative 'base' module Fog - module ContainerInfra - class OpenStack - class ClusterTemplate < Fog::ContainerInfra::OpenStack::Base + module OpenStack + class ContainerInfra + class ClusterTemplate < Fog::OpenStack::ContainerInfra::Base identity :uuid attribute :apiserver_port diff --git a/lib/fog/openstack/container_infra/models/cluster_templates.rb b/lib/fog/openstack/container_infra/models/cluster_templates.rb new file mode 100644 index 000000000..06a291c3b --- /dev/null +++ b/lib/fog/openstack/container_infra/models/cluster_templates.rb @@ -0,0 +1,23 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/container_infra/models/cluster_template' + +module Fog + module OpenStack + class ContainerInfra + class ClusterTemplates < Fog::OpenStack::Collection + model Fog::OpenStack::ContainerInfra::ClusterTemplate + + def all + load_response(service.list_cluster_templates, 'clustertemplates') + end + + def get(cluster_template_uuid_or_name) + resource = service.get_cluster_template(cluster_template_uuid_or_name).body + new(resource) + rescue Fog::OpenStack::ContainerInfra::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/models/clusters.rb b/lib/fog/openstack/container_infra/models/clusters.rb new file mode 100644 index 000000000..905463c19 --- /dev/null +++ b/lib/fog/openstack/container_infra/models/clusters.rb @@ -0,0 +1,23 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/container_infra/models/cluster' + +module Fog + module OpenStack + class ContainerInfra + class Clusters < Fog::OpenStack::Collection + model Fog::OpenStack::ContainerInfra::Cluster + + def all + load_response(service.list_clusters, "clusters") + end + + def get(cluster_uuid_or_name) + resource = service.get_cluster(cluster_uuid_or_name).body + new(resource) + rescue Fog::OpenStack::ContainerInfra::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/container_infra/openstack/requests/create_bay.rb b/lib/fog/openstack/container_infra/requests/create_bay.rb similarity index 92% rename from lib/fog/container_infra/openstack/requests/create_bay.rb rename to lib/fog/openstack/container_infra/requests/create_bay.rb index 1246e4b02..b0ea2e6ad 100644 --- a/lib/fog/container_infra/openstack/requests/create_bay.rb +++ b/lib/fog/openstack/container_infra/requests/create_bay.rb @@ -1,6 +1,6 @@ module Fog - module ContainerInfra - class OpenStack + module OpenStack + class ContainerInfra class Real def create_bay(params) request( diff --git a/lib/fog/openstack/container_infra/requests/create_bay_model.rb b/lib/fog/openstack/container_infra/requests/create_bay_model.rb new file mode 100644 index 000000000..54cae7696 --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/create_bay_model.rb @@ -0,0 +1,56 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def create_bay_model(params) + request( + expects: [201, 200], + method: 'POST', + path: "baymodels", + body: Fog::JSON.encode(params) + ) + end + end + + class Mock + def create_bay_model(_params) + response = Excon::Response.new + response.status = 201 + response.body = { + "insecure_registry" => nil, + "http_proxy" => "http://10.164.177.169:8080", + "updated_at" => nil, + "floating_ip_enabled" => true, + "fixed_subnet" => nil, + "master_flavor_id" => nil, + "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", + "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", + "https_proxy" => "http://10.164.177.169:8080", + "tls_disabled" => false, + "keypair_id" => "kp", + "public" => false, + "labels" => {}, + "docker_volume_size" => 3, + "server_type" => "vm", + "external_network_id" => "public", + "cluster_distro" => "fedora-atomic", + "image_id" => "fedora-atomic-latest", + "volume_driver" => "cinder", + "registry_enabled" => false, + "docker_storage_driver" => "devicemapper", + "apiserver_port" => nil, + "name" => "k8s-bm2", + "created_at" => "2016-08-29T02:08:08+00:00", + "network_driver" => "flannel", + "fixed_network" => nil, + "coe" => "kubernetes", + "flavor_id" => "m1.small", + "master_lb_enabled" => true, + "dns_nameserver" => "8.8.8.8" + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/requests/create_certificate.rb b/lib/fog/openstack/container_infra/requests/create_certificate.rb new file mode 100644 index 000000000..f2566ff97 --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/create_certificate.rb @@ -0,0 +1,29 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def create_certificate(params) + request( + expects: [201, 200], + method: 'POST', + path: "certificates", + body: Fog::JSON.encode(params) + ) + end + end + + class Mock + def create_certificate(_params) + response = Excon::Response.new + response.status = 201 + response.body = { + "pem" => "-----BEGIN CERTIFICATE-----\nMIIDxDCCAqygAwIBAgIRALgUbIjdKUy8lqErJmCxVfkwDQYJKoZIhvcNAQELBQAw\n-----END CERTIFICATE-----\n", + "bay_uuid" => "0b4b766f-1500-44b3-9804-5a6e12fe6df4", + "csr" => "-----BEGIN CERTIFICATE REQUEST-----\nMIIEfzCCAmcCAQAwFDESMBAGA1UEAxMJWW91ciBOYW1lMIICIjANBgkqhkiG9w0B\n-----END CERTIFICATE REQUEST-----\n" + } + response + end + end + end + end +end diff --git a/lib/fog/container_infra/openstack/requests/create_cluster.rb b/lib/fog/openstack/container_infra/requests/create_cluster.rb similarity index 92% rename from lib/fog/container_infra/openstack/requests/create_cluster.rb rename to lib/fog/openstack/container_infra/requests/create_cluster.rb index f9bbe344b..99238c210 100644 --- a/lib/fog/container_infra/openstack/requests/create_cluster.rb +++ b/lib/fog/openstack/container_infra/requests/create_cluster.rb @@ -1,6 +1,6 @@ module Fog - module ContainerInfra - class OpenStack + module OpenStack + class ContainerInfra class Real def create_cluster(params) request( diff --git a/lib/fog/openstack/container_infra/requests/create_cluster_template.rb b/lib/fog/openstack/container_infra/requests/create_cluster_template.rb new file mode 100644 index 000000000..611393065 --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/create_cluster_template.rb @@ -0,0 +1,56 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def create_cluster_template(params) + request( + expects: [201, 200], + method: 'POST', + path: "clustertemplates", + body: Fog::JSON.encode(params) + ) + end + end + + class Mock + def create_cluster_template(_params) + response = Excon::Response.new + response.status = 201 + response.body = { + "insecure_registry" => nil, + "http_proxy" => "http://10.164.177.169:8080", + "updated_at" => nil, + "floating_ip_enabled" => true, + "fixed_subnet" => nil, + "master_flavor_id" => nil, + "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", + "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", + "https_proxy" => "http://10.164.177.169:8080", + "tls_disabled" => false, + "keypair_id" => "kp", + "public" => false, + "labels" => {}, + "docker_volume_size" => 3, + "server_type" => "vm", + "external_network_id" => "public", + "cluster_distro" => "fedora-atomic", + "image_id" => "fedora-atomic-latest", + "volume_driver" => "cinder", + "registry_enabled" => false, + "docker_storage_driver" => "devicemapper", + "apiserver_port" => nil, + "name" => "k8s-bm2", + "created_at" => "2016-08-29T02:08:08+00:00", + "network_driver" => "flannel", + "fixed_network" => nil, + "coe" => "kubernetes", + "flavor_id" => "m1.small", + "master_lb_enabled" => true, + "dns_nameserver" => "8.8.8.8" + } + response + end + end + end + end +end diff --git a/lib/fog/container_infra/openstack/requests/delete_bay.rb b/lib/fog/openstack/container_infra/requests/delete_bay.rb similarity index 90% rename from lib/fog/container_infra/openstack/requests/delete_bay.rb rename to lib/fog/openstack/container_infra/requests/delete_bay.rb index a5acef2d5..af5b2d626 100644 --- a/lib/fog/container_infra/openstack/requests/delete_bay.rb +++ b/lib/fog/openstack/container_infra/requests/delete_bay.rb @@ -1,6 +1,6 @@ module Fog - module ContainerInfra - class OpenStack + module OpenStack + class ContainerInfra class Real def delete_bay(uuid_or_name) request( diff --git a/lib/fog/container_infra/openstack/requests/delete_bay_model.rb b/lib/fog/openstack/container_infra/requests/delete_bay_model.rb similarity index 91% rename from lib/fog/container_infra/openstack/requests/delete_bay_model.rb rename to lib/fog/openstack/container_infra/requests/delete_bay_model.rb index 2aaa26fbe..b64345a7e 100644 --- a/lib/fog/container_infra/openstack/requests/delete_bay_model.rb +++ b/lib/fog/openstack/container_infra/requests/delete_bay_model.rb @@ -1,6 +1,6 @@ module Fog - module ContainerInfra - class OpenStack + module OpenStack + class ContainerInfra class Real def delete_bay_model(uuid_or_name) request( diff --git a/lib/fog/container_infra/openstack/requests/delete_cluster.rb b/lib/fog/openstack/container_infra/requests/delete_cluster.rb similarity index 91% rename from lib/fog/container_infra/openstack/requests/delete_cluster.rb rename to lib/fog/openstack/container_infra/requests/delete_cluster.rb index 43230dc94..e9c4043ad 100644 --- a/lib/fog/container_infra/openstack/requests/delete_cluster.rb +++ b/lib/fog/openstack/container_infra/requests/delete_cluster.rb @@ -1,6 +1,6 @@ module Fog - module ContainerInfra - class OpenStack + module OpenStack + class ContainerInfra class Real def delete_cluster(uuid_or_name) request( diff --git a/lib/fog/container_infra/openstack/requests/delete_cluster_template.rb b/lib/fog/openstack/container_infra/requests/delete_cluster_template.rb similarity index 91% rename from lib/fog/container_infra/openstack/requests/delete_cluster_template.rb rename to lib/fog/openstack/container_infra/requests/delete_cluster_template.rb index 40bd3ba2e..e3d0200e6 100644 --- a/lib/fog/container_infra/openstack/requests/delete_cluster_template.rb +++ b/lib/fog/openstack/container_infra/requests/delete_cluster_template.rb @@ -1,6 +1,6 @@ module Fog - module ContainerInfra - class OpenStack + module OpenStack + class ContainerInfra class Real def delete_cluster_template(uuid_or_name) request( diff --git a/lib/fog/openstack/container_infra/requests/get_bay.rb b/lib/fog/openstack/container_infra/requests/get_bay.rb new file mode 100644 index 000000000..f1e91ec45 --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/get_bay.rb @@ -0,0 +1,51 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def get_bay(uuid_or_name) + request( + expects: [200], + method: 'GET', + path: "bays/#{uuid_or_name}" + ) + end + end + + class Mock + def get_bay(_uuid_or_name) + response = Excon::Response.new + response.status = 200 + response.body = { + "status" => "CREATE_COMPLETE", + "uuid" => "746e779a-751a-456b-a3e9-c883d734946f", + "stack_id" => "9c6f1169-7300-4d08-a444-d2be38758719", + "created_at" => "2016-08-29T06:51:31+00:00", + "api_address" => "https://172.24.4.6:6443", + "discovery_url" => "https://discovery.etcd.io/cbeb580da58915809d59ee69348a84f3", + "updated_at" => "2016-08-29T06:53:24+00:00", + "master_count" => 1, + "coe_version" => "v1.2.0", + "baymodel_id" => "0562d357-8641-4759-8fed-8173f02c9633", + "master_addresses" => ["172.24.4.6"], + "node_count" => 1, + "node_addresses" => ["172.24.4.13"], + "status_reason" => "Stack CREATE completed successfully", + "bay_create_timeout" => 60, + "name" => "k8s", + "links" => [ + { + "href" => "http://10.164.180.104:9511/v1/bays/746e779a-751a-456b-a3e9-c883d734946f", + "rel" => "self" + }, + { + "href" => "http://10.164.180.104:9511/bays/746e779a-751a-456b-a3e9-c883d734946f", + "rel" => "bookmark" + } + ] + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/requests/get_bay_model.rb b/lib/fog/openstack/container_infra/requests/get_bay_model.rb new file mode 100644 index 000000000..b2c7b94c8 --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/get_bay_model.rb @@ -0,0 +1,55 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def get_bay_model(uuid_or_name) + request( + expects: [200], + method: 'GET', + path: "baymodels/#{uuid_or_name}" + ) + end + end + + class Mock + def get_bay_model(_uuid_or_name) + response = Excon::Response.new + response.status = 200 + response.body = { + "insecure_registry" => nil, + "http_proxy" => "http://10.164.177.169:8080", + "updated_at" => nil, + "floating_ip_enabled" => true, + "fixed_subnet" => nil, + "master_flavor_id" => nil, + "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", + "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", + "https_proxy" => "http://10.164.177.169:8080", + "tls_disabled" => false, + "keypair_id" => "kp", + "public" => false, + "labels" => {}, + "docker_volume_size" => 3, + "server_type" => "vm", + "external_network_id" => "public", + "cluster_distro" => "fedora-atomic", + "image_id" => "fedora-atomic-latest", + "volume_driver" => "cinder", + "registry_enabled" => false, + "docker_storage_driver" => "devicemapper", + "apiserver_port" => nil, + "name" => "k8s-bm2", + "created_at" => "2016-08-29T02:08:08+00:00", + "network_driver" => "flannel", + "fixed_network" => nil, + "coe" => "kubernetes", + "flavor_id" => "m1.small", + "master_lb_enabled" => true, + "dns_nameserver" => "8.8.8.8" + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/requests/get_certificate.rb b/lib/fog/openstack/container_infra/requests/get_certificate.rb new file mode 100644 index 000000000..024139a16 --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/get_certificate.rb @@ -0,0 +1,27 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def get_certificate(_bay_uuid) + request( + expects: [200], + method: 'GET', + path: "certificates/#{cluster_uuid}" + ) + end + end + + class Mock + def get_certificate(_bay_uuid) + response = Excon::Response.new + response.status = 200 + response.body = { + "pem" => "-----BEGIN CERTIFICATE-----\nMIICzDCCAbSgAwIBAgIQOOkVcEN7TNa9E80GoUs4xDANBgkqhkiG9w0BAQsFADAO\n-----END CERTIFICATE-----\n", + "bay_uuid" => "0b4b766f-1500-44b3-9804-5a6e12fe6df4" + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/requests/get_cluster.rb b/lib/fog/openstack/container_infra/requests/get_cluster.rb new file mode 100644 index 000000000..d3c924fc0 --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/get_cluster.rb @@ -0,0 +1,41 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def get_cluster(uuid_or_name) + request( + expects: [200], + method: 'GET', + path: "clusters/#{uuid_or_name}" + ) + end + end + + class Mock + def get_cluster(_uuid_or_name) + response = Excon::Response.new + response.status = 200 + response.body = { + "status" => "CREATE_COMPLETE", + "uuid" => "746e779a-751a-456b-a3e9-c883d734946f", + "stack_id" => "9c6f1169-7300-4d08-a444-d2be38758719", + "created_at" => "2016-08-29T06:51:31+00:00", + "api_address" => "https://172.24.4.6:6443", + "discovery_url" => "https://discovery.etcd.io/cbeb580da58915809d59ee69348a84f3", + "updated_at" => "2016-08-29T06:53:24+00:00", + "master_count" => 1, + "coe_version" => "v1.2.0", + "cluster_template_id" => "0562d357-8641-4759-8fed-8173f02c9633", + "master_addresses" => ["172.24.4.6"], + "node_count" => 1, + "node_addresses" => ["172.24.4.13"], + "status_reason" => "Stack CREATE completed successfully", + "create_timeout" => 60, + "name" => "k8s" + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/requests/get_cluster_template.rb b/lib/fog/openstack/container_infra/requests/get_cluster_template.rb new file mode 100644 index 000000000..00cce9c9c --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/get_cluster_template.rb @@ -0,0 +1,55 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def get_cluster_template(uuid_or_name) + request( + expects: [200], + method: 'GET', + path: "clustertemplates/#{uuid_or_name}" + ) + end + end + + class Mock + def get_cluster_template(_uuid_or_name) + response = Excon::Response.new + response.status = 200 + response.body = { + "insecure_registry" => nil, + "http_proxy" => "http://10.164.177.169:8080", + "updated_at" => nil, + "floating_ip_enabled" => true, + "fixed_subnet" => nil, + "master_flavor_id" => nil, + "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", + "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", + "https_proxy" => "http://10.164.177.169:8080", + "tls_disabled" => false, + "keypair_id" => "kp", + "public" => false, + "labels" => {}, + "docker_volume_size" => 3, + "server_type" => "vm", + "external_network_id" => "public", + "cluster_distro" => "fedora-atomic", + "image_id" => "fedora-atomic-latest", + "volume_driver" => "cinder", + "registry_enabled" => false, + "docker_storage_driver" => "devicemapper", + "apiserver_port" => nil, + "name" => "k8s-bm2", + "created_at" => "2016-08-29T02:08:08+00:00", + "network_driver" => "flannel", + "fixed_network" => nil, + "coe" => "kubernetes", + "flavor_id" => "m1.small", + "master_lb_enabled" => true, + "dns_nameserver" => "8.8.8.8" + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/requests/list_bay_models.rb b/lib/fog/openstack/container_infra/requests/list_bay_models.rb new file mode 100644 index 000000000..4aba2bd20 --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/list_bay_models.rb @@ -0,0 +1,69 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def list_bay_models + request( + expects: [200], + method: 'GET', + path: "baymodels/detail" + ) + end + end + + class Mock + def list_bay_models + response = Excon::Response.new + response.status = 200 + response.body = { + "baymodels" => [ + { + "insecure_registry" => nil, + "http_proxy" => "http://10.164.177.169:8080", + "updated_at" => nil, + "floating_ip_enabled" => true, + "fixed_subnet" => nil, + "master_flavor_id" => nil, + "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", + "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", + "https_proxy" => "http://10.164.177.169:8080", + "tls_disabled" => false, + "keypair_id" => "kp", + "public" => false, + "labels" => {}, + "docker_volume_size" => 3, + "server_type" => "vm", + "external_network_id" => "public", + "cluster_distro" => "fedora-atomic", + "image_id" => "fedora-atomic-latest", + "volume_driver" => "cinder", + "registry_enabled" => false, + "docker_storage_driver" => "devicemapper", + "apiserver_port" => nil, + "name" => "k8s-bm2", + "created_at" => "2016-08-29T02:08:08+00:00", + "network_driver" => "flannel", + "fixed_network" => nil, + "coe" => "kubernetes", + "flavor_id" => "m1.small", + "master_lb_enabled" => true, + "dns_nameserver" => "8.8.8.8", + "links" => [ + { + "href" => "http://10.164.180.104:9511/v1/baymodels/085e1c4d-4f68-4bfd-8462-74b9e14e4f39", + "rel" => "self" + }, + { + "href" => "http://10.164.180.104:9511/baymodels/085e1c4d-4f68-4bfd-8462-74b9e14e4f39", + "rel" => "bookmark" + } + ] + } + ] + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/requests/list_bays.rb b/lib/fog/openstack/container_infra/requests/list_bays.rb new file mode 100644 index 000000000..cd945e329 --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/list_bays.rb @@ -0,0 +1,55 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def list_bays + request( + expects: [200], + method: 'GET', + path: "bays/detail" + ) + end + end + + class Mock + def list_bays + response = Excon::Response.new + response.status = 200 + response.body = { + "bays" => [ + { + "status" => "CREATE_COMPLETE", + "uuid" => "746e779a-751a-456b-a3e9-c883d734946f", + "stack_id" => "9c6f1169-7300-4d08-a444-d2be38758719", + "created_at" => "2016-08-29T06:51:31+00:00", + "api_address" => "https://172.24.4.6:6443", + "discovery_url" => "https://discovery.etcd.io/cbeb580da58915809d59ee69348a84f3", + "updated_at" => "2016-08-29T06:53:24+00:00", + "master_count" => 1, + "coe_version" => "v1.2.0", + "baymodel_id" => "0562d357-8641-4759-8fed-8173f02c9633", + "master_addresses" => ["172.24.4.6"], + "node_count" => 1, + "node_addresses" => ["172.24.4.13"], + "status_reason" => "Stack CREATE completed successfully", + "bay_create_timeout" => 60, + "name" => "k8s", + "links" => [ + { + "href" => "http://10.164.180.104:9511/v1/bays/746e779a-751a-456b-a3e9-c883d734946f", + "rel" => "self" + }, + { + "href" => "http://10.164.180.104:9511/bays/746e779a-751a-456b-a3e9-c883d734946f", + "rel" => "bookmark" + } + ] + } + ] + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/requests/list_cluster_templates.rb b/lib/fog/openstack/container_infra/requests/list_cluster_templates.rb new file mode 100644 index 000000000..ab4f26d26 --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/list_cluster_templates.rb @@ -0,0 +1,59 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def list_cluster_templates + request( + expects: [200], + method: 'GET', + path: "clustertemplates/detail" + ) + end + end + + class Mock + def list_cluster_templates + response = Excon::Response.new + response.status = 200 + response.body = { + "clustertemplates" => [ + { + "insecure_registry" => nil, + "http_proxy" => "http://10.164.177.169:8080", + "updated_at" => nil, + "floating_ip_enabled" => true, + "fixed_subnet" => nil, + "master_flavor_id" => nil, + "uuid" => "0562d357-8641-4759-8fed-8173f02c9633", + "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", + "https_proxy" => "http://10.164.177.169:8080", + "tls_disabled" => false, + "keypair_id" => "kp", + "public" => false, + "labels" => {}, + "docker_volume_size" => 3, + "server_type" => "vm", + "external_network_id" => "public", + "cluster_distro" => "fedora-atomic", + "image_id" => "fedora-atomic-latest", + "volume_driver" => "cinder", + "registry_enabled" => false, + "docker_storage_driver" => "devicemapper", + "apiserver_port" => nil, + "name" => "k8s-bm", + "created_at" => "2016-08-26T09:34:41+00:00", + "network_driver" => "flannel", + "fixed_network" => nil, + "coe" => "kubernetes", + "flavor_id" => "m1.small", + "master_lb_enabled" => false, + "dns_nameserver" => "8.8.8.8" + } + ] + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/container_infra/requests/list_clusters.rb b/lib/fog/openstack/container_infra/requests/list_clusters.rb new file mode 100644 index 000000000..5ca91c762 --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/list_clusters.rb @@ -0,0 +1,37 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def list_clusters + request( + expects: [200], + method: 'GET', + path: "clusters/detail" + ) + end + end + + class Mock + def list_clusters + response = Excon::Response.new + response.status = 200 + response.body = { + "clusters" => [ + { + "status" => "CREATE_IN_PROGRESS", + "cluster_template_id" => "0562d357-8641-4759-8fed-8173f02c9633", + "uuid" => "731387cf-a92b-4c36-981e-3271d63e5597", + "stack_id" => "31c1ee6c-081e-4f39-9f0f-f1d87a7defa1", + "master_count" => 1, + "create_timeout" => 60, + "node_count" => 1, + "name" => "k8s" + } + ] + } + response + end + end + end + end +end diff --git a/lib/fog/container_infra/openstack/requests/update_bay.rb b/lib/fog/openstack/container_infra/requests/update_bay.rb similarity index 92% rename from lib/fog/container_infra/openstack/requests/update_bay.rb rename to lib/fog/openstack/container_infra/requests/update_bay.rb index c5065042c..dd18c6489 100644 --- a/lib/fog/container_infra/openstack/requests/update_bay.rb +++ b/lib/fog/openstack/container_infra/requests/update_bay.rb @@ -1,6 +1,6 @@ module Fog - module ContainerInfra - class OpenStack + module OpenStack + class ContainerInfra class Real def update_bay(uuid_or_name, params) request( diff --git a/lib/fog/openstack/container_infra/requests/update_bay_model.rb b/lib/fog/openstack/container_infra/requests/update_bay_model.rb new file mode 100644 index 000000000..93940e24b --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/update_bay_model.rb @@ -0,0 +1,56 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def update_bay_model(uuid_or_name, params) + request( + expects: [200], + method: 'PATCH', + path: "baymodels/#{uuid_or_name}", + body: Fog::JSON.encode(params) + ) + end + end + + class Mock + def update_bay_model(_uuid_or_name, _params) + response = Excon::Response.new + response.status = 200 + response.body = { + "insecure_registry" => nil, + "http_proxy" => "http://10.164.177.169:8080", + "updated_at" => nil, + "floating_ip_enabled" => true, + "fixed_subnet" => nil, + "master_flavor_id" => nil, + "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", + "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", + "https_proxy" => "http://10.164.177.169:8080", + "tls_disabled" => false, + "keypair_id" => "kp", + "public" => false, + "labels" => {}, + "docker_volume_size" => 3, + "server_type" => "vm", + "external_network_id" => "public", + "cluster_distro" => "fedora-atomic", + "image_id" => "fedora-atomic-latest", + "volume_driver" => "cinder", + "registry_enabled" => false, + "docker_storage_driver" => "devicemapper", + "apiserver_port" => nil, + "name" => "rename-test-bay-model", + "created_at" => "2016-08-29T02:08:08+00:00", + "network_driver" => "flannel", + "fixed_network" => nil, + "coe" => "kubernetes", + "flavor_id" => "m1.small", + "master_lb_enabled" => true, + "dns_nameserver" => "8.8.8.8" + } + response + end + end + end + end +end diff --git a/lib/fog/container_infra/openstack/requests/update_cluster.rb b/lib/fog/openstack/container_infra/requests/update_cluster.rb similarity index 92% rename from lib/fog/container_infra/openstack/requests/update_cluster.rb rename to lib/fog/openstack/container_infra/requests/update_cluster.rb index 756f1b130..6746337b2 100644 --- a/lib/fog/container_infra/openstack/requests/update_cluster.rb +++ b/lib/fog/openstack/container_infra/requests/update_cluster.rb @@ -1,6 +1,6 @@ module Fog - module ContainerInfra - class OpenStack + module OpenStack + class ContainerInfra class Real def update_cluster(uuid_or_name, params) request( diff --git a/lib/fog/openstack/container_infra/requests/update_cluster_template.rb b/lib/fog/openstack/container_infra/requests/update_cluster_template.rb new file mode 100644 index 000000000..855ae9eca --- /dev/null +++ b/lib/fog/openstack/container_infra/requests/update_cluster_template.rb @@ -0,0 +1,56 @@ +module Fog + module OpenStack + class ContainerInfra + class Real + def update_cluster_template(uuid_or_name, params) + request( + expects: [200], + method: 'PATCH', + path: "clustertemplates/#{uuid_or_name}", + body: Fog::JSON.encode(params) + ) + end + end + + class Mock + def update_cluster_template(_uuid_or_name, _params) + response = Excon::Response.new + response.status = 200 + response.body = { + "insecure_registry" => nil, + "http_proxy" => "http://10.164.177.169:8080", + "updated_at" => nil, + "floating_ip_enabled" => true, + "fixed_subnet" => nil, + "master_flavor_id" => nil, + "uuid" => "085e1c4d-4f68-4bfd-8462-74b9e14e4f39", + "no_proxy" => "10.0.0.0/8,172.0.0.0/8,192.0.0.0/8,localhost", + "https_proxy" => "http://10.164.177.169:8080", + "tls_disabled" => false, + "keypair_id" => "kp", + "public" => false, + "labels" => {}, + "docker_volume_size" => 3, + "server_type" => "vm", + "external_network_id" => "public", + "cluster_distro" => "fedora-atomic", + "image_id" => "fedora-atomic-latest", + "volume_driver" => "cinder", + "registry_enabled" => false, + "docker_storage_driver" => "devicemapper", + "apiserver_port" => nil, + "name" => "rename-test-cluster-template", + "created_at" => "2016-08-29T02:08:08+00:00", + "network_driver" => "flannel", + "fixed_network" => nil, + "coe" => "kubernetes", + "flavor_id" => "m1.small", + "master_lb_enabled" => true, + "dns_nameserver" => "8.8.8.8" + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/core.rb b/lib/fog/openstack/core.rb index 1eb9090a1..7df5a5362 100644 --- a/lib/fog/openstack/core.rb +++ b/lib/fog/openstack/core.rb @@ -15,44 +15,11 @@ module Core attr_reader :openstack_user_domain_id attr_reader :openstack_project_id attr_reader :openstack_project_domain_id - attr_reader :openstack_identity_prefix + attr_reader :openstack_identity_api_version # fallback def self.not_found_class - Fog::Compute::OpenStack::NotFound - end - - def initialize_identity(options) - # Create @openstack_* instance variables from all :openstack_* options - options.select { |x| x.to_s.start_with? 'openstack' }.each do |openstack_param, value| - instance_variable_set "@#{openstack_param}".to_sym, value - end - - @auth_token ||= options[:openstack_auth_token] - @openstack_identity_public_endpoint = options[:openstack_identity_endpoint] - - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - @openstack_must_reauthenticate = false - @openstack_endpoint_type = options[:openstack_endpoint_type] || 'publicURL' - - @openstack_cache_ttl = options[:openstack_cache_ttl] || 0 - - if @auth_token - @openstack_can_reauthenticate = false - else - missing_credentials = [] - - missing_credentials << :openstack_api_key unless @openstack_api_key - unless @openstack_username || @openstack_userid - missing_credentials << 'openstack_username or openstack_userid' - end - raise ArgumentError, "Missing required arguments: #{missing_credentials.join(', ')}" unless missing_credentials.empty? - @openstack_can_reauthenticate = true - end - - @current_user = options[:current_user] - @current_user_id = options[:current_user_id] - @current_tenant = options[:current_tenant] + Fog::OpenStack::Compute::NotFound end def credentials @@ -73,21 +40,29 @@ def reload @connection.reset end + def initialize(options = {}) + setup(options) + authenticate + @connection = Fog::Core::Connection.new(@openstack_management_url, @persistent, @connection_options) + end + private def request(params, parse_json = true) retried = false begin - response = @connection.request(params.merge( - headers: headers(params.delete(:headers)), - path: "#{@path}/#{params[:path]}" - )) - rescue Excon::Errors::Unauthorized => error + authenticate! if @expires && (@expires - Time.now.utc).to_i < 60 + + response = @connection.request( + params.merge( + headers: headers(params.delete(:headers)), + path: "#{@path}/#{params[:path]}" + ) + ) + rescue Excon::Errors::Unauthorized, Excon::Error::Unauthorized => error # token expiration and token renewal possible if error.response.body != 'Bad username or password' && @openstack_can_reauthenticate && !retried - @openstack_must_reauthenticate = true - authenticate - set_api_path + authenticate! retried = true retry # bad credentials or token renewal not possible @@ -111,10 +86,6 @@ def request(params, parse_json = true) response end - def set_api_path - # if the service supports multiple versions, do the selection here - end - def set_microversion @microversion_key ||= 'Openstack-API-Version'.freeze @microversion_service_type ||= @openstack_service_type.first @@ -157,7 +128,7 @@ def headers(additional_headers) { 'Content-Type' => 'application/json', - 'Accept' => 'application/json', + 'Accept' => 'application/json', 'X-Auth-Token' => @auth_token }.merge!(additional_headers) end @@ -172,47 +143,108 @@ def openstack_options options end - def authenticate - if !@openstack_management_url || @openstack_must_reauthenticate + def api_path_prefix + path = '' + if @openstack_management_uri && @openstack_management_uri.path != '/' + path = @openstack_management_uri.path + end + unless default_path_prefix.empty? + path << '/' + default_path_prefix + end + path + end - options = openstack_options + def default_endpoint_type + 'public' + end + + def default_path_prefix + '' + end + + def setup(options) + if options.respond_to?(:config_service?) && options.config_service? + configure(options) + return + end - options[:openstack_auth_token] = @openstack_must_reauthenticate ? nil : @openstack_auth_token + # Create @openstack_* instance variables from all :openstack_* options + options.select { |x| x.to_s.start_with? 'openstack' }.each do |openstack_param, value| + instance_variable_set "@#{openstack_param}".to_sym, value + end - credentials = Fog::OpenStack.authenticate(options, @connection_options) + @auth_token ||= options[:openstack_auth_token] + @openstack_must_reauthenticate = false + @openstack_endpoint_type = options[:openstack_endpoint_type] || 'public' + @openstack_cache_ttl = options[:openstack_cache_ttl] || 0 - @current_user = credentials[:user] - @current_user_id = credentials[:current_user_id] - @current_tenant = credentials[:tenant] + if @auth_token + @openstack_can_reauthenticate = false + else + missing_credentials = [] + missing_credentials << :openstack_api_key unless @openstack_api_key + unless @openstack_username || @openstack_userid + missing_credentials << 'openstack_username or openstack_userid' + end + unless missing_credentials.empty? + raise ArgumentError, "Missing required arguments: #{missing_credentials.join(', ')}" + end + + @openstack_can_reauthenticate = true + end + + @current_user = options[:current_user] + @current_user_id = options[:current_user_id] + @current_tenant = options[:current_tenant] + + @openstack_service_type = options[:openstack_service_type] || default_service_type + @openstack_endpoint_type = options[:openstack_endpoint_type] || default_endpoint_type + @openstack_endpoint_type.gsub!(/URL/, '') + @connection_options = options[:connection_options] || {} + @persistent = options[:persistent] || false + end + + def authenticate + if !@openstack_management_url || @openstack_must_reauthenticate + @openstack_auth_token = nil if @openstack_must_reauthenticate + + token = Fog::OpenStack::Auth::Token.build(openstack_options, @connection_options) + + @openstack_management_url = if token.catalog && !token.catalog.payload.empty? + token.catalog.get_endpoint_url( + @openstack_service_type, + @openstack_endpoint_type, + @openstack_region + ) + else + @openstack_auth_url + end + + @current_user = token.user['name'] + @current_user_id = token.user['id'] + @current_tenant = token.tenant + @expires = Time.parse(token.expires) + @auth_token = token.token + @unscoped_token = token.token @openstack_must_reauthenticate = false - @auth_token = credentials[:token] - @openstack_management_url = credentials[:server_management_url] - @unscoped_token = credentials[:unscoped_token] else @auth_token = @openstack_auth_token end - @openstack_management_uri = URI.parse(@openstack_management_url) - @host = @openstack_management_uri.host - @path = @openstack_management_uri.path - @path.sub!(%r{/$}, '') - @port = @openstack_management_uri.port - @scheme = @openstack_management_uri.scheme - - # Not all implementations have identity service in the catalog - if @openstack_identity_public_endpoint || @openstack_management_url - @identity_connection = Fog::Core::Connection.new( - @openstack_identity_public_endpoint || @openstack_management_url, - false, @connection_options - ) - end + @openstack_management_uri = URI.parse(@openstack_management_url) # both need to be set in service's initialize for microversions to work set_microversion if @supported_microversion && @supported_versions + @path = api_path_prefix true end + + def authenticate! + @openstack_must_reauthenticate = true + authenticate + end end end end diff --git a/lib/fog/openstack/dns.rb b/lib/fog/openstack/dns.rb new file mode 100644 index 000000000..34a072a1a --- /dev/null +++ b/lib/fog/openstack/dns.rb @@ -0,0 +1,21 @@ +module Fog + module OpenStack + class DNS < Fog::Service + autoload :V1, 'fog/openstack/dns/v1' + autoload :V2, 'fog/openstack/dns/v2' + + # Fog::OpenStack::DNS.new() will return a Fog::OpenStack::DNS::V2 or a Fog::OpenStack::DNS::V1, + # choosing the latest available + def self.new(args = {}) + @openstack_auth_uri = URI.parse(args[:openstack_auth_url]) if args[:openstack_auth_url] + if inspect == 'Fog::OpenStack::DNS' + service = Fog::OpenStack::DNS::V2.new(args) unless args.empty? + service ||= Fog::OpenStack::DNS::V1.new(args) + else + service = Fog::Service.new(args) + end + service + end + end + end +end diff --git a/lib/fog/openstack/dns/v1.rb b/lib/fog/openstack/dns/v1.rb new file mode 100644 index 000000000..8c501c57c --- /dev/null +++ b/lib/fog/openstack/dns/v1.rb @@ -0,0 +1,116 @@ +require 'fog/openstack/dns' + +module Fog + module OpenStack + class DNS + class V1 < Fog::Service + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, :openstack_userid, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_auth_omit_default_port, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version, :openstack_temp_url_key, :openstack_cache_ttl + + request_path 'fog/openstack/dns/v1/requests' + + request :list_domains + + request :get_quota + request :update_quota + + class Mock + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + domains: [{ + "id" => "a86dba58-0043-4cc6-a1bb-69d5e86f3ca3", + "name" => "example.org.", + "email" => "joe@example.org", + "ttl" => 7200, + "serial" => 1_404_757_531, + "description" => "This is an example zone.", + "created_at" => "2014-07-07T18:25:31.275934", + "updated_at" => '' + }], + quota: { + "api_export_size" => 1000, + "recordset_records" => 20, + "domain_records" => 500, + "domain_recordsets" => 500, + "domains" => 100 + } + } + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 9001 + management_url.path = '/v1' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].detect { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_region: @openstack_region, + openstack_management_url: @openstack_management_url } + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::DNS::NotFound + end + + def default_path_prefix + 'v1' + end + + def default_service_type + %w[dns] + end + end + end + end + end +end diff --git a/lib/fog/openstack/dns/v1/requests/get_quota.rb b/lib/fog/openstack/dns/v1/requests/get_quota.rb new file mode 100644 index 000000000..c4b59941f --- /dev/null +++ b/lib/fog/openstack/dns/v1/requests/get_quota.rb @@ -0,0 +1,26 @@ +module Fog + module OpenStack + class DNS + class V1 + class Real + def get_quota(project_id) + request( + expects: 200, + method: 'GET', + path: "quotas/#{project_id}" + ) + end + end + + class Mock + def get_quota(_project_id) + response = Excon::Response.new + response.status = 200 + response.body = data[:quota_updated] || data[:quota] + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/dns/v1/requests/list_domains.rb b/lib/fog/openstack/dns/v1/requests/list_domains.rb new file mode 100644 index 000000000..559d235b5 --- /dev/null +++ b/lib/fog/openstack/dns/v1/requests/list_domains.rb @@ -0,0 +1,27 @@ +module Fog + module OpenStack + class DNS + class V1 + class Real + def list_domains(options = {}) + request( + expects: 200, + method: 'GET', + path: 'domains', + query: options + ) + end + end + + class Mock + def list_domains(_options = {}) + response = Excon::Response.new + response.status = 200 + response.body = { 'domains' => data[:domains] } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/dns/v1/requests/update_quota.rb b/lib/fog/openstack/dns/v1/requests/update_quota.rb new file mode 100644 index 000000000..77bef5af3 --- /dev/null +++ b/lib/fog/openstack/dns/v1/requests/update_quota.rb @@ -0,0 +1,31 @@ +module Fog + module OpenStack + class DNS + class V1 + class Real + def update_quota(project_id, options = {}) + request( + body: Fog::JSON.encode(options), + expects: 200, + method: 'PUT', + path: "quotas/#{project_id}" + ) + end + end + + class Mock + def update_quota(_project_id, options = {}) + # stringify keys + options = Hash[options.map { |k, v| [k.to_s, v] }] + data[:quota_updated] = data[:quota].merge(options) + + response = Excon::Response.new + response.status = 200 + response.body = data[:quota_updated] + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/dns/v2.rb b/lib/fog/openstack/dns/v2.rb new file mode 100644 index 000000000..0bd00b5cc --- /dev/null +++ b/lib/fog/openstack/dns/v2.rb @@ -0,0 +1,324 @@ +require 'fog/openstack/dns' + +module Fog + module OpenStack + class DNS + class V2 < Fog::Service + SUPPORTED_VERSIONS = /v2/.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, :openstack_userid, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_auth_omit_default_port, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version, :openstack_temp_url_key, :openstack_cache_ttl + + model_path 'fog/openstack/dns/v2/models' + model :zone + collection :zones + model :recordset + collection :recordsets + model :pool + collection :pools + model :zone_transfer_request + collection :zone_transfer_requests + model :zone_transfer_accept + collection :zone_transfer_accepts + + request_path 'fog/openstack/dns/v2/requests' + + request :list_zones + request :get_zone + request :create_zone + request :update_zone + request :delete_zone + + request :list_recordsets + request :get_recordset + request :create_recordset + request :update_recordset + request :delete_recordset + + request :list_pools + request :get_pool + + request :get_quota + request :update_quota + + request :create_zone_transfer_request + request :get_zone_transfer_request + request :list_zone_transfer_requests + request :update_zone_transfer_request + request :delete_zone_transfer_request + + request :create_zone_transfer_accept + request :get_zone_transfer_accept + request :list_zone_transfer_accepts + + def self.setup_headers(options) + # user needs to have admin privileges to ask for all projects + all_projects = options.delete(:all_projects) || false + + # user needs to have admin privileges to impersonate another project + # don't ask for all and one project at the same time + project_id = options.delete(:project_id) unless all_projects + + headers = { 'X-Auth-All-Projects' => all_projects } + headers['X-Auth-Sudo-Project-Id'] = project_id unless project_id.nil? + + [headers, options] + end + + class Mock + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + zones: [{ + "id" => "a86dba58-0043-4cc6-a1bb-69d5e86f3ca3", + "pool_id" => "572ba08c-d929-4c70-8e42-03824bb24ca2", + "project_id" => "4335d1f0-f793-11e2-b778-0800200c9a66", + "name" => "example.org.", + "email" => "joe@example.org", + "ttl" => 7200, + "serial" => 1_404_757_531, + "status" => "ACTIVE", + "action" => "NONE", + "description" => "This is an example zone.", + "masters" => [], + "type" => "PRIMARY", + "transferred_at" => '', + "version" => 1, + "created_at" => "2014-07-07T18:25:31.275934", + "updated_at" => '', + "links" => { + "self" => "https://127.0.0.1:9001/v2/zones/a86dba58-0043-4cc6-a1bb-69d5e86f3ca3" + } + }], + pools: { + "metadata" => { + "total_count" => 2 + }, + "links" => { + "self" => "http://127.0.0.1:9001/v2/pools" + }, + "pools" => [ + { + "description" => '', + "id" => "794ccc2c-d751-44fe-b57f-8894c9f5c842", + "project_id" => '', + "created_at" => "2015-02-18T22:18:58.000000", + "attributes" => '', + "ns_records" => [ + { + "hostname" => "ns1.example.org.", + "priority" => 1 + } + ], + "links" => { + "self" => "http://127.0.0.1:9001/v2/pools/794ccc2c-d751-44fe-b57f-8894c9f5c842" + }, + "name" => "default", + "updated_at" => "2015-02-19T15:59:44.000000" + }, + { + "description" => '', + "id" => "d1716333-8c16-490f-85ee-29af36907605", + "project_id" => "noauth-project", + "created_at" => "2015-02-23T21:56:33.000000", + "attributes" => '', + "ns_records" => [ + { + "hostname" => "ns2.example.org.", + "priority" => 1 + } + ], + "links" => { + "self" => "http://127.0.0.1:9001/v2/pools/d1716333-8c16-490f-85ee-29af36907605" + }, + "name" => "example_pool", + "updated_at" => '' + } + ] + }, + quota: { + "api_export_size" => 1000, + "recordset_records" => 20, + "zone_records" => 500, + "zone_recordsets" => 500, + "zones" => 100 + }, + recordsets: { + "recordsets" => [{ + "description" => "This is an example record set.", + "links" => { + "self" => "https://127.0.0.1:9001/v2/zones/2150b1bf-dee2-4221-9d85-11f7886fb15f/recordsets/f7b10e9b-0cae-4a91-b162-562bc6096648" + }, + "updated_at" => '', + "records" => [ + "10.1.0.2" + ], + "ttl" => 3600, + "id" => "f7b10e9b-0cae-4a91-b162-562bc6096648", + "name" => "example.org.", + "project_id" => "4335d1f0-f793-11e2-b778-0800200c9a66", + "zone_id" => "2150b1bf-dee2-4221-9d85-11f7886fb15f", + "zone_name" => "example.com.", + "created_at" => "2014-10-24T19:59:44.000000", + "version" => 1, + "type" => "A", + "status" => "ACTIVE", + "action" => "NONE" + }], + "links" => { + "self" => "http://127.0.0.1:9001/v2/recordsets?limit=1", + "next" => "http://127.0.0.1:9001/v2/recordsets?limit=1&marker=45fd892d-7a67-4f65-9df0-87273f228d6c" + }, + "metadata" => { + "total_count" => 2 + } + }, + zone_transfer_requests: { + "transfer_requests" => [ + { + "created_at" => "2014-07-17T20:34:40.882579", + "description" => "This was created by the requesting project", + "id" => "f2ad17b5-807a-423f-a991-e06236c247be", + "key" => "9Z2R50Y0", + "project_id" => "1", + "status" => "ACTIVE", + "target_project_id" => "123456", + "updated_at" => nil, + "zone_id" => "6b78734a-aef1-45cd-9708-8eb3c2d26ff8", + "zone_name" => "qa.dev.example.com.", + "links" => { + "self" => "http://127.0.0.1:9001/v2/zones/tasks/transfer_requests/f2ad17b5-807a-423f-a991-e06236c247be" + } + }, + { + "description" => "This is scoped to the requesting project", + "id" => "efd2d720-b0c4-43d4-99f7-d9b53e08860d", + "zone_id" => "2c4d5e37-f823-4bee-9859-031cb44f80e7", + "zone_name" => "subdomain.example.com.", + "status" => "ACTIVE", + "links" => { + "self" => "http://127.0.0.1:9001/v2/zones/tasks/transfer_requests/efd2d720-b0c4-43d4-99f7-d9b53e08860d" + } + } + ], + "links" => { + "self" => "http://127.0.0.1:9001/v2/zones/tasks/transfer_requests" + } + }, + zone_transfer_accepts: { + "metadata" => { + "total_count" => 2 + }, + "links" => { + "self" => "http://127.0.0.1:9001/v2/zones/tasks/transfer_accepts" + }, + "transfer_accepts" => [ + { + "status" => "COMPLETE", + "zone_id" => "8db93d1a-59e3-4143-a393-5821abea0a46", + "links" => { + "self" => "http://127.0.0.1:9001/v2/zones/tasks/transfer_accepts/afb4222b-18b3-44b3-9f54-e0dfdba1be44", + "zone" => "http://127.0.0.1:9001/v2/zones/8db93d1a-59e3-4143-a393-5821abea0a46" + }, + "created_at" => "2016-06-01 05:35:35", + "updated_at" => "2016-06-01 05:35:35", + "key" => nil, + "project_id" => "85604ecfb5334b50bd40ca53fc1d710f", + "id" => "afb4222b-18b3-44b3-9f54-e0dfdba1be44", + "zone_transfer_request_id" => "d223f7ef-77a6-459e-abd3-b4dbc97338e7" + }, + { + "status" => "COMPLETE", + "zone_id" => "925bfc45-8901-4aca-aa12-18afaf0879e2", + "links" => { + "self" => "http://127.0.0.1:9001/v2/zones/tasks/transfer_accepts/ecbc7091-c498-4ec4-9893-68b06297fe50", + "zone" => "http://127.0.0.1:9001/v2/zones/925bfc45-8901-4aca-aa12-18afaf0879e2" + }, + "created_at" => "2016-06-01 10:06:36", + "updated_at" => "2016-06-01 10:06:37", + "key" => nil, + "project_id" => "85604ecfb5334b50bd40ca53fc1d710f", + "id" => "ecbc7091-c498-4ec4-9893-68b06297fe50", + "zone_transfer_request_id" => "94cf9bd3-4137-430b-bf75-4e690430258c" + } + ] + } + } + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 9001 + management_url.path = '/v2' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].detect { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_region: @openstack_region, + openstack_management_url: @openstack_management_url } + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::DNS::NotFound + end + + def default_path_prefix + 'v2' + end + + def default_service_type + %w[dns] + end + end + end + end + end +end diff --git a/lib/fog/dns/openstack/v2/models/pool.rb b/lib/fog/openstack/dns/v2/models/pool.rb similarity index 92% rename from lib/fog/dns/openstack/v2/models/pool.rb rename to lib/fog/openstack/dns/v2/models/pool.rb index c9cd85ae7..d390a4576 100644 --- a/lib/fog/dns/openstack/v2/models/pool.rb +++ b/lib/fog/openstack/dns/v2/models/pool.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Pool < Fog::OpenStack::Model identity :id diff --git a/lib/fog/dns/openstack/v2/models/pools.rb b/lib/fog/openstack/dns/v2/models/pools.rb similarity index 79% rename from lib/fog/dns/openstack/v2/models/pools.rb rename to lib/fog/openstack/dns/v2/models/pools.rb index 3b768e7b4..9d693468f 100644 --- a/lib/fog/dns/openstack/v2/models/pools.rb +++ b/lib/fog/openstack/dns/v2/models/pools.rb @@ -1,12 +1,12 @@ require 'fog/openstack/models/collection' -require 'fog/dns/openstack/v2/models/pool' +require 'fog/openstack/dns/v2/models/pool' module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Pools < Fog::OpenStack::Collection - model Fog::DNS::OpenStack::V2::Pool + model Fog::OpenStack::DNS::V2::Pool def all(options = {}) load_response(service.list_pools(options), 'pools') diff --git a/lib/fog/dns/openstack/v2/models/recordset.rb b/lib/fog/openstack/dns/v2/models/recordset.rb similarity index 97% rename from lib/fog/dns/openstack/v2/models/recordset.rb rename to lib/fog/openstack/dns/v2/models/recordset.rb index ad3f685ab..bbe3c2a40 100644 --- a/lib/fog/dns/openstack/v2/models/recordset.rb +++ b/lib/fog/openstack/dns/v2/models/recordset.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Recordset < Fog::OpenStack::Model identity :id @@ -25,6 +25,7 @@ class Recordset < Fog::OpenStack::Model def save raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? + requires :zone_id, :name, :type, :records merge_attributes(service.create_recordset(zone_id, name, type, records, attributes).body) true diff --git a/lib/fog/dns/openstack/v2/models/recordsets.rb b/lib/fog/openstack/dns/v2/models/recordsets.rb similarity index 83% rename from lib/fog/dns/openstack/v2/models/recordsets.rb rename to lib/fog/openstack/dns/v2/models/recordsets.rb index d188e3957..027932db5 100644 --- a/lib/fog/dns/openstack/v2/models/recordsets.rb +++ b/lib/fog/openstack/dns/v2/models/recordsets.rb @@ -1,12 +1,12 @@ require 'fog/openstack/models/collection' -require 'fog/dns/openstack/v2/models/recordset' +require 'fog/openstack/dns/v2/models/recordset' module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Recordsets < Fog::OpenStack::Collection - model Fog::DNS::OpenStack::V2::Recordset + model Fog::OpenStack::DNS::V2::Recordset def all(options = {}) load_response(service.list_recordsets(options), 'recordsets') diff --git a/lib/fog/dns/openstack/v2/models/zone.rb b/lib/fog/openstack/dns/v2/models/zone.rb similarity index 97% rename from lib/fog/dns/openstack/v2/models/zone.rb rename to lib/fog/openstack/dns/v2/models/zone.rb index 9e5fae992..4762c9c29 100644 --- a/lib/fog/dns/openstack/v2/models/zone.rb +++ b/lib/fog/openstack/dns/v2/models/zone.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Zone < Fog::OpenStack::Model identity :id @@ -27,6 +27,7 @@ class Zone < Fog::OpenStack::Model def save raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? + requires :name, :email merge_attributes(service.create_zone(name, email, attributes).body) true diff --git a/lib/fog/dns/openstack/v2/models/zone_transfer_accept.rb b/lib/fog/openstack/dns/v2/models/zone_transfer_accept.rb similarity index 95% rename from lib/fog/dns/openstack/v2/models/zone_transfer_accept.rb rename to lib/fog/openstack/dns/v2/models/zone_transfer_accept.rb index 3d27da7a7..42931fc7f 100644 --- a/lib/fog/dns/openstack/v2/models/zone_transfer_accept.rb +++ b/lib/fog/openstack/dns/v2/models/zone_transfer_accept.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class ZoneTransferAccept < Fog::OpenStack::Model identity :id diff --git a/lib/fog/dns/openstack/v2/models/zone_transfer_accepts.rb b/lib/fog/openstack/dns/v2/models/zone_transfer_accepts.rb similarity index 77% rename from lib/fog/dns/openstack/v2/models/zone_transfer_accepts.rb rename to lib/fog/openstack/dns/v2/models/zone_transfer_accepts.rb index cda4aa21b..ae7fba57d 100644 --- a/lib/fog/dns/openstack/v2/models/zone_transfer_accepts.rb +++ b/lib/fog/openstack/dns/v2/models/zone_transfer_accepts.rb @@ -1,12 +1,12 @@ require 'fog/openstack/models/collection' -require 'fog/dns/openstack/v2/models/zone_transfer_accept' +require 'fog/openstack/dns/v2/models/zone_transfer_accept' module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class ZoneTransferAccepts < Fog::OpenStack::Collection - model Fog::DNS::OpenStack::V2::ZoneTransferAccept + model Fog::OpenStack::DNS::V2::ZoneTransferAccept def all(options = {}) load_response(service.list_zone_transfer_accepts(options), 'transfer_accepts') diff --git a/lib/fog/dns/openstack/v2/models/zone_transfer_request.rb b/lib/fog/openstack/dns/v2/models/zone_transfer_request.rb similarity index 97% rename from lib/fog/dns/openstack/v2/models/zone_transfer_request.rb rename to lib/fog/openstack/dns/v2/models/zone_transfer_request.rb index 0a1c24f61..0aceaf52d 100644 --- a/lib/fog/dns/openstack/v2/models/zone_transfer_request.rb +++ b/lib/fog/openstack/dns/v2/models/zone_transfer_request.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class ZoneTransferRequest < Fog::OpenStack::Model identity :id diff --git a/lib/fog/dns/openstack/v2/models/zone_transfer_requests.rb b/lib/fog/openstack/dns/v2/models/zone_transfer_requests.rb similarity index 80% rename from lib/fog/dns/openstack/v2/models/zone_transfer_requests.rb rename to lib/fog/openstack/dns/v2/models/zone_transfer_requests.rb index d7bd7f4f2..05086c47a 100644 --- a/lib/fog/dns/openstack/v2/models/zone_transfer_requests.rb +++ b/lib/fog/openstack/dns/v2/models/zone_transfer_requests.rb @@ -1,12 +1,12 @@ require 'fog/openstack/models/collection' -require 'fog/dns/openstack/v2/models/zone_transfer_request' +require 'fog/openstack/dns/v2/models/zone_transfer_request' module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class ZoneTransferRequests < Fog::OpenStack::Collection - model Fog::DNS::OpenStack::V2::ZoneTransferRequest + model Fog::OpenStack::DNS::V2::ZoneTransferRequest def all(options = {}) load_response(service.list_zone_transfer_requests(options), 'transfer_requests') diff --git a/lib/fog/dns/openstack/v2/models/zones.rb b/lib/fog/openstack/dns/v2/models/zones.rb similarity index 82% rename from lib/fog/dns/openstack/v2/models/zones.rb rename to lib/fog/openstack/dns/v2/models/zones.rb index 3af3e030a..b903f10f1 100644 --- a/lib/fog/dns/openstack/v2/models/zones.rb +++ b/lib/fog/openstack/dns/v2/models/zones.rb @@ -1,12 +1,12 @@ require 'fog/openstack/models/collection' -require 'fog/dns/openstack/v2/models/zone' +require 'fog/openstack/dns/v2/models/zone' module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Zones < Fog::OpenStack::Collection - model Fog::DNS::OpenStack::V2::Zone + model Fog::OpenStack::DNS::V2::Zone def all(options = {}) load_response(service.list_zones(options), 'zones') diff --git a/lib/fog/dns/openstack/v2/requests/create_recordset.rb b/lib/fog/openstack/dns/v2/requests/create_recordset.rb similarity index 93% rename from lib/fog/dns/openstack/v2/requests/create_recordset.rb rename to lib/fog/openstack/dns/v2/requests/create_recordset.rb index 4c567d9d5..8af52b5a6 100644 --- a/lib/fog/dns/openstack/v2/requests/create_recordset.rb +++ b/lib/fog/openstack/dns/v2/requests/create_recordset.rb @@ -1,12 +1,12 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def create_recordset(zone_id, name, type, records, options = {}) data = { - 'name' => name, - 'type' => type, + 'name' => name, + 'type' => type, 'records' => records } diff --git a/lib/fog/dns/openstack/v2/requests/create_zone.rb b/lib/fog/openstack/dns/v2/requests/create_zone.rb similarity index 94% rename from lib/fog/dns/openstack/v2/requests/create_zone.rb rename to lib/fog/openstack/dns/v2/requests/create_zone.rb index 1e6462516..5d1a11912 100644 --- a/lib/fog/dns/openstack/v2/requests/create_zone.rb +++ b/lib/fog/openstack/dns/v2/requests/create_zone.rb @@ -1,11 +1,11 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def create_zone(name, email, options = {}) data = { - 'name' => name, + 'name' => name, 'email' => email } diff --git a/lib/fog/dns/openstack/v2/requests/create_zone_transfer_accept.rb b/lib/fog/openstack/dns/v2/requests/create_zone_transfer_accept.rb similarity index 89% rename from lib/fog/dns/openstack/v2/requests/create_zone_transfer_accept.rb rename to lib/fog/openstack/dns/v2/requests/create_zone_transfer_accept.rb index 323645e74..8662b27e3 100644 --- a/lib/fog/dns/openstack/v2/requests/create_zone_transfer_accept.rb +++ b/lib/fog/openstack/dns/v2/requests/create_zone_transfer_accept.rb @@ -1,6 +1,6 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def create_zone_transfer_accept(key, zone_transfer_request_id, options = {}) @@ -9,7 +9,7 @@ def create_zone_transfer_accept(key, zone_transfer_request_id, options = {}) zone_transfer_request_id: zone_transfer_request_id } - headers, _options = Fog::DNS::OpenStack::V2.setup_headers(options) + headers, _options = Fog::OpenStack::DNS::V2.setup_headers(options) request( headers: headers, diff --git a/lib/fog/dns/openstack/v2/requests/create_zone_transfer_request.rb b/lib/fog/openstack/dns/v2/requests/create_zone_transfer_request.rb similarity index 87% rename from lib/fog/dns/openstack/v2/requests/create_zone_transfer_request.rb rename to lib/fog/openstack/dns/v2/requests/create_zone_transfer_request.rb index 0d476367e..20fc4b873 100644 --- a/lib/fog/dns/openstack/v2/requests/create_zone_transfer_request.rb +++ b/lib/fog/openstack/dns/v2/requests/create_zone_transfer_request.rb @@ -1,14 +1,12 @@ - module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def create_zone_transfer_request(zone_id, options = {}) vanilla_options = [:target_project_id, :description, :project_id] - data = vanilla_options.inject({}) do |result, option| + data = vanilla_options.each_with_object({}) do |option, result| result[option] = options[option] if options[option] - result end request( diff --git a/lib/fog/dns/openstack/v2/requests/delete_recordset.rb b/lib/fog/openstack/dns/v2/requests/delete_recordset.rb similarity index 91% rename from lib/fog/dns/openstack/v2/requests/delete_recordset.rb rename to lib/fog/openstack/dns/v2/requests/delete_recordset.rb index 07ca2b54e..d1a52d58b 100644 --- a/lib/fog/dns/openstack/v2/requests/delete_recordset.rb +++ b/lib/fog/openstack/dns/v2/requests/delete_recordset.rb @@ -1,10 +1,10 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def delete_recordset(zone_id, id, options = {}) - headers, _options = Fog::DNS::OpenStack::V2.setup_headers(options) + headers, _options = Fog::OpenStack::DNS::V2.setup_headers(options) request( expects: 202, method: 'DELETE', diff --git a/lib/fog/dns/openstack/v2/requests/delete_zone.rb b/lib/fog/openstack/dns/v2/requests/delete_zone.rb similarity index 89% rename from lib/fog/dns/openstack/v2/requests/delete_zone.rb rename to lib/fog/openstack/dns/v2/requests/delete_zone.rb index 98ab4c32b..0355b7a53 100644 --- a/lib/fog/dns/openstack/v2/requests/delete_zone.rb +++ b/lib/fog/openstack/dns/v2/requests/delete_zone.rb @@ -1,10 +1,10 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def delete_zone(id, options = {}) - headers, _options = Fog::DNS::OpenStack::V2.setup_headers(options) + headers, _options = Fog::OpenStack::DNS::V2.setup_headers(options) request( expects: 202, method: 'DELETE', diff --git a/lib/fog/dns/openstack/v2/requests/delete_zone_transfer_request.rb b/lib/fog/openstack/dns/v2/requests/delete_zone_transfer_request.rb similarity index 94% rename from lib/fog/dns/openstack/v2/requests/delete_zone_transfer_request.rb rename to lib/fog/openstack/dns/v2/requests/delete_zone_transfer_request.rb index db3bcd2c6..9aa729d7c 100644 --- a/lib/fog/dns/openstack/v2/requests/delete_zone_transfer_request.rb +++ b/lib/fog/openstack/dns/v2/requests/delete_zone_transfer_request.rb @@ -1,7 +1,6 @@ - module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def delete_zone_transfer_request(zone_transfer_request_id) diff --git a/lib/fog/dns/openstack/v2/requests/get_pool.rb b/lib/fog/openstack/dns/v2/requests/get_pool.rb similarity index 86% rename from lib/fog/dns/openstack/v2/requests/get_pool.rb rename to lib/fog/openstack/dns/v2/requests/get_pool.rb index 9aa55bce9..2c271b2bc 100644 --- a/lib/fog/dns/openstack/v2/requests/get_pool.rb +++ b/lib/fog/openstack/dns/v2/requests/get_pool.rb @@ -1,10 +1,10 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def get_pool(id, options = {}) - headers, _options = Fog::DNS::OpenStack::V2.setup_headers(options) + headers, _options = Fog::OpenStack::DNS::V2.setup_headers(options) request( expects: 200, method: 'GET', diff --git a/lib/fog/openstack/dns/v2/requests/get_quota.rb b/lib/fog/openstack/dns/v2/requests/get_quota.rb new file mode 100644 index 000000000..dc08f4635 --- /dev/null +++ b/lib/fog/openstack/dns/v2/requests/get_quota.rb @@ -0,0 +1,29 @@ +module Fog + module OpenStack + class DNS + class V2 + class Real + def get_quota(project_id = nil) + headers, _options = Fog::OpenStack::DNS::V2.setup_headers(all_projects: !project_id.nil?) + + request( + expects: 200, + method: 'GET', + path: "quotas/#{project_id}", + headers: headers + ) + end + end + + class Mock + def get_quota(_project_id = nil) + response = Excon::Response.new + response.status = 200 + response.body = data[:quota_updated] || data[:quota] + response + end + end + end + end + end +end diff --git a/lib/fog/dns/openstack/v2/requests/get_recordset.rb b/lib/fog/openstack/dns/v2/requests/get_recordset.rb similarity index 90% rename from lib/fog/dns/openstack/v2/requests/get_recordset.rb rename to lib/fog/openstack/dns/v2/requests/get_recordset.rb index 7b605cdc7..a2396e3ae 100644 --- a/lib/fog/dns/openstack/v2/requests/get_recordset.rb +++ b/lib/fog/openstack/dns/v2/requests/get_recordset.rb @@ -1,10 +1,10 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def get_recordset(zone_id, id, options = {}) - headers, _options = Fog::DNS::OpenStack::V2.setup_headers(options) + headers, _options = Fog::OpenStack::DNS::V2.setup_headers(options) request( expects: 200, method: 'GET', diff --git a/lib/fog/dns/openstack/v2/requests/get_zone.rb b/lib/fog/openstack/dns/v2/requests/get_zone.rb similarity index 86% rename from lib/fog/dns/openstack/v2/requests/get_zone.rb rename to lib/fog/openstack/dns/v2/requests/get_zone.rb index 4e7cf5b27..fcbb47734 100644 --- a/lib/fog/dns/openstack/v2/requests/get_zone.rb +++ b/lib/fog/openstack/dns/v2/requests/get_zone.rb @@ -1,10 +1,10 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def get_zone(id, options = {}) - headers, _options = Fog::DNS::OpenStack::V2.setup_headers(options) + headers, _options = Fog::OpenStack::DNS::V2.setup_headers(options) request( expects: 200, method: 'GET', diff --git a/lib/fog/dns/openstack/v2/requests/get_zone_transfer_accept.rb b/lib/fog/openstack/dns/v2/requests/get_zone_transfer_accept.rb similarity index 95% rename from lib/fog/dns/openstack/v2/requests/get_zone_transfer_accept.rb rename to lib/fog/openstack/dns/v2/requests/get_zone_transfer_accept.rb index 828fdbf56..30b8ec44d 100644 --- a/lib/fog/dns/openstack/v2/requests/get_zone_transfer_accept.rb +++ b/lib/fog/openstack/dns/v2/requests/get_zone_transfer_accept.rb @@ -1,6 +1,6 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def get_zone_transfer_accept(zone_transfer_accept_id) diff --git a/lib/fog/dns/openstack/v2/requests/get_zone_transfer_request.rb b/lib/fog/openstack/dns/v2/requests/get_zone_transfer_request.rb similarity index 95% rename from lib/fog/dns/openstack/v2/requests/get_zone_transfer_request.rb rename to lib/fog/openstack/dns/v2/requests/get_zone_transfer_request.rb index 5de3d21c2..d7c1cdb42 100644 --- a/lib/fog/dns/openstack/v2/requests/get_zone_transfer_request.rb +++ b/lib/fog/openstack/dns/v2/requests/get_zone_transfer_request.rb @@ -1,7 +1,6 @@ - module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def get_zone_transfer_request(zone_transfer_request_id) diff --git a/lib/fog/dns/openstack/v2/requests/list_pools.rb b/lib/fog/openstack/dns/v2/requests/list_pools.rb similarity index 85% rename from lib/fog/dns/openstack/v2/requests/list_pools.rb rename to lib/fog/openstack/dns/v2/requests/list_pools.rb index 6d3f5b817..a027b82ac 100644 --- a/lib/fog/dns/openstack/v2/requests/list_pools.rb +++ b/lib/fog/openstack/dns/v2/requests/list_pools.rb @@ -1,10 +1,10 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def list_pools(options = {}) - headers, options = Fog::DNS::OpenStack::V2.setup_headers(options) + headers, options = Fog::OpenStack::DNS::V2.setup_headers(options) request( expects: 200, diff --git a/lib/fog/dns/openstack/v2/requests/list_recordsets.rb b/lib/fog/openstack/dns/v2/requests/list_recordsets.rb similarity index 93% rename from lib/fog/dns/openstack/v2/requests/list_recordsets.rb rename to lib/fog/openstack/dns/v2/requests/list_recordsets.rb index a9e8e79e7..4dcd29aea 100644 --- a/lib/fog/dns/openstack/v2/requests/list_recordsets.rb +++ b/lib/fog/openstack/dns/v2/requests/list_recordsets.rb @@ -1,6 +1,6 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def list_recordsets(zone_id = nil, options = {}) @@ -19,7 +19,7 @@ def list_recordsets(zone_id = nil, options = {}) zone_id = options.delete(:zone_id) if zone_id.nil? path = zone_id.nil? ? 'recordsets' : "zones/#{zone_id}/recordsets" - headers, options = Fog::DNS::OpenStack::V2.setup_headers(options) + headers, options = Fog::OpenStack::DNS::V2.setup_headers(options) request( expects: 200, diff --git a/lib/fog/dns/openstack/v2/requests/list_zone_transfer_accepts.rb b/lib/fog/openstack/dns/v2/requests/list_zone_transfer_accepts.rb similarity index 94% rename from lib/fog/dns/openstack/v2/requests/list_zone_transfer_accepts.rb rename to lib/fog/openstack/dns/v2/requests/list_zone_transfer_accepts.rb index d4d7ac5b9..c62ec6f72 100644 --- a/lib/fog/dns/openstack/v2/requests/list_zone_transfer_accepts.rb +++ b/lib/fog/openstack/dns/v2/requests/list_zone_transfer_accepts.rb @@ -1,6 +1,6 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def list_zone_transfer_accepts(options = {}) diff --git a/lib/fog/dns/openstack/v2/requests/list_zone_transfer_requests.rb b/lib/fog/openstack/dns/v2/requests/list_zone_transfer_requests.rb similarity index 94% rename from lib/fog/dns/openstack/v2/requests/list_zone_transfer_requests.rb rename to lib/fog/openstack/dns/v2/requests/list_zone_transfer_requests.rb index 2adc2a135..4948704ff 100644 --- a/lib/fog/dns/openstack/v2/requests/list_zone_transfer_requests.rb +++ b/lib/fog/openstack/dns/v2/requests/list_zone_transfer_requests.rb @@ -1,6 +1,6 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def list_zone_transfer_requests(options = {}) diff --git a/lib/fog/openstack/dns/v2/requests/list_zones.rb b/lib/fog/openstack/dns/v2/requests/list_zones.rb new file mode 100644 index 000000000..269601706 --- /dev/null +++ b/lib/fog/openstack/dns/v2/requests/list_zones.rb @@ -0,0 +1,30 @@ +module Fog + module OpenStack + class DNS + class V2 + class Real + def list_zones(options = {}) + headers, options = Fog::OpenStack::DNS::V2.setup_headers(options) + + request( + expects: 200, + method: 'GET', + path: 'zones', + query: options, + headers: headers + ) + end + end + + class Mock + def list_zones(_options = {}) + response = Excon::Response.new + response.status = 200 + response.body = { 'zones' => data[:zones] } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/dns/v2/requests/update_quota.rb b/lib/fog/openstack/dns/v2/requests/update_quota.rb new file mode 100644 index 000000000..18a655c5a --- /dev/null +++ b/lib/fog/openstack/dns/v2/requests/update_quota.rb @@ -0,0 +1,34 @@ +module Fog + module OpenStack + class DNS + class V2 + class Real + def update_quota(project_id, options = {}) + headers, options = Fog::OpenStack::DNS::V2.setup_headers(options) + + request( + body: Fog::JSON.encode(options), + expects: 200, + method: 'PATCH', + path: "quotas/#{project_id}", + headers: headers + ) + end + end + + class Mock + def update_quota(_project_id, options = {}) + # stringify keys + options = Hash[options.map { |k, v| [k.to_s, v] }] + data[:quota_updated] = data[:quota].merge(options) + + response = Excon::Response.new + response.status = 200 + response.body = data[:quota_updated] + response + end + end + end + end + end +end diff --git a/lib/fog/dns/openstack/v2/requests/update_recordset.rb b/lib/fog/openstack/dns/v2/requests/update_recordset.rb similarity index 92% rename from lib/fog/dns/openstack/v2/requests/update_recordset.rb rename to lib/fog/openstack/dns/v2/requests/update_recordset.rb index 0ab7a9509..812790fd1 100644 --- a/lib/fog/dns/openstack/v2/requests/update_recordset.rb +++ b/lib/fog/openstack/dns/v2/requests/update_recordset.rb @@ -1,10 +1,10 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def update_recordset(zone_id, id, options = {}) - headers, options = Fog::DNS::OpenStack::V2.setup_headers(options) + headers, options = Fog::OpenStack::DNS::V2.setup_headers(options) request( body: Fog::JSON.encode(options), diff --git a/lib/fog/dns/openstack/v2/requests/update_zone.rb b/lib/fog/openstack/dns/v2/requests/update_zone.rb similarity index 91% rename from lib/fog/dns/openstack/v2/requests/update_zone.rb rename to lib/fog/openstack/dns/v2/requests/update_zone.rb index 3dfbc363a..8bfb852d1 100644 --- a/lib/fog/dns/openstack/v2/requests/update_zone.rb +++ b/lib/fog/openstack/dns/v2/requests/update_zone.rb @@ -1,10 +1,10 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def update_zone(id, options = {}) - headers, options = Fog::DNS::OpenStack::V2.setup_headers(options) + headers, options = Fog::OpenStack::DNS::V2.setup_headers(options) request( body: Fog::JSON.encode(options), diff --git a/lib/fog/dns/openstack/v2/requests/update_zone_transfer_request.rb b/lib/fog/openstack/dns/v2/requests/update_zone_transfer_request.rb similarity index 89% rename from lib/fog/dns/openstack/v2/requests/update_zone_transfer_request.rb rename to lib/fog/openstack/dns/v2/requests/update_zone_transfer_request.rb index 09091a619..d68a6a28b 100644 --- a/lib/fog/dns/openstack/v2/requests/update_zone_transfer_request.rb +++ b/lib/fog/openstack/dns/v2/requests/update_zone_transfer_request.rb @@ -1,13 +1,12 @@ module Fog - module DNS - class OpenStack + module OpenStack + class DNS class V2 class Real def update_zone_transfer_request(zone_transfer_request_id, _description, options = {}) vanilla_options = [:target_project_id] - data = vanilla_options.inject({}) do |result, option| + data = vanilla_options.each_with_object({}) do |option, result| result[option] = options[option] if options[option] - result end request( diff --git a/lib/fog/openstack/event.rb b/lib/fog/openstack/event.rb new file mode 100644 index 000000000..e2f0a18a9 --- /dev/null +++ b/lib/fog/openstack/event.rb @@ -0,0 +1,101 @@ +module Fog + module OpenStack + class Event < Fog::Service + SUPPORTED_VERSIONS = /v2/.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version + + model_path 'fog/openstack/event/models' + + model :event + collection :events + + request_path 'fog/openstack/event/requests' + + request :get_event + request :list_events + + class Mock + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + users: {}, + tenants: {} + } + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 8779 + management_url.path = '/v2' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].find { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_management_url: @openstack_management_url } + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Event::NotFound + end + + def default_path_prefix + 'v2' + end + + def default_service_type + %w[event] + end + end + end + end +end diff --git a/lib/fog/openstack/event/models/event.rb b/lib/fog/openstack/event/models/event.rb new file mode 100644 index 000000000..29c04a05a --- /dev/null +++ b/lib/fog/openstack/event/models/event.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Event + class Event < Fog::OpenStack::Model + identity :message_id + + attribute :event_type + attribute :generated + attribute :raw + attribute :traits + end + end + end +end diff --git a/lib/fog/openstack/event/models/events.rb b/lib/fog/openstack/event/models/events.rb new file mode 100644 index 000000000..a6015dda8 --- /dev/null +++ b/lib/fog/openstack/event/models/events.rb @@ -0,0 +1,23 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/event/models/event' + +module Fog + module OpenStack + class Event + class Events < Fog::OpenStack::Collection + model Fog::OpenStack::Event::Event + + def all(query = []) + load_response(service.list_events(query)) + end + + def find_by_id(message_id) + event = service.get_event(message_id).body + new(event) + rescue Fog::OpenStack::Event::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/event/requests/get_event.rb b/lib/fog/openstack/event/requests/get_event.rb new file mode 100644 index 000000000..2ecdc1939 --- /dev/null +++ b/lib/fog/openstack/event/requests/get_event.rb @@ -0,0 +1,27 @@ +module Fog + module OpenStack + class Event + class Real + def get_event(message_id) + request( + expects: 200, + method: 'GET', + path: "events/#{message_id}" + ) + end + end + + class Mock + def get_event(_message_id) + response = Excon::Response.new + response.status = 200 + response.body = { + 'event_type' => 'compute.instance.create', + 'message_id' => 'd646b40dea6347dfb8caee2da1484c56' + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/event/requests/list_events.rb b/lib/fog/openstack/event/requests/list_events.rb new file mode 100644 index 000000000..bab36275b --- /dev/null +++ b/lib/fog/openstack/event/requests/list_events.rb @@ -0,0 +1,42 @@ +module Fog + module OpenStack + class Event + class Real + def list_events(options = []) + data = { + 'q' => [] + } + + options.each do |opt| + filter = {} + + ['field', 'op', 'value'].each do |key| + filter[key] = opt[key] if opt[key] + end + + data['q'] << filter unless filter.empty? + end + + request( + body: Fog::JSON.encode(data), + expects: 200, + method: 'GET', + path: 'events' + ) + end + end + + class Mock + def list_events(_options = {}) + response = Excon::Response.new + response.status = 200 + response.body = [{ + 'event_type' => 'compute.instance.create', + 'message_id' => 'd646b40dea6347dfb8caee2da1484c56' + }] + response + end + end + end + end +end diff --git a/lib/fog/openstack/identity.rb b/lib/fog/openstack/identity.rb new file mode 100644 index 000000000..949b89252 --- /dev/null +++ b/lib/fog/openstack/identity.rb @@ -0,0 +1,53 @@ +module Fog + module OpenStack + class Identity < Fog::Service + autoload :V2, 'fog/openstack/identity/v2' + autoload :V3, 'fog/openstack/identity/v3' + + def self.new(args = {}) + if args[:openstack_identity_api_version] =~ /(v)*2(\.0)*/i + Fog::OpenStack::Identity::V2.new(args) + else + Fog::OpenStack::Identity::V3.new(args) + end + end + + class Mock + attr_reader :config + + def initialize(options = {}) + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + @config = options + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Identity::NotFound + end + + def config_service? + true + end + + def config + self + end + + def default_endpoint_type + 'admin' + end + + private + + def configure(source) + source.instance_variables.each do |v| + instance_variable_set(v, source.instance_variable_get(v)) + end + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v2.rb b/lib/fog/openstack/identity/v2.rb new file mode 100644 index 000000000..af41eca88 --- /dev/null +++ b/lib/fog/openstack/identity/v2.rb @@ -0,0 +1,192 @@ +require 'fog/openstack/identity' + +module Fog + module OpenStack + class Identity + class V2 < Fog::Service + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version, :no_path_prefix + + model_path 'fog/openstack/identity/v2/models' + model :tenant + collection :tenants + model :user + collection :users + model :role + collection :roles + model :ec2_credential + collection :ec2_credentials + + request_path 'fog/openstack/identity/v2/requests' + + request :check_token + request :validate_token + + request :list_tenants + request :create_tenant + request :get_tenant + request :get_tenants_by_id + request :get_tenants_by_name + request :update_tenant + request :delete_tenant + + request :list_users + request :create_user + request :update_user + request :delete_user + request :get_user_by_id + request :get_user_by_name + request :add_user_to_tenant + request :remove_user_from_tenant + + request :list_endpoints_for_token + request :list_roles_for_user_on_tenant + request :list_user_global_roles + + request :create_role + request :delete_role + request :delete_user_role + request :create_user_role + request :get_role + request :list_roles + + request :set_tenant + + request :create_ec2_credential + request :delete_ec2_credential + request :get_ec2_credential + request :list_ec2_credentials + + class Mock + attr_reader :auth_token + attr_reader :auth_token_expiration + attr_reader :current_user + attr_reader :current_tenant + attr_reader :unscoped_token + + def self.data + @users ||= {} + @roles ||= {} + @tenants ||= {} + @ec2_credentials ||= Hash.new { |hash, key| hash[key] = {} } + @user_tenant_membership ||= {} + + @data ||= Hash.new do |hash, key| + hash[key] = { + users: @users, + roles: @roles, + tenants: @tenants, + ec2_credentials: @ec2_credentials, + user_tenant_membership: @user_tenant_membership + } + end + end + + def self.reset! + @data = nil + @users = nil + @roles = nil + @tenants = nil + @ec2_credentials = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] || 'admin' + @openstack_tenant = options[:openstack_tenant] || 'admin' + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + @openstack_management_url = @openstack_auth_uri.to_s + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + @admin_tenant = data[:tenants].values.find do |u| + u['name'] == 'admin' + end + + if @openstack_tenant + @current_tenant = data[:tenants].values.find do |u| + u['name'] == @openstack_tenant + end + + if @current_tenant + @current_tenant_id = @current_tenant['id'] + else + @current_tenant_id = Fog::Mock.random_hex(32) + @current_tenant = data[:tenants][@current_tenant_id] = { + 'id' => @current_tenant_id, + 'name' => @openstack_tenant + } + end + else + @current_tenant = @admin_tenant + end + + @current_user = data[:users].values.find do |u| + u['name'] == @openstack_username + end + @current_tenant_id = Fog::Mock.random_hex(32) + + if @current_user + @current_user_id = @current_user['id'] + else + @current_user_id = Fog::Mock.random_hex(32) + @current_user = data[:users][@current_user_id] = { + 'id' => @current_user_id, + 'name' => @openstack_username, + 'email' => "#{@openstack_username}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_management_url: @openstack_management_url, + openstack_current_user_id: @openstack_current_user_id, + current_user: @current_user, + current_tenant: @current_tenant } + end + end + + class Real < Fog::OpenStack::Identity::Real + def api_path_prefix + @path_prefix = version_in_path?(@openstack_management_uri.path) ? '' : 'v2.0' + super + end + + def default_path_prefix + @path_prefix + end + + def default_service_type + %w[identity_v2 identityv2 identity] + end + + def version_in_path?(url) + true if url =~ %r{/v2(\.0)*(/)*.*$} + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v2/models/ec2_credential.rb b/lib/fog/openstack/identity/v2/models/ec2_credential.rb similarity index 95% rename from lib/fog/identity/openstack/v2/models/ec2_credential.rb rename to lib/fog/openstack/identity/v2/models/ec2_credential.rb index 5398e1349..2f1894e52 100644 --- a/lib/fog/identity/openstack/v2/models/ec2_credential.rb +++ b/lib/fog/openstack/identity/v2/models/ec2_credential.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Ec2Credential < Fog::OpenStack::Model identity :access, aliases: 'access_key' diff --git a/lib/fog/identity/openstack/v2/models/ec2_credentials.rb b/lib/fog/openstack/identity/v2/models/ec2_credentials.rb similarity index 85% rename from lib/fog/identity/openstack/v2/models/ec2_credentials.rb rename to lib/fog/openstack/identity/v2/models/ec2_credentials.rb index f9d92bc33..8036608ab 100644 --- a/lib/fog/identity/openstack/v2/models/ec2_credentials.rb +++ b/lib/fog/openstack/identity/v2/models/ec2_credentials.rb @@ -1,12 +1,12 @@ require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v2/models/ec2_credential' +require 'fog/openstack/identity/v2/models/ec2_credential' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Ec2Credentials < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V2::Ec2Credential + model Fog::OpenStack::Identity::V2::Ec2Credential attribute :user @@ -44,7 +44,7 @@ def find_by_access_key(access_key) body = response.body['credential'] body = body.merge 'service' => service - ec2_credential = Fog::Identity::OpenStack::V2::EC2Credential.new(body) + ec2_credential = Fog::OpenStack::Identity::V2::EC2Credential.new(body) end ec2_credential diff --git a/lib/fog/openstack/identity/v2/models/role.rb b/lib/fog/openstack/identity/v2/models/role.rb new file mode 100644 index 000000000..3d428b556 --- /dev/null +++ b/lib/fog/openstack/identity/v2/models/role.rb @@ -0,0 +1,53 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Identity + class V2 + class Role < Fog::OpenStack::Model + identity :id + attribute :name + + def save + requires :name + data = service.create_role(name) + merge_attributes(data.body['role']) + true + end + + def destroy + requires :id + service.delete_role(id) + true + end + + def add_to_user(user, tenant) + add_remove_to_user(user, tenant, :add) + end + + def remove_to_user(user, tenant) + add_remove_to_user(user, tenant, :remove) + end + + private + + def add_remove_to_user(user, tenant, ops) + requires :id + user_id = get_id(user) + tenant_id = get_id(tenant) + case ops + when :add + service.create_user_role(tenant_id, user_id, id).status == 200 + when :remove + service.delete_user_role(tenant_id, user_id, id).status == 204 + end + end + + def get_id(model_or_string) + model_or_string.kind_of?(String) ? id : model_or_string.id + end + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v2/models/roles.rb b/lib/fog/openstack/identity/v2/models/roles.rb new file mode 100644 index 000000000..4da71e466 --- /dev/null +++ b/lib/fog/openstack/identity/v2/models/roles.rb @@ -0,0 +1,22 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/identity/v2/models/role' + +module Fog + module OpenStack + class Identity + class V2 + class Roles < Fog::OpenStack::Collection + model Fog::OpenStack::Identity::V2::Role + + def all(options = {}) + load_response(service.list_roles(options), 'roles') + end + + def get(id) + service.get_role(id) + end + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v2/models/tenant.rb b/lib/fog/openstack/identity/v2/models/tenant.rb new file mode 100644 index 000000000..a1a8d4dfc --- /dev/null +++ b/lib/fog/openstack/identity/v2/models/tenant.rb @@ -0,0 +1,63 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Identity + class V2 + class Tenant < Fog::OpenStack::Model + identity :id + + attribute :description + attribute :enabled + attribute :name + + def to_s + name + end + + def roles_for(user) + service.roles( + tenant: self, + user: user + ) + end + + def users + requires :id + service.users(tenant_id: id) + end + + def destroy + requires :id + service.delete_tenant(id) + true + end + + def update(attr = nil) + requires :id, :name + merge_attributes( + service.update_tenant(id, attr || attributes).body['tenant'] + ) + self + end + + def create + requires :name + merge_attributes( + service.create_tenant(attributes).body['tenant'] + ) + self + end + + def grant_user_role(user_id, role_id) + service.add_user_to_tenant(id, user_id, role_id) + end + + def revoke_user_role(user_id, role_id) + service.remove_user_from_tenant(id, user_id, role_id) + end + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v2/models/tenants.rb b/lib/fog/openstack/identity/v2/models/tenants.rb new file mode 100644 index 000000000..be04bebbe --- /dev/null +++ b/lib/fog/openstack/identity/v2/models/tenants.rb @@ -0,0 +1,33 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/identity/v2/models/tenant' + +module Fog + module OpenStack + class Identity + class V2 + class Tenants < Fog::OpenStack::Collection + model Fog::OpenStack::Identity::V2::Tenant + + def all(options = {}) + load_response(service.list_tenants(options), 'tenants') + end + + def find_by_id(id) + cached_tenant = find { |tenant| tenant.id == id } + return cached_tenant if cached_tenant + + tenant_hash = service.get_tenant(id).body['tenant'] + Fog::OpenStack::Identity::V2::Tenant.new( + tenant_hash.merge(service: service) + ) + end + + def destroy(id) + tenant = find_by_id(id) + tenant.destroy + end + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v2/models/user.rb b/lib/fog/openstack/identity/v2/models/user.rb new file mode 100644 index 000000000..e3d4177e9 --- /dev/null +++ b/lib/fog/openstack/identity/v2/models/user.rb @@ -0,0 +1,70 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Identity + class V2 + class User < Fog::OpenStack::Model + identity :id + + attribute :email + attribute :enabled + attribute :name + attribute :tenant_id, aliases: 'tenantId' + attribute :password + + attr_accessor :email, :name, :tenant_id, :enabled, :password + + def ec2_credentials + requires :id + service.ec2_credentials(user: self) + end + + def save + raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? + + requires :name + enabled = true if enabled.nil? + data = service.create_user(name, password, email, tenant_id, enabled) + merge_attributes(data.body['user']) + true + end + + def update(options = {}) + requires :id + options.merge('id' => id) + service.update_user(id, options) + true + end + + def update_password(password) + update('password' => password, 'url' => "/users/#{id}/OS-KSADM/password") + end + + def update_tenant(tenant) + tenant = tenant.id if tenant.class != String + update(:tenantId => tenant, 'url' => "/users/#{id}/OS-KSADM/tenant") + end + + def update_enabled(enabled) + update(:enabled => enabled, 'url' => "/users/#{id}/OS-KSADM/enabled") + end + + def destroy + requires :id + service.delete_user(id) + true + end + + def roles(tenant_id = self.tenant_id) + if tenant_id + service.list_roles_for_user_on_tenant(tenant_id, id).body['roles'] + else + [] + end + end + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v2/models/users.rb b/lib/fog/openstack/identity/v2/models/users.rb new file mode 100644 index 000000000..7aa1f67de --- /dev/null +++ b/lib/fog/openstack/identity/v2/models/users.rb @@ -0,0 +1,45 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/identity/v2/models/user' + +module Fog + module OpenStack + class Identity + class V2 + class Users < Fog::OpenStack::Collection + model Fog::OpenStack::Identity::V2::User + + attribute :tenant_id + + def all(options = {}) + options[:tenant_id] = tenant_id + + load_response(service.list_users(options), 'users') + end + + def find_by_id(id) + find { |user| user.id == id } || + Fog::OpenStack::Identity::V2::User.new( + service.get_user_by_id(id).body['user'].merge( + 'service' => service + ) + ) + end + + def find_by_name(name) + find { |user| user.name == name } || + Fog::OpenStack::Identity::V2::User.new( + service.get_user_by_name(name).body['user'].merge( + 'service' => service + ) + ) + end + + def destroy(id) + user = find_by_id(id) + user.destroy + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v2/requests/add_user_to_tenant.rb b/lib/fog/openstack/identity/v2/requests/add_user_to_tenant.rb similarity index 92% rename from lib/fog/identity/openstack/v2/requests/add_user_to_tenant.rb rename to lib/fog/openstack/identity/v2/requests/add_user_to_tenant.rb index 015508c4c..f389175d6 100644 --- a/lib/fog/identity/openstack/v2/requests/add_user_to_tenant.rb +++ b/lib/fog/openstack/identity/v2/requests/add_user_to_tenant.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def add_user_to_tenant(tenant_id, user_id, role_id) @@ -23,7 +23,7 @@ def add_user_to_tenant(tenant_id, user_id, role_id) response.status = 200 response.body = { 'role' => { - 'id' => role['id'], + 'id' => role['id'], 'name' => role['name'] } } diff --git a/lib/fog/identity/openstack/v2/requests/check_token.rb b/lib/fog/openstack/identity/v2/requests/check_token.rb similarity index 91% rename from lib/fog/identity/openstack/v2/requests/check_token.rb rename to lib/fog/openstack/identity/v2/requests/check_token.rb index a6e4ec7c9..d0a44121f 100644 --- a/lib/fog/identity/openstack/v2/requests/check_token.rb +++ b/lib/fog/openstack/identity/v2/requests/check_token.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def check_token(token_id, tenant_id = nil) diff --git a/lib/fog/identity/openstack/v2/requests/create_ec2_credential.rb b/lib/fog/openstack/identity/v2/requests/create_ec2_credential.rb similarity index 89% rename from lib/fog/identity/openstack/v2/requests/create_ec2_credential.rb rename to lib/fog/openstack/identity/v2/requests/create_ec2_credential.rb index 67e9595fd..57856ab24 100644 --- a/lib/fog/identity/openstack/v2/requests/create_ec2_credential.rb +++ b/lib/fog/openstack/identity/v2/requests/create_ec2_credential.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real ## @@ -40,10 +40,10 @@ def create_ec2_credential(user_id, tenant_id) response.status = 200 data = { - 'access' => Fog::Mock.random_hex(32), - 'secret' => Fog::Mock.random_hex(32), + 'access' => Fog::Mock.random_hex(32), + 'secret' => Fog::Mock.random_hex(32), 'tenant_id' => tenant_id, - 'user_id' => user_id + 'user_id' => user_id } self.data[:ec2_credentials][user_id][data['access']] = data diff --git a/lib/fog/openstack/identity/v2/requests/create_role.rb b/lib/fog/openstack/identity/v2/requests/create_role.rb new file mode 100644 index 000000000..814d27d6c --- /dev/null +++ b/lib/fog/openstack/identity/v2/requests/create_role.rb @@ -0,0 +1,38 @@ +module Fog + module OpenStack + class Identity + class V2 + class Real + def create_role(name) + data = { + 'role' => { + 'name' => name + } + } + + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'POST', + path: '/OS-KSADM/roles' + ) + end + end + + class Mock + def create_role(name) + data = { + 'id' => Fog::Mock.random_hex(32), + 'name' => name + } + self.data[:roles][data['id']] = data + Excon::Response.new( + body: { 'role' => data }, + status: 202 + ) + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v2/requests/create_tenant.rb b/lib/fog/openstack/identity/v2/requests/create_tenant.rb similarity index 76% rename from lib/fog/identity/openstack/v2/requests/create_tenant.rb rename to lib/fog/openstack/identity/v2/requests/create_tenant.rb index 4d7a3cde1..64f0810b3 100644 --- a/lib/fog/identity/openstack/v2/requests/create_tenant.rb +++ b/lib/fog/openstack/identity/v2/requests/create_tenant.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def create_tenant(attributes) @@ -19,10 +19,10 @@ def create_tenant(attributes) response.status = [200, 204][rand(2)] response.body = { 'tenant' => { - 'id' => "df9a815161eba9b76cc748fd5c5af73e", + 'id' => "df9a815161eba9b76cc748fd5c5af73e", 'description' => attributes[:description] || 'normal tenant', - 'enabled' => true, - 'name' => attributes[:name] || 'default' + 'enabled' => true, + 'name' => attributes[:name] || 'default' } } response diff --git a/lib/fog/openstack/identity/v2/requests/create_user.rb b/lib/fog/openstack/identity/v2/requests/create_user.rb new file mode 100644 index 000000000..b913013fb --- /dev/null +++ b/lib/fog/openstack/identity/v2/requests/create_user.rb @@ -0,0 +1,45 @@ +module Fog + module OpenStack + class Identity + class V2 + class Real + def create_user(name, password, email, tenant_id = nil, enabled = true) + data = { + 'user' => { + 'name' => name, + 'password' => password, + 'tenantId' => tenant_id, + 'email' => email, + 'enabled' => enabled + } + } + + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'POST', + path: '/users' + ) + end + end + + class Mock + def create_user(name, _password, email, tenant_id = nil, enabled = true) + response = Excon::Response.new + response.status = 200 + data = { + 'id' => Fog::Mock.random_hex(32), + 'name' => name, + 'email' => email, + 'tenantId' => tenant_id, + 'enabled' => enabled + } + self.data[:users][data['id']] = data + response.body = { 'user' => data } + response + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v2/requests/create_user_role.rb b/lib/fog/openstack/identity/v2/requests/create_user_role.rb similarity index 93% rename from lib/fog/identity/openstack/v2/requests/create_user_role.rb rename to lib/fog/openstack/identity/v2/requests/create_user_role.rb index b8bdd7384..e1e741477 100644 --- a/lib/fog/identity/openstack/v2/requests/create_user_role.rb +++ b/lib/fog/openstack/identity/v2/requests/create_user_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def create_user_role(tenant_id, user_id, role_id) diff --git a/lib/fog/identity/openstack/v2/requests/delete_ec2_credential.rb b/lib/fog/openstack/identity/v2/requests/delete_ec2_credential.rb similarity index 88% rename from lib/fog/identity/openstack/v2/requests/delete_ec2_credential.rb rename to lib/fog/openstack/identity/v2/requests/delete_ec2_credential.rb index 27b4f10ab..1e5edbef8 100644 --- a/lib/fog/identity/openstack/v2/requests/delete_ec2_credential.rb +++ b/lib/fog/openstack/identity/v2/requests/delete_ec2_credential.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real ## @@ -27,14 +27,14 @@ def delete_ec2_credential(user_id, access) class Mock def delete_ec2_credential(user_id, access) - raise Fog::Identity::OpenStack::NotFound unless data[:ec2_credentials][user_id][access] + raise Fog::OpenStack::Identity::NotFound unless data[:ec2_credentials][user_id][access] data[:ec2_credentials][user_id].delete access response = Excon::Response.new response.status = 204 response - rescue + rescue StandardError end end end diff --git a/lib/fog/openstack/identity/v2/requests/delete_role.rb b/lib/fog/openstack/identity/v2/requests/delete_role.rb new file mode 100644 index 000000000..74531408a --- /dev/null +++ b/lib/fog/openstack/identity/v2/requests/delete_role.rb @@ -0,0 +1,30 @@ +module Fog + module OpenStack + class Identity + class V2 + class Real + def delete_role(role_id) + request( + expects: [200, 204], + method: 'DELETE', + path: "/OS-KSADM/roles/#{role_id}" + ) + end + end + + class Mock + def delete_role(role_id) + response = Excon::Response.new + if data[:roles][role_id] + data[:roles].delete(role_id) + response.status = 204 + response + else + raise Fog::OpenStack::Identity::NotFound + end + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v2/requests/delete_tenant.rb b/lib/fog/openstack/identity/v2/requests/delete_tenant.rb similarity index 79% rename from lib/fog/identity/openstack/v2/requests/delete_tenant.rb rename to lib/fog/openstack/identity/v2/requests/delete_tenant.rb index 7cd1c0061..99f1ce390 100644 --- a/lib/fog/identity/openstack/v2/requests/delete_tenant.rb +++ b/lib/fog/openstack/identity/v2/requests/delete_tenant.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def delete_tenant(id) @@ -18,10 +18,10 @@ def delete_tenant(_attributes) response.status = [200, 204][rand(2)] response.body = { 'tenant' => { - 'id' => '1', + 'id' => '1', 'description' => 'Has access to everything', - 'enabled' => true, - 'name' => 'admin' + 'enabled' => true, + 'name' => 'admin' } } response diff --git a/lib/fog/openstack/identity/v2/requests/delete_user.rb b/lib/fog/openstack/identity/v2/requests/delete_user.rb new file mode 100644 index 000000000..ceef572b1 --- /dev/null +++ b/lib/fog/openstack/identity/v2/requests/delete_user.rb @@ -0,0 +1,31 @@ +module Fog + module OpenStack + class Identity + class V2 + class Real + def delete_user(user_id) + request( + expects: [200, 204], + method: 'DELETE', + path: "users/#{user_id}" + ) + end + end + + class Mock + def delete_user(user_id) + data[:users].delete( + list_users.body['users'].find { |x| x['id'] == user_id }['id'] + ) + + response = Excon::Response.new + response.status = 204 + response + rescue StandardError + raise Fog::OpenStack::Identity::NotFound + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v2/requests/delete_user_role.rb b/lib/fog/openstack/identity/v2/requests/delete_user_role.rb similarity index 93% rename from lib/fog/identity/openstack/v2/requests/delete_user_role.rb rename to lib/fog/openstack/identity/v2/requests/delete_user_role.rb index 5b45423e1..7cd6d8c1b 100644 --- a/lib/fog/identity/openstack/v2/requests/delete_user_role.rb +++ b/lib/fog/openstack/identity/v2/requests/delete_user_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def delete_user_role(tenant_id, user_id, role_id) diff --git a/lib/fog/identity/openstack/v2/requests/get_ec2_credential.rb b/lib/fog/openstack/identity/v2/requests/get_ec2_credential.rb similarity index 94% rename from lib/fog/identity/openstack/v2/requests/get_ec2_credential.rb rename to lib/fog/openstack/identity/v2/requests/get_ec2_credential.rb index e60d5ef92..e8a85ed15 100644 --- a/lib/fog/identity/openstack/v2/requests/get_ec2_credential.rb +++ b/lib/fog/openstack/identity/v2/requests/get_ec2_credential.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real ## @@ -28,7 +28,7 @@ def get_ec2_credential(user_id, access) path: "users/#{user_id}/credentials/OS-EC2/#{access}" ) rescue Excon::Errors::Unauthorized - raise Fog::Identity::OpenStack::NotFound + raise Fog::OpenStack::Identity::NotFound end end diff --git a/lib/fog/openstack/identity/v2/requests/get_role.rb b/lib/fog/openstack/identity/v2/requests/get_role.rb new file mode 100644 index 000000000..acfbe4989 --- /dev/null +++ b/lib/fog/openstack/identity/v2/requests/get_role.rb @@ -0,0 +1,30 @@ +module Fog + module OpenStack + class Identity + class V2 + class Real + def get_role(id) + request( + expects: [200, 204], + method: 'GET', + path: "/OS-KSADM/roles/#{id}" + ) + end + end + + class Mock + def get_role(id) + response = Excon::Response.new + if data = self.data[:roles][id] + response.status = 200 + response.body = { 'role' => data } + response + else + raise Fog::OpenStack::Identity::NotFound + end + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v2/requests/get_tenant.rb b/lib/fog/openstack/identity/v2/requests/get_tenant.rb similarity index 79% rename from lib/fog/identity/openstack/v2/requests/get_tenant.rb rename to lib/fog/openstack/identity/v2/requests/get_tenant.rb index 5786346b0..ce3187176 100644 --- a/lib/fog/identity/openstack/v2/requests/get_tenant.rb +++ b/lib/fog/openstack/identity/v2/requests/get_tenant.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def get_tenant(id) @@ -18,10 +18,10 @@ def get_tenant(id) response.status = [200, 204][rand(2)] response.body = { 'tenant' => { - 'id' => id, + 'id' => id, 'description' => 'Has access to everything', - 'enabled' => true, - 'name' => 'admin' + 'enabled' => true, + 'name' => 'admin' } } response diff --git a/lib/fog/identity/openstack/v2/requests/get_tenants_by_id.rb b/lib/fog/openstack/identity/v2/requests/get_tenants_by_id.rb similarity index 89% rename from lib/fog/identity/openstack/v2/requests/get_tenants_by_id.rb rename to lib/fog/openstack/identity/v2/requests/get_tenants_by_id.rb index be7060bd6..05e708f26 100644 --- a/lib/fog/identity/openstack/v2/requests/get_tenants_by_id.rb +++ b/lib/fog/openstack/identity/v2/requests/get_tenants_by_id.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def get_tenants_by_id(tenant_id) diff --git a/lib/fog/identity/openstack/v2/requests/get_tenants_by_name.rb b/lib/fog/openstack/identity/v2/requests/get_tenants_by_name.rb similarity index 89% rename from lib/fog/identity/openstack/v2/requests/get_tenants_by_name.rb rename to lib/fog/openstack/identity/v2/requests/get_tenants_by_name.rb index 7a3c2dff3..28984a667 100644 --- a/lib/fog/identity/openstack/v2/requests/get_tenants_by_name.rb +++ b/lib/fog/openstack/identity/v2/requests/get_tenants_by_name.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def get_tenants_by_name(name) diff --git a/lib/fog/identity/openstack/v2/requests/get_user_by_id.rb b/lib/fog/openstack/identity/v2/requests/get_user_by_id.rb similarity index 95% rename from lib/fog/identity/openstack/v2/requests/get_user_by_id.rb rename to lib/fog/openstack/identity/v2/requests/get_user_by_id.rb index 6a2690685..c7351ff82 100644 --- a/lib/fog/identity/openstack/v2/requests/get_user_by_id.rb +++ b/lib/fog/openstack/identity/v2/requests/get_user_by_id.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def get_user_by_id(user_id) diff --git a/lib/fog/identity/openstack/v2/requests/get_user_by_name.rb b/lib/fog/openstack/identity/v2/requests/get_user_by_name.rb similarity index 94% rename from lib/fog/identity/openstack/v2/requests/get_user_by_name.rb rename to lib/fog/openstack/identity/v2/requests/get_user_by_name.rb index e07a42269..2de5b4af0 100644 --- a/lib/fog/identity/openstack/v2/requests/get_user_by_name.rb +++ b/lib/fog/openstack/identity/v2/requests/get_user_by_name.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def get_user_by_name(name) diff --git a/lib/fog/identity/openstack/v2/requests/list_ec2_credentials.rb b/lib/fog/openstack/identity/v2/requests/list_ec2_credentials.rb similarity index 97% rename from lib/fog/identity/openstack/v2/requests/list_ec2_credentials.rb rename to lib/fog/openstack/identity/v2/requests/list_ec2_credentials.rb index a99a68d01..ed812bafc 100644 --- a/lib/fog/identity/openstack/v2/requests/list_ec2_credentials.rb +++ b/lib/fog/openstack/identity/v2/requests/list_ec2_credentials.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real ## diff --git a/lib/fog/identity/openstack/v2/requests/list_endpoints_for_token.rb b/lib/fog/openstack/identity/v2/requests/list_endpoints_for_token.rb similarity index 89% rename from lib/fog/identity/openstack/v2/requests/list_endpoints_for_token.rb rename to lib/fog/openstack/identity/v2/requests/list_endpoints_for_token.rb index f58aa4b0f..677814b74 100644 --- a/lib/fog/identity/openstack/v2/requests/list_endpoints_for_token.rb +++ b/lib/fog/openstack/identity/v2/requests/list_endpoints_for_token.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def list_endpoints_for_token(token_id) diff --git a/lib/fog/openstack/identity/v2/requests/list_roles.rb b/lib/fog/openstack/identity/v2/requests/list_roles.rb new file mode 100644 index 000000000..3a7aa65c4 --- /dev/null +++ b/lib/fog/openstack/identity/v2/requests/list_roles.rb @@ -0,0 +1,34 @@ +module Fog + module OpenStack + class Identity + class V2 + class Real + def list_roles(options = {}) + request( + expects: 200, + method: 'GET', + path: '/OS-KSADM/roles', + query: options + ) + end + end + + class Mock + def list_roles(_options = {}) + if data[:roles].empty? + ['admin', 'Member'].each do |name| + id = Fog::Mock.random_hex(32) + data[:roles][id] = { 'id' => id, 'name' => name } + end + end + + Excon::Response.new( + body: { 'roles' => data[:roles].values }, + status: 200 + ) + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v2/requests/list_roles_for_user_on_tenant.rb b/lib/fog/openstack/identity/v2/requests/list_roles_for_user_on_tenant.rb similarity index 95% rename from lib/fog/identity/openstack/v2/requests/list_roles_for_user_on_tenant.rb rename to lib/fog/openstack/identity/v2/requests/list_roles_for_user_on_tenant.rb index c1e36193c..1e160dbb4 100644 --- a/lib/fog/identity/openstack/v2/requests/list_roles_for_user_on_tenant.rb +++ b/lib/fog/openstack/identity/v2/requests/list_roles_for_user_on_tenant.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def list_roles_for_user_on_tenant(tenant_id, user_id) diff --git a/lib/fog/openstack/identity/v2/requests/list_tenants.rb b/lib/fog/openstack/identity/v2/requests/list_tenants.rb new file mode 100644 index 000000000..b4a4e3b6e --- /dev/null +++ b/lib/fog/openstack/identity/v2/requests/list_tenants.rb @@ -0,0 +1,53 @@ +module Fog + module OpenStack + class Identity + class V2 + class Real + def list_tenants(options = nil, marker = nil) + if options.kind_of?(Hash) + params = options + else + Fog::Logger.deprecation('Calling OpenStack[:identity].list_tenants(limit, marker) is deprecated, use'\ + ' .list_ec2_credentials(:limit => value, :marker => value)') + params = {} + params['limit'] = options if options + params['marker'] = marker if marker + end + + request( + expects: [200, 204], + method: 'GET', + path: "tenants", + query: params + ) + end + end + + class Mock + def list_tenants(_options = nil, _marker = nil) + Excon::Response.new( + body: { + 'tenants_links' => [], + 'tenants' => [ + { 'id' => '1', + 'description' => 'Has access to everything', + 'enabled' => true, + 'name' => 'admin' }, + { 'id' => '2', + 'description' => 'Normal tenant', + 'enabled' => true, + 'name' => 'default' }, + { 'id' => '3', + 'description' => 'Disabled tenant', + 'enabled' => false, + 'name' => 'disabled' } + ] + }, + status: [200, 204][rand(2)] + ) + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v2/requests/list_user_global_roles.rb b/lib/fog/openstack/identity/v2/requests/list_user_global_roles.rb similarity index 89% rename from lib/fog/identity/openstack/v2/requests/list_user_global_roles.rb rename to lib/fog/openstack/identity/v2/requests/list_user_global_roles.rb index 0693a5908..eab09c3ed 100644 --- a/lib/fog/identity/openstack/v2/requests/list_user_global_roles.rb +++ b/lib/fog/openstack/identity/v2/requests/list_user_global_roles.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def list_user_global_roles(user_id) diff --git a/lib/fog/openstack/identity/v2/requests/list_users.rb b/lib/fog/openstack/identity/v2/requests/list_users.rb new file mode 100644 index 000000000..409992393 --- /dev/null +++ b/lib/fog/openstack/identity/v2/requests/list_users.rb @@ -0,0 +1,47 @@ +module Fog + module OpenStack + class Identity + class V2 + class Real + def list_users(options = {}) + if options.kind_of?(Hash) + tenant_id = options.delete(:tenant_id) + query = options + else + Fog::Logger.deprecation('Calling OpenStack[:identity].list_users(tenant_id) is deprecated, use .list_users(:tenant_id => value)') + tenant_id = options + query = {} + end + + path = tenant_id ? "tenants/#{tenant_id}/users" : 'users' + request( + expects: [200, 204], + method: 'GET', + path: path, + query: query + ) + end + end + + class Mock + def list_users(options = {}) + tenant_id = options[:tenant_id] + + users = data[:users].values + + if tenant_id + users = users.select do |user| + user['tenantId'] == tenant_id + end + end + + Excon::Response.new( + body: { 'users' => users }, + status: 200 + ) + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v2/requests/remove_user_from_tenant.rb b/lib/fog/openstack/identity/v2/requests/remove_user_from_tenant.rb similarity index 92% rename from lib/fog/identity/openstack/v2/requests/remove_user_from_tenant.rb rename to lib/fog/openstack/identity/v2/requests/remove_user_from_tenant.rb index 72abbf682..1221070ec 100644 --- a/lib/fog/identity/openstack/v2/requests/remove_user_from_tenant.rb +++ b/lib/fog/openstack/identity/v2/requests/remove_user_from_tenant.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def remove_user_from_tenant(tenant_id, user_id, role_id) diff --git a/lib/fog/openstack/identity/v2/requests/set_tenant.rb b/lib/fog/openstack/identity/v2/requests/set_tenant.rb new file mode 100644 index 000000000..7827c63dd --- /dev/null +++ b/lib/fog/openstack/identity/v2/requests/set_tenant.rb @@ -0,0 +1,21 @@ +module Fog + module OpenStack + class Identity + class V2 + class Real + def set_tenant(tenant) + @openstack_must_reauthenticate = true + @openstack_tenant = tenant.to_s + authenticate + end + end + + class Mock + def set_tenant(_tenant) + true + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v2/requests/update_tenant.rb b/lib/fog/openstack/identity/v2/requests/update_tenant.rb similarity index 94% rename from lib/fog/identity/openstack/v2/requests/update_tenant.rb rename to lib/fog/openstack/identity/v2/requests/update_tenant.rb index 038cff729..504e8fb45 100644 --- a/lib/fog/identity/openstack/v2/requests/update_tenant.rb +++ b/lib/fog/openstack/identity/v2/requests/update_tenant.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def update_tenant(id, attributes) diff --git a/lib/fog/openstack/identity/v2/requests/update_user.rb b/lib/fog/openstack/identity/v2/requests/update_user.rb new file mode 100644 index 000000000..a32503b2b --- /dev/null +++ b/lib/fog/openstack/identity/v2/requests/update_user.rb @@ -0,0 +1,34 @@ +module Fog + module OpenStack + class Identity + class V2 + class Real + def update_user(user_id, options = {}) + url = options.delete('url') || "/users/#{user_id}" + request( + body: Fog::JSON.encode('user' => options), + expects: 200, + method: 'PUT', + path: url + ) + end + end + + class Mock + def update_user(user_id, options) + response = Excon::Response.new + if user = data[:users][user_id] + if options['name'] + user['name'] = options['name'] + end + response.status = 200 + response + else + raise Fog::OpenStack::Identity::NotFound + end + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v2/requests/validate_token.rb b/lib/fog/openstack/identity/v2/requests/validate_token.rb similarity index 91% rename from lib/fog/identity/openstack/v2/requests/validate_token.rb rename to lib/fog/openstack/identity/v2/requests/validate_token.rb index bebc30fdf..77dba5060 100644 --- a/lib/fog/identity/openstack/v2/requests/validate_token.rb +++ b/lib/fog/openstack/identity/v2/requests/validate_token.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V2 class Real def validate_token(token_id, tenant_id = nil) diff --git a/lib/fog/openstack/identity/v3.rb b/lib/fog/openstack/identity/v3.rb new file mode 100644 index 000000000..2f0551afa --- /dev/null +++ b/lib/fog/openstack/identity/v3.rb @@ -0,0 +1,164 @@ +require 'fog/openstack/identity' + +module Fog + module OpenStack + class Identity + class V3 < Fog::Service + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, :persistent, + :openstack_service_type, :openstack_service_name, :openstack_tenant, + :openstack_endpoint_type, :openstack_region, :openstack_domain_id, + :openstack_project_name, :openstack_domain_name, + :openstack_user_domain, :openstack_project_domain, + :openstack_user_domain_id, :openstack_project_domain_id, + :openstack_api_key, :openstack_current_user_id, :openstack_userid, :openstack_username, + :current_user, :current_user_id, :current_tenant, + :provider, :openstack_identity_api_version, :openstack_cache_ttl + + model_path 'fog/openstack/identity/v3/models' + model :domain + collection :domains + model :endpoint + collection :endpoints + model :project + collection :projects + model :service + collection :services + model :token + collection :tokens + model :user + collection :users + model :group + collection :groups + model :role + collection :roles + model :role_assignment + collection :role_assignments + model :os_credential + collection :os_credentials + model :policy + collection :policies + + request_path 'fog/openstack/identity/v3/requests' + + request :list_users + request :get_user + request :create_user + request :update_user + request :delete_user + request :list_user_groups + request :list_user_projects + request :list_groups + request :get_group + request :create_group + request :update_group + request :delete_group + request :add_user_to_group + request :remove_user_from_group + request :group_user_check + request :list_group_users + request :list_roles + request :list_role_assignments + request :get_role + request :create_role + request :update_role + request :delete_role + request :auth_domains + request :auth_projects + request :list_domains + request :get_domain + request :create_domain + request :update_domain + request :delete_domain + request :list_domain_user_roles + request :grant_domain_user_role + request :check_domain_user_role + request :revoke_domain_user_role + request :list_domain_group_roles + request :grant_domain_group_role + request :check_domain_group_role + request :revoke_domain_group_role + request :list_endpoints + request :get_endpoint + request :create_endpoint + request :update_endpoint + request :delete_endpoint + request :list_projects + request :get_project + request :create_project + request :update_project + request :delete_project + request :list_project_user_roles + request :grant_project_user_role + request :check_project_user_role + request :revoke_project_user_role + request :list_project_group_roles + request :grant_project_group_role + request :check_project_group_role + request :revoke_project_group_role + request :list_services + request :get_service + request :create_service + request :update_service + request :delete_service + request :token_authenticate + request :token_validate + request :token_check + request :token_revoke + request :list_os_credentials + request :get_os_credential + request :create_os_credential + request :update_os_credential + request :delete_os_credential + request :list_policies + request :get_policy + request :create_policy + request :update_policy + request :delete_policy + + class Mock + include Fog::OpenStack::Core + def initialize(options = {}); end + end + + def self.get_api_version(uri, connection_options = {}) + connection = Fog::Core::Connection.new(uri, false, connection_options) + response = connection.request(expects: [200], + headers: { 'Content-Type' => 'application/json', + 'Accept' => 'application/json' }, + method: 'GET') + + body = Fog::JSON.decode(response.body) + version = nil + unless body['version'].empty? + version = body['version']['id'] + end + if version.nil? + raise Fog::OpenStack::Errors::ServiceUnavailable, "No version available at #{uri}" + end + + version + end + + class Real < Fog::OpenStack::Identity::Real + def api_path_prefix + @path_prefix = version_in_path?(@openstack_management_uri.path) ? '' : 'v3' + super + end + + def default_path_prefix + @path_prefix + end + + def default_service_type + %w[identity_v3 identityv3 identity] + end + + def version_in_path?(url) + true if url =~ %r{/v3(/)*.*$} + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v3/models/domain.rb b/lib/fog/openstack/identity/v3/models/domain.rb similarity index 96% rename from lib/fog/identity/openstack/v3/models/domain.rb rename to lib/fog/openstack/identity/v3/models/domain.rb index 7c182b7b1..fda46d176 100644 --- a/lib/fog/identity/openstack/v3/models/domain.rb +++ b/lib/fog/openstack/identity/v3/models/domain.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Domain < Fog::OpenStack::Model identity :id diff --git a/lib/fog/identity/openstack/v3/models/domains.rb b/lib/fog/openstack/identity/v3/models/domains.rb similarity index 75% rename from lib/fog/identity/openstack/v3/models/domains.rb rename to lib/fog/openstack/identity/v3/models/domains.rb index 7f9805d6c..f5195a7f8 100644 --- a/lib/fog/identity/openstack/v3/models/domains.rb +++ b/lib/fog/openstack/identity/v3/models/domains.rb @@ -1,26 +1,26 @@ require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v3/models/domain' +require 'fog/openstack/identity/v3/models/domain' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Domains < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V3::Domain + model Fog::OpenStack::Identity::V3::Domain def all(options = {}) if service.openstack_cache_ttl > 0 - cached_domain, expires = Fog::Identity::OpenStack::V3::Domain.cache[{ token: service.auth_token, + cached_domain, expires = Fog::OpenStack::Identity::V3::Domain.cache[{ token: service.auth_token, options: options }] return cached_domain if cached_domain && expires > Time.now end domain_to_cache = load_response(service.list_domains(options), 'domains') if service.openstack_cache_ttl > 0 - cache = Fog::Identity::OpenStack::V3::Domain.cache + cache = Fog::OpenStack::Identity::V3::Domain.cache cache[{ token: service.auth_token, options: options }] = [domain_to_cache, Time.now + service.openstack_cache_ttl] - Fog::Identity::OpenStack::V3::Domain.cache = cache + Fog::OpenStack::Identity::V3::Domain.cache = cache end domain_to_cache end @@ -35,19 +35,19 @@ def auth_domains(options = {}) def find_by_id(id) if service.openstack_cache_ttl > 0 - cached_domain, expires = Fog::Identity::OpenStack::V3::Domain.cache[{ token: service.auth_token, + cached_domain, expires = Fog::OpenStack::Identity::V3::Domain.cache[{ token: service.auth_token, id: id }] return cached_domain if cached_domain && expires > Time.now end domain_hash = service.get_domain(id).body['domain'] - domain_to_cache = Fog::Identity::OpenStack::V3::Domain.new( + domain_to_cache = Fog::OpenStack::Identity::V3::Domain.new( domain_hash.merge(service: service) ) if service.openstack_cache_ttl > 0 - cache = Fog::Identity::OpenStack::V3::Domain.cache + cache = Fog::OpenStack::Identity::V3::Domain.cache cache[{ token: service.auth_token, id: id }] = [domain_to_cache, Time.now + service.openstack_cache_ttl] - Fog::Identity::OpenStack::V3::Domain.cache = cache + Fog::OpenStack::Identity::V3::Domain.cache = cache end domain_to_cache end diff --git a/lib/fog/identity/openstack/v3/models/endpoint.rb b/lib/fog/openstack/identity/v3/models/endpoint.rb similarity index 96% rename from lib/fog/identity/openstack/v3/models/endpoint.rb rename to lib/fog/openstack/identity/v3/models/endpoint.rb index 5b71e7103..1d735187b 100644 --- a/lib/fog/identity/openstack/v3/models/endpoint.rb +++ b/lib/fog/openstack/identity/v3/models/endpoint.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Endpoint < Fog::OpenStack::Model identity :id diff --git a/lib/fog/openstack/identity/v3/models/endpoints.rb b/lib/fog/openstack/identity/v3/models/endpoints.rb new file mode 100644 index 000000000..b6a680bbb --- /dev/null +++ b/lib/fog/openstack/identity/v3/models/endpoints.rb @@ -0,0 +1,28 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/identity/v3/models/service' + +module Fog + module OpenStack + class Identity + class V3 + class Endpoints < Fog::OpenStack::Collection + model Fog::OpenStack::Identity::V3::Endpoint + + def all(options = {}) + load_response(service.list_endpoints(options), 'endpoints') + end + + def find_by_id(id) + cached_endpoint = find { |endpoint| endpoint.id == id } + return cached_endpoint if cached_endpoint + + endpoint_hash = service.get_endpoint(id).body['endpoint'] + Fog::OpenStack::Identity::V3::Endpoint.new( + endpoint_hash.merge(service: service) + ) + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v3/models/group.rb b/lib/fog/openstack/identity/v3/models/group.rb similarity index 93% rename from lib/fog/identity/openstack/v3/models/group.rb rename to lib/fog/openstack/identity/v3/models/group.rb index 7448ec376..46b7c7a00 100644 --- a/lib/fog/identity/openstack/v3/models/group.rb +++ b/lib/fog/openstack/identity/v3/models/group.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Group < Fog::OpenStack::Model identity :id @@ -52,7 +52,7 @@ def contains_user?(user_id) requires :id begin service.group_user_check(id, user_id) - rescue Fog::Identity::OpenStack::NotFound + rescue Fog::OpenStack::Identity::NotFound return false end true @@ -72,7 +72,7 @@ def check_role(role_id) requires :id, :domain_id begin service.check_domain_group_role(domain_id, id, role_id) - rescue Fog::Identity::OpenStack::NotFound + rescue Fog::OpenStack::Identity::NotFound return false end true diff --git a/lib/fog/identity/openstack/v3/models/groups.rb b/lib/fog/openstack/identity/v3/models/groups.rb similarity index 77% rename from lib/fog/identity/openstack/v3/models/groups.rb rename to lib/fog/openstack/identity/v3/models/groups.rb index cecce87a0..f5e19de65 100644 --- a/lib/fog/identity/openstack/v3/models/groups.rb +++ b/lib/fog/openstack/identity/v3/models/groups.rb @@ -1,12 +1,12 @@ require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v3/models/group' +require 'fog/openstack/identity/v3/models/group' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Groups < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V3::Group + model Fog::OpenStack::Identity::V3::Group def all(options = {}) load_response(service.list_groups(options), 'groups') @@ -15,8 +15,9 @@ def all(options = {}) def find_by_id(id) cached_group = find { |group| group.id == id } return cached_group if cached_group + group_hash = service.get_group(id).body['group'] - Fog::Identity::OpenStack::V3.group.new( + Fog::OpenStack::Identity::V3.group.new( group_hash.merge(service: service) ) end diff --git a/lib/fog/identity/openstack/v3/models/os_credential.rb b/lib/fog/openstack/identity/v3/models/os_credential.rb similarity index 93% rename from lib/fog/identity/openstack/v3/models/os_credential.rb rename to lib/fog/openstack/identity/v3/models/os_credential.rb index 0b84470e8..9f1c9b166 100644 --- a/lib/fog/identity/openstack/v3/models/os_credential.rb +++ b/lib/fog/openstack/identity/v3/models/os_credential.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class OsCredential < Fog::OpenStack::Model identity :id @@ -48,7 +48,7 @@ def create end def parsed_blob - @parsed_blob = ::JSON.parse(blob) unless @parsed_blob + @parsed_blob ||= ::JSON.parse(blob) @parsed_blob end diff --git a/lib/fog/identity/openstack/v3/models/os_credentials.rb b/lib/fog/openstack/identity/v3/models/os_credentials.rb similarity index 77% rename from lib/fog/identity/openstack/v3/models/os_credentials.rb rename to lib/fog/openstack/identity/v3/models/os_credentials.rb index 3e66f4489..db2e54279 100644 --- a/lib/fog/identity/openstack/v3/models/os_credentials.rb +++ b/lib/fog/openstack/identity/v3/models/os_credentials.rb @@ -1,12 +1,12 @@ require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v3/models/os_credential' +require 'fog/openstack/identity/v3/models/os_credential' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class OsCredentials < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V3::OsCredential + model Fog::OpenStack::Identity::V3::OsCredential def all(options = {}) load_response(service.list_os_credentials(options), 'credentials') @@ -15,8 +15,9 @@ def all(options = {}) def find_by_id(id) cached_credential = find { |credential| credential.id == id } return cached_credential if cached_credential + credential_hash = service.get_os_credential(id).body['credential'] - Fog::Identity::OpenStack::V3::Credential.new( + Fog::OpenStack::Identity::V3::Credential.new( credential_hash.merge(service: service) ) end diff --git a/lib/fog/identity/openstack/v3/models/policies.rb b/lib/fog/openstack/identity/v3/models/policies.rb similarity index 77% rename from lib/fog/identity/openstack/v3/models/policies.rb rename to lib/fog/openstack/identity/v3/models/policies.rb index d7eacb0b5..b3cd8a703 100644 --- a/lib/fog/identity/openstack/v3/models/policies.rb +++ b/lib/fog/openstack/identity/v3/models/policies.rb @@ -1,12 +1,12 @@ require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v3/models/policy' +require 'fog/openstack/identity/v3/models/policy' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Policies < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V3::Policy + model Fog::OpenStack::Identity::V3::Policy def all(options = {}) load_response(service.list_policies(options), 'policies') @@ -15,8 +15,9 @@ def all(options = {}) def find_by_id(id) cached_policy = find { |policy| policy.id == id } return cached_policy if cached_policy + policy_hash = service.get_policy(id).body['policy'] - Fog::Identity::OpenStack::V3::Policy.new( + Fog::OpenStack::Identity::V3::Policy.new( policy_hash.merge(service: service) ) end diff --git a/lib/fog/identity/openstack/v3/models/policy.rb b/lib/fog/openstack/identity/v3/models/policy.rb similarity index 95% rename from lib/fog/identity/openstack/v3/models/policy.rb rename to lib/fog/openstack/identity/v3/models/policy.rb index e136c6312..a642994a0 100644 --- a/lib/fog/identity/openstack/v3/models/policy.rb +++ b/lib/fog/openstack/identity/v3/models/policy.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Policy < Fog::OpenStack::Model identity :id diff --git a/lib/fog/identity/openstack/v3/models/project.rb b/lib/fog/openstack/identity/v3/models/project.rb similarity index 94% rename from lib/fog/identity/openstack/v3/models/project.rb rename to lib/fog/openstack/identity/v3/models/project.rb index b3d53ddb3..5abcc3dca 100644 --- a/lib/fog/identity/openstack/v3/models/project.rb +++ b/lib/fog/openstack/identity/v3/models/project.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Project < Fog::OpenStack::Model identity :id @@ -65,7 +65,7 @@ def check_user_role(user_id, role_id) requires :id begin service.check_project_user_role(id, user_id, role_id) - rescue Fog::Identity::OpenStack::NotFound + rescue Fog::OpenStack::Identity::NotFound return false end true @@ -92,7 +92,7 @@ def check_group_role(group_id, role_id) requires :id begin service.check_project_group_role(id, group_id, role_id) - rescue Fog::Identity::OpenStack::NotFound + rescue Fog::OpenStack::Identity::NotFound return false end true diff --git a/lib/fog/identity/openstack/v3/models/projects.rb b/lib/fog/openstack/identity/v3/models/projects.rb similarity index 75% rename from lib/fog/identity/openstack/v3/models/projects.rb rename to lib/fog/openstack/identity/v3/models/projects.rb index 99b2a9d9d..154f84140 100644 --- a/lib/fog/identity/openstack/v3/models/projects.rb +++ b/lib/fog/openstack/identity/v3/models/projects.rb @@ -1,26 +1,26 @@ require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v3/models/project' +require 'fog/openstack/identity/v3/models/project' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Projects < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V3::Project + model Fog::OpenStack::Identity::V3::Project def all(options = {}) if service.openstack_cache_ttl > 0 - cached_project, expires = Fog::Identity::OpenStack::V3::Project.cache[{ token: service.auth_token, + cached_project, expires = Fog::OpenStack::Identity::V3::Project.cache[{ token: service.auth_token, options: options }] return cached_project if cached_project && expires > Time.now end project_to_cache = load_response(service.list_projects(options), 'projects') if service.openstack_cache_ttl > 0 - cache = Fog::Identity::OpenStack::V3::Project.cache + cache = Fog::OpenStack::Identity::V3::Project.cache cache[{ token: service.auth_token, options: options }] = [project_to_cache, Time.now + service.openstack_cache_ttl] - Fog::Identity::OpenStack::V3::Project.cache = cache + Fog::OpenStack::Identity::V3::Project.cache = cache end project_to_cache end @@ -33,14 +33,14 @@ def auth_projects(options = {}) load(service.auth_projects(options).body['projects']) end - # options can include :subtree_as_ids, :subtree_as_list, :parents_as_ids, :parents_as_list - def find_by_id(id, options = []) + def find_by_id(id, options = {}) + # options can include :subtree_as_ids, :subtree_as_list, :parents_as_ids, :parents_as_list if options.kind_of? Symbol # Deal with a single option being passed on its own - options = [options] + options = { options => nil } end if service.openstack_cache_ttl > 0 - cached_project, expires = Fog::Identity::OpenStack::V3::Project.cache[{ token: service.auth_token, + cached_project, expires = Fog::OpenStack::Identity::V3::Project.cache[{ token: service.auth_token, id: id, options: options }] return cached_project if cached_project && expires > Time.now @@ -55,11 +55,11 @@ def find_by_id(id, options = []) end if service.openstack_cache_ttl > 0 - cache = Fog::Identity::OpenStack::V3::Project.cache + cache = Fog::OpenStack::Identity::V3::Project.cache cache[{ token: service.auth_token, id: id, options: options }] = [ top_project, Time.now + service.openstack_cache_ttl ] - Fog::Identity::OpenStack::V3::Project.cache = cache + Fog::OpenStack::Identity::V3::Project.cache = cache end top_project end @@ -67,7 +67,7 @@ def find_by_id(id, options = []) private def project_from_hash(project_hash, service) - Fog::Identity::OpenStack::V3::Project.new(project_hash.merge(service: service)) + Fog::OpenStack::Identity::V3::Project.new(project_hash.merge(service: service)) end end end diff --git a/lib/fog/openstack/identity/v3/models/role.rb b/lib/fog/openstack/identity/v3/models/role.rb new file mode 100644 index 000000000..67a4414a2 --- /dev/null +++ b/lib/fog/openstack/identity/v3/models/role.rb @@ -0,0 +1,41 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Identity + class V3 + class Role < Fog::OpenStack::Model + identity :id + + attribute :name + attribute :links + + def to_s + name + end + + def destroy + requires :id + service.delete_role(id) + true + end + + def update(attr = nil) + requires :id + merge_attributes( + service.update_role(id, attr || attributes).body['role'] + ) + self + end + + def create + merge_attributes( + service.create_role(attributes).body['role'] + ) + self + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v3/models/role_assignment.rb b/lib/fog/openstack/identity/v3/models/role_assignment.rb similarity index 90% rename from lib/fog/identity/openstack/v3/models/role_assignment.rb rename to lib/fog/openstack/identity/v3/models/role_assignment.rb index 0fe981a00..2e8fc4df9 100644 --- a/lib/fog/identity/openstack/v3/models/role_assignment.rb +++ b/lib/fog/openstack/identity/v3/models/role_assignment.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class RoleAssignment < Fog::OpenStack::Model attribute :scope diff --git a/lib/fog/identity/openstack/v3/models/role_assignments.rb b/lib/fog/openstack/identity/v3/models/role_assignments.rb similarity index 82% rename from lib/fog/identity/openstack/v3/models/role_assignments.rb rename to lib/fog/openstack/identity/v3/models/role_assignments.rb index 5ebaa7f01..e1777c25f 100644 --- a/lib/fog/identity/openstack/v3/models/role_assignments.rb +++ b/lib/fog/openstack/identity/v3/models/role_assignments.rb @@ -1,12 +1,12 @@ require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v3/models/role' +require 'fog/openstack/identity/v3/models/role' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class RoleAssignments < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V3::RoleAssignment + model Fog::OpenStack::Identity::V3::RoleAssignment def all(options = {}) load_response(service.list_role_assignments(options), 'role_assignments') diff --git a/lib/fog/openstack/identity/v3/models/roles.rb b/lib/fog/openstack/identity/v3/models/roles.rb new file mode 100644 index 000000000..c2914f49f --- /dev/null +++ b/lib/fog/openstack/identity/v3/models/roles.rb @@ -0,0 +1,41 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/identity/v3/models/role' + +module Fog + module OpenStack + class Identity + class V3 + class Roles < Fog::OpenStack::Collection + model Fog::OpenStack::Identity::V3::Role + + def all(options = {}) + load_response(service.list_roles(options), 'roles') + end + + def assignments(options = {}) + # TODO(lsmola) this method doesn't make much sense, it should be moved to role.rb and automatically add + # role.id filter. Otherwise it's just duplication. + Fog::Logger.deprecation("Calling OpenStack[:keystone].roles.assignments(options) method which"\ + " deprecated, call OpenStack[:keystone].role_assignments.all(options) instead") + load(service.list_role_assignments(options).body['role_assignments']) + end + + def find_by_id(id) + cached_role = find { |role| role.id == id } + return cached_role if cached_role + + role_hash = service.get_role(id).body['role'] + Fog::OpenStack::Identity::V3.role.new( + role_hash.merge(service: service) + ) + end + + def destroy(id) + role = find_by_id(id) + role.destroy + end + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v3/models/service.rb b/lib/fog/openstack/identity/v3/models/service.rb new file mode 100644 index 000000000..15d0249ca --- /dev/null +++ b/lib/fog/openstack/identity/v3/models/service.rb @@ -0,0 +1,48 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Identity + class V3 + class Service < Fog::OpenStack::Model + identity :id + + attribute :description + attribute :type + attribute :name + attribute :links + + def to_s + name + end + + def destroy + requires :id + service.delete_service(id) + true + end + + def update(attr = nil) + requires :id + merge_attributes( + service.update_service(id, attr || attributes).body['service'] + ) + self + end + + def save + requires :name + identity ? update : create + end + + def create + merge_attributes( + service.create_service(attributes).body['service'] + ) + self + end + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v3/models/services.rb b/lib/fog/openstack/identity/v3/models/services.rb new file mode 100644 index 000000000..de90a6e6a --- /dev/null +++ b/lib/fog/openstack/identity/v3/models/services.rb @@ -0,0 +1,33 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/identity/v3/models/service' + +module Fog + module OpenStack + class Identity + class V3 + class Services < Fog::OpenStack::Collection + model Fog::OpenStack::Identity::V3::Service + + def all(options = {}) + load_response(service.list_services(options), 'services') + end + + def find_by_id(id) + cached_service = find { |service| service.id == id } + return cached_service if cached_service + + service_hash = service.get_service(id).body['service'] + Fog::OpenStack::Identity::V3::Service.new( + service_hash.merge(service: service) + ) + end + + def destroy(id) + service = find_by_id(id) + service.destroy + end + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v3/models/token.rb b/lib/fog/openstack/identity/v3/models/token.rb new file mode 100644 index 000000000..7e15c5fc1 --- /dev/null +++ b/lib/fog/openstack/identity/v3/models/token.rb @@ -0,0 +1,24 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Identity + class V3 + class Token < Fog::OpenStack::Model + attribute :value + attribute :catalog + attribute :expires_at + attribute :issued_at + attribute :methods + attribute :project + attribute :roles + attribute :user + + def to_s + value + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v3/models/tokens.rb b/lib/fog/openstack/identity/v3/models/tokens.rb similarity index 78% rename from lib/fog/identity/openstack/v3/models/tokens.rb rename to lib/fog/openstack/identity/v3/models/tokens.rb index db13e4130..b258ecaf7 100644 --- a/lib/fog/identity/openstack/v3/models/tokens.rb +++ b/lib/fog/openstack/identity/v3/models/tokens.rb @@ -1,17 +1,17 @@ require 'fog/openstack/models/collection' -require 'fog/identity/openstack/v3/models/service' +require 'fog/openstack/identity/v3/models/service' module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Tokens < Fog::OpenStack::Collection - model Fog::Identity::OpenStack::V3::Token + model Fog::OpenStack::Identity::V3::Token def authenticate(auth) response = service.token_authenticate(auth) token_hash = response.body['token'] - Fog::Identity::OpenStack::V3::Token.new( + Fog::OpenStack::Identity::V3::Token.new( token_hash.merge(service: service, value: response.headers['X-Subject-Token']) ) end @@ -19,7 +19,7 @@ def authenticate(auth) def validate(subject_token) response = service.token_validate(subject_token) token_hash = response.body['token'] - Fog::Identity::OpenStack::V3::Token.new( + Fog::OpenStack::Identity::V3::Token.new( token_hash.merge(service: service, value: response.headers['X-Subject-Token']) ) end diff --git a/lib/fog/openstack/identity/v3/models/user.rb b/lib/fog/openstack/identity/v3/models/user.rb new file mode 100644 index 000000000..70a677f90 --- /dev/null +++ b/lib/fog/openstack/identity/v3/models/user.rb @@ -0,0 +1,82 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Identity + class V3 + class User < Fog::OpenStack::Model + identity :id + + attribute :default_project_id + attribute :description + attribute :domain_id + attribute :email + attribute :enabled + attribute :name + attribute :links + attribute :password + + def to_s + name + end + + def groups + requires :id + service.list_user_groups(id).body['groups'] + end + + def projects + requires :id + service.list_user_projects(id).body['projects'] + end + + def roles + requires :id, :domain_id + service.list_domain_user_roles(domain_id, id).body['roles'] + end + + def grant_role(role_id) + requires :id, :domain_id + service.grant_domain_user_role(domain_id, id, role_id) + end + + def check_role(role_id) + requires :id, :domain_id + begin + service.check_domain_user_role(domain_id, id, role_id) + rescue Fog::OpenStack::Identity::NotFound + return false + end + true + end + + def revoke_role(role_id) + requires :id, :domain_id + service.revoke_domain_user_role(domain_id, id, role_id) + end + + def destroy + requires :id + service.delete_user(id) + true + end + + def update(attr = nil) + requires :id + merge_attributes( + service.update_user(id, attr || attributes).body['user'] + ) + self + end + + def create + merge_attributes( + service.create_user(attributes).body['user'] + ) + self + end + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v3/models/users.rb b/lib/fog/openstack/identity/v3/models/users.rb new file mode 100644 index 000000000..e96bdfa6e --- /dev/null +++ b/lib/fog/openstack/identity/v3/models/users.rb @@ -0,0 +1,37 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/identity/v3/models/domain' + +module Fog + module OpenStack + class Identity + class V3 + class Users < Fog::OpenStack::Collection + model Fog::OpenStack::Identity::V3::User + + def all(options = {}) + load_response(service.list_users(options), 'users') + end + + def find_by_id(id) + cached_user = find { |user| user.id == id } + return cached_user if cached_user + + user_hash = service.get_user(id).body['user'] + Fog::OpenStack::Identity::V3::User.new( + user_hash.merge(service: service) + ) + end + + def find_by_name(name, options = {}) + load(service.list_users(options.merge(name: name)).body["users"]) + end + + def destroy(id) + user = find_by_id(id) + user.destroy + end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v3/requests/add_user_to_group.rb b/lib/fog/openstack/identity/v3/requests/add_user_to_group.rb similarity index 89% rename from lib/fog/identity/openstack/v3/requests/add_user_to_group.rb rename to lib/fog/openstack/identity/v3/requests/add_user_to_group.rb index 86841af52..2c201e3e2 100644 --- a/lib/fog/identity/openstack/v3/requests/add_user_to_group.rb +++ b/lib/fog/openstack/identity/v3/requests/add_user_to_group.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def add_user_to_group(group_id, user_id) diff --git a/lib/fog/identity/openstack/v3/requests/auth_domains.rb b/lib/fog/openstack/identity/v3/requests/auth_domains.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/auth_domains.rb rename to lib/fog/openstack/identity/v3/requests/auth_domains.rb index be7ca88cc..a4d0cc1dd 100644 --- a/lib/fog/identity/openstack/v3/requests/auth_domains.rb +++ b/lib/fog/openstack/identity/v3/requests/auth_domains.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def auth_domains(options = {}) diff --git a/lib/fog/identity/openstack/v3/requests/auth_projects.rb b/lib/fog/openstack/identity/v3/requests/auth_projects.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/auth_projects.rb rename to lib/fog/openstack/identity/v3/requests/auth_projects.rb index 8221e8e98..0e4cbce14 100644 --- a/lib/fog/identity/openstack/v3/requests/auth_projects.rb +++ b/lib/fog/openstack/identity/v3/requests/auth_projects.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def auth_projects(options = {}) diff --git a/lib/fog/identity/openstack/v3/requests/check_domain_group_role.rb b/lib/fog/openstack/identity/v3/requests/check_domain_group_role.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/check_domain_group_role.rb rename to lib/fog/openstack/identity/v3/requests/check_domain_group_role.rb index b43909806..900efd97c 100644 --- a/lib/fog/identity/openstack/v3/requests/check_domain_group_role.rb +++ b/lib/fog/openstack/identity/v3/requests/check_domain_group_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def check_domain_group_role(id, group_id, role_id) diff --git a/lib/fog/identity/openstack/v3/requests/check_domain_user_role.rb b/lib/fog/openstack/identity/v3/requests/check_domain_user_role.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/check_domain_user_role.rb rename to lib/fog/openstack/identity/v3/requests/check_domain_user_role.rb index 9c21aa6b4..25188d9b5 100644 --- a/lib/fog/identity/openstack/v3/requests/check_domain_user_role.rb +++ b/lib/fog/openstack/identity/v3/requests/check_domain_user_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def check_domain_user_role(id, user_id, role_id) diff --git a/lib/fog/identity/openstack/v3/requests/check_project_group_role.rb b/lib/fog/openstack/identity/v3/requests/check_project_group_role.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/check_project_group_role.rb rename to lib/fog/openstack/identity/v3/requests/check_project_group_role.rb index d670daf1c..b6167d99c 100644 --- a/lib/fog/identity/openstack/v3/requests/check_project_group_role.rb +++ b/lib/fog/openstack/identity/v3/requests/check_project_group_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def check_project_group_role(id, group_id, role_id) diff --git a/lib/fog/identity/openstack/v3/requests/check_project_user_role.rb b/lib/fog/openstack/identity/v3/requests/check_project_user_role.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/check_project_user_role.rb rename to lib/fog/openstack/identity/v3/requests/check_project_user_role.rb index 5bbb58e78..ef8f550dc 100644 --- a/lib/fog/identity/openstack/v3/requests/check_project_user_role.rb +++ b/lib/fog/openstack/identity/v3/requests/check_project_user_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def check_project_user_role(id, user_id, role_id) diff --git a/lib/fog/identity/openstack/v3/requests/create_domain.rb b/lib/fog/openstack/identity/v3/requests/create_domain.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/create_domain.rb rename to lib/fog/openstack/identity/v3/requests/create_domain.rb index f3486d282..0921ef17d 100644 --- a/lib/fog/identity/openstack/v3/requests/create_domain.rb +++ b/lib/fog/openstack/identity/v3/requests/create_domain.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def create_domain(domain) diff --git a/lib/fog/identity/openstack/v3/requests/create_endpoint.rb b/lib/fog/openstack/identity/v3/requests/create_endpoint.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/create_endpoint.rb rename to lib/fog/openstack/identity/v3/requests/create_endpoint.rb index 996f8507f..7c20c867c 100644 --- a/lib/fog/identity/openstack/v3/requests/create_endpoint.rb +++ b/lib/fog/openstack/identity/v3/requests/create_endpoint.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def create_endpoint(endpoint) diff --git a/lib/fog/identity/openstack/v3/requests/create_group.rb b/lib/fog/openstack/identity/v3/requests/create_group.rb similarity index 89% rename from lib/fog/identity/openstack/v3/requests/create_group.rb rename to lib/fog/openstack/identity/v3/requests/create_group.rb index 352b68e48..e2af374ba 100644 --- a/lib/fog/identity/openstack/v3/requests/create_group.rb +++ b/lib/fog/openstack/identity/v3/requests/create_group.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def create_group(group) diff --git a/lib/fog/identity/openstack/v3/requests/create_os_credential.rb b/lib/fog/openstack/identity/v3/requests/create_os_credential.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/create_os_credential.rb rename to lib/fog/openstack/identity/v3/requests/create_os_credential.rb index 64e3b79c7..2c69ec43d 100644 --- a/lib/fog/identity/openstack/v3/requests/create_os_credential.rb +++ b/lib/fog/openstack/identity/v3/requests/create_os_credential.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def create_os_credential(credential) diff --git a/lib/fog/identity/openstack/v3/requests/create_policy.rb b/lib/fog/openstack/identity/v3/requests/create_policy.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/create_policy.rb rename to lib/fog/openstack/identity/v3/requests/create_policy.rb index 1254f0531..c29d3034a 100644 --- a/lib/fog/identity/openstack/v3/requests/create_policy.rb +++ b/lib/fog/openstack/identity/v3/requests/create_policy.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def create_policy(policy) diff --git a/lib/fog/identity/openstack/v3/requests/create_project.rb b/lib/fog/openstack/identity/v3/requests/create_project.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/create_project.rb rename to lib/fog/openstack/identity/v3/requests/create_project.rb index ae40a0764..1511d00e2 100644 --- a/lib/fog/identity/openstack/v3/requests/create_project.rb +++ b/lib/fog/openstack/identity/v3/requests/create_project.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def create_project(project) diff --git a/lib/fog/openstack/identity/v3/requests/create_role.rb b/lib/fog/openstack/identity/v3/requests/create_role.rb new file mode 100644 index 000000000..691be48b0 --- /dev/null +++ b/lib/fog/openstack/identity/v3/requests/create_role.rb @@ -0,0 +1,21 @@ +module Fog + module OpenStack + class Identity + class V3 + class Real + def create_role(role) + request( + expects: [201], + method: 'POST', + path: "roles", + body: Fog::JSON.encode(role: role) + ) + end + end + + class Mock + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v3/requests/create_service.rb b/lib/fog/openstack/identity/v3/requests/create_service.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/create_service.rb rename to lib/fog/openstack/identity/v3/requests/create_service.rb index 98d2d8c61..97ce45dda 100644 --- a/lib/fog/identity/openstack/v3/requests/create_service.rb +++ b/lib/fog/openstack/identity/v3/requests/create_service.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def create_service(service) diff --git a/lib/fog/openstack/identity/v3/requests/create_user.rb b/lib/fog/openstack/identity/v3/requests/create_user.rb new file mode 100644 index 000000000..972a22cf2 --- /dev/null +++ b/lib/fog/openstack/identity/v3/requests/create_user.rb @@ -0,0 +1,21 @@ +module Fog + module OpenStack + class Identity + class V3 + class Real + def create_user(user) + request( + expects: [201], + method: 'POST', + path: "users", + body: Fog::JSON.encode(user: user) + ) + end + end + + class Mock + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v3/requests/delete_domain.rb b/lib/fog/openstack/identity/v3/requests/delete_domain.rb similarity index 88% rename from lib/fog/identity/openstack/v3/requests/delete_domain.rb rename to lib/fog/openstack/identity/v3/requests/delete_domain.rb index 82fe222e3..3a8992c67 100644 --- a/lib/fog/identity/openstack/v3/requests/delete_domain.rb +++ b/lib/fog/openstack/identity/v3/requests/delete_domain.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def delete_domain(id) diff --git a/lib/fog/identity/openstack/v3/requests/delete_endpoint.rb b/lib/fog/openstack/identity/v3/requests/delete_endpoint.rb similarity index 88% rename from lib/fog/identity/openstack/v3/requests/delete_endpoint.rb rename to lib/fog/openstack/identity/v3/requests/delete_endpoint.rb index b0d4220ac..30484ec95 100644 --- a/lib/fog/identity/openstack/v3/requests/delete_endpoint.rb +++ b/lib/fog/openstack/identity/v3/requests/delete_endpoint.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def delete_endpoint(id) diff --git a/lib/fog/identity/openstack/v3/requests/delete_group.rb b/lib/fog/openstack/identity/v3/requests/delete_group.rb similarity index 88% rename from lib/fog/identity/openstack/v3/requests/delete_group.rb rename to lib/fog/openstack/identity/v3/requests/delete_group.rb index 52a8a1fb6..206e2d391 100644 --- a/lib/fog/identity/openstack/v3/requests/delete_group.rb +++ b/lib/fog/openstack/identity/v3/requests/delete_group.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def delete_group(id) diff --git a/lib/fog/identity/openstack/v3/requests/delete_os_credential.rb b/lib/fog/openstack/identity/v3/requests/delete_os_credential.rb similarity index 88% rename from lib/fog/identity/openstack/v3/requests/delete_os_credential.rb rename to lib/fog/openstack/identity/v3/requests/delete_os_credential.rb index 008bdd284..7b0ead35f 100644 --- a/lib/fog/identity/openstack/v3/requests/delete_os_credential.rb +++ b/lib/fog/openstack/identity/v3/requests/delete_os_credential.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def delete_os_credential(id) diff --git a/lib/fog/identity/openstack/v3/requests/delete_policy.rb b/lib/fog/openstack/identity/v3/requests/delete_policy.rb similarity index 88% rename from lib/fog/identity/openstack/v3/requests/delete_policy.rb rename to lib/fog/openstack/identity/v3/requests/delete_policy.rb index c5ce90994..b67a82e99 100644 --- a/lib/fog/identity/openstack/v3/requests/delete_policy.rb +++ b/lib/fog/openstack/identity/v3/requests/delete_policy.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def delete_policy(id) diff --git a/lib/fog/identity/openstack/v3/requests/delete_project.rb b/lib/fog/openstack/identity/v3/requests/delete_project.rb similarity index 88% rename from lib/fog/identity/openstack/v3/requests/delete_project.rb rename to lib/fog/openstack/identity/v3/requests/delete_project.rb index 764f80e70..9b037ba47 100644 --- a/lib/fog/identity/openstack/v3/requests/delete_project.rb +++ b/lib/fog/openstack/identity/v3/requests/delete_project.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def delete_project(id) diff --git a/lib/fog/openstack/identity/v3/requests/delete_role.rb b/lib/fog/openstack/identity/v3/requests/delete_role.rb new file mode 100644 index 000000000..82995cba0 --- /dev/null +++ b/lib/fog/openstack/identity/v3/requests/delete_role.rb @@ -0,0 +1,20 @@ +module Fog + module OpenStack + class Identity + class V3 + class Real + def delete_role(id) + request( + expects: [204], + method: 'DELETE', + path: "roles/#{id}" + ) + end + end + + class Mock + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v3/requests/delete_service.rb b/lib/fog/openstack/identity/v3/requests/delete_service.rb new file mode 100644 index 000000000..604ac2311 --- /dev/null +++ b/lib/fog/openstack/identity/v3/requests/delete_service.rb @@ -0,0 +1,20 @@ +module Fog + module OpenStack + class Identity + class V3 + class Real + def delete_service(id) + request( + expects: [204], + method: 'DELETE', + path: "services/#{id}" + ) + end + end + + class Mock + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v3/requests/delete_user.rb b/lib/fog/openstack/identity/v3/requests/delete_user.rb new file mode 100644 index 000000000..8d816aba2 --- /dev/null +++ b/lib/fog/openstack/identity/v3/requests/delete_user.rb @@ -0,0 +1,20 @@ +module Fog + module OpenStack + class Identity + class V3 + class Real + def delete_user(id) + request( + expects: [204], + method: 'DELETE', + path: "users/#{id}" + ) + end + end + + class Mock + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v3/requests/get_domain.rb b/lib/fog/openstack/identity/v3/requests/get_domain.rb similarity index 89% rename from lib/fog/identity/openstack/v3/requests/get_domain.rb rename to lib/fog/openstack/identity/v3/requests/get_domain.rb index 294b2f1b3..cdcf047bc 100644 --- a/lib/fog/identity/openstack/v3/requests/get_domain.rb +++ b/lib/fog/openstack/identity/v3/requests/get_domain.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def get_domain(id) diff --git a/lib/fog/identity/openstack/v3/requests/get_endpoint.rb b/lib/fog/openstack/identity/v3/requests/get_endpoint.rb similarity index 89% rename from lib/fog/identity/openstack/v3/requests/get_endpoint.rb rename to lib/fog/openstack/identity/v3/requests/get_endpoint.rb index f167af9c8..6eea30bb8 100644 --- a/lib/fog/identity/openstack/v3/requests/get_endpoint.rb +++ b/lib/fog/openstack/identity/v3/requests/get_endpoint.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def get_endpoint(id) diff --git a/lib/fog/identity/openstack/v3/requests/get_group.rb b/lib/fog/openstack/identity/v3/requests/get_group.rb similarity index 89% rename from lib/fog/identity/openstack/v3/requests/get_group.rb rename to lib/fog/openstack/identity/v3/requests/get_group.rb index 0d770a308..e38440c23 100644 --- a/lib/fog/identity/openstack/v3/requests/get_group.rb +++ b/lib/fog/openstack/identity/v3/requests/get_group.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def get_group(id) diff --git a/lib/fog/identity/openstack/v3/requests/get_os_credential.rb b/lib/fog/openstack/identity/v3/requests/get_os_credential.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/get_os_credential.rb rename to lib/fog/openstack/identity/v3/requests/get_os_credential.rb index 8d0c7f630..7688d3f95 100644 --- a/lib/fog/identity/openstack/v3/requests/get_os_credential.rb +++ b/lib/fog/openstack/identity/v3/requests/get_os_credential.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def get_os_credential(id) diff --git a/lib/fog/identity/openstack/v3/requests/get_policy.rb b/lib/fog/openstack/identity/v3/requests/get_policy.rb similarity index 89% rename from lib/fog/identity/openstack/v3/requests/get_policy.rb rename to lib/fog/openstack/identity/v3/requests/get_policy.rb index c1d98bd78..fa24ba65a 100644 --- a/lib/fog/identity/openstack/v3/requests/get_policy.rb +++ b/lib/fog/openstack/identity/v3/requests/get_policy.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def get_policy(id) diff --git a/lib/fog/openstack/identity/v3/requests/get_project.rb b/lib/fog/openstack/identity/v3/requests/get_project.rb new file mode 100644 index 000000000..05347ad0d --- /dev/null +++ b/lib/fog/openstack/identity/v3/requests/get_project.rb @@ -0,0 +1,22 @@ +module Fog + module OpenStack + class Identity + class V3 + class Real + def get_project(id, options = {}) + request( + expects: [200], + method: 'GET', + path: "projects/#{id}", + query: options + ) + end + end + + class Mock + def get_domain(id); end + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v3/requests/get_role.rb b/lib/fog/openstack/identity/v3/requests/get_role.rb new file mode 100644 index 000000000..f40b5c18c --- /dev/null +++ b/lib/fog/openstack/identity/v3/requests/get_role.rb @@ -0,0 +1,21 @@ +module Fog + module OpenStack + class Identity + class V3 + class Real + def get_role(id) + request( + expects: [200], + method: 'GET', + path: "roles/#{id}" + ) + end + end + + class Mock + def get_role(id); end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v3/requests/get_service.rb b/lib/fog/openstack/identity/v3/requests/get_service.rb similarity index 89% rename from lib/fog/identity/openstack/v3/requests/get_service.rb rename to lib/fog/openstack/identity/v3/requests/get_service.rb index 76b73e77a..588ba8e5d 100644 --- a/lib/fog/identity/openstack/v3/requests/get_service.rb +++ b/lib/fog/openstack/identity/v3/requests/get_service.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def get_service(id) diff --git a/lib/fog/identity/openstack/v3/requests/get_user.rb b/lib/fog/openstack/identity/v3/requests/get_user.rb similarity index 89% rename from lib/fog/identity/openstack/v3/requests/get_user.rb rename to lib/fog/openstack/identity/v3/requests/get_user.rb index c1b361a4f..8963e5801 100644 --- a/lib/fog/identity/openstack/v3/requests/get_user.rb +++ b/lib/fog/openstack/identity/v3/requests/get_user.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def get_user(id) diff --git a/lib/fog/identity/openstack/v3/requests/grant_domain_group_role.rb b/lib/fog/openstack/identity/v3/requests/grant_domain_group_role.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/grant_domain_group_role.rb rename to lib/fog/openstack/identity/v3/requests/grant_domain_group_role.rb index dc1ecc2c9..6172c1005 100644 --- a/lib/fog/identity/openstack/v3/requests/grant_domain_group_role.rb +++ b/lib/fog/openstack/identity/v3/requests/grant_domain_group_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def grant_domain_group_role(id, group_id, role_id) diff --git a/lib/fog/identity/openstack/v3/requests/grant_domain_user_role.rb b/lib/fog/openstack/identity/v3/requests/grant_domain_user_role.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/grant_domain_user_role.rb rename to lib/fog/openstack/identity/v3/requests/grant_domain_user_role.rb index fd394935a..03ed2d304 100644 --- a/lib/fog/identity/openstack/v3/requests/grant_domain_user_role.rb +++ b/lib/fog/openstack/identity/v3/requests/grant_domain_user_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def grant_domain_user_role(id, user_id, role_id) diff --git a/lib/fog/identity/openstack/v3/requests/grant_project_group_role.rb b/lib/fog/openstack/identity/v3/requests/grant_project_group_role.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/grant_project_group_role.rb rename to lib/fog/openstack/identity/v3/requests/grant_project_group_role.rb index 7003efa65..664b24575 100644 --- a/lib/fog/identity/openstack/v3/requests/grant_project_group_role.rb +++ b/lib/fog/openstack/identity/v3/requests/grant_project_group_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def grant_project_group_role(id, group_id, role_id) diff --git a/lib/fog/identity/openstack/v3/requests/grant_project_user_role.rb b/lib/fog/openstack/identity/v3/requests/grant_project_user_role.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/grant_project_user_role.rb rename to lib/fog/openstack/identity/v3/requests/grant_project_user_role.rb index a9326e0b3..2fba36d9f 100644 --- a/lib/fog/identity/openstack/v3/requests/grant_project_user_role.rb +++ b/lib/fog/openstack/identity/v3/requests/grant_project_user_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def grant_project_user_role(id, user_id, role_id) diff --git a/lib/fog/identity/openstack/v3/requests/group_user_check.rb b/lib/fog/openstack/identity/v3/requests/group_user_check.rb similarity index 89% rename from lib/fog/identity/openstack/v3/requests/group_user_check.rb rename to lib/fog/openstack/identity/v3/requests/group_user_check.rb index 511a407b1..2353b9555 100644 --- a/lib/fog/identity/openstack/v3/requests/group_user_check.rb +++ b/lib/fog/openstack/identity/v3/requests/group_user_check.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def group_user_check(group_id, user_id) diff --git a/lib/fog/identity/openstack/v3/requests/list_domain_group_roles.rb b/lib/fog/openstack/identity/v3/requests/list_domain_group_roles.rb similarity index 91% rename from lib/fog/identity/openstack/v3/requests/list_domain_group_roles.rb rename to lib/fog/openstack/identity/v3/requests/list_domain_group_roles.rb index e0ae4f7cc..732900150 100644 --- a/lib/fog/identity/openstack/v3/requests/list_domain_group_roles.rb +++ b/lib/fog/openstack/identity/v3/requests/list_domain_group_roles.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def list_domain_group_roles(id, group_id) diff --git a/lib/fog/identity/openstack/v3/requests/list_domain_user_roles.rb b/lib/fog/openstack/identity/v3/requests/list_domain_user_roles.rb similarity index 91% rename from lib/fog/identity/openstack/v3/requests/list_domain_user_roles.rb rename to lib/fog/openstack/identity/v3/requests/list_domain_user_roles.rb index 18f61422c..59484956d 100644 --- a/lib/fog/identity/openstack/v3/requests/list_domain_user_roles.rb +++ b/lib/fog/openstack/identity/v3/requests/list_domain_user_roles.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def list_domain_user_roles(id, user_id) diff --git a/lib/fog/openstack/identity/v3/requests/list_domains.rb b/lib/fog/openstack/identity/v3/requests/list_domains.rb new file mode 100644 index 000000000..766224c56 --- /dev/null +++ b/lib/fog/openstack/identity/v3/requests/list_domains.rb @@ -0,0 +1,22 @@ +module Fog + module OpenStack + class Identity + class V3 + class Real + def list_domains(options = {}) + request( + expects: [200], + method: 'GET', + path: "domains", + query: options + ) + end + end + + class Mock + def list_domains(options = {}); end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v3/requests/list_endpoints.rb b/lib/fog/openstack/identity/v3/requests/list_endpoints.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/list_endpoints.rb rename to lib/fog/openstack/identity/v3/requests/list_endpoints.rb index da68eb025..cd8915e03 100644 --- a/lib/fog/identity/openstack/v3/requests/list_endpoints.rb +++ b/lib/fog/openstack/identity/v3/requests/list_endpoints.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def list_endpoints(options = {}) diff --git a/lib/fog/identity/openstack/v3/requests/list_group_users.rb b/lib/fog/openstack/identity/v3/requests/list_group_users.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/list_group_users.rb rename to lib/fog/openstack/identity/v3/requests/list_group_users.rb index 725c57b3e..1fc0669b2 100644 --- a/lib/fog/identity/openstack/v3/requests/list_group_users.rb +++ b/lib/fog/openstack/identity/v3/requests/list_group_users.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def list_group_users(id, options = {}) diff --git a/lib/fog/identity/openstack/v3/requests/list_groups.rb b/lib/fog/openstack/identity/v3/requests/list_groups.rb similarity index 94% rename from lib/fog/identity/openstack/v3/requests/list_groups.rb rename to lib/fog/openstack/identity/v3/requests/list_groups.rb index f6b23a7e2..45d8fe458 100644 --- a/lib/fog/identity/openstack/v3/requests/list_groups.rb +++ b/lib/fog/openstack/identity/v3/requests/list_groups.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def list_groups(options = {}) diff --git a/lib/fog/identity/openstack/v3/requests/list_os_credentials.rb b/lib/fog/openstack/identity/v3/requests/list_os_credentials.rb similarity index 91% rename from lib/fog/identity/openstack/v3/requests/list_os_credentials.rb rename to lib/fog/openstack/identity/v3/requests/list_os_credentials.rb index 8f29d1f5d..280b96754 100644 --- a/lib/fog/identity/openstack/v3/requests/list_os_credentials.rb +++ b/lib/fog/openstack/identity/v3/requests/list_os_credentials.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def list_os_credentials(options = {}) diff --git a/lib/fog/identity/openstack/v3/requests/list_policies.rb b/lib/fog/openstack/identity/v3/requests/list_policies.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/list_policies.rb rename to lib/fog/openstack/identity/v3/requests/list_policies.rb index 7c25ec75b..1061a18fc 100644 --- a/lib/fog/identity/openstack/v3/requests/list_policies.rb +++ b/lib/fog/openstack/identity/v3/requests/list_policies.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def list_policies(options = {}) diff --git a/lib/fog/identity/openstack/v3/requests/list_project_group_roles.rb b/lib/fog/openstack/identity/v3/requests/list_project_group_roles.rb similarity index 91% rename from lib/fog/identity/openstack/v3/requests/list_project_group_roles.rb rename to lib/fog/openstack/identity/v3/requests/list_project_group_roles.rb index 566f6d8c9..b76985f2d 100644 --- a/lib/fog/identity/openstack/v3/requests/list_project_group_roles.rb +++ b/lib/fog/openstack/identity/v3/requests/list_project_group_roles.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def list_project_group_roles(id, group_id) diff --git a/lib/fog/identity/openstack/v3/requests/list_project_user_roles.rb b/lib/fog/openstack/identity/v3/requests/list_project_user_roles.rb similarity index 91% rename from lib/fog/identity/openstack/v3/requests/list_project_user_roles.rb rename to lib/fog/openstack/identity/v3/requests/list_project_user_roles.rb index 4c73b9945..4f0d72a83 100644 --- a/lib/fog/identity/openstack/v3/requests/list_project_user_roles.rb +++ b/lib/fog/openstack/identity/v3/requests/list_project_user_roles.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def list_project_user_roles(id, user_id) diff --git a/lib/fog/identity/openstack/v3/requests/list_projects.rb b/lib/fog/openstack/identity/v3/requests/list_projects.rb similarity index 94% rename from lib/fog/identity/openstack/v3/requests/list_projects.rb rename to lib/fog/openstack/identity/v3/requests/list_projects.rb index e2c17e99d..f18fd738d 100644 --- a/lib/fog/identity/openstack/v3/requests/list_projects.rb +++ b/lib/fog/openstack/identity/v3/requests/list_projects.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def list_projects(options = {}) diff --git a/lib/fog/identity/openstack/v3/requests/list_role_assignments.rb b/lib/fog/openstack/identity/v3/requests/list_role_assignments.rb similarity index 96% rename from lib/fog/identity/openstack/v3/requests/list_role_assignments.rb rename to lib/fog/openstack/identity/v3/requests/list_role_assignments.rb index 3b3a4d599..ca0e183d3 100644 --- a/lib/fog/identity/openstack/v3/requests/list_role_assignments.rb +++ b/lib/fog/openstack/identity/v3/requests/list_role_assignments.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def list_role_assignments(options = {}) diff --git a/lib/fog/openstack/identity/v3/requests/list_roles.rb b/lib/fog/openstack/identity/v3/requests/list_roles.rb new file mode 100644 index 000000000..58adb6896 --- /dev/null +++ b/lib/fog/openstack/identity/v3/requests/list_roles.rb @@ -0,0 +1,22 @@ +module Fog + module OpenStack + class Identity + class V3 + class Real + def list_roles(options = {}) + request( + expects: [200], + method: 'GET', + path: "roles", + query: options + ) + end + end + + class Mock + def list_roles(options = {}); end + end + end + end + end +end diff --git a/lib/fog/openstack/identity/v3/requests/list_services.rb b/lib/fog/openstack/identity/v3/requests/list_services.rb new file mode 100644 index 000000000..5997ea863 --- /dev/null +++ b/lib/fog/openstack/identity/v3/requests/list_services.rb @@ -0,0 +1,22 @@ +module Fog + module OpenStack + class Identity + class V3 + class Real + def list_services(options = {}) + request( + expects: [200], + method: 'GET', + path: "services", + query: options + ) + end + end + + class Mock + def list_services(options = {}); end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v3/requests/list_user_groups.rb b/lib/fog/openstack/identity/v3/requests/list_user_groups.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/list_user_groups.rb rename to lib/fog/openstack/identity/v3/requests/list_user_groups.rb index ef97a4ea4..e489009b4 100644 --- a/lib/fog/identity/openstack/v3/requests/list_user_groups.rb +++ b/lib/fog/openstack/identity/v3/requests/list_user_groups.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def list_user_groups(user_id) diff --git a/lib/fog/identity/openstack/v3/requests/list_user_projects.rb b/lib/fog/openstack/identity/v3/requests/list_user_projects.rb similarity index 91% rename from lib/fog/identity/openstack/v3/requests/list_user_projects.rb rename to lib/fog/openstack/identity/v3/requests/list_user_projects.rb index b33ef59a8..28c3ee9f2 100644 --- a/lib/fog/identity/openstack/v3/requests/list_user_projects.rb +++ b/lib/fog/openstack/identity/v3/requests/list_user_projects.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def list_user_projects(user_id, options = {}) diff --git a/lib/fog/openstack/identity/v3/requests/list_users.rb b/lib/fog/openstack/identity/v3/requests/list_users.rb new file mode 100644 index 000000000..7d3aad686 --- /dev/null +++ b/lib/fog/openstack/identity/v3/requests/list_users.rb @@ -0,0 +1,22 @@ +module Fog + module OpenStack + class Identity + class V3 + class Real + def list_users(options = {}) + request( + expects: [200], + method: 'GET', + path: "users", + query: options + ) + end + end + + class Mock + def list_users(options = {}); end + end + end + end + end +end diff --git a/lib/fog/identity/openstack/v3/requests/remove_user_from_group.rb b/lib/fog/openstack/identity/v3/requests/remove_user_from_group.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/remove_user_from_group.rb rename to lib/fog/openstack/identity/v3/requests/remove_user_from_group.rb index f7e7f75be..7bf1a7245 100644 --- a/lib/fog/identity/openstack/v3/requests/remove_user_from_group.rb +++ b/lib/fog/openstack/identity/v3/requests/remove_user_from_group.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def remove_user_from_group(group_id, user_id) diff --git a/lib/fog/identity/openstack/v3/requests/revoke_domain_group_role.rb b/lib/fog/openstack/identity/v3/requests/revoke_domain_group_role.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/revoke_domain_group_role.rb rename to lib/fog/openstack/identity/v3/requests/revoke_domain_group_role.rb index 5b0aaa357..b619bc890 100644 --- a/lib/fog/identity/openstack/v3/requests/revoke_domain_group_role.rb +++ b/lib/fog/openstack/identity/v3/requests/revoke_domain_group_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def revoke_domain_group_role(id, group_id, role_id) diff --git a/lib/fog/identity/openstack/v3/requests/revoke_domain_user_role.rb b/lib/fog/openstack/identity/v3/requests/revoke_domain_user_role.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/revoke_domain_user_role.rb rename to lib/fog/openstack/identity/v3/requests/revoke_domain_user_role.rb index 59cfe1509..eb8772944 100644 --- a/lib/fog/identity/openstack/v3/requests/revoke_domain_user_role.rb +++ b/lib/fog/openstack/identity/v3/requests/revoke_domain_user_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def revoke_domain_user_role(id, user_id, role_id) diff --git a/lib/fog/identity/openstack/v3/requests/revoke_project_group_role.rb b/lib/fog/openstack/identity/v3/requests/revoke_project_group_role.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/revoke_project_group_role.rb rename to lib/fog/openstack/identity/v3/requests/revoke_project_group_role.rb index ae992493d..8d7dd595c 100644 --- a/lib/fog/identity/openstack/v3/requests/revoke_project_group_role.rb +++ b/lib/fog/openstack/identity/v3/requests/revoke_project_group_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def revoke_project_group_role(id, group_id, role_id) diff --git a/lib/fog/identity/openstack/v3/requests/revoke_project_user_role.rb b/lib/fog/openstack/identity/v3/requests/revoke_project_user_role.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/revoke_project_user_role.rb rename to lib/fog/openstack/identity/v3/requests/revoke_project_user_role.rb index 912eb71c5..a7c9d2021 100644 --- a/lib/fog/identity/openstack/v3/requests/revoke_project_user_role.rb +++ b/lib/fog/openstack/identity/v3/requests/revoke_project_user_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def revoke_project_user_role(id, user_id, role_id) diff --git a/lib/fog/identity/openstack/v3/requests/token_authenticate.rb b/lib/fog/openstack/identity/v3/requests/token_authenticate.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/token_authenticate.rb rename to lib/fog/openstack/identity/v3/requests/token_authenticate.rb index a9f6bc36b..f6200b65e 100644 --- a/lib/fog/identity/openstack/v3/requests/token_authenticate.rb +++ b/lib/fog/openstack/identity/v3/requests/token_authenticate.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def token_authenticate(auth) diff --git a/lib/fog/identity/openstack/v3/requests/token_check.rb b/lib/fog/openstack/identity/v3/requests/token_check.rb similarity index 91% rename from lib/fog/identity/openstack/v3/requests/token_check.rb rename to lib/fog/openstack/identity/v3/requests/token_check.rb index 8c971ed9a..5859f3464 100644 --- a/lib/fog/identity/openstack/v3/requests/token_check.rb +++ b/lib/fog/openstack/identity/v3/requests/token_check.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def token_check(subject_token) diff --git a/lib/fog/identity/openstack/v3/requests/token_revoke.rb b/lib/fog/openstack/identity/v3/requests/token_revoke.rb similarity index 91% rename from lib/fog/identity/openstack/v3/requests/token_revoke.rb rename to lib/fog/openstack/identity/v3/requests/token_revoke.rb index 6a6951506..9d3c9597c 100644 --- a/lib/fog/identity/openstack/v3/requests/token_revoke.rb +++ b/lib/fog/openstack/identity/v3/requests/token_revoke.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def token_revoke(subject_token) diff --git a/lib/fog/identity/openstack/v3/requests/token_validate.rb b/lib/fog/openstack/identity/v3/requests/token_validate.rb similarity index 91% rename from lib/fog/identity/openstack/v3/requests/token_validate.rb rename to lib/fog/openstack/identity/v3/requests/token_validate.rb index d7f89e8e7..ce732bbc4 100644 --- a/lib/fog/identity/openstack/v3/requests/token_validate.rb +++ b/lib/fog/openstack/identity/v3/requests/token_validate.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def token_validate(subject_token) diff --git a/lib/fog/identity/openstack/v3/requests/update_domain.rb b/lib/fog/openstack/identity/v3/requests/update_domain.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/update_domain.rb rename to lib/fog/openstack/identity/v3/requests/update_domain.rb index 0e45a21ec..f35c3e456 100644 --- a/lib/fog/identity/openstack/v3/requests/update_domain.rb +++ b/lib/fog/openstack/identity/v3/requests/update_domain.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def update_domain(id, domain) diff --git a/lib/fog/identity/openstack/v3/requests/update_endpoint.rb b/lib/fog/openstack/identity/v3/requests/update_endpoint.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/update_endpoint.rb rename to lib/fog/openstack/identity/v3/requests/update_endpoint.rb index 9f8e7aea9..bf4c95881 100644 --- a/lib/fog/identity/openstack/v3/requests/update_endpoint.rb +++ b/lib/fog/openstack/identity/v3/requests/update_endpoint.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def update_endpoint(id, endpoint) diff --git a/lib/fog/identity/openstack/v3/requests/update_group.rb b/lib/fog/openstack/identity/v3/requests/update_group.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/update_group.rb rename to lib/fog/openstack/identity/v3/requests/update_group.rb index 484682685..00223629a 100644 --- a/lib/fog/identity/openstack/v3/requests/update_group.rb +++ b/lib/fog/openstack/identity/v3/requests/update_group.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def update_group(id, group) diff --git a/lib/fog/identity/openstack/v3/requests/update_os_credential.rb b/lib/fog/openstack/identity/v3/requests/update_os_credential.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/update_os_credential.rb rename to lib/fog/openstack/identity/v3/requests/update_os_credential.rb index 17d49a8a3..669e31dc3 100644 --- a/lib/fog/identity/openstack/v3/requests/update_os_credential.rb +++ b/lib/fog/openstack/identity/v3/requests/update_os_credential.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def update_os_credential(id, credential) diff --git a/lib/fog/identity/openstack/v3/requests/update_policy.rb b/lib/fog/openstack/identity/v3/requests/update_policy.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/update_policy.rb rename to lib/fog/openstack/identity/v3/requests/update_policy.rb index bbcd32744..c8a28aa8c 100644 --- a/lib/fog/identity/openstack/v3/requests/update_policy.rb +++ b/lib/fog/openstack/identity/v3/requests/update_policy.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def update_policy(id, policy) diff --git a/lib/fog/identity/openstack/v3/requests/update_project.rb b/lib/fog/openstack/identity/v3/requests/update_project.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/update_project.rb rename to lib/fog/openstack/identity/v3/requests/update_project.rb index 12aa42518..7d86def5e 100644 --- a/lib/fog/identity/openstack/v3/requests/update_project.rb +++ b/lib/fog/openstack/identity/v3/requests/update_project.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def update_project(id, project) diff --git a/lib/fog/identity/openstack/v3/requests/update_role.rb b/lib/fog/openstack/identity/v3/requests/update_role.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/update_role.rb rename to lib/fog/openstack/identity/v3/requests/update_role.rb index 09488f6c0..386b9ef2c 100644 --- a/lib/fog/identity/openstack/v3/requests/update_role.rb +++ b/lib/fog/openstack/identity/v3/requests/update_role.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def update_role(id, role) diff --git a/lib/fog/identity/openstack/v3/requests/update_service.rb b/lib/fog/openstack/identity/v3/requests/update_service.rb similarity index 90% rename from lib/fog/identity/openstack/v3/requests/update_service.rb rename to lib/fog/openstack/identity/v3/requests/update_service.rb index 227605daf..95dec777b 100644 --- a/lib/fog/identity/openstack/v3/requests/update_service.rb +++ b/lib/fog/openstack/identity/v3/requests/update_service.rb @@ -1,6 +1,6 @@ module Fog - module Identity - class OpenStack + module OpenStack + class Identity class V3 class Real def update_service(id, service) diff --git a/lib/fog/openstack/identity/v3/requests/update_user.rb b/lib/fog/openstack/identity/v3/requests/update_user.rb new file mode 100644 index 000000000..4f0439757 --- /dev/null +++ b/lib/fog/openstack/identity/v3/requests/update_user.rb @@ -0,0 +1,21 @@ +module Fog + module OpenStack + class Identity + class V3 + class Real + def update_user(id, user) + request( + expects: [200], + method: 'PATCH', + path: "users/#{id}", + body: Fog::JSON.encode(user: user) + ) + end + end + + class Mock + end + end + end + end +end diff --git a/lib/fog/openstack/image.rb b/lib/fog/openstack/image.rb new file mode 100644 index 000000000..3f08404b4 --- /dev/null +++ b/lib/fog/openstack/image.rb @@ -0,0 +1,21 @@ +module Fog + module OpenStack + class Image < Fog::Service + autoload :V1, 'fog/openstack/image/v1' + autoload :V2, 'fog/openstack/image/v2' + + # Fog::OpenStack::Image.new() will return a Fog::OpenStack::Image::V2 or a Fog::OpenStack::Image::V1, + # choosing the latest available + def self.new(args = {}) + @openstack_auth_uri = URI.parse(args[:openstack_auth_url]) if args[:openstack_auth_url] + if inspect == 'Fog::OpenStack::Image' + service = Fog::OpenStack::Image::V2.new(args) unless args.empty? + service ||= Fog::OpenStack::Image::V1.new(args) + else + service = Fog::Service.new(args) + end + service + end + end + end +end diff --git a/lib/fog/openstack/image/v1.rb b/lib/fog/openstack/image/v1.rb new file mode 100644 index 000000000..9f63e5adb --- /dev/null +++ b/lib/fog/openstack/image/v1.rb @@ -0,0 +1,120 @@ +require 'fog/openstack/image' + +module Fog + module OpenStack + class Image + class V1 < Fog::Service + SUPPORTED_VERSIONS = /v1(\.(0|1))*/.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version + + model_path 'fog/openstack/image/v1/models' + + model :image + collection :images + + request_path 'fog/openstack/image/v1/requests' + + request :list_public_images + request :list_public_images_detailed + request :get_image + request :create_image + request :update_image + request :get_image_members + request :update_image_members + request :get_shared_images + request :add_member_to_image + request :remove_member_from_image + request :delete_image + request :get_image_by_id + request :set_tenant + + class Mock + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + images: {} + } + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 9292 + management_url.path = '/v1' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].detect { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_region: @openstack_region, + openstack_management_url: @openstack_management_url } + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Image::NotFound + end + + def default_endpoint_type + 'admin' + end + + def default_path_prefix + 'v1' + end + + def default_service_type + %w[imagev1] + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v1/models/image.rb b/lib/fog/openstack/image/v1/models/image.rb new file mode 100644 index 000000000..dfd3eae11 --- /dev/null +++ b/lib/fog/openstack/image/v1/models/image.rb @@ -0,0 +1,78 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Image + class V1 + class Image < Fog::OpenStack::Model + identity :id + + attribute :name + attribute :size + attribute :disk_format + attribute :container_format + attribute :id + attribute :checksum + + # detailed + attribute :min_disk + attribute :created_at + attribute :deleted_at + attribute :updated_at + attribute :deleted + attribute :protected + attribute :is_public + attribute :status + attribute :min_ram + attribute :owner + attribute :properties + attribute :location + attribute :copy_from + + def create + requires :name + merge_attributes(service.create_image(attributes).body['image']) + self + end + + def update + requires :name + merge_attributes(service.update_image(attributes).body['image']) + self + end + + def destroy + requires :id + service.delete_image(id) + true + end + + def add_member(member_id) + requires :id + service.add_member_to_image(id, member_id) + end + + def remove_member(member_id) + requires :id + service.remove_member_from_image(id, member_id) + end + + def update_members(members) + requires :id + service.update_image_members(id, members) + end + + def members + requires :id + service.get_image_members(id).body['members'] + end + + def metadata + requires :id + service.get_image(id).headers + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v1/models/images.rb b/lib/fog/openstack/image/v1/models/images.rb new file mode 100644 index 000000000..082154dd0 --- /dev/null +++ b/lib/fog/openstack/image/v1/models/images.rb @@ -0,0 +1,108 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/image/v1/models/image' + +module Fog + module OpenStack + class Image + class V1 + class Images < Fog::OpenStack::Collection + model Fog::OpenStack::Image::V1::Image + + def all(options = {}) + load_response(service.list_public_images_detailed(options), 'images') + end + + def summary(options = {}) + load_response(service.list_public_images(options), 'images') + end + + def details(options = {}, deprecated_query = nil) + Fog::Logger.deprecation("Calling OpenStack[:glance].images.details will be removed, "\ + " call .images.all for detailed list.") + load_response(service.list_public_images_detailed(options, deprecated_query), 'images') + end + + def find_by_id(id) + marker = 'X-Image-Meta-' + property_marker = 'X-Image-Meta-Property-' + headers = service.get_image_by_id(id).headers.select { |h, _| h.start_with?(marker) } + + # partioning on the longer prefix, leaving X-Image-Meta + # headers in the second returned hash. + custom_properties, params = headers.partition { |k, _| k.start_with?(property_marker) }.map { |p| Hash[p] } + + params = remove_prefix_and_convert_type(params, marker) + custom_properties = remove_prefix_and_convert_type(custom_properties, property_marker) + + params['properties'] = custom_properties + new(params) + rescue Fog::OpenStack::Image::NotFound + nil + end + alias get find_by_id + + def public + images = load(service.list_public_images_detailed.body['images']) + images.delete_if { |image| image.is_public == false } + end + + def private + images = load(service.list_public_images_detailed.body['images']) + images.delete_if(&:is_public) + end + + def destroy(id) + image = find_by_id(id) + image.destroy + end + + def method_missing(method_sym, *arguments, &block) + if method_sym.to_s =~ /^find_by_(.*)$/ + load(service.list_public_images_detailed(Regexp.last_match(1), arguments.first).body['images']) + else + super + end + end + + def respond_to_missing?(method_sym, include_private = false) + method_sym.to_s.start_with?('find_by_') || super + end + + def find_by_size_min(size) + find_attribute(__method__, size) + end + + def find_by_size_max(size) + find_attribute(__method__, size) + end + + def find_attribute(attribute, value) + attribute = attribute.to_s.gsub("find_by_", "") + load(service.list_public_images_detailed(attribute, value).body['images']) + end + + private + + def convert_to_type(value) + case value + when /^\d+$/ + value.to_i + when 'True' + true + when 'False' + false + when /^\d\d\d\d\-\d\d\-\d\dT/ + ::Time.parse(value) + else + value + end + end + + def remove_prefix_and_convert_type(hash, prefix) + Hash[hash.map { |k, v| [k.gsub(prefix, '').downcase, convert_to_type(v)] }] + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v1/requests/add_member_to_image.rb b/lib/fog/openstack/image/v1/requests/add_member_to_image.rb new file mode 100644 index 000000000..d963ce132 --- /dev/null +++ b/lib/fog/openstack/image/v1/requests/add_member_to_image.rb @@ -0,0 +1,25 @@ +module Fog + module OpenStack + class Image + class V1 + class Real + def add_member_to_image(image_id, tenant_id) + request( + expects: [200, 204], + method: 'PUT', + path: "images/#{image_id}/members/#{tenant_id}" + ) + end + end + + class Mock + def add_member_to_image(_image_id, _tenant_id) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v1/requests/create_image.rb b/lib/fog/openstack/image/v1/requests/create_image.rb new file mode 100644 index 000000000..2b9e12c69 --- /dev/null +++ b/lib/fog/openstack/image/v1/requests/create_image.rb @@ -0,0 +1,78 @@ +module Fog + module OpenStack + class Image + class V1 + class Real + def create_image(attributes) + data = { + 'Content-Type' => 'application/octet-stream', + 'x-image-meta-name' => attributes[:name], + 'x-image-meta-disk-format' => attributes[:disk_format], + 'x-image-meta-container-format' => attributes[:container_format], + 'x-image-meta-size' => attributes[:size], + 'x-image-meta-is-public' => attributes[:is_public], + 'x-image-meta-min-ram' => attributes[:min_ram], + 'x-image-meta-min-disk' => attributes[:min_disk], + 'x-image-meta-checksum' => attributes[:checksum], + 'x-image-meta-owner' => attributes[:owner], + 'x-glance-api-copy-from' => attributes[:copy_from] + }.reject { |_k, v| v.nil? } + + body = '' + if attributes[:location] + body = File.open(attributes[:location], "rb") + # Make sure the image file size is always present + data['x-image-meta-size'] = File.size(body) + end + + unless attributes[:properties].nil? + attributes[:properties].each do |key, value| + data["x-image-meta-property-#{key}"] = value + end + end + + request( + headers: data, + body: body, + expects: 201, + method: 'POST', + path: "images" + ) + ensure + body.close if body.respond_to?(:close) + end + end + + class Mock + def create_image(attributes) + response = Excon::Response.new + response.status = 201 + + image_id = Fog::Mock.random_hex(32) + image = data[:images][image_id] = { + 'name' => attributes[:name], + 'size' => attributes[:size] || Fog::Mock.random_numbers(8).to_i, + 'min_disk' => attributes[:min_disk] || 0, + 'disk_format' => attributes[:disk_format] || 'raw', + 'created_at' => Time.now.strftime('%FT%T.%6N'), + 'container_format' => attributes[:container_format] || 'bare', + 'deleted_at' => nil, + 'updated_at' => Time.now.strftime('%FT%T.%6N'), + 'checksum' => attributes[:checksum] || Fog::Mock.random_hex(32), + 'id' => image_id, + 'deleted' => false, + 'protected' => false, + 'is_public' => attributes[:is_public].to_s == 'true', + 'status' => 'queued', + 'min_ram' => attributes[:min_ram] || 0, + 'owner' => attributes[:owner], + 'properties' => attributes[:properties] || {} + } + response.body = { 'image' => image } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v1/requests/delete_image.rb b/lib/fog/openstack/image/v1/requests/delete_image.rb new file mode 100644 index 000000000..948cb9176 --- /dev/null +++ b/lib/fog/openstack/image/v1/requests/delete_image.rb @@ -0,0 +1,25 @@ +module Fog + module OpenStack + class Image + class V1 + class Real + def delete_image(image_id) + request( + expects: 200, + method: 'DELETE', + path: "images/#{image_id}" + ) + end + end + + class Mock + def delete_image(_image_id) + response = Excon::Response.new + response.status = 200 + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v1/requests/get_image.rb b/lib/fog/openstack/image/v1/requests/get_image.rb new file mode 100644 index 000000000..b7237273f --- /dev/null +++ b/lib/fog/openstack/image/v1/requests/get_image.rb @@ -0,0 +1,47 @@ +module Fog + module OpenStack + class Image + class V1 + class Real + def get_image(image_id) + request( + expects: [200, 204], + method: 'HEAD', + path: "images/#{image_id}" + ) + end + end + + class Mock + def get_image(_image_id) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.headers = { "X-Image-Meta-Is_public" => "True", + "X-Image-Meta-Min_disk" => "0", + "X-Image-Meta-Property-Ramdisk_id" => "b45aa128-cd36-4ad9-a026-1a1c2bfd8fdc", + "X-Image-Meta-Disk_format" => "ami", + "X-Image-Meta-Created_at" => "2012-02-21T07:32:26", + "X-Image-Meta-Container_format" => "ami", + "Etag" => "2f81976cae15c16ef0010c51e3a6c163", + "Location" => "http://192.168.27.100:9292/v1/images/0e09fbd6-43c5-448a-83e9-0d3d05f9747e", + "X-Image-Meta-Protected" => "False", + "Date" => "Fri, 24 Feb 2012 02:14:25 GMT", + "X-Image-Meta-Name" => "cirros-0.3.0-x86_64-blank", + "X-Image-Meta-Min_ram" => "0", "Content-Type" => "text/html; charset=UTF-8", + "X-Image-Meta-Updated_at" => "2012-02-21T07:32:29", + "X-Image-Meta-Property-Kernel_id" => "cd28951e-e1c2-4bc5-95d3-f0495abbcdc5", + "X-Image-Meta-Size" => "25165824", + "X-Image-Meta-Checksum" => "2f81976cae15c16ef0010c51e3a6c163", + "X-Image-Meta-Deleted" => "False", + "Content-Length" => "0", + "X-Image-Meta-Owner" => "ff528b20431645ebb5fa4b0a71ca002f", + "X-Image-Meta-Status" => "active", + "X-Image-Meta-Id" => "0e09fbd6-43c5-448a-83e9-0d3d05f9747e" } + response.body = "" + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v1/requests/get_image_by_id.rb b/lib/fog/openstack/image/v1/requests/get_image_by_id.rb new file mode 100644 index 000000000..f670eeede --- /dev/null +++ b/lib/fog/openstack/image/v1/requests/get_image_by_id.rb @@ -0,0 +1,44 @@ +module Fog + module OpenStack + class Image + class V1 + class Real + def get_image_by_id(image_id) + request( + expects: [200], + method: 'HEAD', + path: "images/#{image_id}" + ) + end + end + + class Mock + def get_image_by_id(image_id) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.headers = { + 'X-Image-Meta-Checksum' => '8a40c862b5735975d82605c1dd395796', + 'X-Image-Meta-Container_format' => 'aki', + 'X-Image-Meta-Created_at' => '2016-01-06T03:22:20.000000', + 'X-Image-Meta-Deleted' => 'False', + 'X-Image-Meta-Disk_format' => 'aki', + 'X-Image-Meta-Id' => image_id, + 'X-Image-Meta-Is_public' => 'True', + 'X-Image-Meta-Min_disk' => 0, + 'X-Image-Meta-Min_ram' => 0, + 'X-Image-Meta-Name' => 'cirros-0.3.4-x86_64-uec-kernel', + 'X-Image-Meta-Owner' => '13cc6052265b41529e2fd0fc461fa8ef', + 'X-Image-Meta-Protected' => 'False', + 'X-Image-Meta-Size' => 4979632, + 'X-Image-Meta-Status' => 'deactivated', + 'X-Image-Meta-Updated_at' => '2016-02-25T03:02:05.000000', + 'X-Image-Meta-Property-foo' => 'bar' + } + response.body = {} + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v1/requests/get_image_members.rb b/lib/fog/openstack/image/v1/requests/get_image_members.rb new file mode 100644 index 000000000..9ac3ad015 --- /dev/null +++ b/lib/fog/openstack/image/v1/requests/get_image_members.rb @@ -0,0 +1,31 @@ +module Fog + module OpenStack + class Image + class V1 + class Real + def get_image_members(image_id) + request( + expects: [200, 204], + method: 'GET', + path: "images/#{image_id}/members" + ) + end + end + + class Mock + def get_image_members(_image_id) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.body = { + "members" => [ + { "member_id" => "ff528b20431645ebb5fa4b0a71ca002f", + "can_share" => false } + ] + } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v1/requests/get_shared_images.rb b/lib/fog/openstack/image/v1/requests/get_shared_images.rb new file mode 100644 index 000000000..de3067837 --- /dev/null +++ b/lib/fog/openstack/image/v1/requests/get_shared_images.rb @@ -0,0 +1,31 @@ +module Fog + module OpenStack + class Image + class V1 + class Real + def get_shared_images(tenant_id) + request( + expects: [200, 204], + method: 'GET', + path: "shared-images/#{tenant_id}" + ) + end + end + + class Mock + def get_shared_images(_tenant_id) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.body = { + "shared_images" => [ + { "image_id" => "ff528b20431645ebb5fa4b0a71ca002f", + "can_share" => false } + ] + } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v1/requests/list_public_images.rb b/lib/fog/openstack/image/v1/requests/list_public_images.rb new file mode 100644 index 000000000..61236bd5d --- /dev/null +++ b/lib/fog/openstack/image/v1/requests/list_public_images.rb @@ -0,0 +1,36 @@ +module Fog + module OpenStack + class Image + class V1 + class Real + def list_public_images(options = {}) + request( + expects: [200, 204], + method: 'GET', + path: 'images', + query: options + ) + end + end + + class Mock + def list_public_images(_options = {}) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.body = { + "images" => [{ + "name" => Fog::Mock.random_letters(10), + "size" => Fog::Mock.random_numbers(8).to_i, + "disk_format" => "iso", + "container_format" => "bare", + "id" => Fog::Mock.random_hex(36), + "checksum" => Fog::Mock.random_hex(32) + }] + } + response + end + end + end + end + end +end diff --git a/lib/fog/image/openstack/v1/requests/list_public_images_detailed.rb b/lib/fog/openstack/image/v1/requests/list_public_images_detailed.rb similarity index 96% rename from lib/fog/image/openstack/v1/requests/list_public_images_detailed.rb rename to lib/fog/openstack/image/v1/requests/list_public_images_detailed.rb index dc0500b61..64c3fddbb 100644 --- a/lib/fog/image/openstack/v1/requests/list_public_images_detailed.rb +++ b/lib/fog/openstack/image/v1/requests/list_public_images_detailed.rb @@ -1,6 +1,6 @@ module Fog - module Image - class OpenStack + module OpenStack + class Image class V1 class Real def list_public_images_detailed(options = {}, query_deprecated = nil) diff --git a/lib/fog/openstack/image/v1/requests/remove_member_from_image.rb b/lib/fog/openstack/image/v1/requests/remove_member_from_image.rb new file mode 100644 index 000000000..0e54036b8 --- /dev/null +++ b/lib/fog/openstack/image/v1/requests/remove_member_from_image.rb @@ -0,0 +1,25 @@ +module Fog + module OpenStack + class Image + class V1 + class Real + def remove_member_from_image(image_id, member_id) + request( + expects: [200, 204], + method: 'DELETE', + path: "images/#{image_id}/members/#{member_id}" + ) + end + end + + class Mock + def remove_member_from_image(_image_id, _member_id) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v1/requests/set_tenant.rb b/lib/fog/openstack/image/v1/requests/set_tenant.rb new file mode 100644 index 000000000..e973c9bfa --- /dev/null +++ b/lib/fog/openstack/image/v1/requests/set_tenant.rb @@ -0,0 +1,21 @@ +module Fog + module OpenStack + class Image + class V1 + class Real + def set_tenant(tenant) + @openstack_must_reauthenticate = true + @openstack_tenant = tenant.to_s + authenticate + end + end + + class Mock + def set_tenant(_tenant) + true + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v1/requests/update_image.rb b/lib/fog/openstack/image/v1/requests/update_image.rb new file mode 100644 index 000000000..d8f30b88c --- /dev/null +++ b/lib/fog/openstack/image/v1/requests/update_image.rb @@ -0,0 +1,66 @@ +module Fog + module OpenStack + class Image + class V1 + class Real + def update_image(attributes) + data = { + 'x-image-meta-name' => attributes[:name], + 'x-image-meta-disk-format' => attributes[:disk_format], + 'x-image-meta-container-format' => attributes[:container_format], + 'x-image-meta-size' => attributes[:size], + 'x-image-meta-is-public' => attributes[:is_public], + 'x-image-meta-min-ram' => attributes[:min_ram], + 'x-image-meta-min-disk' => attributes[:min_disk], + 'x-image-meta-checksum' => attributes[:checksum], + 'x-image-meta-owner' => attributes[:owner] + }.reject { |_k, v| v.nil? } + + unless attributes[:properties].nil? + attributes[:properties].each do |key, value| + data["x-image-meta-property-#{key}"] = value + end + end + + request( + headers: data, + expects: 200, + method: 'PUT', + path: "images/#{attributes[:id]}" + ) + end + end + + class Mock + def update_image(attributes) + response = Excon::Response.new + response.status = 200 + image = images.last + response.body = { + 'image' => { + 'name' => attributes[:name] || image.name, + 'size' => image.size, + 'min_disk' => (attributes[:min_disk] || image.min_disk).to_i, + 'disk_format' => attributes[:disk_format] || image.disk_format, + 'created_at' => image.created_at, + 'container_format' => attributes[:container_format] || image.container_format, + 'deleted_at' => nil, + 'updated_at' => Time.now.to_s, + 'checksum' => image.checksum, + 'id' => attributes[:id], + 'deleted' => false, + 'protected' => false, + 'is_public' => attributes[:is_public] || image.is_public, + 'status' => image.status, + 'min_ram' => (attributes[:min_ram] || image.min_ram).to_i, + 'owner' => attributes[:owner] || image.owner, + 'properties' => attributes[:properties] || image.properties + } + } + response + end + end + end + end + end +end diff --git a/lib/fog/image/openstack/v1/requests/update_image_members.rb b/lib/fog/openstack/image/v1/requests/update_image_members.rb similarity index 96% rename from lib/fog/image/openstack/v1/requests/update_image_members.rb rename to lib/fog/openstack/image/v1/requests/update_image_members.rb index 8e5e5c47f..30983a67b 100644 --- a/lib/fog/image/openstack/v1/requests/update_image_members.rb +++ b/lib/fog/openstack/image/v1/requests/update_image_members.rb @@ -1,6 +1,6 @@ module Fog - module Image - class OpenStack + module OpenStack + class Image class V1 class Real def update_image_members(image_id, members) diff --git a/lib/fog/openstack/image/v2.rb b/lib/fog/openstack/image/v2.rb new file mode 100644 index 000000000..fd97da6f4 --- /dev/null +++ b/lib/fog/openstack/image/v2.rb @@ -0,0 +1,130 @@ +require 'fog/openstack/image' + +module Fog + module OpenStack + class Image + class V2 < Fog::Service + SUPPORTED_VERSIONS = /v2(\.(0|1|2|3))*/.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version + + model_path 'fog/openstack/image/v2/models' + + model :image + collection :images + + request_path 'fog/openstack/image/v2/requests' + + request :list_images + request :get_image + request :create_image + request :update_image + request :upload_image + request :download_image + request :reactivate_image + request :deactivate_image + request :add_tag_to_image + request :remove_tag_from_image + request :get_image_members + request :get_member_details + request :update_image_member + request :get_shared_images + request :add_member_to_image + request :remove_member_from_image + request :delete_image + request :get_image_by_id + request :set_tenant + + class Mock + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + images: {} + } + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 9292 + management_url.path = '/v2' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].detect { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_region: @openstack_region, + openstack_management_url: @openstack_management_url } + end + end + + # Exists for image_v2_upload_spec "describe" + class Upload + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Image::NotFound + end + + def default_endpoint_type + 'admin' + end + + def default_path_prefix + 'v2' + end + + def default_service_type + %w[image imagev2] + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v2/models/image.rb b/lib/fog/openstack/image/v2/models/image.rb new file mode 100644 index 000000000..65ee60b2c --- /dev/null +++ b/lib/fog/openstack/image/v2/models/image.rb @@ -0,0 +1,226 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Image + class V2 + class Image < Fog::OpenStack::Model + identity :id + + attribute :name + attribute :visibility # public or private + + attribute :tags + + attribute :self + attribute :size + attribute :virtual_size + attribute :disk_format + attribute :container_format + attribute :id + attribute :checksum + attribute :self + attribute :file + + # detailed + attribute :min_disk + attribute :created_at + attribute :updated_at + attribute :protected + attribute :status # "queued","saving","active","killed","deleted","pending_delete" + attribute :min_ram + attribute :owner + attribute :properties + attribute :metadata + attribute :location + + # from snapshot support + attribute :network_allocated + attribute :base_image_ref + attribute :image_type + attribute :instance_uuid + attribute :user_id + + def method_missing(method_sym, *arguments, &block) + if attributes.key?(method_sym) + attributes[method_sym] + elsif attributes.key?(method_sym.to_s) + attributes[method_sym.to_s] + elsif method_sym.to_s.end_with?('=') + attributes[method_sym.to_s.gsub(/=$/, '').to_sym] = arguments[0] + else + super + end + end + + def respond_to_missing?(method_sym, include_private = false) + method_name = method_sym.to_s + tested_name = method_name.end_with?('=') ? method_name[0..-1] : method_name + if attributes.key?(tested_name.to_sym) + true + elsif attributes.key?(tested_name) + true + else + super + end + end + + def respond_to?(method_sym, include_all = false) + if attributes.key?(method_sym) + true + elsif attributes.key?(method_sym.to_s) + true + elsif method_sym.to_s.end_with?('=') + true + else + super + end + end + + def create + requires :name + merge_attributes(service.create_image(attributes).body) + self + end + + # Here we convert 'attributes' into a form suitable for Glance's usage of JSON Patch (RFC6902). + # We fetch the existing attributes from the server to compute the delta (difference) + # Setting value to nil will delete that attribute from the server. + def update(attr = nil) + requires :id + client_attributes = attr || @attributes + server_attributes = service.images.get(id).attributes + + json_patch = build_update_json_patch(client_attributes, server_attributes) + + merge_attributes( + service.update_image(id, json_patch).body + ) + self + end + + # This overrides the behaviour of Fog::OpenStack::Model::save() which tries to be clever and + # assumes save=update if an ID is present - but Image V2 allows ID to be specified on creation + def save + if @attributes[:self].nil? + create + else + update + end + end + + def destroy + requires :id + service.delete_image(id) + true + end + + def upload_data(io_obj) + requires :id + if io_obj.kind_of? Hash + service.upload_image(id, nil, io_obj) + else + service.upload_image(id, io_obj) + end + end + + def download_data(params = {}) + requires :id + service.download_image(id, params[:content_range], params) + end + + def reactivate + requires :id + service.reactivate_image(id) + end + + def deactivate + requires :id + service.deactivate_image(id) + end + + def add_member(member_id) + requires :id + service.add_member_to_image(id, member_id) + end + + def remove_member(member_id) + requires :id + service.remove_member_from_image(id, member_id) + end + + def update_member(member) + requires :id + service.update_image_member(id, member) + end + + def members + requires :id + service.get_image_members(id).body['members'] + end + + def member(member_id) + requires :id + service.get_member_details(id, member_id) + end + + def add_tags(tags) + requires :id + tags.each { |tag| add_tag tag } + end + + def add_tag(tag) + requires :id + service.add_tag_to_image(id, tag) + end + + def remove_tags(tags) + requires :id + tags.each { |tag| remove_tag tag } + end + + def remove_tag(tag) + requires :id + service.remove_tag_from_image(id, tag) + end + + private + + def build_update_json_patch(client_attributes, server_attributes) + [ + build_patch_operation('remove', patch_attributes_to_remove(client_attributes, server_attributes)), + build_patch_operation('add', patch_attributes_to_add(client_attributes, server_attributes)), + build_patch_operation('replace', patch_attributes_to_replace(client_attributes, server_attributes)) + ].flatten + end + + def patch_attributes_to_remove(client_attributes, server_attributes) + client_attributes.select do |key, value| + value.nil? && !server_attributes[key].nil? + end + end + + def patch_attributes_to_add(client_attributes, server_attributes) + client_attributes.reject do |key, _| + server_attributes.key?(key) || client_attributes[key].nil? + end + end + + def patch_attributes_to_replace(client_attributes, server_attributes) + client_attributes.reject do |key, value| + value.nil? || server_attributes[key] == value + end + end + + def build_patch_operation(op_name, attributes) + json_patch = [] + attributes.each do |key, value| + json_patch << { op: op_name, path: "/#{key}", value: value } + end + json_patch + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v2/models/images.rb b/lib/fog/openstack/image/v2/models/images.rb new file mode 100644 index 000000000..982982474 --- /dev/null +++ b/lib/fog/openstack/image/v2/models/images.rb @@ -0,0 +1,70 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/image/v2/models/image' + +module Fog + module OpenStack + class Image + class V2 + class Images < Fog::OpenStack::Collection + model Fog::OpenStack::Image::V2::Image + + def all(options = {}) + load_response(service.list_images(options), 'images') + end + + def summary(options = {}) + load_response(service.list_images(options), 'images') + end + + def find_by_id(id) + new(service.get_image_by_id(id).body) + rescue Fog::OpenStack::Image::NotFound + nil + end + + alias get find_by_id + + def public + images = load(service.list_images.body['images']) + images.delete_if { |image| image.is_public == false } + end + + def private + images = load(service.list_images.body['images']) + images.delete_if(&:is_public) + end + + def destroy(id) + image = find_by_id(id) + image.destroy + end + + def method_missing(method_sym, *arguments, &block) + if method_sym.to_s =~ /^find_by_(.*)$/ + load(service.list_images(Regexp.last_match(1).to_sym => arguments.first).body['images']) + else + super + end + end + + def respond_to_missing?(method_sym, include_private = false) + method_sym.to_s.start_with?('find_by_') || super + end + + def find_by_size_min(size) + find_attribute(__method__, size) + end + + def find_by_size_max(size) + find_attribute(__method__, size) + end + + def find_attribute(attribute, value) + attribute = attribute.to_s.gsub("find_by_", "") + load(service.list_images(attribute.to_sym => value).body['images']) + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v2/requests/add_member_to_image.rb b/lib/fog/openstack/image/v2/requests/add_member_to_image.rb new file mode 100644 index 000000000..5adcf43fe --- /dev/null +++ b/lib/fog/openstack/image/v2/requests/add_member_to_image.rb @@ -0,0 +1,26 @@ +module Fog + module OpenStack + class Image + class V2 + class Real + def add_member_to_image(image_id, tenant_id) + request( + expects: [200], + method: 'POST', + path: "images/#{image_id}/members", + body: Fog::JSON.encode(member: tenant_id) + ) + end + end + + class Mock + def add_member_to_image(_image_id, _tenant_id) + response = Excon::Response.new + response.status = 200 + response + end + end + end + end + end +end diff --git a/lib/fog/image/openstack/v2/requests/add_tag_to_image.rb b/lib/fog/openstack/image/v2/requests/add_tag_to_image.rb similarity index 93% rename from lib/fog/image/openstack/v2/requests/add_tag_to_image.rb rename to lib/fog/openstack/image/v2/requests/add_tag_to_image.rb index 9883b7f53..dbdbc4621 100644 --- a/lib/fog/image/openstack/v2/requests/add_tag_to_image.rb +++ b/lib/fog/openstack/image/v2/requests/add_tag_to_image.rb @@ -1,6 +1,6 @@ module Fog - module Image - class OpenStack + module OpenStack + class Image class V2 class Real def add_tag_to_image(image_id, tag) diff --git a/lib/fog/openstack/image/v2/requests/create_image.rb b/lib/fog/openstack/image/v2/requests/create_image.rb new file mode 100644 index 000000000..7594feb7f --- /dev/null +++ b/lib/fog/openstack/image/v2/requests/create_image.rb @@ -0,0 +1,51 @@ +module Fog + module OpenStack + class Image + class V2 + class Real + def create_image(image) + location = image.delete :location + headers = {} + headers["Location"] = location if location + + request( + headers: headers, + expects: [201], + method: 'POST', + path: "images", + body: Fog::JSON.encode(image) + ) + end + end + + class Mock + def create_image(attributes) + response = Excon::Response.new + response.status = 201 + + image_id = Fog::Mock.random_hex(32) + image = data[:images][image_id] = { + 'tags' => attributes[:tags] || [], + 'name' => attributes[:name], + 'size' => nil, + 'min_disk' => attributes[:min_disk] || 0, + 'disk_format' => attributes[:disk_format] || 'raw', + 'created_at' => Time.now.strftime('%FT%T.%6N'), + 'container_format' => attributes[:container_format] || 'bare', + 'deleted_at' => nil, + 'updated_at' => Time.now.strftime('%FT%T.%6N'), + 'checksum' => nil, + 'id' => image_id, + 'visibility' => attributes[:visibility] || 'public', + 'status' => 'queued', + 'min_ram' => attributes[:min_ram] || 0, + 'owner' => attributes[:owner] || Fog::Mock.random_hex(32) + } + response.body = image + response + end + end + end + end + end +end diff --git a/lib/fog/image/openstack/v2/requests/deactivate_image.rb b/lib/fog/openstack/image/v2/requests/deactivate_image.rb similarity index 93% rename from lib/fog/image/openstack/v2/requests/deactivate_image.rb rename to lib/fog/openstack/image/v2/requests/deactivate_image.rb index 4ddbbe7a0..40e8f7d43 100644 --- a/lib/fog/image/openstack/v2/requests/deactivate_image.rb +++ b/lib/fog/openstack/image/v2/requests/deactivate_image.rb @@ -1,6 +1,6 @@ module Fog - module Image - class OpenStack + module OpenStack + class Image class V2 class Real def deactivate_image(image_id) diff --git a/lib/fog/openstack/image/v2/requests/delete_image.rb b/lib/fog/openstack/image/v2/requests/delete_image.rb new file mode 100644 index 000000000..c87475eb8 --- /dev/null +++ b/lib/fog/openstack/image/v2/requests/delete_image.rb @@ -0,0 +1,25 @@ +module Fog + module OpenStack + class Image + class V2 + class Real + def delete_image(image_id) + request( + expects: 204, + method: 'DELETE', + path: "images/#{image_id}" + ) + end + end + + class Mock + def delete_image(_image_id) + response = Excon::Response.new + response.status = 204 + response + end + end + end + end + end +end diff --git a/lib/fog/image/openstack/v2/requests/download_image.rb b/lib/fog/openstack/image/v2/requests/download_image.rb similarity index 79% rename from lib/fog/image/openstack/v2/requests/download_image.rb rename to lib/fog/openstack/image/v2/requests/download_image.rb index bc7b58b8e..05ab0332f 100644 --- a/lib/fog/image/openstack/v2/requests/download_image.rb +++ b/lib/fog/openstack/image/v2/requests/download_image.rb @@ -1,10 +1,11 @@ module Fog - module Image - class OpenStack + module OpenStack + class Image class V2 class Real # TODO: implement content range handling - def download_image(image_id, _content_range = nil, params) + # removed _content_range = nil because in the middle of parameters and not used. + def download_image(image_id, _content_range, params) request_hash = { expects: [200, 204], method: 'GET', diff --git a/lib/fog/openstack/image/v2/requests/get_image.rb b/lib/fog/openstack/image/v2/requests/get_image.rb new file mode 100644 index 000000000..133ca6810 --- /dev/null +++ b/lib/fog/openstack/image/v2/requests/get_image.rb @@ -0,0 +1,47 @@ +module Fog + module OpenStack + class Image + class V2 + class Real + def get_image(image_id) + request( + expects: [200, 204], + method: 'HEAD', + path: "images/#{image_id}" + ) + end + end + + class Mock + def get_image(_image_id) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.headers = { "X-Image-Meta-Is_public" => "True", + "X-Image-Meta-Min_disk" => "0", + "X-Image-Meta-Property-Ramdisk_id" => "b45aa128-cd36-4ad9-a026-1a1c2bfd8fdc", + "X-Image-Meta-Disk_format" => "ami", + "X-Image-Meta-Created_at" => "2012-02-21T07:32:26", + "X-Image-Meta-Container_format" => "ami", + "Etag" => "2f81976cae15c16ef0010c51e3a6c163", + "Location" => "http://192.168.27.100:9292/v1/images/0e09fbd6-43c5-448a-83e9-0d3d05f9747e", + "X-Image-Meta-Protected" => "False", + "Date" => "Fri, 24 Feb 2012 02:14:25 GMT", + "X-Image-Meta-Name" => "cirros-0.3.0-x86_64-blank", + "X-Image-Meta-Min_ram" => "0", "Content-Type" => "text/html; charset=UTF-8", + "X-Image-Meta-Updated_at" => "2012-02-21T07:32:29", + "X-Image-Meta-Property-Kernel_id" => "cd28951e-e1c2-4bc5-95d3-f0495abbcdc5", + "X-Image-Meta-Size" => "25165824", + "X-Image-Meta-Checksum" => "2f81976cae15c16ef0010c51e3a6c163", + "X-Image-Meta-Deleted" => "False", + "Content-Length" => "0", + "X-Image-Meta-Owner" => "ff528b20431645ebb5fa4b0a71ca002f", + "X-Image-Meta-Status" => "active", + "X-Image-Meta-Id" => "0e09fbd6-43c5-448a-83e9-0d3d05f9747e" } + response.body = "" + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v2/requests/get_image_by_id.rb b/lib/fog/openstack/image/v2/requests/get_image_by_id.rb new file mode 100644 index 000000000..4242423c2 --- /dev/null +++ b/lib/fog/openstack/image/v2/requests/get_image_by_id.rb @@ -0,0 +1,35 @@ +module Fog + module OpenStack + class Image + class V2 + class Real + def get_image_by_id(image_id) + request( + expects: [200], + method: 'GET', + path: "images/#{image_id}" + ) + end + end + + class Mock + def get_image_by_id(_image_id) + response = Excon::Response.new + response.status = [200][rand(2)] + response.body = { + "images" => [{ + "name" => "mock-image-name", + "size" => 25165824, + "disk_format" => "ami", + "container_format" => "ami", + "id" => "0e09fbd6-43c5-448a-83e9-0d3d05f9747e", + "checksum" => "2f81976cae15c16ef0010c51e3a6c163" + }] + } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v2/requests/get_image_members.rb b/lib/fog/openstack/image/v2/requests/get_image_members.rb new file mode 100644 index 000000000..5fc560dbd --- /dev/null +++ b/lib/fog/openstack/image/v2/requests/get_image_members.rb @@ -0,0 +1,31 @@ +module Fog + module OpenStack + class Image + class V2 + class Real + def get_image_members(image_id) + request( + expects: [200, 204], + method: 'GET', + path: "images/#{image_id}/members" + ) + end + end + + class Mock + def get_image_members(_image_id) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.body = { + "members" => [ + { "member_id" => "ff528b20431645ebb5fa4b0a71ca002f", + "can_share" => false } + ] + } + response + end + end + end + end + end +end diff --git a/lib/fog/image/openstack/v2/requests/get_member_details.rb b/lib/fog/openstack/image/v2/requests/get_member_details.rb similarity index 96% rename from lib/fog/image/openstack/v2/requests/get_member_details.rb rename to lib/fog/openstack/image/v2/requests/get_member_details.rb index e1530bde2..677f6b460 100644 --- a/lib/fog/image/openstack/v2/requests/get_member_details.rb +++ b/lib/fog/openstack/image/v2/requests/get_member_details.rb @@ -1,6 +1,6 @@ module Fog - module Image - class OpenStack + module OpenStack + class Image class V2 class Real def get_member_details(image_id, member_id) diff --git a/lib/fog/openstack/image/v2/requests/get_shared_images.rb b/lib/fog/openstack/image/v2/requests/get_shared_images.rb new file mode 100644 index 000000000..891d3c3ee --- /dev/null +++ b/lib/fog/openstack/image/v2/requests/get_shared_images.rb @@ -0,0 +1,31 @@ +module Fog + module OpenStack + class Image + class V2 + class Real + def get_shared_images(tenant_id) + request( + expects: [200, 204], + method: 'GET', + path: "shared-images/#{tenant_id}" + ) + end + end + + class Mock + def get_shared_images(_tenant_id) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.body = { + "shared_images" => [ + { "image_id" => "ff528b20431645ebb5fa4b0a71ca002f", + "can_share" => false } + ] + } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v2/requests/list_images.rb b/lib/fog/openstack/image/v2/requests/list_images.rb new file mode 100644 index 000000000..ba3f97ec7 --- /dev/null +++ b/lib/fog/openstack/image/v2/requests/list_images.rb @@ -0,0 +1,36 @@ +module Fog + module OpenStack + class Image + class V2 + class Real + def list_images(options = {}) + request( + expects: [200], + method: 'GET', + path: 'images', + query: options + ) + end + end + + class Mock + def list_images(_options = {}) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.body = { + "images" => [{ + "name" => Fog::Mock.random_letters(10), + "size" => Fog::Mock.random_numbers(8).to_i, + "disk_format" => "iso", + "container_format" => "bare", + "id" => Fog::Mock.random_hex(36), + "checksum" => Fog::Mock.random_hex(32) + }] + } + response + end + end + end + end + end +end diff --git a/lib/fog/image/openstack/v2/requests/reactivate_image.rb b/lib/fog/openstack/image/v2/requests/reactivate_image.rb similarity index 93% rename from lib/fog/image/openstack/v2/requests/reactivate_image.rb rename to lib/fog/openstack/image/v2/requests/reactivate_image.rb index 72141f2f0..88d73291e 100644 --- a/lib/fog/image/openstack/v2/requests/reactivate_image.rb +++ b/lib/fog/openstack/image/v2/requests/reactivate_image.rb @@ -1,6 +1,6 @@ module Fog - module Image - class OpenStack + module OpenStack + class Image class V2 class Real def reactivate_image(image_id) diff --git a/lib/fog/openstack/image/v2/requests/remove_member_from_image.rb b/lib/fog/openstack/image/v2/requests/remove_member_from_image.rb new file mode 100644 index 000000000..57c9fdf64 --- /dev/null +++ b/lib/fog/openstack/image/v2/requests/remove_member_from_image.rb @@ -0,0 +1,25 @@ +module Fog + module OpenStack + class Image + class V2 + class Real + def remove_member_from_image(image_id, member_id) + request( + expects: [200, 204], + method: 'DELETE', + path: "images/#{image_id}/members/#{member_id}" + ) + end + end + + class Mock + def remove_member_from_image(_image_id, _member_id) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response + end + end + end + end + end +end diff --git a/lib/fog/image/openstack/v2/requests/remove_tag_from_image.rb b/lib/fog/openstack/image/v2/requests/remove_tag_from_image.rb similarity index 93% rename from lib/fog/image/openstack/v2/requests/remove_tag_from_image.rb rename to lib/fog/openstack/image/v2/requests/remove_tag_from_image.rb index 7be27dac6..00d22eb9a 100644 --- a/lib/fog/image/openstack/v2/requests/remove_tag_from_image.rb +++ b/lib/fog/openstack/image/v2/requests/remove_tag_from_image.rb @@ -1,6 +1,6 @@ module Fog - module Image - class OpenStack + module OpenStack + class Image class V2 class Real def remove_tag_from_image(image_id, tag) diff --git a/lib/fog/openstack/image/v2/requests/set_tenant.rb b/lib/fog/openstack/image/v2/requests/set_tenant.rb new file mode 100644 index 000000000..90e408571 --- /dev/null +++ b/lib/fog/openstack/image/v2/requests/set_tenant.rb @@ -0,0 +1,21 @@ +module Fog + module OpenStack + class Image + class V2 + class Real + def set_tenant(tenant) + @openstack_must_reauthenticate = true + @openstack_tenant = tenant.to_s + authenticate + end + end + + class Mock + def set_tenant(_tenant) + true + end + end + end + end + end +end diff --git a/lib/fog/openstack/image/v2/requests/update_image.rb b/lib/fog/openstack/image/v2/requests/update_image.rb new file mode 100644 index 000000000..409762520 --- /dev/null +++ b/lib/fog/openstack/image/v2/requests/update_image.rb @@ -0,0 +1,49 @@ +module Fog + module OpenStack + class Image + class V2 + class Real + def update_image(id, json_patch) + request( + headers: { 'Content-Type' => 'application/openstack-images-v2.1-json-patch' }, + expects: [200], + method: 'PATCH', + path: "images/#{id}", + body: Fog::JSON.encode(json_patch) + ) + end + end + + class Mock + def update_image(attributes) + response = Excon::Response.new + response.status = 200 + image = images.last + response.body = { + 'image' => { + 'name' => attributes[:name] || image.name, + 'size' => image.size, + 'min_disk' => (attributes[:min_disk] || image.min_disk).to_i, + 'disk_format' => attributes[:disk_format] || image.disk_format, + 'created_at' => image.created_at, + 'container_format' => attributes[:container_format] || image.container_format, + 'deleted_at' => nil, + 'updated_at' => Time.now.to_s, + 'checksum' => image.checksum, + 'id' => attributes[:id], + 'deleted' => false, + 'protected' => false, + 'is_public' => attributes[:is_public] || image.is_public, + 'status' => image.status, + 'min_ram' => (attributes[:min_ram] || image.min_ram).to_i, + 'owner' => attributes[:owner] || image.owner, + 'properties' => attributes[:properties] || image.properties + } + } + response + end + end + end + end + end +end diff --git a/lib/fog/image/openstack/v2/requests/update_image_member.rb b/lib/fog/openstack/image/v2/requests/update_image_member.rb similarity index 96% rename from lib/fog/image/openstack/v2/requests/update_image_member.rb rename to lib/fog/openstack/image/v2/requests/update_image_member.rb index 889e88bf1..d865712b9 100644 --- a/lib/fog/image/openstack/v2/requests/update_image_member.rb +++ b/lib/fog/openstack/image/v2/requests/update_image_member.rb @@ -1,6 +1,6 @@ module Fog - module Image - class OpenStack + module OpenStack + class Image class V2 class Real def update_image_member(image_id, member) diff --git a/lib/fog/image/openstack/v2/requests/upload_image.rb b/lib/fog/openstack/image/v2/requests/upload_image.rb similarity index 93% rename from lib/fog/image/openstack/v2/requests/upload_image.rb rename to lib/fog/openstack/image/v2/requests/upload_image.rb index 7df69eab2..8c9e9fd13 100644 --- a/lib/fog/image/openstack/v2/requests/upload_image.rb +++ b/lib/fog/openstack/image/v2/requests/upload_image.rb @@ -1,6 +1,6 @@ module Fog - module Image - class OpenStack + module OpenStack + class Image class V2 class Real def upload_image(image_id, body, params = {}) @@ -22,6 +22,7 @@ class Mock def upload_image(_image_id, _body) response = Excon::Response.new response.status = 204 + response end end end diff --git a/lib/fog/openstack/introspection.rb b/lib/fog/openstack/introspection.rb new file mode 100644 index 000000000..ed92975c8 --- /dev/null +++ b/lib/fog/openstack/introspection.rb @@ -0,0 +1,89 @@ +require 'yaml' + +module Fog + module OpenStack + class Introspection < Fog::Service + SUPPORTED_VERSIONS = /v1/.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version + + ## REQUESTS + # + request_path 'fog/openstack/introspection/requests' + + # Introspection requests + request :create_introspection + request :get_introspection + request :abort_introspection + request :get_introspection_details + + # Rules requests + request :create_rules + request :list_rules + request :delete_rules_all + request :get_rules + request :delete_rules + + ## MODELS + # + model_path 'fog/openstack/introspection/models' + model :rules + collection :rules_collection + + class Mock + def self.data + @data ||= Hash.new do |hash, key| + # Introspection data is *huge* we load it from a yaml file + file = "test/fixtures/introspection.yaml" + hash[key] = YAML.safe_load(File.read(file), [Symbol]) + end + end + + def self.reset + @data = nil + end + + include Fog::OpenStack::Core + + def initialize(_options = {}) + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86_400).iso8601 + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Introspection::NotFound + end + + def default_path_prefix + 'v1' + end + + def default_service_type + %w[baremetal-introspection] + end + end + end + end +end diff --git a/lib/fog/introspection/openstack/models/rules.rb b/lib/fog/openstack/introspection/models/rules.rb similarity index 93% rename from lib/fog/introspection/openstack/models/rules.rb rename to lib/fog/openstack/introspection/models/rules.rb index 3db449d57..acdd3d037 100644 --- a/lib/fog/introspection/openstack/models/rules.rb +++ b/lib/fog/openstack/introspection/models/rules.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Introspection - class OpenStack + module OpenStack + class Introspection class Rules < Fog::OpenStack::Model identity :uuid diff --git a/lib/fog/openstack/introspection/models/rules_collection.rb b/lib/fog/openstack/introspection/models/rules_collection.rb new file mode 100644 index 000000000..6b7e8e0db --- /dev/null +++ b/lib/fog/openstack/introspection/models/rules_collection.rb @@ -0,0 +1,32 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/introspection/models/rules' + +module Fog + module OpenStack + class Introspection + class RulesCollection < Fog::OpenStack::Collection + model Fog::OpenStack::Introspection::Rules + + def all(_options = {}) + load_response(service.list_rules, 'rules') + end + + def get(uuid) + data = service.get_rules(uuid).body + new(data) + rescue Fog::OpenStack::Introspection::NotFound + nil + end + + def destroy(uuid) + rules = get(uuid) + rules.destroy + end + + def destroy_all + service.delete_rules_all + end + end + end + end +end diff --git a/lib/fog/introspection/openstack/requests/abort_introspection.rb b/lib/fog/openstack/introspection/requests/abort_introspection.rb similarity index 91% rename from lib/fog/introspection/openstack/requests/abort_introspection.rb rename to lib/fog/openstack/introspection/requests/abort_introspection.rb index c48fd6e2e..2f16e4c4a 100644 --- a/lib/fog/introspection/openstack/requests/abort_introspection.rb +++ b/lib/fog/openstack/introspection/requests/abort_introspection.rb @@ -1,6 +1,6 @@ module Fog - module Introspection - class OpenStack + module OpenStack + class Introspection class Real def abort_introspection(node_id) request( diff --git a/lib/fog/introspection/openstack/requests/create_introspection.rb b/lib/fog/openstack/introspection/requests/create_introspection.rb similarity index 94% rename from lib/fog/introspection/openstack/requests/create_introspection.rb rename to lib/fog/openstack/introspection/requests/create_introspection.rb index 7f9f0c5f4..850508375 100644 --- a/lib/fog/introspection/openstack/requests/create_introspection.rb +++ b/lib/fog/openstack/introspection/requests/create_introspection.rb @@ -1,6 +1,6 @@ module Fog - module Introspection - class OpenStack + module OpenStack + class Introspection class Real def create_introspection(node_id, options = {}) if options diff --git a/lib/fog/introspection/openstack/requests/create_rules.rb b/lib/fog/openstack/introspection/requests/create_rules.rb similarity index 90% rename from lib/fog/introspection/openstack/requests/create_rules.rb rename to lib/fog/openstack/introspection/requests/create_rules.rb index 4e41c8937..0c312b884 100644 --- a/lib/fog/introspection/openstack/requests/create_rules.rb +++ b/lib/fog/openstack/introspection/requests/create_rules.rb @@ -1,6 +1,6 @@ module Fog - module Introspection - class OpenStack + module OpenStack + class Introspection class Real def create_rules(attributes) attributes_valid = [ @@ -25,7 +25,7 @@ def create_rules(attributes) end class Mock - def create_rules(_) + def create_rules(_attributes) response = Excon::Response.new response.status = 200 response.body = { "rules" => data[:rules].first } diff --git a/lib/fog/introspection/openstack/requests/delete_rules.rb b/lib/fog/openstack/introspection/requests/delete_rules.rb similarity index 90% rename from lib/fog/introspection/openstack/requests/delete_rules.rb rename to lib/fog/openstack/introspection/requests/delete_rules.rb index 9f2209953..1f7e9e906 100644 --- a/lib/fog/introspection/openstack/requests/delete_rules.rb +++ b/lib/fog/openstack/introspection/requests/delete_rules.rb @@ -1,6 +1,6 @@ module Fog - module Introspection - class OpenStack + module OpenStack + class Introspection class Real def delete_rules(rule_id) request( diff --git a/lib/fog/introspection/openstack/requests/delete_rules_all.rb b/lib/fog/openstack/introspection/requests/delete_rules_all.rb similarity index 89% rename from lib/fog/introspection/openstack/requests/delete_rules_all.rb rename to lib/fog/openstack/introspection/requests/delete_rules_all.rb index 6307fd413..3e4bb8a45 100644 --- a/lib/fog/introspection/openstack/requests/delete_rules_all.rb +++ b/lib/fog/openstack/introspection/requests/delete_rules_all.rb @@ -1,6 +1,6 @@ module Fog - module Introspection - class OpenStack + module OpenStack + class Introspection class Real def delete_rules_all request( diff --git a/lib/fog/introspection/openstack/requests/get_introspection.rb b/lib/fog/openstack/introspection/requests/get_introspection.rb similarity index 91% rename from lib/fog/introspection/openstack/requests/get_introspection.rb rename to lib/fog/openstack/introspection/requests/get_introspection.rb index 4e65ecfc8..d2cc97d5a 100644 --- a/lib/fog/introspection/openstack/requests/get_introspection.rb +++ b/lib/fog/openstack/introspection/requests/get_introspection.rb @@ -1,6 +1,6 @@ module Fog - module Introspection - class OpenStack + module OpenStack + class Introspection class Real def get_introspection(node_id) request( diff --git a/lib/fog/introspection/openstack/requests/get_introspection_details.rb b/lib/fog/openstack/introspection/requests/get_introspection_details.rb similarity index 92% rename from lib/fog/introspection/openstack/requests/get_introspection_details.rb rename to lib/fog/openstack/introspection/requests/get_introspection_details.rb index 7470d272d..8d38f2367 100644 --- a/lib/fog/introspection/openstack/requests/get_introspection_details.rb +++ b/lib/fog/openstack/introspection/requests/get_introspection_details.rb @@ -1,6 +1,6 @@ module Fog - module Introspection - class OpenStack + module OpenStack + class Introspection class Real def get_introspection_details(node_id) request( diff --git a/lib/fog/introspection/openstack/requests/get_rules.rb b/lib/fog/openstack/introspection/requests/get_rules.rb similarity index 91% rename from lib/fog/introspection/openstack/requests/get_rules.rb rename to lib/fog/openstack/introspection/requests/get_rules.rb index 52c34b836..d863072c4 100644 --- a/lib/fog/introspection/openstack/requests/get_rules.rb +++ b/lib/fog/openstack/introspection/requests/get_rules.rb @@ -1,6 +1,6 @@ module Fog - module Introspection - class OpenStack + module OpenStack + class Introspection class Real def get_rules(rule_id) request( diff --git a/lib/fog/introspection/openstack/requests/list_rules.rb b/lib/fog/openstack/introspection/requests/list_rules.rb similarity index 90% rename from lib/fog/introspection/openstack/requests/list_rules.rb rename to lib/fog/openstack/introspection/requests/list_rules.rb index 5bc3a1265..35dad18dc 100644 --- a/lib/fog/introspection/openstack/requests/list_rules.rb +++ b/lib/fog/openstack/introspection/requests/list_rules.rb @@ -1,6 +1,6 @@ module Fog - module Introspection - class OpenStack + module OpenStack + class Introspection class Real def list_rules request( diff --git a/lib/fog/openstack/key_manager.rb b/lib/fog/openstack/key_manager.rb new file mode 100644 index 000000000..0c4dbe96f --- /dev/null +++ b/lib/fog/openstack/key_manager.rb @@ -0,0 +1,108 @@ +module Fog + module OpenStack + class KeyManager < Fog::Service + SUPPORTED_VERSIONS = /v1(\.0)*/.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, :openstack_userid, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_auth_omit_default_port, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version, :openstack_temp_url_key, :openstack_cache_ttl + + ## MODELS + # + model_path 'fog/openstack/key_manager/models' + model :secret + collection :secrets + model :container + collection :containers + model :acl + + ## REQUESTS + + # secrets + request_path 'fog/openstack/key_manager/requests' + request :create_secret + request :list_secrets + request :get_secret + request :get_secret_payload + request :get_secret_metadata + request :delete_secret + + # containers + request :create_container + request :get_container + request :list_containers + request :delete_container + + # ACL + request :get_secret_acl + request :update_secret_acl + request :replace_secret_acl + request :delete_secret_acl + + request :get_container_acl + request :update_container_acl + request :replace_container_acl + request :delete_container_acl + + class Mock + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 9311 + management_url.path = '/v1' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].detect { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_region: @openstack_region, + openstack_management_url: @openstack_management_url } + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::KeyManager::NotFound + end + + def default_path_prefix + 'v1' + end + + def default_service_type + %w[key-manager] + end + end + end + end +end diff --git a/lib/fog/key_manager/openstack/models/acl.rb b/lib/fog/openstack/key_manager/models/acl.rb similarity index 90% rename from lib/fog/key_manager/openstack/models/acl.rb rename to lib/fog/openstack/key_manager/models/acl.rb index 75d76d6b7..5005a089b 100644 --- a/lib/fog/key_manager/openstack/models/acl.rb +++ b/lib/fog/openstack/key_manager/models/acl.rb @@ -1,9 +1,8 @@ - require 'fog/openstack/models/model' module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class ACL < Fog::OpenStack::Model identity :acl_ref diff --git a/lib/fog/key_manager/openstack/models/container.rb b/lib/fog/openstack/key_manager/models/container.rb similarity index 85% rename from lib/fog/key_manager/openstack/models/container.rb rename to lib/fog/openstack/key_manager/models/container.rb index e08e67201..3a15885f3 100644 --- a/lib/fog/key_manager/openstack/models/container.rb +++ b/lib/fog/openstack/key_manager/models/container.rb @@ -2,8 +2,8 @@ require 'uri' module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Container < Fog::OpenStack::Model identity :container_ref @@ -20,8 +20,8 @@ class Container < Fog::OpenStack::Model attribute :updated def uuid - URI(self.container_ref).path.split('/').last - rescue + URI(container_ref).path.split('/').last + rescue StandardError nil end diff --git a/lib/fog/openstack/key_manager/models/containers.rb b/lib/fog/openstack/key_manager/models/containers.rb new file mode 100644 index 000000000..118599416 --- /dev/null +++ b/lib/fog/openstack/key_manager/models/containers.rb @@ -0,0 +1,24 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/key_manager/models/container' + +module Fog + module OpenStack + class KeyManager + class Containers < Fog::OpenStack::Collection + model Fog::OpenStack::KeyManager::Container + + def all(options = {}) + load_response(service.list_containers(options), 'containers') + end + + def get(secret_ref) + if secret = service.get_container(secret_ref).body + new(secret) + end + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/key_manager/openstack/models/secret.rb b/lib/fog/openstack/key_manager/models/secret.rb similarity index 89% rename from lib/fog/key_manager/openstack/models/secret.rb rename to lib/fog/openstack/key_manager/models/secret.rb index 3263f6d87..33da26156 100644 --- a/lib/fog/key_manager/openstack/models/secret.rb +++ b/lib/fog/openstack/key_manager/models/secret.rb @@ -2,8 +2,8 @@ require 'uri' module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Secret < Fog::OpenStack::Model identity :secret_ref @@ -29,8 +29,8 @@ class Secret < Fog::OpenStack::Model attribute :metadata def uuid - URI(self.secret_ref).path.split('/').last - rescue + URI(secret_ref).path.split('/').last + rescue StandardError nil end diff --git a/lib/fog/openstack/key_manager/models/secrets.rb b/lib/fog/openstack/key_manager/models/secrets.rb new file mode 100644 index 000000000..080cffe3f --- /dev/null +++ b/lib/fog/openstack/key_manager/models/secrets.rb @@ -0,0 +1,24 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/key_manager/models/secret' + +module Fog + module OpenStack + class KeyManager + class Secrets < Fog::OpenStack::Collection + model Fog::OpenStack::KeyManager::Secret + + def all(options = {}) + load_response(service.list_secrets(options), 'secrets') + end + + def get(secret_ref) + if secret = service.get_secret(secret_ref).body + new(secret) + end + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/key_manager/openstack/requests/create_container.rb b/lib/fog/openstack/key_manager/requests/create_container.rb similarity index 88% rename from lib/fog/key_manager/openstack/requests/create_container.rb rename to lib/fog/openstack/key_manager/requests/create_container.rb index b3a77a0b6..fff6edfd8 100644 --- a/lib/fog/key_manager/openstack/requests/create_container.rb +++ b/lib/fog/openstack/key_manager/requests/create_container.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def create_container(options) request( diff --git a/lib/fog/key_manager/openstack/requests/create_secret.rb b/lib/fog/openstack/key_manager/requests/create_secret.rb similarity index 87% rename from lib/fog/key_manager/openstack/requests/create_secret.rb rename to lib/fog/openstack/key_manager/requests/create_secret.rb index 0e7ab670b..0792f2805 100644 --- a/lib/fog/key_manager/openstack/requests/create_secret.rb +++ b/lib/fog/openstack/key_manager/requests/create_secret.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def create_secret(options) request( diff --git a/lib/fog/openstack/key_manager/requests/delete_container.rb b/lib/fog/openstack/key_manager/requests/delete_container.rb new file mode 100644 index 000000000..c0b50f41d --- /dev/null +++ b/lib/fog/openstack/key_manager/requests/delete_container.rb @@ -0,0 +1,18 @@ +module Fog + module OpenStack + class KeyManager + class Real + def delete_container(id) + request( + expects: [204], + method: 'DELETE', + path: "containers/#{id}" + ) + end + end + + class Mock + end + end + end +end diff --git a/lib/fog/key_manager/openstack/requests/delete_container_acl.rb b/lib/fog/openstack/key_manager/requests/delete_container_acl.rb similarity index 91% rename from lib/fog/key_manager/openstack/requests/delete_container_acl.rb rename to lib/fog/openstack/key_manager/requests/delete_container_acl.rb index faac97a71..c74d93299 100644 --- a/lib/fog/key_manager/openstack/requests/delete_container_acl.rb +++ b/lib/fog/openstack/key_manager/requests/delete_container_acl.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def delete_container_acl(uuid) request( diff --git a/lib/fog/key_manager/openstack/requests/delete_secret.rb b/lib/fog/openstack/key_manager/requests/delete_secret.rb similarity index 86% rename from lib/fog/key_manager/openstack/requests/delete_secret.rb rename to lib/fog/openstack/key_manager/requests/delete_secret.rb index 67aeb0237..f1b17e879 100644 --- a/lib/fog/key_manager/openstack/requests/delete_secret.rb +++ b/lib/fog/openstack/key_manager/requests/delete_secret.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def delete_secret(id) request( diff --git a/lib/fog/key_manager/openstack/requests/delete_secret_acl.rb b/lib/fog/openstack/key_manager/requests/delete_secret_acl.rb similarity index 91% rename from lib/fog/key_manager/openstack/requests/delete_secret_acl.rb rename to lib/fog/openstack/key_manager/requests/delete_secret_acl.rb index b90e406bc..043f590c6 100644 --- a/lib/fog/key_manager/openstack/requests/delete_secret_acl.rb +++ b/lib/fog/openstack/key_manager/requests/delete_secret_acl.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def delete_secret_acl(uuid) request( diff --git a/lib/fog/openstack/key_manager/requests/get_container.rb b/lib/fog/openstack/key_manager/requests/get_container.rb new file mode 100644 index 000000000..e0c85a949 --- /dev/null +++ b/lib/fog/openstack/key_manager/requests/get_container.rb @@ -0,0 +1,18 @@ +module Fog + module OpenStack + class KeyManager + class Real + def get_container(uuid) + request( + expects: [200], + method: 'GET', + path: "containers/#{uuid}" + ) + end + end + + class Mock + end + end + end +end diff --git a/lib/fog/openstack/key_manager/requests/get_container_acl.rb b/lib/fog/openstack/key_manager/requests/get_container_acl.rb new file mode 100644 index 000000000..b10f7247e --- /dev/null +++ b/lib/fog/openstack/key_manager/requests/get_container_acl.rb @@ -0,0 +1,31 @@ +module Fog + module OpenStack + class KeyManager + class Real + def get_container_acl(uuid) + request( + expects: [200], + method: 'GET', + path: "containers/#{uuid}/acl" + ) + end + end + + class Mock + def get_container_acl(_uuid) + response = Excon::Response.new + response.status = 200 + response.body = { + "read" => { + "project-access" => true, + "updated" => "2017-04-25T19:10:52", + "users" => ["45895d3a393f42b2a8760f5dafa9c6d8"], + "created" => "2017-04-25T19:10:52" + } + } + response + end + end + end + end +end diff --git a/lib/fog/key_manager/openstack/requests/get_secret.rb b/lib/fog/openstack/key_manager/requests/get_secret.rb similarity index 86% rename from lib/fog/key_manager/openstack/requests/get_secret.rb rename to lib/fog/openstack/key_manager/requests/get_secret.rb index 9daa92fed..87e9e85a7 100644 --- a/lib/fog/key_manager/openstack/requests/get_secret.rb +++ b/lib/fog/openstack/key_manager/requests/get_secret.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def get_secret(uuid) request( diff --git a/lib/fog/openstack/key_manager/requests/get_secret_acl.rb b/lib/fog/openstack/key_manager/requests/get_secret_acl.rb new file mode 100644 index 000000000..07bad0c23 --- /dev/null +++ b/lib/fog/openstack/key_manager/requests/get_secret_acl.rb @@ -0,0 +1,31 @@ +module Fog + module OpenStack + class KeyManager + class Real + def get_secret_acl(uuid) + request( + expects: [200], + method: 'GET', + path: "secrets/#{uuid}/acl" + ) + end + end + + class Mock + def get_secret_acl(_uuid) + response = Excon::Response.new + response.status = 200 + response.body = { + "read" => { + "project-access" => false, + "updated" => "2017-04-25T19:10:52", + "users" => %w(45895d3a393f42b2a8760f5dafa9c6d8 dc2cb4f0d30044e2b0251409c94cc955), + "created" => "2017-04-25T19:10:52" + } + } + response + end + end + end + end +end diff --git a/lib/fog/key_manager/openstack/requests/get_secret_metadata.rb b/lib/fog/openstack/key_manager/requests/get_secret_metadata.rb similarity index 86% rename from lib/fog/key_manager/openstack/requests/get_secret_metadata.rb rename to lib/fog/openstack/key_manager/requests/get_secret_metadata.rb index 2465586ea..b832eac5a 100644 --- a/lib/fog/key_manager/openstack/requests/get_secret_metadata.rb +++ b/lib/fog/openstack/key_manager/requests/get_secret_metadata.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def get_secret_metadata(uuid) request( diff --git a/lib/fog/key_manager/openstack/requests/get_secret_payload.rb b/lib/fog/openstack/key_manager/requests/get_secret_payload.rb similarity index 89% rename from lib/fog/key_manager/openstack/requests/get_secret_payload.rb rename to lib/fog/openstack/key_manager/requests/get_secret_payload.rb index 9299325a6..e1f4c121e 100644 --- a/lib/fog/key_manager/openstack/requests/get_secret_payload.rb +++ b/lib/fog/openstack/key_manager/requests/get_secret_payload.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def get_secret_payload(uuid) request( diff --git a/lib/fog/key_manager/openstack/requests/list_containers.rb b/lib/fog/openstack/key_manager/requests/list_containers.rb similarity index 87% rename from lib/fog/key_manager/openstack/requests/list_containers.rb rename to lib/fog/openstack/key_manager/requests/list_containers.rb index d53c66663..606128472 100644 --- a/lib/fog/key_manager/openstack/requests/list_containers.rb +++ b/lib/fog/openstack/key_manager/requests/list_containers.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def list_containers(options = {}) request( diff --git a/lib/fog/key_manager/openstack/requests/list_secrets.rb b/lib/fog/openstack/key_manager/requests/list_secrets.rb similarity index 87% rename from lib/fog/key_manager/openstack/requests/list_secrets.rb rename to lib/fog/openstack/key_manager/requests/list_secrets.rb index b1c9f7cfa..b4c15a547 100644 --- a/lib/fog/key_manager/openstack/requests/list_secrets.rb +++ b/lib/fog/openstack/key_manager/requests/list_secrets.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def list_secrets(options = {}) request( diff --git a/lib/fog/key_manager/openstack/requests/replace_container_acl.rb b/lib/fog/openstack/key_manager/requests/replace_container_acl.rb similarity index 93% rename from lib/fog/key_manager/openstack/requests/replace_container_acl.rb rename to lib/fog/openstack/key_manager/requests/replace_container_acl.rb index 797b94c84..ca9fdd8f6 100644 --- a/lib/fog/key_manager/openstack/requests/replace_container_acl.rb +++ b/lib/fog/openstack/key_manager/requests/replace_container_acl.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def replace_container_acl(uuid, options) request( diff --git a/lib/fog/key_manager/openstack/requests/replace_secret_acl.rb b/lib/fog/openstack/key_manager/requests/replace_secret_acl.rb similarity index 93% rename from lib/fog/key_manager/openstack/requests/replace_secret_acl.rb rename to lib/fog/openstack/key_manager/requests/replace_secret_acl.rb index 4e149f020..5b5e05e8c 100644 --- a/lib/fog/key_manager/openstack/requests/replace_secret_acl.rb +++ b/lib/fog/openstack/key_manager/requests/replace_secret_acl.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def replace_secret_acl(uuid, options) request( diff --git a/lib/fog/key_manager/openstack/requests/update_container_acl.rb b/lib/fog/openstack/key_manager/requests/update_container_acl.rb similarity index 93% rename from lib/fog/key_manager/openstack/requests/update_container_acl.rb rename to lib/fog/openstack/key_manager/requests/update_container_acl.rb index 14994cf07..5c0c378fa 100644 --- a/lib/fog/key_manager/openstack/requests/update_container_acl.rb +++ b/lib/fog/openstack/key_manager/requests/update_container_acl.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def update_container_acl(uuid, options) request( diff --git a/lib/fog/key_manager/openstack/requests/update_secret_acl.rb b/lib/fog/openstack/key_manager/requests/update_secret_acl.rb similarity index 93% rename from lib/fog/key_manager/openstack/requests/update_secret_acl.rb rename to lib/fog/openstack/key_manager/requests/update_secret_acl.rb index 8d57048c5..dd581ed49 100644 --- a/lib/fog/key_manager/openstack/requests/update_secret_acl.rb +++ b/lib/fog/openstack/key_manager/requests/update_secret_acl.rb @@ -1,6 +1,6 @@ module Fog - module KeyManager - class OpenStack + module OpenStack + class KeyManager class Real def update_secret_acl(uuid, options) request( diff --git a/lib/fog/openstack/metering.rb b/lib/fog/openstack/metering.rb new file mode 100644 index 000000000..2db58b298 --- /dev/null +++ b/lib/fog/openstack/metering.rb @@ -0,0 +1,115 @@ +module Fog + module OpenStack + class Metering < Fog::Service + SUPPORTED_VERSIONS = /v2/.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version + + model_path 'fog/openstack/metering/models' + + model :resource + collection :resources + + # Events extracted from Ceilometer (metering service) to Panko (event service) since Ocata release + model :event + collection :events + + request_path 'fog/openstack/metering/requests' + + # Metering + request :get_event + request :get_resource + request :get_samples + request :get_statistics + request :list_events + request :list_meters + request :list_resources + + class Mock + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + users: {}, + tenants: {} + } + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 8776 + management_url.path = '/v1' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].find { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_management_url: @openstack_management_url } + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Metering::NotFound + end + + def default_endpoint_type + 'admin' + end + + def default_path_prefix + 'v2' + end + + def default_service_type + %w[metering] + end + end + end + end +end diff --git a/lib/fog/openstack/metering/models/event.rb b/lib/fog/openstack/metering/models/event.rb new file mode 100644 index 000000000..7cf900642 --- /dev/null +++ b/lib/fog/openstack/metering/models/event.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Metering + class Event < Fog::OpenStack::Model + identity :message_id + + attribute :event_type + attribute :generated + attribute :raw + attribute :traits + end + end + end +end diff --git a/lib/fog/openstack/metering/models/events.rb b/lib/fog/openstack/metering/models/events.rb new file mode 100644 index 000000000..a3c67f965 --- /dev/null +++ b/lib/fog/openstack/metering/models/events.rb @@ -0,0 +1,23 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/metering/models/event' + +module Fog + module OpenStack + class Metering + class Events < Fog::OpenStack::Collection + model Fog::OpenStack::Metering::Event + + def all(query = []) + load_response(service.list_events(query)) + end + + def find_by_id(message_id) + event = service.get_event(message_id).body + new(event) + rescue Fog::OpenStack::Metering::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/metering/openstack/models/meter.rb b/lib/fog/openstack/metering/models/meter.rb similarity index 100% rename from lib/fog/metering/openstack/models/meter.rb rename to lib/fog/openstack/metering/models/meter.rb diff --git a/lib/fog/metering/openstack/models/meters.rb b/lib/fog/openstack/metering/models/meters.rb similarity index 100% rename from lib/fog/metering/openstack/models/meters.rb rename to lib/fog/openstack/metering/models/meters.rb diff --git a/lib/fog/openstack/metering/models/resource.rb b/lib/fog/openstack/metering/models/resource.rb new file mode 100644 index 000000000..78fe5086a --- /dev/null +++ b/lib/fog/openstack/metering/models/resource.rb @@ -0,0 +1,15 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Metering + class Resource < Fog::OpenStack::Model + identity :resource_id + + attribute :project_id + attribute :user_id + attribute :metadata + end + end + end +end diff --git a/lib/fog/openstack/metering/models/resources.rb b/lib/fog/openstack/metering/models/resources.rb new file mode 100644 index 000000000..93acfb551 --- /dev/null +++ b/lib/fog/openstack/metering/models/resources.rb @@ -0,0 +1,23 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/metering/models/resource' + +module Fog + module OpenStack + class Metering + class Resources < Fog::OpenStack::Collection + model Fog::OpenStack::Metering::Resource + + def all(_detailed = true) + load_response(service.list_resources) + end + + def find_by_id(resource_id) + resource = service.get_resource(resource_id).body + new(resource) + rescue Fog::OpenStack::Metering::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/metering/requests/get_event.rb b/lib/fog/openstack/metering/requests/get_event.rb new file mode 100644 index 000000000..2e4d0bce7 --- /dev/null +++ b/lib/fog/openstack/metering/requests/get_event.rb @@ -0,0 +1,27 @@ +module Fog + module OpenStack + class Metering + class Real + def get_event(message_id) + request( + expects: 200, + method: 'GET', + path: "events/#{message_id}" + ) + end + end + + class Mock + def get_event(_message_id) + response = Excon::Response.new + response.status = 200 + response.body = { + 'event_type' => 'compute.instance.create', + 'message_id' => 'd646b40dea6347dfb8caee2da1484c56' + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/metering/requests/get_resource.rb b/lib/fog/openstack/metering/requests/get_resource.rb new file mode 100644 index 000000000..713ea6865 --- /dev/null +++ b/lib/fog/openstack/metering/requests/get_resource.rb @@ -0,0 +1,29 @@ +module Fog + module OpenStack + class Metering + class Real + def get_resource(resource_id) + request( + expects: 200, + method: 'GET', + path: "resources/#{resource_id}" + ) + end + end + + class Mock + def get_resource(_resource_id) + response = Excon::Response.new + response.status = 200 + response.body = { + 'resource_id' => 'glance', + 'project_id' => 'd646b40dea6347dfb8caee2da1484c56', + 'user_id' => '1d5fd9eda19142289a60ed9330b5d284', + 'metadata' => {} + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/metering/requests/get_samples.rb b/lib/fog/openstack/metering/requests/get_samples.rb new file mode 100644 index 000000000..1693cba0e --- /dev/null +++ b/lib/fog/openstack/metering/requests/get_samples.rb @@ -0,0 +1,52 @@ +module Fog + module OpenStack + class Metering + class Real + def get_samples(meter_id, options = [], limit = 10000000) + data = { + 'q' => [] + } + + options.each do |opt| + filter = {} + + ['field', 'op', 'value'].each do |key| + filter[key] = opt[key] if opt[key] + end + + data['q'] << filter unless filter.empty? + data['limit'] = limit + end + + request( + body: Fog::JSON.encode(data), + expects: 200, + method: 'GET', + path: "meters/#{meter_id}" + ) + end + end + + class Mock + def get_samples(_meter_id) + response = Excon::Response.new + response.status = 200 + response.body = [{ + 'counter_name' => 'image.size', + 'user_id' => '1d5fd9eda19142289a60ed9330b5d284', + 'resource_id' => 'glance', + 'timestamp' => '2013-04-03T23:44:21', + 'resource_metadata' => {}, + 'source' => 'artificial', + 'counter_unit' => 'bytes', + 'counter_volume' => 10.0, + 'project_id' => 'd646b40dea6347dfb8caee2da1484c56', + 'message_id' => '14e4a902-9cf3-11e2-a054-003048f5eafc', + 'counter_type' => 'gauge' + }] + response + end + end + end + end +end diff --git a/lib/fog/openstack/metering/requests/get_statistics.rb b/lib/fog/openstack/metering/requests/get_statistics.rb new file mode 100644 index 000000000..ba14dc9aa --- /dev/null +++ b/lib/fog/openstack/metering/requests/get_statistics.rb @@ -0,0 +1,54 @@ +module Fog + module OpenStack + class Metering + class Real + def get_statistics(meter_id, options = {}) + data = { + 'period' => options['period'], + 'q' => [] + } + + if options['q'].kind_of? Array + options['q'].each do |opt| + filter = {} + + ['field', 'op', 'value'].each do |key| + filter[key] = opt[key] if opt[key] + end + + data['q'] << filter unless filter.empty? + end + end + + request( + body: Fog::JSON.encode(data), + expects: 200, + method: 'GET', + path: "meters/#{meter_id}/statistics" + ) + end + end + + class Mock + def get_statistics(_meter_id, _options = {}) + response = Excon::Response.new + response.status = 200 + response.body = [{ + 'count' => 143, + 'duration_start' => '2013-04-03T23:44:21', + 'min' => 10.0, + 'max' => 10.0, + 'duration_end' => '2013-04-04T23:24:21', + 'period' => 0, + 'period_end' => '2013-04-04T23:24:21', + 'duration' => 85200.0, + 'period_start' => '2013-04-03T23:44:21', + 'avg' => 10.0, + 'sum' => 1430.0 + }] + response + end + end + end + end +end diff --git a/lib/fog/openstack/metering/requests/list_events.rb b/lib/fog/openstack/metering/requests/list_events.rb new file mode 100644 index 000000000..1c5147f6e --- /dev/null +++ b/lib/fog/openstack/metering/requests/list_events.rb @@ -0,0 +1,42 @@ +module Fog + module OpenStack + class Metering + class Real + def list_events(options = []) + data = { + 'q' => [] + } + + options.each do |opt| + filter = {} + + ['field', 'op', 'value'].each do |key| + filter[key] = opt[key] if opt[key] + end + + data['q'] << filter unless filter.empty? + end + + request( + body: Fog::JSON.encode(data), + expects: 200, + method: 'GET', + path: 'events' + ) + end + end + + class Mock + def list_events(_options = {}) + response = Excon::Response.new + response.status = 200 + response.body = [{ + 'event_type' => 'compute.instance.create', + 'message_id' => 'd646b40dea6347dfb8caee2da1484c56' + }] + response + end + end + end + end +end diff --git a/lib/fog/openstack/metering/requests/list_meters.rb b/lib/fog/openstack/metering/requests/list_meters.rb new file mode 100644 index 000000000..f0d1f688f --- /dev/null +++ b/lib/fog/openstack/metering/requests/list_meters.rb @@ -0,0 +1,46 @@ +module Fog + module OpenStack + class Metering + class Real + def list_meters(options = []) + data = { + 'q' => [] + } + + options.each do |opt| + filter = {} + + ['field', 'op', 'value'].each do |key| + filter[key] = opt[key] if opt[key] + end + + data['q'] << filter unless filter.empty? + end + + request( + body: Fog::JSON.encode(data), + expects: 200, + method: 'GET', + path: 'meters' + ) + end + end + + class Mock + def list_meters(_options = {}) + response = Excon::Response.new + response.status = 200 + response.body = [{ + 'user_id' => '1d5fd9eda19142289a60ed9330b5d284', + 'name' => 'image.size', + 'resource_id' => 'glance', + 'project_id' => 'd646b40dea6347dfb8caee2da1484c56', + 'type' => 'gauge', + 'unit' => 'bytes' + }] + response + end + end + end + end +end diff --git a/lib/fog/openstack/metering/requests/list_resources.rb b/lib/fog/openstack/metering/requests/list_resources.rb new file mode 100644 index 000000000..28ecd0943 --- /dev/null +++ b/lib/fog/openstack/metering/requests/list_resources.rb @@ -0,0 +1,29 @@ +module Fog + module OpenStack + class Metering + class Real + def list_resources(_options = {}) + request( + expects: 200, + method: 'GET', + path: 'resources' + ) + end + end + + class Mock + def list_resources(_options = {}) + response = Excon::Response.new + response.status = 200 + response.body = [{ + 'resource_id' => 'glance', + 'project_id' => 'd646b40dea6347dfb8caee2da1484c56', + 'user_id' => '1d5fd9eda19142289a60ed9330b5d284', + 'metadata' => {} + }] + response + end + end + end + end +end diff --git a/lib/fog/openstack/metric.rb b/lib/fog/openstack/metric.rb new file mode 100644 index 000000000..221f6a454 --- /dev/null +++ b/lib/fog/openstack/metric.rb @@ -0,0 +1,107 @@ +module Fog + module OpenStack + class Metric < Fog::Service + SUPPORTED_VERSIONS = /v1/.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version + + model_path 'fog/openstack/metric/models' + + model :metric + collection :metrics + model :resource + collection :resources + + request_path 'fog/openstack/metric/requests' + + request :get_resource_metric_measures + request :get_metric_measures + request :get_metric + request :list_metrics + request :get_resource + request :list_resources + + class Mock + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + users: {}, + tenants: {} + } + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 8041 + management_url.path = '/v1' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].find { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_management_url: @openstack_management_url } + end + end + + class Real + include Fog::OpenStack::Core + + def default_path_prefix + 'v1' + end + + def self.not_found_class + Fog::OpenStack::Metric::NotFound + end + + def default_service_type + %w[metric] + end + end + end + end +end diff --git a/lib/fog/openstack/metric/models/metric.rb b/lib/fog/openstack/metric/models/metric.rb new file mode 100644 index 000000000..fda7bce88 --- /dev/null +++ b/lib/fog/openstack/metric/models/metric.rb @@ -0,0 +1,18 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Metric + class Metric < Fog::OpenStack::Model + identity :id + + attribute :name + attribute :resource_id + attribute :unit + attribute :created_by_project_id + attribute :created_by_user_id + attribute :definition + end + end + end +end diff --git a/lib/fog/openstack/metric/models/metrics.rb b/lib/fog/openstack/metric/models/metrics.rb new file mode 100644 index 000000000..e5e752d20 --- /dev/null +++ b/lib/fog/openstack/metric/models/metrics.rb @@ -0,0 +1,30 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/metric/models/metric' + +module Fog + module OpenStack + class Metric + class Metrics < Fog::OpenStack::Collection + model Fog::OpenStack::Metric::Metric + + def all(options = {}) + load_response(service.list_metrics(options)) + end + + def find_by_id(metric_id) + resource = service.get_metric(metric_id).body + new(resource) + rescue Fog::OpenStack::Metric::NotFound + nil + end + + def find_measures_by_id(metric_id, options = {}) + resource = service.get_metric_measures(metric_id, options).body + new(resource) + rescue Fog::OpenStack::Metric::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/metric/models/resource.rb b/lib/fog/openstack/metric/models/resource.rb new file mode 100644 index 000000000..5524c31a3 --- /dev/null +++ b/lib/fog/openstack/metric/models/resource.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Metric + class Resource < Fog::OpenStack::Model + identity :id + + attribute :original_resource_id + attribute :project_id + attribute :user_id + attribute :metrics + end + end + end +end diff --git a/lib/fog/openstack/metric/models/resources.rb b/lib/fog/openstack/metric/models/resources.rb new file mode 100644 index 000000000..f5b1c6ee0 --- /dev/null +++ b/lib/fog/openstack/metric/models/resources.rb @@ -0,0 +1,23 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/metric/models/resource' + +module Fog + module OpenStack + class Metric + class Resources < Fog::OpenStack::Collection + model Fog::OpenStack::Metric::Resource + + def all(options = {}) + load_response(service.list_resources(options)) + end + + def find_by_id(resource_id) + resource = service.get_resource(resource_id).body + new(resource) + rescue Fog::OpenStack::Metric::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/metric/requests/get_metric.rb b/lib/fog/openstack/metric/requests/get_metric.rb new file mode 100644 index 000000000..4f9c18de4 --- /dev/null +++ b/lib/fog/openstack/metric/requests/get_metric.rb @@ -0,0 +1,62 @@ +module Fog + module OpenStack + class Metric + class Real + def get_metric(metric_id) + request( + expects: 200, + method: 'GET', + path: "metric/#{metric_id}" + ) + end + end + + class Mock + def get_metric(_metric_id) + response = Excon::Response.new + response.status = 200 + response.body = { + "archive_policy" => { + "aggregation_methods" => [ + "95pct", + "median", + "max", + "count", + "std", + "sum", + "min", + "mean" + ], + "back_window" => 0, + "definition" => [ + { + "granularity" => "0:00:01", + "points" => 3600, + "timespan" => "1:00:00" + }, + { + "granularity" => "0:01:00", + "points" => 10080, + "timespan" => "7 days, 0:00:00" + }, + { + "granularity" => "1:00:00", + "points" => 8760, + "timespan" => "365 days, 0:00:00" + } + ], + "name" => "high" + }, + "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", + "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", + "id" => "8bbb5f02-b654-4861-b19e-d372fcdca124", + "name" => nil, + "resource" => nil, + "unit" => nil + } + response + end + end + end + end +end diff --git a/lib/fog/metric/openstack/requests/get_metric_measures.rb b/lib/fog/openstack/metric/requests/get_metric_measures.rb similarity index 85% rename from lib/fog/metric/openstack/requests/get_metric_measures.rb rename to lib/fog/openstack/metric/requests/get_metric_measures.rb index dc4335c66..8813e964e 100644 --- a/lib/fog/metric/openstack/requests/get_metric_measures.rb +++ b/lib/fog/openstack/metric/requests/get_metric_measures.rb @@ -1,6 +1,6 @@ module Fog - module Metric - class OpenStack + module OpenStack + class Metric class Real def get_metric_measures(metric_id, options = {}) request( @@ -19,15 +19,15 @@ def get_metric_measures(_metric_id, _options = {}) response.body = [ { "timestamp" => "2014-10-06T14:33:57", - "value" => 43.1 + "value" => 43.1 }, { "timestamp" => "2014-10-06T14:34:12", - "value" => 12 + "value" => 12 }, { "timestamp" => "2014-10-06T14:34:20", - "value" => 2 + "value" => 2 } ] response diff --git a/lib/fog/openstack/metric/requests/get_resource.rb b/lib/fog/openstack/metric/requests/get_resource.rb new file mode 100644 index 000000000..d1465364d --- /dev/null +++ b/lib/fog/openstack/metric/requests/get_resource.rb @@ -0,0 +1,37 @@ +module Fog + module OpenStack + class Metric + class Real + def get_resource(resource_id) + request( + expects: 200, + method: 'GET', + path: "resource/generic/#{resource_id}" + ) + end + end + + class Mock + def get_resource(_resource_id) + response = Excon::Response.new + response.status = 200 + response.body = { + "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", + "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", + "ended_at" => nil, + "id" => "75c44741-cc60-4033-804e-2d3098c7d2e9", + "metrics" => {}, + "original_resource_id" => "75C44741-CC60-4033-804E-2D3098C7D2E9", + "project_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D", + "revision_end" => nil, + "revision_start" => "2016-11-08T11:23:45.989977+00:00", + "started_at" => "2016-11-08T11:23:45.989960+00:00", + "type" => "generic", + "user_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D" + } + response + end + end + end + end +end diff --git a/lib/fog/metric/openstack/requests/get_resource_metric_measures.rb b/lib/fog/openstack/metric/requests/get_resource_metric_measures.rb similarity index 96% rename from lib/fog/metric/openstack/requests/get_resource_metric_measures.rb rename to lib/fog/openstack/metric/requests/get_resource_metric_measures.rb index df38fa2cb..832bd723e 100644 --- a/lib/fog/metric/openstack/requests/get_resource_metric_measures.rb +++ b/lib/fog/openstack/metric/requests/get_resource_metric_measures.rb @@ -1,6 +1,6 @@ module Fog - module Metric - class OpenStack + module OpenStack + class Metric class Real def get_resource_metric_measures(resource_id, metric_name, options = {}) request( diff --git a/lib/fog/openstack/metric/requests/list_metrics.rb b/lib/fog/openstack/metric/requests/list_metrics.rb new file mode 100644 index 000000000..c26053a56 --- /dev/null +++ b/lib/fog/openstack/metric/requests/list_metrics.rb @@ -0,0 +1,104 @@ +module Fog + module OpenStack + class Metric + class Real + def list_metrics(options = {}) + request( + expects: 200, + method: 'GET', + path: 'metric', + query: options + ) + end + end + + class Mock + def list_metrics(_options = {}) + response = Excon::Response.new + response.status = 200 + response.body = [ + { + "archive_policy" => { + "aggregation_methods" => [ + "95pct", + "median", + "max", + "count", + "std", + "sum", + "min", + "mean" + ], + "back_window" => 0, + "definition" => [ + { + "granularity" => "0:00:01", + "points" => 3600, + "timespan" => "1:00:00" + }, + { + "granularity" => "0:01:00", + "points" => 10080, + "timespan" => "7 days, 0:00:00" + }, + { + "granularity" => "1:00:00", + "points" => 8760, + "timespan" => "365 days, 0:00:00" + } + ], + "name" => "high" + }, + "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", + "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", + "id" => "8bbb5f02-b654-4861-b19e-d372fcdca124", + "name" => nil, + "resource_id" => nil, + "unit" => nil + }, + { + "archive_policy" => { + "aggregation_methods" => [ + "95pct", + "median", + "max", + "count", + "std", + "sum", + "min", + "mean" + ], + "back_window" => 0, + "definition" => [ + { + "granularity" => "0:05:00", + "points" => 12, + "timespan" => "1:00:00" + }, + { + "granularity" => "1:00:00", + "points" => 24, + "timespan" => "1 day, 0:00:00" + }, + { + "granularity" => "1 day, 0:00:00", + "points" => 30, + "timespan" => "30 days, 0:00:00" + } + ], + "name" => "low" + }, + "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", + "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", + "id" => "af3446dc-e20f-4ecf-aaaa-1240c05ff19b", + "name" => nil, + "resource_id" => nil, + "unit" => nil + } + ] + response + end + end + end + end +end diff --git a/lib/fog/openstack/metric/requests/list_resources.rb b/lib/fog/openstack/metric/requests/list_resources.rb new file mode 100644 index 000000000..bac206ffc --- /dev/null +++ b/lib/fog/openstack/metric/requests/list_resources.rb @@ -0,0 +1,70 @@ +module Fog + module OpenStack + class Metric + class Real + def list_resources(type = "generic", options = {}) + request( + expects: 200, + method: 'GET', + path: "resource/#{Fog::OpenStack.escape(type)}", + query: options + ) + end + end + + class Mock + def list_resources(_type = "generic", _options = {}) + response = Excon::Response.new + response.status = 200 + response.body = [ + { + "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", + "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", + "ended_at" => nil, + "id" => "75c44741-cc60-4033-804e-2d3098c7d2e9", + "metrics" => {}, + "original_resource_id" => "75C44741-CC60-4033-804E-2D3098C7D2E9", + "project_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D", + "revision_end" => nil, + "revision_start" => "2016-11-08T11:23:45.989977+00:00", + "started_at" => "2016-11-08T11:23:45.989960+00:00", + "type" => "generic", + "user_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D" + }, + { + "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", + "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", + "ended_at" => nil, + "id" => "ab68da77-fa82-4e67-aba9-270c5a98cbcb", + "metrics" => { + "temperature" => "ed51c966-8890-4f4e-96c4-f0a753dbad42" + }, + "original_resource_id" => "AB68DA77-FA82-4E67-ABA9-270C5A98CBCB", + "project_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D", + "revision_end" => nil, + "revision_start" => "2016-11-08T11:23:46.177259+00:00", + "started_at" => "2016-11-08T11:23:46.177236+00:00", + "type" => "generic", + "user_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D" + }, + { + "created_by_project_id" => "384a902b-6856-424c-9d30-6b5325ac20a5", + "created_by_user_id" => "d040def9-fd68-45f0-a19f-253014f397c3", + "ended_at" => "2014-01-04T10:00:12+00:00", + "id" => "6868da77-fa82-4e67-aba9-270c5ae8cbca", + "metrics" => {}, + "original_resource_id" => "6868DA77-FA82-4E67-ABA9-270C5AE8CBCA", + "project_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D", + "revision_end" => nil, + "revision_start" => "2016-11-08T11:23:46.781604+00:00", + "started_at" => "2014-01-02T23:23:34+00:00", + "type" => "instance", + "user_id" => "BD3A1E52-1C62-44CB-BF04-660BD88CD74D" + } + ] + response + end + end + end + end +end diff --git a/lib/fog/openstack/models/meta_parent.rb b/lib/fog/openstack/models/meta_parent.rb index b90b6e5b1..b9b624330 100644 --- a/lib/fog/openstack/models/meta_parent.rb +++ b/lib/fog/openstack/models/meta_parent.rb @@ -1,6 +1,6 @@ module Fog - module Compute - class OpenStack + module OpenStack + class Compute module MetaParent def parent @parent @@ -11,9 +11,9 @@ def parent=(new_parent) end def collection_name - if @parent.class == Fog::Compute::OpenStack::Image + if @parent.class == Fog::OpenStack::Compute::Image return "images" - elsif @parent.class == Fog::Compute::OpenStack::Server + elsif @parent.class == Fog::OpenStack::Compute::Server return "servers" else raise "Metadata is not supported for this model type." diff --git a/lib/fog/openstack/monitoring.rb b/lib/fog/openstack/monitoring.rb new file mode 100644 index 000000000..607ea7705 --- /dev/null +++ b/lib/fog/openstack/monitoring.rb @@ -0,0 +1,86 @@ +module Fog + module OpenStack + class Monitoring < Fog::Service + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, :openstack_userid, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_auth_omit_default_port, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version, :openstack_temp_url_key, :openstack_cache_ttl + + model_path 'fog/openstack/monitoring/models' + model :metric + collection :metrics + model :measurement + collection :measurements + model :statistic + collection :statistics + model :notification_method + collection :notification_methods + model :alarm_definition + collection :alarm_definitions + model :alarm + collection :alarms + model :alarm_state + collection :alarm_states + model :alarm_count + collection :alarm_counts + model :dimension_value + + request_path 'fog/openstack/monitoring/requests' + request :create_metric + request :create_metric_array + request :list_metrics + request :list_metric_names + + request :find_measurements + + request :list_statistics + + request :create_notification_method + request :get_notification_method + request :list_notification_methods + request :put_notification_method + request :patch_notification_method + request :delete_notification_method + + request :create_alarm_definition + request :list_alarm_definitions + request :patch_alarm_definition + request :update_alarm_definition + request :get_alarm_definition + request :delete_alarm_definition + + request :list_alarms + request :get_alarm + request :patch_alarm + request :update_alarm + request :delete_alarm + request :get_alarm_counts + + request :list_alarm_state_history_for_specific_alarm + request :list_alarm_state_history_for_all_alarms + + request :list_dimension_values + + request :list_notification_method_types + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Monitoring::NotFound + end + + def default_service_type + %w[monitoring] + end + end + end + end +end diff --git a/lib/fog/monitoring/openstack/models/alarm.rb b/lib/fog/openstack/monitoring/models/alarm.rb similarity index 95% rename from lib/fog/monitoring/openstack/models/alarm.rb rename to lib/fog/openstack/monitoring/models/alarm.rb index c42f20ff4..eafba1074 100644 --- a/lib/fog/monitoring/openstack/models/alarm.rb +++ b/lib/fog/openstack/monitoring/models/alarm.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Alarm < Fog::OpenStack::Model identity :id diff --git a/lib/fog/monitoring/openstack/models/alarm_count.rb b/lib/fog/openstack/monitoring/models/alarm_count.rb similarity index 86% rename from lib/fog/monitoring/openstack/models/alarm_count.rb rename to lib/fog/openstack/monitoring/models/alarm_count.rb index afd2d5aa3..af982eec0 100644 --- a/lib/fog/monitoring/openstack/models/alarm_count.rb +++ b/lib/fog/openstack/monitoring/models/alarm_count.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class AlarmCount < Fog::OpenStack::Model attribute :links attribute :columns diff --git a/lib/fog/openstack/monitoring/models/alarm_counts.rb b/lib/fog/openstack/monitoring/models/alarm_counts.rb new file mode 100644 index 000000000..7e340e988 --- /dev/null +++ b/lib/fog/openstack/monitoring/models/alarm_counts.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/monitoring/models/alarm_count' + +module Fog + module OpenStack + class Monitoring + class AlarmCounts < Fog::OpenStack::Collection + model Fog::OpenStack::Monitoring::AlarmCount + + def get(options = {}) + load_response(service.get_alarm_counts(options)) + end + end + end + end +end diff --git a/lib/fog/monitoring/openstack/models/alarm_definition.rb b/lib/fog/openstack/monitoring/models/alarm_definition.rb similarity index 96% rename from lib/fog/monitoring/openstack/models/alarm_definition.rb rename to lib/fog/openstack/monitoring/models/alarm_definition.rb index 3938f0b8b..af7ba6839 100644 --- a/lib/fog/monitoring/openstack/models/alarm_definition.rb +++ b/lib/fog/openstack/monitoring/models/alarm_definition.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class AlarmDefinition < Fog::OpenStack::Model identity :id diff --git a/lib/fog/monitoring/openstack/models/alarm_definitions.rb b/lib/fog/openstack/monitoring/models/alarm_definitions.rb similarity index 81% rename from lib/fog/monitoring/openstack/models/alarm_definitions.rb rename to lib/fog/openstack/monitoring/models/alarm_definitions.rb index be88a5a80..51468c309 100644 --- a/lib/fog/monitoring/openstack/models/alarm_definitions.rb +++ b/lib/fog/openstack/monitoring/models/alarm_definitions.rb @@ -1,11 +1,11 @@ require 'fog/openstack/models/collection' -require 'fog/monitoring/openstack/models/alarm_definition' +require 'fog/openstack/monitoring/models/alarm_definition' module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class AlarmDefinitions < Fog::OpenStack::Collection - model Fog::Monitoring::OpenStack::AlarmDefinition + model Fog::OpenStack::Monitoring::AlarmDefinition def create(attributes) super(attributes) @@ -26,8 +26,9 @@ def all(options = {}) def find_by_id(id) cached_alarm_definition = detect { |alarm_definition| alarm_definition.id == id } return cached_alarm_definition if cached_alarm_definition + alarm_definition_hash = service.get_alarm_definition(id).body - Fog::Monitoring::OpenStack::AlarmDefinition.new( + Fog::OpenStack::Monitoring::AlarmDefinition.new( alarm_definition_hash.merge(service: service) ) end diff --git a/lib/fog/monitoring/openstack/models/alarm_state.rb b/lib/fog/openstack/monitoring/models/alarm_state.rb similarity index 93% rename from lib/fog/monitoring/openstack/models/alarm_state.rb rename to lib/fog/openstack/monitoring/models/alarm_state.rb index 8dc34052e..0b5be8907 100644 --- a/lib/fog/monitoring/openstack/models/alarm_state.rb +++ b/lib/fog/openstack/monitoring/models/alarm_state.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class AlarmState < Fog::OpenStack::Model identity :id diff --git a/lib/fog/monitoring/openstack/models/alarm_states.rb b/lib/fog/openstack/monitoring/models/alarm_states.rb similarity index 75% rename from lib/fog/monitoring/openstack/models/alarm_states.rb rename to lib/fog/openstack/monitoring/models/alarm_states.rb index 87fa6e5f0..4bef0a5a6 100644 --- a/lib/fog/monitoring/openstack/models/alarm_states.rb +++ b/lib/fog/openstack/monitoring/models/alarm_states.rb @@ -1,11 +1,11 @@ require 'fog/openstack/models/collection' -require 'fog/monitoring/openstack/models/alarm_state' +require 'fog/openstack/monitoring/models/alarm_state' module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class AlarmStates < Fog::OpenStack::Collection - model Fog::Monitoring::OpenStack::AlarmState + model Fog::OpenStack::Monitoring::AlarmState def all(options = {}) load_response(service.list_alarm_state_history_for_all_alarms(options), 'elements') diff --git a/lib/fog/monitoring/openstack/models/alarms.rb b/lib/fog/openstack/monitoring/models/alarms.rb similarity index 75% rename from lib/fog/monitoring/openstack/models/alarms.rb rename to lib/fog/openstack/monitoring/models/alarms.rb index 8da6894aa..b185c9033 100644 --- a/lib/fog/monitoring/openstack/models/alarms.rb +++ b/lib/fog/openstack/monitoring/models/alarms.rb @@ -1,11 +1,11 @@ require 'fog/openstack/models/collection' -require 'fog/monitoring/openstack/models/alarm' +require 'fog/openstack/monitoring/models/alarm' module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Alarms < Fog::OpenStack::Collection - model Fog::Monitoring::OpenStack::Alarm + model Fog::OpenStack::Monitoring::Alarm def all(options = {}) load_response(service.list_alarms(options), 'elements') @@ -14,8 +14,9 @@ def all(options = {}) def find_by_id(id) cached_alarm = detect { |alarm| alarm.id == id } return cached_alarm if cached_alarm + alarm_hash = service.get_alarm(id).body - Fog::Monitoring::OpenStack::Alarm.new( + Fog::OpenStack::Monitoring::Alarm.new( alarm_hash.merge(service: service) ) end diff --git a/lib/fog/monitoring/openstack/models/dimension_value.rb b/lib/fog/openstack/monitoring/models/dimension_value.rb similarity index 87% rename from lib/fog/monitoring/openstack/models/dimension_value.rb rename to lib/fog/openstack/monitoring/models/dimension_value.rb index 8595f884a..4946bf798 100644 --- a/lib/fog/monitoring/openstack/models/dimension_value.rb +++ b/lib/fog/openstack/monitoring/models/dimension_value.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class DimensionValue < Fog::OpenStack::Model identity :id diff --git a/lib/fog/openstack/monitoring/models/dimension_values.rb b/lib/fog/openstack/monitoring/models/dimension_values.rb new file mode 100644 index 000000000..d6457dab5 --- /dev/null +++ b/lib/fog/openstack/monitoring/models/dimension_values.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/monitoring/models/dimension_value' + +module Fog + module OpenStack + class Monitoring + class DimensionValues < Fog::OpenStack::Collection + model Fog::OpenStack::Monitoring::DimensionValue + + def all(dimension_name, options = {}) + load_response(service.list_dimension_values(dimension_name, options), 'elements') + end + end + end + end +end diff --git a/lib/fog/monitoring/openstack/models/measurement.rb b/lib/fog/openstack/monitoring/models/measurement.rb similarity index 88% rename from lib/fog/monitoring/openstack/models/measurement.rb rename to lib/fog/openstack/monitoring/models/measurement.rb index fdbc27c72..de2d72e5b 100644 --- a/lib/fog/monitoring/openstack/models/measurement.rb +++ b/lib/fog/openstack/monitoring/models/measurement.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Measurement < Fog::OpenStack::Model identity :id diff --git a/lib/fog/openstack/monitoring/models/measurements.rb b/lib/fog/openstack/monitoring/models/measurements.rb new file mode 100644 index 000000000..c47f8f178 --- /dev/null +++ b/lib/fog/openstack/monitoring/models/measurements.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/monitoring/models/measurement' + +module Fog + module OpenStack + class Monitoring + class Measurements < Fog::OpenStack::Collection + model Fog::OpenStack::Monitoring::Measurement + + def find(options = {}) + load_response(service.find_measurements(options), 'elements') + end + end + end + end +end diff --git a/lib/fog/openstack/monitoring/models/metric.rb b/lib/fog/openstack/monitoring/models/metric.rb new file mode 100644 index 000000000..9ed795398 --- /dev/null +++ b/lib/fog/openstack/monitoring/models/metric.rb @@ -0,0 +1,27 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Monitoring + class Metric < Fog::OpenStack::Model + identity :id + + attribute :name + attribute :dimensions + attribute :timestamp + attribute :value + attribute :value_meta + + def to_s + name + end + + def create + requires :name, :timestamp, :value + service.create_metric(attributes).body['metric'] + self + end + end + end + end +end diff --git a/lib/fog/openstack/monitoring/models/metrics.rb b/lib/fog/openstack/monitoring/models/metrics.rb new file mode 100644 index 000000000..095a6a471 --- /dev/null +++ b/lib/fog/openstack/monitoring/models/metrics.rb @@ -0,0 +1,36 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/monitoring/models/metric' +require 'fog/openstack/monitoring/models/dimension_values' + +module Fog + module OpenStack + class Monitoring + class Metrics < Fog::OpenStack::Collection + model Fog::OpenStack::Monitoring::Metric + + def all(options = {}) + load_response(service.list_metrics(options), 'elements') + end + + def list_metric_names(options = {}) + load_response(service.list_metric_names(options), 'elements') + end + + def create(attributes) + super(attributes) + end + + def create_metric_array(metrics_list = []) + service.create_metric_array(metrics_list) + end + + def list_dimension_values(dimension_name, options = {}) + dimension_value = Fog::OpenStack::Monitoring::DimensionValues.new + dimension_value.load_response( + service.list_dimension_values(dimension_name, options), 'elements' + ) + end + end + end + end +end diff --git a/lib/fog/monitoring/openstack/models/notification_method.rb b/lib/fog/openstack/monitoring/models/notification_method.rb similarity index 96% rename from lib/fog/monitoring/openstack/models/notification_method.rb rename to lib/fog/openstack/monitoring/models/notification_method.rb index 075e32333..f2a1fbfdc 100644 --- a/lib/fog/monitoring/openstack/models/notification_method.rb +++ b/lib/fog/openstack/monitoring/models/notification_method.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class NotificationMethod < Fog::OpenStack::Model identity :id diff --git a/lib/fog/monitoring/openstack/models/notification_methods.rb b/lib/fog/openstack/monitoring/models/notification_methods.rb similarity index 81% rename from lib/fog/monitoring/openstack/models/notification_methods.rb rename to lib/fog/openstack/monitoring/models/notification_methods.rb index 245d1b99d..9d89c6470 100644 --- a/lib/fog/monitoring/openstack/models/notification_methods.rb +++ b/lib/fog/openstack/monitoring/models/notification_methods.rb @@ -1,11 +1,11 @@ require 'fog/openstack/models/collection' -require 'fog/monitoring/openstack/models/notification_method' +require 'fog/openstack/monitoring/models/notification_method' module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class NotificationMethods < Fog::OpenStack::Collection - model Fog::Monitoring::OpenStack::NotificationMethod + model Fog::OpenStack::Monitoring::NotificationMethod def all(options = {}) load_response(service.list_notification_methods(options), 'elements') @@ -22,8 +22,9 @@ def patch(attributes) def find_by_id(id) cached_notification_method = detect { |notification_method| notification_method.id == id } return cached_notification_method if cached_notification_method + notification_method_hash = service.get_notification_method(id).body - Fog::Monitoring::OpenStack::NotificationMethod.new( + Fog::OpenStack::Monitoring::NotificationMethod.new( notification_method_hash.merge(service: service) ) end diff --git a/lib/fog/monitoring/openstack/models/statistic.rb b/lib/fog/openstack/monitoring/models/statistic.rb similarity index 88% rename from lib/fog/monitoring/openstack/models/statistic.rb rename to lib/fog/openstack/monitoring/models/statistic.rb index e38ca7db2..5bfcde135 100644 --- a/lib/fog/monitoring/openstack/models/statistic.rb +++ b/lib/fog/openstack/monitoring/models/statistic.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Statistic < Fog::OpenStack::Model identity :id diff --git a/lib/fog/openstack/monitoring/models/statistics.rb b/lib/fog/openstack/monitoring/models/statistics.rb new file mode 100644 index 000000000..9bce67cc4 --- /dev/null +++ b/lib/fog/openstack/monitoring/models/statistics.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/monitoring/models/statistic' + +module Fog + module OpenStack + class Monitoring + class Statistics < Fog::OpenStack::Collection + model Fog::OpenStack::Monitoring::Statistic + + def all(options = {}) + load_response(service.list_statistics(options), 'elements') + end + end + end + end +end diff --git a/lib/fog/monitoring/openstack/requests/create_alarm_definition.rb b/lib/fog/openstack/monitoring/requests/create_alarm_definition.rb similarity index 88% rename from lib/fog/monitoring/openstack/requests/create_alarm_definition.rb rename to lib/fog/openstack/monitoring/requests/create_alarm_definition.rb index 014759370..87c4039f7 100644 --- a/lib/fog/monitoring/openstack/requests/create_alarm_definition.rb +++ b/lib/fog/openstack/monitoring/requests/create_alarm_definition.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def create_alarm_definition(options) request( diff --git a/lib/fog/monitoring/openstack/requests/create_metric.rb b/lib/fog/openstack/monitoring/requests/create_metric.rb similarity index 93% rename from lib/fog/monitoring/openstack/requests/create_metric.rb rename to lib/fog/openstack/monitoring/requests/create_metric.rb index e6d11f830..4707f2ee2 100644 --- a/lib/fog/monitoring/openstack/requests/create_metric.rb +++ b/lib/fog/openstack/monitoring/requests/create_metric.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def create_metric(options) data = options diff --git a/lib/fog/monitoring/openstack/requests/create_metric_array.rb b/lib/fog/openstack/monitoring/requests/create_metric_array.rb similarity index 88% rename from lib/fog/monitoring/openstack/requests/create_metric_array.rb rename to lib/fog/openstack/monitoring/requests/create_metric_array.rb index 10405e051..8767f3038 100644 --- a/lib/fog/monitoring/openstack/requests/create_metric_array.rb +++ b/lib/fog/openstack/monitoring/requests/create_metric_array.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def create_metric_array(metrics_list) request( diff --git a/lib/fog/monitoring/openstack/requests/create_notification_method.rb b/lib/fog/openstack/monitoring/requests/create_notification_method.rb similarity index 88% rename from lib/fog/monitoring/openstack/requests/create_notification_method.rb rename to lib/fog/openstack/monitoring/requests/create_notification_method.rb index 0b2b1f37d..70f121f30 100644 --- a/lib/fog/monitoring/openstack/requests/create_notification_method.rb +++ b/lib/fog/openstack/monitoring/requests/create_notification_method.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def create_notification_method(options) request( diff --git a/lib/fog/monitoring/openstack/requests/delete_alarm.rb b/lib/fog/openstack/monitoring/requests/delete_alarm.rb similarity index 86% rename from lib/fog/monitoring/openstack/requests/delete_alarm.rb rename to lib/fog/openstack/monitoring/requests/delete_alarm.rb index 14c4a6f6a..c9a19bdfc 100644 --- a/lib/fog/monitoring/openstack/requests/delete_alarm.rb +++ b/lib/fog/openstack/monitoring/requests/delete_alarm.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def delete_alarm(id) request( diff --git a/lib/fog/monitoring/openstack/requests/delete_alarm_definition.rb b/lib/fog/openstack/monitoring/requests/delete_alarm_definition.rb similarity index 87% rename from lib/fog/monitoring/openstack/requests/delete_alarm_definition.rb rename to lib/fog/openstack/monitoring/requests/delete_alarm_definition.rb index 77f9a4d44..264bd332e 100644 --- a/lib/fog/monitoring/openstack/requests/delete_alarm_definition.rb +++ b/lib/fog/openstack/monitoring/requests/delete_alarm_definition.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def delete_alarm_definition(id) request( diff --git a/lib/fog/monitoring/openstack/requests/delete_notification_method.rb b/lib/fog/openstack/monitoring/requests/delete_notification_method.rb similarity index 87% rename from lib/fog/monitoring/openstack/requests/delete_notification_method.rb rename to lib/fog/openstack/monitoring/requests/delete_notification_method.rb index 6ae402180..1b7df9c40 100644 --- a/lib/fog/monitoring/openstack/requests/delete_notification_method.rb +++ b/lib/fog/openstack/monitoring/requests/delete_notification_method.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def delete_notification_method(id) request( diff --git a/lib/fog/monitoring/openstack/requests/find_measurements.rb b/lib/fog/openstack/monitoring/requests/find_measurements.rb similarity index 90% rename from lib/fog/monitoring/openstack/requests/find_measurements.rb rename to lib/fog/openstack/monitoring/requests/find_measurements.rb index d136608e6..2065dad47 100644 --- a/lib/fog/monitoring/openstack/requests/find_measurements.rb +++ b/lib/fog/openstack/monitoring/requests/find_measurements.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def find_measurements(options = {}) request( diff --git a/lib/fog/monitoring/openstack/requests/get_alarm.rb b/lib/fog/openstack/monitoring/requests/get_alarm.rb similarity index 88% rename from lib/fog/monitoring/openstack/requests/get_alarm.rb rename to lib/fog/openstack/monitoring/requests/get_alarm.rb index 4de45704e..9e191f233 100644 --- a/lib/fog/monitoring/openstack/requests/get_alarm.rb +++ b/lib/fog/openstack/monitoring/requests/get_alarm.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def get_alarm(id) request( diff --git a/lib/fog/monitoring/openstack/requests/get_alarm_counts.rb b/lib/fog/openstack/monitoring/requests/get_alarm_counts.rb similarity index 89% rename from lib/fog/monitoring/openstack/requests/get_alarm_counts.rb rename to lib/fog/openstack/monitoring/requests/get_alarm_counts.rb index 13cbe36a4..8fedb3aae 100644 --- a/lib/fog/monitoring/openstack/requests/get_alarm_counts.rb +++ b/lib/fog/openstack/monitoring/requests/get_alarm_counts.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def get_alarm_counts(options = {}) request( diff --git a/lib/fog/monitoring/openstack/requests/get_alarm_definition.rb b/lib/fog/openstack/monitoring/requests/get_alarm_definition.rb similarity index 86% rename from lib/fog/monitoring/openstack/requests/get_alarm_definition.rb rename to lib/fog/openstack/monitoring/requests/get_alarm_definition.rb index 8aeef9da5..e6ecf406c 100644 --- a/lib/fog/monitoring/openstack/requests/get_alarm_definition.rb +++ b/lib/fog/openstack/monitoring/requests/get_alarm_definition.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def get_alarm_definition(id) request( diff --git a/lib/fog/monitoring/openstack/requests/get_notification_method.rb b/lib/fog/openstack/monitoring/requests/get_notification_method.rb similarity index 87% rename from lib/fog/monitoring/openstack/requests/get_notification_method.rb rename to lib/fog/openstack/monitoring/requests/get_notification_method.rb index 2304cae60..14d790a60 100644 --- a/lib/fog/monitoring/openstack/requests/get_notification_method.rb +++ b/lib/fog/openstack/monitoring/requests/get_notification_method.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def get_notification_method(id) request( diff --git a/lib/fog/monitoring/openstack/requests/list_alarm_definitions.rb b/lib/fog/openstack/monitoring/requests/list_alarm_definitions.rb similarity index 90% rename from lib/fog/monitoring/openstack/requests/list_alarm_definitions.rb rename to lib/fog/openstack/monitoring/requests/list_alarm_definitions.rb index a7f6a32d7..7b5713855 100644 --- a/lib/fog/monitoring/openstack/requests/list_alarm_definitions.rb +++ b/lib/fog/openstack/monitoring/requests/list_alarm_definitions.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def list_alarm_definitions(options = {}) request( diff --git a/lib/fog/monitoring/openstack/requests/list_alarm_state_history_for_all_alarms.rb b/lib/fog/openstack/monitoring/requests/list_alarm_state_history_for_all_alarms.rb similarity index 90% rename from lib/fog/monitoring/openstack/requests/list_alarm_state_history_for_all_alarms.rb rename to lib/fog/openstack/monitoring/requests/list_alarm_state_history_for_all_alarms.rb index 6fe63dec4..efd6babd7 100644 --- a/lib/fog/monitoring/openstack/requests/list_alarm_state_history_for_all_alarms.rb +++ b/lib/fog/openstack/monitoring/requests/list_alarm_state_history_for_all_alarms.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def list_alarm_state_history_for_all_alarms(options = {}) request( diff --git a/lib/fog/monitoring/openstack/requests/list_alarm_state_history_for_specific_alarm.rb b/lib/fog/openstack/monitoring/requests/list_alarm_state_history_for_specific_alarm.rb similarity index 91% rename from lib/fog/monitoring/openstack/requests/list_alarm_state_history_for_specific_alarm.rb rename to lib/fog/openstack/monitoring/requests/list_alarm_state_history_for_specific_alarm.rb index 0e83856d0..1783b5f42 100644 --- a/lib/fog/monitoring/openstack/requests/list_alarm_state_history_for_specific_alarm.rb +++ b/lib/fog/openstack/monitoring/requests/list_alarm_state_history_for_specific_alarm.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def list_alarm_state_history_for_specific_alarm(id, options = {}) request( diff --git a/lib/fog/monitoring/openstack/requests/list_alarms.rb b/lib/fog/openstack/monitoring/requests/list_alarms.rb similarity index 89% rename from lib/fog/monitoring/openstack/requests/list_alarms.rb rename to lib/fog/openstack/monitoring/requests/list_alarms.rb index 623e2dc56..603266d41 100644 --- a/lib/fog/monitoring/openstack/requests/list_alarms.rb +++ b/lib/fog/openstack/monitoring/requests/list_alarms.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def list_alarms(options = {}) request( diff --git a/lib/fog/monitoring/openstack/requests/list_dimension_values.rb b/lib/fog/openstack/monitoring/requests/list_dimension_values.rb similarity index 91% rename from lib/fog/monitoring/openstack/requests/list_dimension_values.rb rename to lib/fog/openstack/monitoring/requests/list_dimension_values.rb index 59aabab2a..c00160061 100644 --- a/lib/fog/monitoring/openstack/requests/list_dimension_values.rb +++ b/lib/fog/openstack/monitoring/requests/list_dimension_values.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def list_dimension_values(dimension_name, options = {}) request( diff --git a/lib/fog/monitoring/openstack/requests/list_metric_names.rb b/lib/fog/openstack/monitoring/requests/list_metric_names.rb similarity index 89% rename from lib/fog/monitoring/openstack/requests/list_metric_names.rb rename to lib/fog/openstack/monitoring/requests/list_metric_names.rb index e9e1b51ad..3f5286082 100644 --- a/lib/fog/monitoring/openstack/requests/list_metric_names.rb +++ b/lib/fog/openstack/monitoring/requests/list_metric_names.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def list_metric_names(options = {}) request( diff --git a/lib/fog/openstack/monitoring/requests/list_metrics.rb b/lib/fog/openstack/monitoring/requests/list_metrics.rb new file mode 100644 index 000000000..8ac5bf7c4 --- /dev/null +++ b/lib/fog/openstack/monitoring/requests/list_metrics.rb @@ -0,0 +1,22 @@ +module Fog + module OpenStack + class Monitoring + class Real + def list_metrics(options = {}) + request( + expects: [200], + method: 'GET', + path: "metrics", + query: options + ) + end + end + + class Mock + # def list_metrics(options = {}) + # + # end + end + end + end +end diff --git a/lib/fog/monitoring/openstack/requests/list_notification_method_types.rb b/lib/fog/openstack/monitoring/requests/list_notification_method_types.rb similarity index 89% rename from lib/fog/monitoring/openstack/requests/list_notification_method_types.rb rename to lib/fog/openstack/monitoring/requests/list_notification_method_types.rb index c65c531e2..4977dbc54 100644 --- a/lib/fog/monitoring/openstack/requests/list_notification_method_types.rb +++ b/lib/fog/openstack/monitoring/requests/list_notification_method_types.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def list_notification_method_types request( diff --git a/lib/fog/monitoring/openstack/requests/list_notification_methods.rb b/lib/fog/openstack/monitoring/requests/list_notification_methods.rb similarity index 90% rename from lib/fog/monitoring/openstack/requests/list_notification_methods.rb rename to lib/fog/openstack/monitoring/requests/list_notification_methods.rb index 734a8adea..f12d9ce2f 100644 --- a/lib/fog/monitoring/openstack/requests/list_notification_methods.rb +++ b/lib/fog/openstack/monitoring/requests/list_notification_methods.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def list_notification_methods(options = {}) request( diff --git a/lib/fog/monitoring/openstack/requests/list_statistics.rb b/lib/fog/openstack/monitoring/requests/list_statistics.rb similarity index 89% rename from lib/fog/monitoring/openstack/requests/list_statistics.rb rename to lib/fog/openstack/monitoring/requests/list_statistics.rb index 7a47b227e..19bf32bde 100644 --- a/lib/fog/monitoring/openstack/requests/list_statistics.rb +++ b/lib/fog/openstack/monitoring/requests/list_statistics.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def list_statistics(options = {}) request( diff --git a/lib/fog/monitoring/openstack/requests/patch_alarm.rb b/lib/fog/openstack/monitoring/requests/patch_alarm.rb similarity index 88% rename from lib/fog/monitoring/openstack/requests/patch_alarm.rb rename to lib/fog/openstack/monitoring/requests/patch_alarm.rb index 65d53066a..1902ac07f 100644 --- a/lib/fog/monitoring/openstack/requests/patch_alarm.rb +++ b/lib/fog/openstack/monitoring/requests/patch_alarm.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def patch_alarm(id, options) request( diff --git a/lib/fog/monitoring/openstack/requests/patch_alarm_definition.rb b/lib/fog/openstack/monitoring/requests/patch_alarm_definition.rb similarity index 89% rename from lib/fog/monitoring/openstack/requests/patch_alarm_definition.rb rename to lib/fog/openstack/monitoring/requests/patch_alarm_definition.rb index f7f072af7..59e0b97bc 100644 --- a/lib/fog/monitoring/openstack/requests/patch_alarm_definition.rb +++ b/lib/fog/openstack/monitoring/requests/patch_alarm_definition.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def patch_alarm_definition(id, alarm_definition) request( diff --git a/lib/fog/monitoring/openstack/requests/patch_notification_method.rb b/lib/fog/openstack/monitoring/requests/patch_notification_method.rb similarity index 89% rename from lib/fog/monitoring/openstack/requests/patch_notification_method.rb rename to lib/fog/openstack/monitoring/requests/patch_notification_method.rb index 4c70be511..3c28d6579 100644 --- a/lib/fog/monitoring/openstack/requests/patch_notification_method.rb +++ b/lib/fog/openstack/monitoring/requests/patch_notification_method.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def update_notification_method(id, notification) request( diff --git a/lib/fog/monitoring/openstack/requests/put_notification_method.rb b/lib/fog/openstack/monitoring/requests/put_notification_method.rb similarity index 89% rename from lib/fog/monitoring/openstack/requests/put_notification_method.rb rename to lib/fog/openstack/monitoring/requests/put_notification_method.rb index 4f8a8fcd2..f8054209b 100644 --- a/lib/fog/monitoring/openstack/requests/put_notification_method.rb +++ b/lib/fog/openstack/monitoring/requests/put_notification_method.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def put_notification_method(id, notification) request( diff --git a/lib/fog/monitoring/openstack/requests/update_alarm.rb b/lib/fog/openstack/monitoring/requests/update_alarm.rb similarity index 88% rename from lib/fog/monitoring/openstack/requests/update_alarm.rb rename to lib/fog/openstack/monitoring/requests/update_alarm.rb index 5d27e2c74..a7b567210 100644 --- a/lib/fog/monitoring/openstack/requests/update_alarm.rb +++ b/lib/fog/openstack/monitoring/requests/update_alarm.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def update_alarm(id, options) request( diff --git a/lib/fog/monitoring/openstack/requests/update_alarm_definition.rb b/lib/fog/openstack/monitoring/requests/update_alarm_definition.rb similarity index 89% rename from lib/fog/monitoring/openstack/requests/update_alarm_definition.rb rename to lib/fog/openstack/monitoring/requests/update_alarm_definition.rb index 1afa81929..f0c576222 100644 --- a/lib/fog/monitoring/openstack/requests/update_alarm_definition.rb +++ b/lib/fog/openstack/monitoring/requests/update_alarm_definition.rb @@ -1,6 +1,6 @@ module Fog - module Monitoring - class OpenStack + module OpenStack + class Monitoring class Real def update_alarm_definition(id, alarm_definition) request( diff --git a/lib/fog/openstack/network.rb b/lib/fog/openstack/network.rb new file mode 100644 index 000000000..39e210640 --- /dev/null +++ b/lib/fog/openstack/network.rb @@ -0,0 +1,488 @@ +module Fog + module OpenStack + class Network < Fog::Service + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version + + ## MODELS + # + model_path 'fog/openstack/network/models' + model :extension + collection :extensions + model :network + collection :networks + model :port + collection :ports + model :subnet + collection :subnets + model :subnet_pool + collection :subnet_pools + model :floating_ip + collection :floating_ips + model :router + collection :routers + model :lb_pool + collection :lb_pools + model :lb_member + collection :lb_members + model :lb_health_monitor + collection :lb_health_monitors + model :lb_vip + collection :lb_vips + model :vpn_service + collection :vpn_services + model :ike_policy + collection :ike_policies + model :ipsec_policy + collection :ipsec_policies + model :ipsec_site_connection + collection :ipsec_site_connections + model :rbac_policy + collection :rbac_policies + model :security_group + collection :security_groups + model :security_group_rule + collection :security_group_rules + model :network_ip_availability + collection :network_ip_availabilities + + ## REQUESTS + # + request_path 'fog/openstack/network/requests' + + # Neutron Extensions + request :list_extensions + request :get_extension + + # IP Availability + request :get_network_ip_availability + request :list_network_ip_availabilities + + # Network CRUD + request :list_networks + request :create_network + request :delete_network + request :get_network + request :update_network + + # Port CRUD + request :list_ports + request :create_port + request :delete_port + request :get_port + request :update_port + + # Subnet CRUD + request :list_subnets + request :create_subnet + request :delete_subnet + request :get_subnet + request :update_subnet + + # Subnet Pools CRUD + request :list_subnet_pools + request :create_subnet_pool + request :delete_subnet_pool + request :get_subnet_pool + request :update_subnet_pool + + # FloatingIp CRUD + request :list_floating_ips + request :create_floating_ip + request :delete_floating_ip + request :get_floating_ip + request :associate_floating_ip + request :disassociate_floating_ip + + # Router CRUD + request :list_routers + request :create_router + request :delete_router + request :get_router + request :update_router + request :add_router_interface + request :remove_router_interface + + # + # LBaaS V1 + # + + # LBaaS Pool CRUD + request :list_lb_pools + request :create_lb_pool + request :delete_lb_pool + request :get_lb_pool + request :get_lb_pool_stats + request :update_lb_pool + + # LBaaS Member CRUD + request :list_lb_members + request :create_lb_member + request :delete_lb_member + request :get_lb_member + request :update_lb_member + + # LBaaS Health Monitor CRUD + request :list_lb_health_monitors + request :create_lb_health_monitor + request :delete_lb_health_monitor + request :get_lb_health_monitor + request :update_lb_health_monitor + request :associate_lb_health_monitor + request :disassociate_lb_health_monitor + + # LBaaS VIP CRUD + request :list_lb_vips + request :create_lb_vip + request :delete_lb_vip + request :get_lb_vip + request :update_lb_vip + + # + # LBaaS V2 + # + + # LBaaS V2 Loadbanacer + request :list_lbaas_loadbalancers + request :create_lbaas_loadbalancer + request :delete_lbaas_loadbalancer + request :get_lbaas_loadbalancer + request :update_lbaas_loadbalancer + + # LBaaS V2 Listener + request :list_lbaas_listeners + request :create_lbaas_listener + request :delete_lbaas_listener + request :get_lbaas_listener + request :update_lbaas_listener + + # LBaaS V2 Pool + request :list_lbaas_pools + request :create_lbaas_pool + request :delete_lbaas_pool + request :get_lbaas_pool + request :update_lbaas_pool + + # LBaaS V2 Pool_Member + request :list_lbaas_pool_members + request :create_lbaas_pool_member + request :delete_lbaas_pool_member + request :get_lbaas_pool_member + request :update_lbaas_pool_member + + # LBaaS V2 Healthmonitor + request :list_lbaas_healthmonitors + request :create_lbaas_healthmonitor + request :delete_lbaas_healthmonitor + request :get_lbaas_healthmonitor + request :update_lbaas_healthmonitor + + # LBaaS V2 L7Policy + request :list_lbaas_l7policies + request :create_lbaas_l7policy + request :delete_lbaas_l7policy + request :get_lbaas_l7policy + request :update_lbaas_l7policy + + # LBaaS V2 L7Rule + request :list_lbaas_l7rules + request :create_lbaas_l7rule + request :delete_lbaas_l7rule + request :get_lbaas_l7rule + request :update_lbaas_l7rule + + # VPNaaS VPN Service CRUD + request :list_vpn_services + request :create_vpn_service + request :delete_vpn_service + request :get_vpn_service + request :update_vpn_service + + # VPNaaS VPN IKE Policy CRUD + request :list_ike_policies + request :create_ike_policy + request :delete_ike_policy + request :get_ike_policy + request :update_ike_policy + + # VPNaaS VPN IPSec Policy CRUD + request :list_ipsec_policies + request :create_ipsec_policy + request :delete_ipsec_policy + request :get_ipsec_policy + request :update_ipsec_policy + + # VPNaaS VPN IPSec Site Connection CRUD + request :list_ipsec_site_connections + request :create_ipsec_site_connection + request :delete_ipsec_site_connection + request :get_ipsec_site_connection + request :update_ipsec_site_connection + + # RBAC Policy CRUD + request :list_rbac_policies + request :create_rbac_policy + request :delete_rbac_policy + request :get_rbac_policy + request :update_rbac_policy + + # Security Group + request :create_security_group + request :delete_security_group + request :get_security_group + request :list_security_groups + request :update_security_group + + # Security Group Rules + request :create_security_group_rule + request :delete_security_group_rule + request :get_security_group_rule + request :list_security_group_rules + + # Tenant + request :set_tenant + + # Quota + request :get_quotas + request :get_quota + request :update_quota + request :delete_quota + + class Mock + # rubocop:disable Metrics/MethodLength + # TODO: move all these in a yaml file? + def self.data + @data ||= Hash.new do |hash, key| + qos_policy_id = Fog::UUID.uuid + network_id = Fog::UUID.uuid + extension_id = Fog::UUID.uuid + subnet_id = Fog::UUID.uuid + port_id = Fog::UUID.uuid + tenant_id = Fog::Mock.random_hex(8) + + hash[key] = { + extensions: { + extension_id => { + 'id' => extension_id, + 'alias' => 'dvr', + 'description' => 'Enables configuration of Distributed Virtual Routers.', + 'links' => [], + 'name' => 'Distributed Virtual Router' + } + }, + networks: { + network_id => { + 'id' => network_id, + 'name' => 'Public', + 'subnets' => [subnet_id], + 'shared' => true, + 'status' => 'ACTIVE', + 'tenant_id' => tenant_id, + 'provider:network:type' => 'vlan', + 'router:external' => false, + 'admin_state_up' => true, + 'qos_policy_id' => qos_policy_id, + 'port_security_enabled' => true + }, + 'e624a36d-762b-481f-9b50-4154ceb78bbb' => { + 'id' => 'e624a36d-762b-481f-9b50-4154ceb78bbb', + 'name' => 'network_1', + 'subnets' => ['2e4ec6a4-0150-47f5-8523-e899ac03026e'], + 'shared' => false, + 'status' => 'ACTIVE', + 'tenant_id' => 'f8b26a6032bc47718a7702233ac708b9', + 'provider:network:type' => 'vlan', + 'router:external' => false, + 'admin_state_up' => true, + 'qos_policy_id' => qos_policy_id, + 'port_security_enabled' => true + } + }, + ports: { + port_id => { + 'id' => port_id, + 'name' => 'port_1', + 'network_id' => network_id, + 'fixed_ips' => [ + { + 'ip_address' => '10.2.2.2', + 'subnet_id' => subnet_id + } + ], + 'mac_address' => 'fa:16:3e:62:91:7f', + 'status' => 'ACTIVE', + 'admin_state_up' => true, + 'device_id' => 'dhcp724fc160-2b2e-597e-b9ed-7f65313cd73f-e624a36d-762b-481f-9b50-4154ceb78bbb', + 'device_owner' => 'network:dhcp', + 'tenant_id' => tenant_id, + 'security_groups' => [], + 'allowed_address_pairs' => [ + 'ip_address' => '10.1.1.1', + 'mac_address' => 'fa:16:3e:3d:2a:cc' + ] + } + }, + subnets: { + subnet_id => { + 'id' => subnet_id, + 'name' => "Public", + 'network_id' => network_id, + 'cidr' => "192.168.0.0/22", + 'ip_version' => 4, + 'gateway_ip' => Fog::Mock.random_ip, + 'allocation_pools' => [ + { + "start" => "10.2.2.2", + "end" => "10.2.2.254" + } + ], + 'dns_nameservers' => [Fog::Mock.random_ip, Fog::Mock.random_ip], + 'host_routes' => [Fog::Mock.random_ip], + 'enable_dhcp' => true, + 'tenant_id' => tenant_id + } + }, + subnet_pools: {}, + floating_ips: {}, + routers: {}, + lb_pools: {}, + lb_members: {}, + lb_health_monitors: {}, + lb_vips: {}, + lbaas_loadbalancers: {}, + lbaas_listeners: {}, + lbaas_pools: {}, + lbaas_pool_members: {}, + lbaas_health_monitorss: {}, + lbaas_l7policies: {}, + lbaas_l7rules: {}, + vpn_services: {}, + ike_policies: {}, + ipsec_policies: {}, + ipsec_site_connections: {}, + rbac_policies: {}, + quota: { + "subnet" => 10, + "router" => 10, + "port" => 50, + "network" => 10, + "floatingip" => 50 + }, + quotas: [ + { + "subnet" => 10, + "network" => 10, + "floatingip" => 50, + "tenant_id" => tenant_id, + "router" => 10, + "port" => 30 + } + ], + security_groups: {}, + security_group_rules: {}, + network_ip_availabilities: [ + { + "network_id" => "4cf895c9-c3d1-489e-b02e-59b5c8976809", + "network_name" => "public", + "subnet_ip_availability" => [ + { + "cidr" => "2001:db8::/64", + "ip_version" => 6, + "subnet_id" => "ca3f46c4-c6ff-4272-9be4-0466f84c6077", + "subnet_name" => "ipv6-public-subnet", + "total_ips" => 18446744073709552000, + "used_ips" => 1 + }, + { + "cidr" => "172.24.4.0/24", + "ip_version" => 4, + "subnet_id" => "cc02efc1-9d47-46bd-bab6-760919c836b5", + "subnet_name" => "public-subnet", + "total_ips" => 253, + "used_ips" => 1 + } + ], + "project_id" => "1a02cc95f1734fcc9d3c753818f03002", + "tenant_id" => "1a02cc95f1734fcc9d3c753818f03002", + "total_ips" => 253, + "used_ips" => 2 + }, + { + "network_id" => "6801d9c8-20e6-4b27-945d-62499f00002e", + "network_name" => "private", + "subnet_ip_availability" => [ + { + "cidr" => "10.0.0.0/24", + "ip_version" => 4, + "subnet_id" => "44e70d00-80a2-4fb1-ab59-6190595ceb61", + "subnet_name" => "private-subnet", + "total_ips" => 253, + "used_ips" => 2 + }, + { + "ip_version" => 6, + "cidr" => "fdbf:ac66:9be8::/64", + "subnet_id" => "a90623df-00e1-4902-a675-40674385d74c", + "subnet_name" => "ipv6-private-subnet", + "total_ips" => 18446744073709552000, + "used_ips" => 2 + } + ], + "project_id" => "d56d3b8dd6894a508cf41b96b522328c", + "tenant_id" => "d56d3b8dd6894a508cf41b96b522328c", + "total_ips" => 18446744073709552000, + "used_ips" => 4 + } + ] + } + end + end + # rubocop:enable Metrics/MethodLength + + def self.reset + @data = nil + end + + include Fog::OpenStack::Core + + def initialize(_options = {}) + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + end + + def data + self.class.data["#{@openstack_username}-#{@openstack_tenant}"] + end + + def reset_data + self.class.data.delete("#{@openstack_username}-#{@openstack_tenant}") + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Network::NotFound + end + + def default_path_prefix + 'v2.0' + end + + def default_service_type + %w[network] + end + end + end + end +end diff --git a/lib/fog/network/openstack/models/extension.rb b/lib/fog/openstack/network/models/extension.rb similarity index 87% rename from lib/fog/network/openstack/models/extension.rb rename to lib/fog/openstack/network/models/extension.rb index 745aa2b8f..1b95bd752 100644 --- a/lib/fog/network/openstack/models/extension.rb +++ b/lib/fog/openstack/network/models/extension.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class Extension < Fog::OpenStack::Model identity :id attribute :name diff --git a/lib/fog/network/openstack/models/extensions.rb b/lib/fog/openstack/network/models/extensions.rb similarity index 76% rename from lib/fog/network/openstack/models/extensions.rb rename to lib/fog/openstack/network/models/extensions.rb index 6c01bbe7f..f105ce488 100644 --- a/lib/fog/network/openstack/models/extensions.rb +++ b/lib/fog/openstack/network/models/extensions.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/extension' +require 'fog/openstack/network/models/extension' module Fog - module Network - class OpenStack + module OpenStack + class Network class Extensions < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::Extension + model Fog::OpenStack::Network::Extension def initialize(attributes) self.filters ||= {} @@ -23,7 +23,7 @@ def get(extension_id) if extension = service.get_extension(extension_id).body['extension'] new(extension) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end end diff --git a/lib/fog/network/openstack/models/floating_ip.rb b/lib/fog/openstack/network/models/floating_ip.rb similarity index 97% rename from lib/fog/network/openstack/models/floating_ip.rb rename to lib/fog/openstack/network/models/floating_ip.rb index 2a8cb707c..c3770c776 100644 --- a/lib/fog/network/openstack/models/floating_ip.rb +++ b/lib/fog/openstack/network/models/floating_ip.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class FloatingIp < Fog::OpenStack::Model identity :id diff --git a/lib/fog/network/openstack/models/floating_ips.rb b/lib/fog/openstack/network/models/floating_ips.rb similarity index 76% rename from lib/fog/network/openstack/models/floating_ips.rb rename to lib/fog/openstack/network/models/floating_ips.rb index dfeb12b6e..764b8f183 100644 --- a/lib/fog/network/openstack/models/floating_ips.rb +++ b/lib/fog/openstack/network/models/floating_ips.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/floating_ip' +require 'fog/openstack/network/models/floating_ip' module Fog - module Network - class OpenStack + module OpenStack + class Network class FloatingIps < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::FloatingIp + model Fog::OpenStack::Network::FloatingIp def initialize(attributes) self.filters ||= {} @@ -23,7 +23,7 @@ def get(floating_network_id) if floating_ip = service.get_floating_ip(floating_network_id).body['floatingip'] new(floating_ip) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end end diff --git a/lib/fog/network/openstack/models/ike_policies.rb b/lib/fog/openstack/network/models/ike_policies.rb similarity index 76% rename from lib/fog/network/openstack/models/ike_policies.rb rename to lib/fog/openstack/network/models/ike_policies.rb index 39caae444..d659af701 100644 --- a/lib/fog/network/openstack/models/ike_policies.rb +++ b/lib/fog/openstack/network/models/ike_policies.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/ike_policy' +require 'fog/openstack/network/models/ike_policy' module Fog - module Network - class OpenStack + module OpenStack + class Network class IkePolicies < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::IkePolicy + model Fog::OpenStack::Network::IkePolicy def initialize(attributes) self.filters ||= {} @@ -23,7 +23,7 @@ def get(ike_policy_id) if ike_policy = service.get_ike_policy(ike_policy_id).body['ikepolicy'] new(ike_policy) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end end diff --git a/lib/fog/network/openstack/models/ike_policy.rb b/lib/fog/openstack/network/models/ike_policy.rb similarity index 96% rename from lib/fog/network/openstack/models/ike_policy.rb rename to lib/fog/openstack/network/models/ike_policy.rb index 1cff0e650..47b7ed3bd 100644 --- a/lib/fog/network/openstack/models/ike_policy.rb +++ b/lib/fog/openstack/network/models/ike_policy.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class IkePolicy < Fog::OpenStack::Model identity :id diff --git a/lib/fog/network/openstack/models/ipsec_policies.rb b/lib/fog/openstack/network/models/ipsec_policies.rb similarity index 76% rename from lib/fog/network/openstack/models/ipsec_policies.rb rename to lib/fog/openstack/network/models/ipsec_policies.rb index 5c4afe956..99e52a8be 100644 --- a/lib/fog/network/openstack/models/ipsec_policies.rb +++ b/lib/fog/openstack/network/models/ipsec_policies.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/ipsec_policy' +require 'fog/openstack/network/models/ipsec_policy' module Fog - module Network - class OpenStack + module OpenStack + class Network class IpsecPolicies < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::IpsecPolicy + model Fog::OpenStack::Network::IpsecPolicy def initialize(attributes) self.filters ||= {} @@ -23,7 +23,7 @@ def get(ipsec_policy_id) if ipsec_policy = service.get_ipsec_policy(ipsec_policy_id).body['ipsecpolicy'] new(ipsec_policy) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end end diff --git a/lib/fog/network/openstack/models/ipsec_policy.rb b/lib/fog/openstack/network/models/ipsec_policy.rb similarity index 97% rename from lib/fog/network/openstack/models/ipsec_policy.rb rename to lib/fog/openstack/network/models/ipsec_policy.rb index 3368d37b8..d7c5b4360 100644 --- a/lib/fog/network/openstack/models/ipsec_policy.rb +++ b/lib/fog/openstack/network/models/ipsec_policy.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class IpsecPolicy < Fog::OpenStack::Model identity :id diff --git a/lib/fog/network/openstack/models/ipsec_site_connection.rb b/lib/fog/openstack/network/models/ipsec_site_connection.rb similarity index 97% rename from lib/fog/network/openstack/models/ipsec_site_connection.rb rename to lib/fog/openstack/network/models/ipsec_site_connection.rb index ec17a60f2..b5cf87f71 100644 --- a/lib/fog/network/openstack/models/ipsec_site_connection.rb +++ b/lib/fog/openstack/network/models/ipsec_site_connection.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class IpsecSiteConnection < Fog::OpenStack::Model identity :id diff --git a/lib/fog/network/openstack/models/ipsec_site_connections.rb b/lib/fog/openstack/network/models/ipsec_site_connections.rb similarity index 77% rename from lib/fog/network/openstack/models/ipsec_site_connections.rb rename to lib/fog/openstack/network/models/ipsec_site_connections.rb index 15df5e80f..e560bc424 100644 --- a/lib/fog/network/openstack/models/ipsec_site_connections.rb +++ b/lib/fog/openstack/network/models/ipsec_site_connections.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/ipsec_site_connection' +require 'fog/openstack/network/models/ipsec_site_connection' module Fog - module Network - class OpenStack + module OpenStack + class Network class IpsecSiteConnections < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::IpsecSiteConnection + model Fog::OpenStack::Network::IpsecSiteConnection def initialize(attributes) self.filters ||= {} @@ -24,7 +24,7 @@ def get(ipsec_site_connection_id) if connection new(connection) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end end diff --git a/lib/fog/network/openstack/models/lb_health_monitor.rb b/lib/fog/openstack/network/models/lb_health_monitor.rb similarity index 97% rename from lib/fog/network/openstack/models/lb_health_monitor.rb rename to lib/fog/openstack/network/models/lb_health_monitor.rb index 479533f18..ef64acfc4 100644 --- a/lib/fog/network/openstack/models/lb_health_monitor.rb +++ b/lib/fog/openstack/network/models/lb_health_monitor.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class LbHealthMonitor < Fog::OpenStack::Model identity :id diff --git a/lib/fog/network/openstack/models/lb_health_monitors.rb b/lib/fog/openstack/network/models/lb_health_monitors.rb similarity index 76% rename from lib/fog/network/openstack/models/lb_health_monitors.rb rename to lib/fog/openstack/network/models/lb_health_monitors.rb index 5fcb7c271..30ab428cb 100644 --- a/lib/fog/network/openstack/models/lb_health_monitors.rb +++ b/lib/fog/openstack/network/models/lb_health_monitors.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/lb_health_monitor' +require 'fog/openstack/network/models/lb_health_monitor' module Fog - module Network - class OpenStack + module OpenStack + class Network class LbHealthMonitors < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::LbHealthMonitor + model Fog::OpenStack::Network::LbHealthMonitor def initialize(attributes) self.filters ||= {} @@ -23,7 +23,7 @@ def get(health_monitor_id) if health_monitor = service.get_lb_health_monitor(health_monitor_id).body['health_monitor'] new(health_monitor) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end end diff --git a/lib/fog/network/openstack/models/lb_member.rb b/lib/fog/openstack/network/models/lb_member.rb similarity index 96% rename from lib/fog/network/openstack/models/lb_member.rb rename to lib/fog/openstack/network/models/lb_member.rb index e19db01a7..da8a44dbd 100644 --- a/lib/fog/network/openstack/models/lb_member.rb +++ b/lib/fog/openstack/network/models/lb_member.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class LbMember < Fog::OpenStack::Model identity :id diff --git a/lib/fog/network/openstack/models/lb_members.rb b/lib/fog/openstack/network/models/lb_members.rb similarity index 75% rename from lib/fog/network/openstack/models/lb_members.rb rename to lib/fog/openstack/network/models/lb_members.rb index a897f82ad..fd74508bb 100644 --- a/lib/fog/network/openstack/models/lb_members.rb +++ b/lib/fog/openstack/network/models/lb_members.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/lb_member' +require 'fog/openstack/network/models/lb_member' module Fog - module Network - class OpenStack + module OpenStack + class Network class LbMembers < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::LbMember + model Fog::OpenStack::Network::LbMember def initialize(attributes) self.filters ||= {} @@ -23,7 +23,7 @@ def get(member_id) if member = service.get_lb_member(member_id).body['member'] new(member) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end end diff --git a/lib/fog/network/openstack/models/lb_pool.rb b/lib/fog/openstack/network/models/lb_pool.rb similarity index 97% rename from lib/fog/network/openstack/models/lb_pool.rb rename to lib/fog/openstack/network/models/lb_pool.rb index 9edf37d65..fbac5b226 100644 --- a/lib/fog/network/openstack/models/lb_pool.rb +++ b/lib/fog/openstack/network/models/lb_pool.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class LbPool < Fog::OpenStack::Model identity :id diff --git a/lib/fog/network/openstack/models/lb_pools.rb b/lib/fog/openstack/network/models/lb_pools.rb similarity index 75% rename from lib/fog/network/openstack/models/lb_pools.rb rename to lib/fog/openstack/network/models/lb_pools.rb index 218d486d2..8a0f7adf5 100644 --- a/lib/fog/network/openstack/models/lb_pools.rb +++ b/lib/fog/openstack/network/models/lb_pools.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/lb_pool' +require 'fog/openstack/network/models/lb_pool' module Fog - module Network - class OpenStack + module OpenStack + class Network class LbPools < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::LbPool + model Fog::OpenStack::Network::LbPool def initialize(attributes) self.filters ||= {} @@ -23,7 +23,7 @@ def get(pool_id) if pool = service.get_lb_pool(pool_id).body['pool'] new(pool) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end end diff --git a/lib/fog/network/openstack/models/lb_vip.rb b/lib/fog/openstack/network/models/lb_vip.rb similarity index 97% rename from lib/fog/network/openstack/models/lb_vip.rb rename to lib/fog/openstack/network/models/lb_vip.rb index 18039149e..928bb0674 100644 --- a/lib/fog/network/openstack/models/lb_vip.rb +++ b/lib/fog/openstack/network/models/lb_vip.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class LbVip < Fog::OpenStack::Model identity :id diff --git a/lib/fog/network/openstack/models/lb_vips.rb b/lib/fog/openstack/network/models/lb_vips.rb similarity index 75% rename from lib/fog/network/openstack/models/lb_vips.rb rename to lib/fog/openstack/network/models/lb_vips.rb index 24f00e48f..ee44aa639 100644 --- a/lib/fog/network/openstack/models/lb_vips.rb +++ b/lib/fog/openstack/network/models/lb_vips.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/lb_vip' +require 'fog/openstack/network/models/lb_vip' module Fog - module Network - class OpenStack + module OpenStack + class Network class LbVips < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::LbVip + model Fog::OpenStack::Network::LbVip def initialize(attributes) self.filters ||= {} @@ -23,7 +23,7 @@ def get(vip_id) if vip = service.get_lb_vip(vip_id).body['vip'] new(vip) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end end diff --git a/lib/fog/openstack/network/models/network.rb b/lib/fog/openstack/network/models/network.rb new file mode 100644 index 000000000..465c4a54a --- /dev/null +++ b/lib/fog/openstack/network/models/network.rb @@ -0,0 +1,42 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Network + class Network < Fog::OpenStack::Model + identity :id + + attribute :name + attribute :shared + attribute :status + attribute :admin_state_up + attribute :tenant_id + attribute :provider_network_type, aliases: 'provider:network_type' + attribute :provider_physical_network, aliases: 'provider:physical_network' + attribute :provider_segmentation_id, aliases: 'provider:segmentation_id' + attribute :router_external, aliases: 'router:external' + + def subnets + service.subnets.select { |s| s.network_id == id } + end + + def create + merge_attributes(service.create_network(attributes).body['network']) + self + end + + def update + requires :id + merge_attributes(service.update_network(id, attributes).body['network']) + self + end + + def destroy + requires :id + service.delete_network(id) + true + end + end + end + end +end diff --git a/lib/fog/openstack/network/models/network_ip_availabilities.rb b/lib/fog/openstack/network/models/network_ip_availabilities.rb new file mode 100644 index 000000000..ac285856b --- /dev/null +++ b/lib/fog/openstack/network/models/network_ip_availabilities.rb @@ -0,0 +1,24 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/network/models/network_ip_availability' + +module Fog + module OpenStack + class Network + class NetworkIpAvailabilities < Fog::OpenStack::Collection + model Fog::OpenStack::Network::NetworkIpAvailability + + def all + load_response(service.list_network_ip_availabilities, 'network_ip_availabilities') + end + + def get(network_id) + if network_ip_availability = service.get_network_ip_availability(network_id).body['network_ip_availability'] + new(network_ip_availability) + end + rescue Fog::OpenStack::Network::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/network/openstack/models/network_ip_availability.rb b/lib/fog/openstack/network/models/network_ip_availability.rb similarity index 90% rename from lib/fog/network/openstack/models/network_ip_availability.rb rename to lib/fog/openstack/network/models/network_ip_availability.rb index 18c263f11..86b32de8c 100644 --- a/lib/fog/network/openstack/models/network_ip_availability.rb +++ b/lib/fog/openstack/network/models/network_ip_availability.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class NetworkIpAvailability < Fog::OpenStack::Model attribute :used_ips attribute :subnet_ip_availability diff --git a/lib/fog/openstack/network/models/networks.rb b/lib/fog/openstack/network/models/networks.rb new file mode 100644 index 000000000..4ff5cf06c --- /dev/null +++ b/lib/fog/openstack/network/models/networks.rb @@ -0,0 +1,32 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/network/models/network' + +module Fog + module OpenStack + class Network + class Networks < Fog::OpenStack::Collection + attribute :filters + + model Fog::OpenStack::Network::Network + + def initialize(attributes) + self.filters ||= {} + super + end + + def all(filters_arg = filters) + filters = filters_arg + load_response(service.list_networks(filters), 'networks') + end + + def get(network_id) + if network = service.get_network(network_id).body['network'] + new(network) + end + rescue Fog::OpenStack::Network::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/network/models/port.rb b/lib/fog/openstack/network/models/port.rb new file mode 100644 index 000000000..c5a02df4a --- /dev/null +++ b/lib/fog/openstack/network/models/port.rb @@ -0,0 +1,42 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Network + class Port < Fog::OpenStack::Model + identity :id + + attribute :name + attribute :network_id + attribute :fixed_ips + attribute :mac_address + attribute :status + attribute :admin_state_up + attribute :device_owner + attribute :device_id + attribute :tenant_id + attribute :security_groups + + def create + requires :network_id + merge_attributes(service.create_port(network_id, + attributes).body['port']) + self + end + + def update + requires :id, :network_id + merge_attributes(service.update_port(id, + attributes).body['port']) + self + end + + def destroy + requires :id + service.delete_port(id) + true + end + end + end + end +end diff --git a/lib/fog/openstack/network/models/ports.rb b/lib/fog/openstack/network/models/ports.rb new file mode 100644 index 000000000..e81e61ba6 --- /dev/null +++ b/lib/fog/openstack/network/models/ports.rb @@ -0,0 +1,32 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/network/models/port' + +module Fog + module OpenStack + class Network + class Ports < Fog::OpenStack::Collection + attribute :filters + + model Fog::OpenStack::Network::Port + + def initialize(attributes) + self.filters ||= {} + super + end + + def all(filters_arg = filters) + filters = filters_arg + load_response(service.list_ports(filters), 'ports') + end + + def get(port_id) + if port = service.get_port(port_id).body['port'] + new(port) + end + rescue Fog::OpenStack::Network::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/network/openstack/models/rbac_policies.rb b/lib/fog/openstack/network/models/rbac_policies.rb similarity index 77% rename from lib/fog/network/openstack/models/rbac_policies.rb rename to lib/fog/openstack/network/models/rbac_policies.rb index c25ce357f..11e6bdcaa 100644 --- a/lib/fog/network/openstack/models/rbac_policies.rb +++ b/lib/fog/openstack/network/models/rbac_policies.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/rbac_policy' +require 'fog/openstack/network/models/rbac_policy' module Fog - module Network - class OpenStack + module OpenStack + class Network class RbacPolicies < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::RbacPolicy + model Fog::OpenStack::Network::RbacPolicy def initialize(attributes) self.filters ||= {} @@ -23,7 +23,7 @@ def get(rbac_policy_id) if rbac_policy = service.get_rbac_policy(rbac_policy_id).body['rbac_policy'] new(rbac_policy) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end alias find_by_id get diff --git a/lib/fog/network/openstack/models/rbac_policy.rb b/lib/fog/openstack/network/models/rbac_policy.rb similarity index 95% rename from lib/fog/network/openstack/models/rbac_policy.rb rename to lib/fog/openstack/network/models/rbac_policy.rb index f315384cf..5ed353695 100644 --- a/lib/fog/network/openstack/models/rbac_policy.rb +++ b/lib/fog/openstack/network/models/rbac_policy.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class RbacPolicy < Fog::OpenStack::Model identity :id diff --git a/lib/fog/network/openstack/models/router.rb b/lib/fog/openstack/network/models/router.rb similarity index 77% rename from lib/fog/network/openstack/models/router.rb rename to lib/fog/openstack/network/models/router.rb index 713ea1ad3..a4465fea3 100644 --- a/lib/fog/network/openstack/models/router.rb +++ b/lib/fog/openstack/network/models/router.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network # The Layer-3 Networking Extensions (router) # # A logical entity for forwarding packets across internal @@ -47,11 +47,11 @@ def options options = attributes.dup if options[:external_gateway_info] - if options[:external_gateway_info].kind_of?(Fog::Network::OpenStack::Network) - options[:external_gateway_info] = { network_id: options[:external_gateway_info].id } - else - options[:external_gateway_info] = { network_id: options[:external_gateway_info] } - end + options[:external_gateway_info] = if options[:external_gateway_info].kind_of?(Fog::OpenStack::Network::Network) + { network_id: options[:external_gateway_info].id } + else + { network_id: options[:external_gateway_info] } + end end options end diff --git a/lib/fog/network/openstack/models/routers.rb b/lib/fog/openstack/network/models/routers.rb similarity index 75% rename from lib/fog/network/openstack/models/routers.rb rename to lib/fog/openstack/network/models/routers.rb index 3f5f49a49..e9bcea262 100644 --- a/lib/fog/network/openstack/models/routers.rb +++ b/lib/fog/openstack/network/models/routers.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/router' +require 'fog/openstack/network/models/router' module Fog - module Network - class OpenStack + module OpenStack + class Network class Routers < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::Router + model Fog::OpenStack::Network::Router def initialize(attributes) self.filters ||= {} @@ -23,7 +23,7 @@ def get(router_id) if router = service.get_router(router_id).body['router'] new(router) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end end diff --git a/lib/fog/openstack/network/models/security_group.rb b/lib/fog/openstack/network/models/security_group.rb new file mode 100644 index 000000000..4b9c10a24 --- /dev/null +++ b/lib/fog/openstack/network/models/security_group.rb @@ -0,0 +1,37 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Network + class SecurityGroup < Fog::OpenStack::Model + identity :id + + attribute :name + attribute :description + attribute :security_group_rules + attribute :tenant_id + + def destroy + requires :id + service.delete_security_group(id) + true + end + + def security_group_rules + Fog::OpenStack::Network::SecurityGroupRules.new(service: service).load(attributes[:security_group_rules]) + end + + def save + merge_attributes(service.create_security_group(attributes).body['security_group']) + self + end + + def update + requires :id + merge_attributes(service.update_security_group(id, attributes).body['security_group']) + self + end + end + end + end +end diff --git a/lib/fog/openstack/network/models/security_group_rule.rb b/lib/fog/openstack/network/models/security_group_rule.rb new file mode 100644 index 000000000..d3a13bbf0 --- /dev/null +++ b/lib/fog/openstack/network/models/security_group_rule.rb @@ -0,0 +1,34 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Network + class SecurityGroupRule < Fog::OpenStack::Model + identity :id + + attribute :security_group_id + attribute :direction + attribute :protocol + attribute :port_range_min + attribute :port_range_max + attribute :remote_ip_prefix + attribute :ethertype + attribute :remote_group_id + attribute :tenant_id + + def destroy + requires :id + service.delete_security_group_rule(id) + true + end + + def save + raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? + + merge_attributes(service.create_security_group_rule(security_group_id, direction, attributes).body['security_group_rule']) + true + end + end + end + end +end diff --git a/lib/fog/openstack/network/models/security_group_rules.rb b/lib/fog/openstack/network/models/security_group_rules.rb new file mode 100644 index 000000000..138985b89 --- /dev/null +++ b/lib/fog/openstack/network/models/security_group_rules.rb @@ -0,0 +1,32 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/network/models/security_group_rule' + +module Fog + module OpenStack + class Network + class SecurityGroupRules < Fog::OpenStack::Collection + attribute :filters + + model Fog::OpenStack::Network::SecurityGroupRule + + def initialize(attributes) + self.filters ||= {} + super + end + + def all(filters_arg = filters) + filters = filters_arg + load_response(service.list_security_group_rules(filters), 'security_group_rules') + end + + def get(sec_group_rule_id) + if sec_group_rule = service.get_security_group_rule(sec_group_rule_id).body['security_group_rule'] + new(sec_group_rule) + end + rescue Fog::OpenStack::Network::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/network/models/security_groups.rb b/lib/fog/openstack/network/models/security_groups.rb new file mode 100644 index 000000000..35bfe2b97 --- /dev/null +++ b/lib/fog/openstack/network/models/security_groups.rb @@ -0,0 +1,32 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/network/models/security_group' + +module Fog + module OpenStack + class Network + class SecurityGroups < Fog::OpenStack::Collection + attribute :filters + + model Fog::OpenStack::Network::SecurityGroup + + def initialize(attributes) + self.filters ||= {} + super + end + + def all(filters_arg = filters) + filters = filters_arg + load_response(service.list_security_groups(filters), 'security_groups') + end + + def get(security_group_id) + if security_group = service.get_security_group(security_group_id).body['security_group'] + new(security_group) + end + rescue Fog::OpenStack::Network::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/network/openstack/models/subnet.rb b/lib/fog/openstack/network/models/subnet.rb similarity index 96% rename from lib/fog/network/openstack/models/subnet.rb rename to lib/fog/openstack/network/models/subnet.rb index 377a68c9e..cbec2ba14 100644 --- a/lib/fog/network/openstack/models/subnet.rb +++ b/lib/fog/openstack/network/models/subnet.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class Subnet < Fog::OpenStack::Model identity :id diff --git a/lib/fog/network/openstack/models/subnet_pool.rb b/lib/fog/openstack/network/models/subnet_pool.rb similarity index 96% rename from lib/fog/network/openstack/models/subnet_pool.rb rename to lib/fog/openstack/network/models/subnet_pool.rb index bade0636a..c14208b18 100644 --- a/lib/fog/network/openstack/models/subnet_pool.rb +++ b/lib/fog/openstack/network/models/subnet_pool.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class SubnetPool < Fog::OpenStack::Model identity :id diff --git a/lib/fog/network/openstack/models/subnet_pools.rb b/lib/fog/openstack/network/models/subnet_pools.rb similarity index 76% rename from lib/fog/network/openstack/models/subnet_pools.rb rename to lib/fog/openstack/network/models/subnet_pools.rb index fa8006430..414cad0f8 100644 --- a/lib/fog/network/openstack/models/subnet_pools.rb +++ b/lib/fog/openstack/network/models/subnet_pools.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/subnet_pool' +require 'fog/openstack/network/models/subnet_pool' module Fog - module Network - class OpenStack + module OpenStack + class Network class SubnetPools < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::SubnetPool + model Fog::OpenStack::Network::SubnetPool def initialize(attributes) self.filters ||= {} @@ -24,7 +24,7 @@ def get(subnet_pool_id) if subnet_pool new(subnet_pool) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end end diff --git a/lib/fog/network/openstack/models/subnets.rb b/lib/fog/openstack/network/models/subnets.rb similarity index 75% rename from lib/fog/network/openstack/models/subnets.rb rename to lib/fog/openstack/network/models/subnets.rb index f7df5f7f1..7f7b8dff2 100644 --- a/lib/fog/network/openstack/models/subnets.rb +++ b/lib/fog/openstack/network/models/subnets.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/subnet' +require 'fog/openstack/network/models/subnet' module Fog - module Network - class OpenStack + module OpenStack + class Network class Subnets < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::Subnet + model Fog::OpenStack::Network::Subnet def initialize(attributes) self.filters ||= {} @@ -23,7 +23,7 @@ def get(subnet_id) if subnet = service.get_subnet(subnet_id).body['subnet'] new(subnet) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end end diff --git a/lib/fog/network/openstack/models/vpn_service.rb b/lib/fog/openstack/network/models/vpn_service.rb similarity index 96% rename from lib/fog/network/openstack/models/vpn_service.rb rename to lib/fog/openstack/network/models/vpn_service.rb index 41217aadf..8dbb990c5 100644 --- a/lib/fog/network/openstack/models/vpn_service.rb +++ b/lib/fog/openstack/network/models/vpn_service.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Network - class OpenStack + module OpenStack + class Network class VpnService < Fog::OpenStack::Model identity :id diff --git a/lib/fog/network/openstack/models/vpn_services.rb b/lib/fog/openstack/network/models/vpn_services.rb similarity index 76% rename from lib/fog/network/openstack/models/vpn_services.rb rename to lib/fog/openstack/network/models/vpn_services.rb index af8baea7d..c062a2fa0 100644 --- a/lib/fog/network/openstack/models/vpn_services.rb +++ b/lib/fog/openstack/network/models/vpn_services.rb @@ -1,13 +1,13 @@ require 'fog/openstack/models/collection' -require 'fog/network/openstack/models/vpn_service' +require 'fog/openstack/network/models/vpn_service' module Fog - module Network - class OpenStack + module OpenStack + class Network class VpnServices < Fog::OpenStack::Collection attribute :filters - model Fog::Network::OpenStack::VpnService + model Fog::OpenStack::Network::VpnService def initialize(attributes) self.filters ||= {} @@ -23,7 +23,7 @@ def get(vpn_service_id) if vpn_service = service.get_vpn_service(vpn_service_id).body['vpnservice'] new(vpn_service) end - rescue Fog::Network::OpenStack::NotFound + rescue Fog::OpenStack::Network::NotFound nil end end diff --git a/lib/fog/openstack/network/requests/add_router_interface.rb b/lib/fog/openstack/network/requests/add_router_interface.rb new file mode 100644 index 000000000..836b58a1d --- /dev/null +++ b/lib/fog/openstack/network/requests/add_router_interface.rb @@ -0,0 +1,52 @@ +module Fog + module OpenStack + class Network + class Real + def add_router_interface(router_id, subnet_id_or_options) + if subnet_id_or_options.kind_of? String + data = { + 'subnet_id' => subnet_id_or_options + } + elsif subnet_id_or_options.kind_of? Hash + data = subnet_id_or_options + else + raise ArgumentError, 'Please pass a subnet id or hash {subnet_id:xxx,port_id:xxx}' + end + + request( + body: Fog::JSON.encode(data), + expects: [200], + method: 'PUT', + path: "routers/#{router_id}/add_router_interface" + ) + end + end + + class Mock + def add_router_interface(_router_id, _subnet_id, _options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'status' => 'ACTIVE', + 'name' => '', + 'admin_state_up' => true, + 'network_id' => '5307648b-e836-4658-8f1a-ff7536870c64', + 'tenant_id' => '6b96ff0cb17a4b859e1e575d221683d3', + 'device_owner' => 'network:router_interface', + 'mac_address' => 'fa:16:3e:f7:d1:9c', + 'fixed_ips' => { + 'subnet_id' => 'a2f1f29d-571b-4533-907f-5803ab96ead1', + 'ip_address' => '10.1.1.1' + }, + 'id' => '3a44f4e5-1694-493a-a1fb-393881c673a4', + 'device_id' => '7177abc4-5ae9-4bb7-b0d4-89e94a4abf3b' + } + + self.data[:routers][data['router_id']] = data + response.body = { 'router' => data } + response + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/associate_floating_ip.rb b/lib/fog/openstack/network/requests/associate_floating_ip.rb similarity index 75% rename from lib/fog/network/openstack/requests/associate_floating_ip.rb rename to lib/fog/openstack/network/requests/associate_floating_ip.rb index c8f119881..17cedc044 100644 --- a/lib/fog/network/openstack/requests/associate_floating_ip.rb +++ b/lib/fog/openstack/network/requests/associate_floating_ip.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def associate_floating_ip(floating_ip_id, port_id, options = {}) data = { @@ -28,13 +28,13 @@ def associate_floating_ip(_floating_ip_id, port_id, options = {}) response = Excon::Response.new response.status = 201 data = { - 'id' => '00000000-0000-0000-0000-000000000000', - 'router_id' => '00000000-0000-0000-0000-000000000000', - 'tenant_id' => options["tenant_id"], + 'id' => '00000000-0000-0000-0000-000000000000', + 'router_id' => '00000000-0000-0000-0000-000000000000', + 'tenant_id' => options["tenant_id"], 'floating_network_id' => options["floating_network_id"], - 'fixed_ip_address' => options["fixed_ip_address"], + 'fixed_ip_address' => options["fixed_ip_address"], 'floating_ip_address' => options["floating_ip_address"], - 'port_id' => port_id + 'port_id' => port_id } self.data[:floating_ips][data['floating_ip_id']] = data diff --git a/lib/fog/network/openstack/requests/associate_lb_health_monitor.rb b/lib/fog/openstack/network/requests/associate_lb_health_monitor.rb similarity index 91% rename from lib/fog/network/openstack/requests/associate_lb_health_monitor.rb rename to lib/fog/openstack/network/requests/associate_lb_health_monitor.rb index 18bd8bd46..45926d554 100644 --- a/lib/fog/network/openstack/requests/associate_lb_health_monitor.rb +++ b/lib/fog/openstack/network/requests/associate_lb_health_monitor.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def associate_lb_health_monitor(pool_id, health_monitor_id) data = { @@ -28,7 +28,7 @@ def associate_lb_health_monitor(pool_id, health_monitor_id) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/create_floating_ip.rb b/lib/fog/openstack/network/requests/create_floating_ip.rb similarity index 77% rename from lib/fog/network/openstack/requests/create_floating_ip.rb rename to lib/fog/openstack/network/requests/create_floating_ip.rb index c8c060e4b..3d6565db1 100644 --- a/lib/fog/network/openstack/requests/create_floating_ip.rb +++ b/lib/fog/openstack/network/requests/create_floating_ip.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def create_floating_ip(floating_network_id, options = {}) data = { @@ -28,12 +28,12 @@ def create_floating_ip(floating_network_id, options = {}) response = Excon::Response.new response.status = 201 data = { - 'id' => floating_network_id, + 'id' => floating_network_id, 'floating_network_id' => floating_network_id, - 'port_id' => options[:port_id], - 'tenant_id' => options[:tenant_id], - 'fixed_ip_address' => options[:fixed_ip_address], - 'router_id' => nil + 'port_id' => options[:port_id], + 'tenant_id' => options[:tenant_id], + 'fixed_ip_address' => options[:fixed_ip_address], + 'router_id' => nil } self.data[:floating_ips][data['id']] = data response.body = { 'floatingip' => data } diff --git a/lib/fog/openstack/network/requests/create_ike_policy.rb b/lib/fog/openstack/network/requests/create_ike_policy.rb new file mode 100644 index 000000000..ddf731aa1 --- /dev/null +++ b/lib/fog/openstack/network/requests/create_ike_policy.rb @@ -0,0 +1,52 @@ +module Fog + module OpenStack + class Network + class Real + def create_ike_policy(options = {}) + data = { + 'ikepolicy' => { + } + } + + vanilla_options = [:name, :description, :tenant_id, + :auth_algorithm, :encryption_algorithm, + :pfs, :phase1_negotiation_mode, + :lifetime, :ike_version] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['ikepolicy'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'vpn/ikepolicies' + ) + end + end + + class Mock + def create_ike_policy(options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'name' => options[:name], + 'description' => options[:description], + 'tenant_id' => options[:tenant_id], + 'auth_algorithm' => options[:auth_algorithm], + 'encryption_algorithm' => options[:encryption_algorithm], + 'pfs' => options[:pfs], + 'phase1_negotiation_mode' => options[:phase1_negotiation_mode], + 'lifetime' => options[:lifetime], + 'ike_version' => options[:ike_version] + } + + self.data[:ike_policies][data['id']] = data + response.body = { 'ikepolicy' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_ipsec_policy.rb b/lib/fog/openstack/network/requests/create_ipsec_policy.rb new file mode 100644 index 000000000..d61b7e349 --- /dev/null +++ b/lib/fog/openstack/network/requests/create_ipsec_policy.rb @@ -0,0 +1,52 @@ +module Fog + module OpenStack + class Network + class Real + def create_ipsec_policy(options = {}) + data = { + 'ipsecpolicy' => { + } + } + + vanilla_options = [:name, :description, :tenant_id, + :auth_algorithm, :encryption_algorithm, + :pfs, :transform_protocol, + :lifetime, :encapsulation_mode] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['ipsecpolicy'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'vpn/ipsecpolicies' + ) + end + end + + class Mock + def create_ipsec_policy(options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'name' => options[:name], + 'description' => options[:description], + 'tenant_id' => options[:tenant_id], + 'auth_algorithm' => options[:auth_algorithm], + 'encryption_algorithm' => options[:encryption_algorithm], + 'pfs' => options[:pfs], + 'transform_protocol' => options[:transform_protocol], + 'lifetime' => options[:lifetime], + 'encapsulation_mode' => options[:encapsulation_mode] + } + + self.data[:ipsec_policies][data['id']] = data + response.body = { 'ipsecpolicy' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_ipsec_site_connection.rb b/lib/fog/openstack/network/requests/create_ipsec_site_connection.rb new file mode 100644 index 000000000..3afc37585 --- /dev/null +++ b/lib/fog/openstack/network/requests/create_ipsec_site_connection.rb @@ -0,0 +1,65 @@ +module Fog + module OpenStack + class Network + class Real + def create_ipsec_site_connection(vpn_service_id, ike_policy_id, ipsec_policy_id, options = {}) + data = { + 'ipsec_site_connection' => { + 'vpnservice_id' => vpn_service_id, + 'ikepolicy_id' => ike_policy_id, + 'ipsecpolicy_id' => ipsec_policy_id + } + } + + vanilla_options = [:name, :description, :tenant_id, + :peer_address, :peer_id, :peer_cidrs, + :psk, :mtu, :dpd, :initiator, + :admin_state_up] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['ipsec_site_connection'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'vpn/ipsec-site-connections' + ) + end + end + + class Mock + def create_ipsec_site_connection(vpn_service_id, ike_policy_id, ipsec_policy_id, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'name' => options[:name], + 'description' => options[:description], + 'status' => 'ACTIVE', + 'tenant_id' => options[:tenant_id], + 'admin_state_up' => options[:admin_state_up], + 'psk' => options[:psk], + 'initiator' => options[:initiator], + 'auth_mode' => "psk", + 'peer_cidrs' => options[:peer_cidrs], + 'mtu' => options[:mtu], + 'peer_ep_group_id' => Fog::Mock.random_numbers(6).to_s, + 'ikepolicy_id' => ike_policy_id, + 'vpnservice_id' => vpn_service_id, + 'dpd' => options[:dpd], + 'route_mode' => "static", + 'ipsecpolicy_id' => ipsec_policy_id, + 'local_ep_group_id' => Fog::Mock.random_numbers(6).to_s, + 'peer_address' => options[:peer_address], + 'peer_id' => options[:peer_id] + } + + self.data[:ipsec_site_connections][data['id']] = data + response.body = { 'ipsec_site_connection' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_lb_health_monitor.rb b/lib/fog/openstack/network/requests/create_lb_health_monitor.rb new file mode 100644 index 000000000..e5648ea7f --- /dev/null +++ b/lib/fog/openstack/network/requests/create_lb_health_monitor.rb @@ -0,0 +1,54 @@ +module Fog + module OpenStack + class Network + class Real + def create_lb_health_monitor(type, delay, timeout, max_retries, options = {}) + data = { + 'health_monitor' => { + 'type' => type, + 'delay' => delay, + 'timeout' => timeout, + 'max_retries' => max_retries + } + } + + vanilla_options = [:http_method, :url_path, :expected_codes, :admin_state_up, :tenant_id] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['health_monitor'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'lb/health_monitors' + ) + end + end + + class Mock + def create_lb_health_monitor(type, delay, timeout, max_retries, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'type' => type, + 'delay' => delay, + 'timeout' => timeout, + 'max_retries' => max_retries, + 'http_method' => options[:http_method], + 'url_path' => options[:url_path], + 'expected_codes' => options[:expected_codes], + 'status' => 'ACTIVE', + 'admin_state_up' => options[:admin_state_up], + 'tenant_id' => options[:tenant_id] + } + + self.data[:lb_health_monitors][data['id']] = data + response.body = { 'health_monitor' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_lb_member.rb b/lib/fog/openstack/network/requests/create_lb_member.rb new file mode 100644 index 000000000..214912bd5 --- /dev/null +++ b/lib/fog/openstack/network/requests/create_lb_member.rb @@ -0,0 +1,51 @@ +module Fog + module OpenStack + class Network + class Real + def create_lb_member(pool_id, address, protocol_port, weight, options = {}) + data = { + 'member' => { + 'pool_id' => pool_id, + 'address' => address, + 'protocol_port' => protocol_port, + 'weight' => weight + } + } + + vanilla_options = [:admin_state_up, :tenant_id] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['member'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'lb/members' + ) + end + end + + class Mock + def create_lb_member(pool_id, address, protocol_port, weight, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'pool_id' => pool_id, + 'address' => address, + 'protocol_port' => protocol_port, + 'weight' => weight, + 'status' => 'ACTIVE', + 'admin_state_up' => options[:admin_state_up], + 'tenant_id' => options[:tenant_id] + } + + self.data[:lb_members][data['id']] = data + response.body = { 'member' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_lb_pool.rb b/lib/fog/openstack/network/requests/create_lb_pool.rb new file mode 100644 index 000000000..7f2648e5e --- /dev/null +++ b/lib/fog/openstack/network/requests/create_lb_pool.rb @@ -0,0 +1,58 @@ +module Fog + module OpenStack + class Network + class Real + def create_lb_pool(subnet_id, protocol, lb_method, options = {}) + data = { + 'pool' => { + 'subnet_id' => subnet_id, + 'protocol' => protocol, + 'lb_method' => lb_method + } + } + + vanilla_options = [:name, :description, :admin_state_up, :tenant_id] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['pool'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'lb/pools' + ) + end + end + + class Mock + def create_lb_pool(subnet_id, protocol, lb_method, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'subnet_id' => subnet_id, + 'protocol' => protocol, + 'lb_method' => lb_method, + 'name' => options[:name], + 'description' => options[:description], + 'health_monitors' => [], + 'members' => [], + 'status' => 'ACTIVE', + 'admin_state_up' => options[:admin_state_up], + 'vip_id' => nil, + 'tenant_id' => options[:tenant_id], + 'active_connections' => nil, + 'bytes_in' => nil, + 'bytes_out' => nil, + 'total_connections' => nil + } + + self.data[:lb_pools][data['id']] = data + response.body = { 'pool' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_lb_vip.rb b/lib/fog/openstack/network/requests/create_lb_vip.rb new file mode 100644 index 000000000..25bae6815 --- /dev/null +++ b/lib/fog/openstack/network/requests/create_lb_vip.rb @@ -0,0 +1,58 @@ +module Fog + module OpenStack + class Network + class Real + def create_lb_vip(subnet_id, pool_id, protocol, protocol_port, options = {}) + data = { + 'vip' => { + 'subnet_id' => subnet_id, + 'pool_id' => pool_id, + 'protocol' => protocol, + 'protocol_port' => protocol_port + } + } + + vanilla_options = [:name, :description, :address, :session_persistence, :connection_limit, + :admin_state_up, :tenant_id] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['vip'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'lb/vips' + ) + end + end + + class Mock + def create_lb_vip(subnet_id, pool_id, protocol, protocol_port, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'subnet_id' => subnet_id, + 'pool_id' => pool_id, + 'protocol' => protocol, + 'protocol_port' => protocol_port, + 'name' => options[:name], + 'description' => options[:description], + 'address' => options[:address], + 'port_id' => Fog::Mock.random_numbers(6).to_s, + 'session_persistence' => options[:session_persistence], + 'connection_limit' => options[:connection_limit], + 'status' => 'ACTIVE', + 'admin_state_up' => options[:admin_state_up], + 'tenant_id' => options[:tenant_id] + } + + self.data[:lb_vips][data['id']] = data + response.body = { 'vip' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_lbaas_healthmonitor.rb b/lib/fog/openstack/network/requests/create_lbaas_healthmonitor.rb new file mode 100644 index 000000000..e0afd5344 --- /dev/null +++ b/lib/fog/openstack/network/requests/create_lbaas_healthmonitor.rb @@ -0,0 +1,57 @@ +module Fog + module OpenStack + class Network + class Real + def create_lbaas_healthmonitor(pool_id, type, delay, timeout, max_retries, options = {}) + data = { + 'healthmonitor' => { + 'pool_id' => pool_id, + 'type' => type, + 'delay' => delay, + 'timeout' => timeout, + 'max_retries' => max_retries + } + } + + vanilla_options = [:http_method, :url_path, :expected_codes, :admin_state_up, :tenant_id] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['healthmonitor'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'lbaas/healthmonitors' + ) + end + end + + class Mock + def create_lbaas_healthmonitor(type, delay, timeout, max_retries, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'type' => type, + 'delay' => delay, + 'timeout' => timeout, + 'max_retries' => max_retries, + 'http_method' => options[:http_method], + 'url_path' => options[:url_path], + 'expected_codes' => options[:expected_codes], + 'status' => 'ACTIVE', + 'admin_state_up' => options[:admin_state_up], + 'tenant_id' => options[:tenant_id], + 'name' => options[:name], + 'pools' => [{ 'id' => Fog::Mock.random_numbers(6).to_s }] + } + + self.data[:lbaas_healthmonitors][data['id']] = data + response.body = { 'healthmonitor' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_lbaas_l7policy.rb b/lib/fog/openstack/network/requests/create_lbaas_l7policy.rb new file mode 100644 index 000000000..14f09b6ed --- /dev/null +++ b/lib/fog/openstack/network/requests/create_lbaas_l7policy.rb @@ -0,0 +1,50 @@ +module Fog + module OpenStack + class Network + class Real + def create_lbaas_l7policy(listener_id, action, options = {}) + data = { + 'l7policy' => { + 'listener_id' => listener_id, + 'action' => action + } + } + + vanilla_options = [:tenant_id, :name, :description, :redirect_pool_id, :redirect_url, :position] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['l7policy'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'lbaas/l7policies' + ) + end + end + + class Mock + def create_lbaas_l7policy(listener_id, action, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'listener_id' => listener_id, + 'action' => action, + 'position' => options[:position], + 'tenant_id' => options[:tenant_id], + 'name' => options[:name], + 'description' => options[:description], + 'redirect_pool_id' => options[:redirect_pool_id], + 'redirect_url' => options[:redirect_url] + } + + self.data[:lbaas_l7policies][data['id']] = data + response.body = { 'l7policy' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_lbaas_l7rule.rb b/lib/fog/openstack/network/requests/create_lbaas_l7rule.rb new file mode 100644 index 000000000..1e57d14c9 --- /dev/null +++ b/lib/fog/openstack/network/requests/create_lbaas_l7rule.rb @@ -0,0 +1,50 @@ +module Fog + module OpenStack + class Network + class Real + def create_lbaas_l7rule(l7policy_id, type, compare_type, value, options = {}) + data = { + 'rule' => { + 'type' => type, + 'compare_type' => compare_type, + 'value' => value + } + } + + vanilla_options = [:tenant_id, :key, :invert] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['rule'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: "lbaas/l7policies/#{l7policy_id}/rules" + ) + end + end + + class Mock + def create_lbaas_l7rule(l7policy_id, type, compare_type, value, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'type' => type, + 'compare_type' => compare_type, + 'value' => value, + 'tenant_id' => options[:tenant_id], + 'key' => options[:key], + 'invert' => options[:invert], + 'l7policy_id' => l7policy_id + } + + self.data[:lbaas_l7rules][data['id']] = data + response.body = { 'rule' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_lbaas_listener.rb b/lib/fog/openstack/network/requests/create_lbaas_listener.rb new file mode 100644 index 000000000..360aa99ee --- /dev/null +++ b/lib/fog/openstack/network/requests/create_lbaas_listener.rb @@ -0,0 +1,55 @@ +module Fog + module OpenStack + class Network + class Real + def create_lbaas_listener(loadbalancer_id, protocol, protocol_port, options = {}) + data = { + 'listener' => { + 'loadbalancer_id' => loadbalancer_id, + 'protocol' => protocol, + 'protocol_port' => protocol_port + } + } + + vanilla_options = [:name, :description, :default_pool_id, :connection_limit, :default_tls_container_ref, :sni_container_refs, + :admin_state_up, :tenant_id] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['listener'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'lbaas/listeners' + ) + end + end + + class Mock + def create_lbaas_listener(loadbalancer_id, protocol, protocol_port, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'loadbalancers' => [{ 'id' => loadbalancer_id }], + 'protocol' => protocol, + 'protocol_port' => protocol_port, + 'name' => options[:name], + 'description' => options[:description], + 'default_pool_id' => options[:default_pool_id], + 'connection_limit' => options[:connection_limit], + 'default_tls_container_ref' => options[:default_tls_container_ref], + 'sni_container_refs' => options[:sni_container_refs], + 'admin_state_up' => options[:admin_state_up], + 'tenant_id' => options[:tenant_id] + } + + self.data[:lbaas_listener][data['id']] = data + response.body = { 'listener' => data } + response + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/create_lbaas_loadbalancer.rb b/lib/fog/openstack/network/requests/create_lbaas_loadbalancer.rb similarity index 97% rename from lib/fog/network/openstack/requests/create_lbaas_loadbalancer.rb rename to lib/fog/openstack/network/requests/create_lbaas_loadbalancer.rb index 90cbfb15b..e63bfe5f5 100644 --- a/lib/fog/network/openstack/requests/create_lbaas_loadbalancer.rb +++ b/lib/fog/openstack/network/requests/create_lbaas_loadbalancer.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def create_lbaas_loadbalancer(vip_subnet_id, options = {}) data = { diff --git a/lib/fog/openstack/network/requests/create_lbaas_pool.rb b/lib/fog/openstack/network/requests/create_lbaas_pool.rb new file mode 100644 index 000000000..da4ef6bf5 --- /dev/null +++ b/lib/fog/openstack/network/requests/create_lbaas_pool.rb @@ -0,0 +1,53 @@ +module Fog + module OpenStack + class Network + class Real + def create_lbaas_pool(listener_id, protocol, lb_algorithm, options = {}) + data = { + 'pool' => { + 'listener_id' => listener_id, + 'protocol' => protocol, + 'lb_algorithm' => lb_algorithm + } + } + + vanilla_options = [:name, :description, :admin_state_up, :session_persistence, :tenant_id] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['pool'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'lbaas/pools' + ) + end + end + + class Mock + def create_lbaas_pool(listener_id, protocol, lb_algorithm, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'protocol' => protocol, + 'lb_algorithm' => lb_algorithm, + 'name' => options[:name], + 'description' => options[:description], + 'healthmonitor_id' => Fog::Mock.random_numbers(6).to_s, + 'members' => [Fog::Mock.random_numbers(6).to_s], + 'status' => 'ACTIVE', + 'admin_state_up' => options[:admin_state_up], + 'tenant_id' => options[:tenant_id], + 'listeners' => ['id' => listener_id], + 'session_persistence' => {} + } + self.data[:lbaas_pools][data['id']] = data + response.body = { 'pool' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_lbaas_pool_member.rb b/lib/fog/openstack/network/requests/create_lbaas_pool_member.rb new file mode 100644 index 000000000..6b805dffd --- /dev/null +++ b/lib/fog/openstack/network/requests/create_lbaas_pool_member.rb @@ -0,0 +1,49 @@ +module Fog + module OpenStack + class Network + class Real + def create_lbaas_pool_member(pool_id, address, protocol_port, options = {}) + data = { + 'member' => { + 'address' => address, + 'protocol_port' => protocol_port + } + } + + vanilla_options = [:admin_state_up, :tenant_id, :weight, :subnet_id] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['member'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: "lbaas/pools/#{pool_id}/members" + ) + end + end + + class Mock + def create_lbaas_pool_member(pool_id, address, protocol_port, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'pool_id' => pool_id, + 'address' => address, + 'protocol_port' => protocol_port, + 'weight' => options[:weight], + 'status' => 'ACTIVE', + 'admin_state_up' => options[:admin_state_up], + 'tenant_id' => options[:tenant_id], + 'subnet_id' => ptions[:subnet_id] + } + self.data[:lb_members][data['id']] = data + response.body = { 'member' => data } + response + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/create_network.rb b/lib/fog/openstack/network/requests/create_network.rb similarity index 77% rename from lib/fog/network/openstack/requests/create_network.rb rename to lib/fog/openstack/network/requests/create_network.rb index 5e9f3df8d..ee8d3dd4f 100644 --- a/lib/fog/network/openstack/requests/create_network.rb +++ b/lib/fog/openstack/network/requests/create_network.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real CREATE_OPTIONS = [ :name, @@ -25,7 +25,7 @@ class Real :router_external ].freeze - # Map Fog::Network::OpenStack::Network + # Map Fog::OpenStack::Network::Network # model attributes to OpenStack provider attributes ALIASES = { provider_network_type: 'provider:network_type', @@ -67,17 +67,17 @@ def create_network(options = {}) response = Excon::Response.new response.status = 201 data = { - 'id' => Fog::Mock.random_numbers(6).to_s, - 'name' => options[:name], - 'shared' => options[:shared] || false, - 'subnets' => [], - 'status' => 'ACTIVE', - 'admin_state_up' => options[:admin_state_up] || false, - 'tenant_id' => options[:tenant_id], - 'qos_policy_id' => options[:qos_policy_id], + 'id' => Fog::Mock.random_numbers(6).to_s, + 'name' => options[:name], + 'shared' => options[:shared] || false, + 'subnets' => [], + 'status' => 'ACTIVE', + 'admin_state_up' => options[:admin_state_up] || false, + 'tenant_id' => options[:tenant_id], + 'qos_policy_id' => options[:qos_policy_id], 'port_security_enabled' => options[:port_security_enabled] || false } - data.merge!(Fog::Network::OpenStack::Real.create(options)) + data.merge!(Fog::OpenStack::Network::Real.create(options)) self.data[:networks][data['id']] = data response.body = { 'network' => data } response diff --git a/lib/fog/openstack/network/requests/create_port.rb b/lib/fog/openstack/network/requests/create_port.rb new file mode 100644 index 000000000..63687087c --- /dev/null +++ b/lib/fog/openstack/network/requests/create_port.rb @@ -0,0 +1,53 @@ +module Fog + module OpenStack + class Network + class Real + def create_port(network_id, options = {}) + data = { + 'port' => { + 'network_id' => network_id + } + } + + vanilla_options = [:name, :fixed_ips, :mac_address, :admin_state_up, + :device_owner, :device_id, :tenant_id, :security_groups, + :allowed_address_pairs] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['port'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'ports' + ) + end + end + + class Mock + def create_port(network_id, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'name' => options[:name], + 'network_id' => network_id, + 'fixed_ips' => options[:fixed_ips], + 'mac_address' => options[:mac_address], + 'status' => 'ACTIVE', + 'admin_state_up' => options[:admin_state_up], + 'device_owner' => options[:device_owner], + 'device_id' => options[:device_id], + 'tenant_id' => options[:tenant_id], + 'security_groups' => options[:security_groups], + 'allowed_address_pairs' => options[:allowed_address_pairs] + } + self.data[:ports][data['id']] = data + response.body = { 'port' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_rbac_policy.rb b/lib/fog/openstack/network/requests/create_rbac_policy.rb new file mode 100644 index 000000000..99604f0d0 --- /dev/null +++ b/lib/fog/openstack/network/requests/create_rbac_policy.rb @@ -0,0 +1,42 @@ +module Fog + module OpenStack + class Network + class Real + def create_rbac_policy(options = {}) + data = { 'rbac_policy' => {} } + + vanilla_options = [:object_type, :object_id, :tenant_id, :target_tenant, :action] + vanilla_options.select { |o| options.key?(o) }.each do |key| + data['rbac_policy'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'rbac-policies' + ) + end + end + + class Mock + def create_rbac_policy(options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'object_type' => options[:object_type], + 'object_id' => options[:object_id], + 'tenant_id' => options[:tenant_id], + 'target_tenant' => options[:target_tenant], + 'action' => options[:action] + } + + self.data[:rbac_policies][data['id']] = data + response.body = { 'rbac_policy' => data } + response + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/create_router.rb b/lib/fog/openstack/network/requests/create_router.rb similarity index 93% rename from lib/fog/network/openstack/requests/create_router.rb rename to lib/fog/openstack/network/requests/create_router.rb index 5388d678d..7813d2c21 100644 --- a/lib/fog/network/openstack/requests/create_router.rb +++ b/lib/fog/openstack/network/requests/create_router.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def create_router(name, options = {}) data = { @@ -23,7 +23,7 @@ def create_router(name, options = {}) # remove this in a future egi = options[:external_gateway_info] if egi - if egi.kind_of?(Fog::Network::OpenStack::Network) + if egi.kind_of?(Fog::OpenStack::Network::Network) Fog::Logger.deprecation "Passing a model objects into options[:external_gateway_info] is deprecated. \ Please pass external external gateway as follows options[:external_gateway_info] = { :network_id => NETWORK_ID }]" data['router'][:external_gateway_info] = { network_id: egi.id } @@ -50,7 +50,7 @@ def create_router(name, options = {}) # remove this in a future egi = options[:external_gateway_info] - if egi && egi.kind_of?(Fog::Network::OpenStack::Network) + if egi && egi.kind_of?(Fog::OpenStack::Network::Network) Fog::Logger.deprecation "Passing a model objects into options[:external_gateway_info] is deprecated. \ Please pass external external gateway as follows options[:external_gateway_info] = { :network_id => NETWORK_ID }]" egi = { network_id: egi.id } diff --git a/lib/fog/openstack/network/requests/create_security_group.rb b/lib/fog/openstack/network/requests/create_security_group.rb new file mode 100644 index 000000000..6f3cced02 --- /dev/null +++ b/lib/fog/openstack/network/requests/create_security_group.rb @@ -0,0 +1,92 @@ +module Fog + module OpenStack + class Network + class Real + # Create a new security group + # + # ==== Parameters + # * options<~Hash>: + # * 'name'<~String> - Name of the security group + # * 'description'<~String> - Description of the security group + # * 'tenant_id'<~String> - TenantId different than the current user, that should own the security group. Only allowed if user has 'admin' role. + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'security_groups'<~Array>: + # * 'id'<~String> - UUID of the security group + # * 'name'<~String> - Name of the security group + # * 'description'<~String> - Description of the security group + # * 'tenant_id'<~String> - Tenant id that owns the security group + # * 'security_group_rules'<~Array>: - Array of security group rules + # * 'id'<~String> - UUID of the security group rule + # * 'direction'<~String> - Direction of traffic, must be in ['ingress', 'egress'] + # * 'port_range_min'<~Integer> - Start port for rule i.e. 22 (or -1 for ICMP wildcard) + # * 'port_range_max'<~Integer> - End port for rule i.e. 22 (or -1 for ICMP wildcard) + # * 'protocol'<~String> - IP protocol for rule, must be in ['tcp', 'udp', 'icmp'] + # * 'ethertype'<~String> - Type of ethernet support, must be in ['IPv4', 'IPv6'] + # * 'security_group_id'<~String> - UUID of the parent security group + # * 'remote_group_id'<~String> - UUID of the remote security group + # * 'remote_ip_prefix'<~String> - IP cidr range address i.e. '0.0.0.0/0' + # * 'tenant_id'<~String> - Tenant id that owns the security group rule + def create_security_group(options = {}) + data = { "security_group" => {} } + desired_options = [:name, :description, :tenant_id] + selected_options = desired_options.select { |o| options[o] } + selected_options.each { |key| data["security_group"][key] = options[key] } + + request( + body: Fog::JSON.encode(data), + expects: 201, + method: "POST", + path: "security-groups" + ) + end + end + + class Mock + def create_security_group(options = {}) + # Spaces are NOT removed from name and description, as in case of compute sec groups + tenant_id = Fog::Mock.random_numbers(14).to_s + sec_group_id = Fog::UUID.uuid + + response = Excon::Response.new + response.status = 201 + # by default every security group will come setup with an egress rule to "allow all out" + data = { + "security_group_rules" => [ + { "remote_group_id" => nil, + "direction" => "egress", + "remote_ip_prefix" => nil, + "protocol" => nil, + "ethertype" => "IPv4", + "tenant_id" => tenant_id, + "port_range_max" => nil, + "port_range_min" => nil, + "id" => Fog::UUID.uuid, + "security_group_id" => sec_group_id }, + { "remote_group_id" => nil, + "direction" => "egress", + "remote_ip_prefix" => nil, + "protocol" => nil, + "ethertype" => "IPv6", + "tenant_id" => tenant_id, + "port_range_max" => nil, + "port_range_min" => nil, + "id" => Fog::UUID.uuid, + "security_group_id" => sec_group_id } + ], + "id" => sec_group_id, + "tenant_id" => tenant_id, + "name" => options[:name] || "", + "description" => options[:description] || "" + } + + self.data[:security_groups][data["id"]] = data + response.body = { "security_group" => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_security_group_rule.rb b/lib/fog/openstack/network/requests/create_security_group_rule.rb new file mode 100644 index 000000000..a3fcc7a20 --- /dev/null +++ b/lib/fog/openstack/network/requests/create_security_group_rule.rb @@ -0,0 +1,79 @@ +module Fog + module OpenStack + class Network + class Real + # Create a new security group rule + # + # ==== Parameters + # * 'security_group_id'<~String> - UUID of the parent security group + # * 'direction'<~String> - Direction of traffic, must be in ['ingress', 'egress'] + # * options<~Hash>: + # * 'port_range_min'<~Integer> - Start port for rule i.e. 22 (or -1 for ICMP wildcard) + # * 'port_range_max'<~Integer> - End port for rule i.e. 22 (or -1 for ICMP wildcard) + # * 'protocol'<~String> - IP protocol for rule, must be in ['tcp', 'udp', 'icmp'] + # * 'ethertype'<~String> - Type of ethernet support, must be in ['IPv4', 'IPv6'] + # * 'remote_group_id'<~String> - UUID of the remote security group + # * 'remote_ip_prefix'<~String> - IP cidr range address i.e. '0.0.0.0/0' + # * 'tenant_id'<~String> - TenantId different than the current user, that should own the security group. Only allowed if user has 'admin' role. + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'security_group_rule'<~Hash>: + # * 'id'<~String> - UUID of the security group rule + # * 'direction'<~String> - Direction of traffic, must be in ['ingress', 'egress'] + # * 'port_range_min'<~String> - Start port for rule i.e. 22 (or -1 for ICMP wildcard) + # * 'port_range_max'<~String> - End port for rule i.e. 22 (or -1 for ICMP wildcard) + # * 'protocol'<~String> - IP protocol for rule, must be in ['tcp', 'udp', 'icmp'] + # * 'ethertype'<~String> - Type of ethernet support, must be in ['IPv4', 'IPv6'] + # * 'security_group_id'<~String> - UUID of the parent security group + # * 'remote_group_id'<~String> - UUID of the source security group + # * 'remote_ip_prefix'<~String> - IP cidr range address i.e. '0.0.0.0/0' + # * 'tenant_id'<~String> - Tenant id that owns the security group rule + def create_security_group_rule(security_group_id, direction, options = {}) + data = { "security_group_rule" => { "security_group_id" => security_group_id, "direction" => direction } } + desired_options = [ + :port_range_min, + :port_range_max, + :protocol, + :ethertype, + :remote_group_id, + :remote_ip_prefix, + :tenant_id + ] + selected_options = desired_options.select { |o| options[o] } + selected_options.each { |key| data["security_group_rule"][key] = options[key] } + + request( + body: Fog::JSON.encode(data), + expects: 201, + method: "POST", + path: "security-group-rules" + ) + end + end + + class Mock + def create_security_group_rule(security_group_id, direction, options = {}) + response = Excon::Response.new + data = { + "id" => Fog::UUID.uuid, + "remote_group_id" => options[:remote_group_id], + "direction" => direction, + "remote_ip_prefix" => options[:remote_ip_prefix], + "protocol" => options[:protocol], + "ethertype" => options[:ethertype] || "IPv4", + "tenant_id" => options[:tenant_id] || Fog::Mock.random_numbers(14).to_s, + "port_range_max" => options[:port_range_max], + "port_range_min" => options[:port_range_min], + "security_group_id" => security_group_id + } + self.data[:security_group_rules][data["id"]] = data + response.status = 201 + response.body = { "security_group_rule" => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_subnet.rb b/lib/fog/openstack/network/requests/create_subnet.rb new file mode 100644 index 000000000..5c0036bc0 --- /dev/null +++ b/lib/fog/openstack/network/requests/create_subnet.rb @@ -0,0 +1,54 @@ +module Fog + module OpenStack + class Network + class Real + def create_subnet(network_id, cidr, ip_version, options = {}) + data = { + 'subnet' => { + 'network_id' => network_id, + 'cidr' => cidr, + 'ip_version' => ip_version + } + } + + vanilla_options = [:name, :gateway_ip, :allocation_pools, + :dns_nameservers, :host_routes, :enable_dhcp, + :tenant_id] + vanilla_options.select { |o| options.key?(o) }.each do |key| + data['subnet'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'subnets' + ) + end + end + + class Mock + def create_subnet(network_id, cidr, ip_version, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'name' => options[:name], + 'network_id' => network_id, + 'cidr' => cidr, + 'ip_version' => ip_version, + 'gateway_ip' => options[:gateway_ip], + 'allocation_pools' => options[:allocation_pools], + 'dns_nameservers' => options[:dns_nameservers], + 'host_routes' => options[:host_routes], + 'enable_dhcp' => options[:enable_dhcp], + 'tenant_id' => options[:tenant_id] + } + self.data[:subnets][data['id']] = data + response.body = { 'subnet' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_subnet_pool.rb b/lib/fog/openstack/network/requests/create_subnet_pool.rb new file mode 100644 index 000000000..1170fe942 --- /dev/null +++ b/lib/fog/openstack/network/requests/create_subnet_pool.rb @@ -0,0 +1,56 @@ +module Fog + module OpenStack + class Network + class Real + def create_subnet_pool(name, prefixes, options = {}) + data = { + 'subnetpool' => { + 'name' => name, + 'prefixes' => prefixes + } + } + + vanilla_options = [:description, :address_scope_id, :shared, + :min_prefixlen, :max_prefixlen, :default_prefixlen] + vanilla_options.select { |o| options.key?(o) }.each do |key| + data['subnetpool'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'subnetpools' + ) + end + end + + class Mock + def create_subnet_pool(name, prefixes, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'name' => name, + 'prefixes' => prefixes, + 'description' => options[:description], + 'min_prefixlen' => options[:min_prefixlen] || 64, + 'max_prefixlen' => options[:max_prefixlen] || 64, + 'default_prefixlen' => options[:default_prefixlen] || 64, + 'address_scope_id' => options[:address_scope_id], + 'default_quota' => options[:default_quota], + 'ip_version' => options[:ip_version] || 4, + 'shared' => options[:shared].nil? ? false : options[:shared], + 'is_default' => options[:is_default].nil? ? false : options[:is_default], + 'created_at' => Time.now.to_s, + 'updated_at' => Time.now.to_s, + 'tenant_id' => Fog::Mock.random_hex(8).to_s + } + self.data[:subnet_pools][data['id']] = data + response.body = { 'subnetpool' => data } + response + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/create_vpn_service.rb b/lib/fog/openstack/network/requests/create_vpn_service.rb new file mode 100644 index 000000000..04b0d421d --- /dev/null +++ b/lib/fog/openstack/network/requests/create_vpn_service.rb @@ -0,0 +1,51 @@ +module Fog + module OpenStack + class Network + class Real + def create_vpn_service(subnet_id, router_id, options = {}) + data = { + 'vpnservice' => { + 'subnet_id' => subnet_id, + 'router_id' => router_id + } + } + + vanilla_options = [:name, :description, :admin_state_up, :tenant_id] + vanilla_options.reject { |o| options[o].nil? }.each do |key| + data['vpnservice'][key] = options[key] + end + + request( + body: Fog::JSON.encode(data), + expects: [201], + method: 'POST', + path: 'vpn/vpnservices' + ) + end + end + + class Mock + def create_vpn_service(subnet_id, router_id, options = {}) + response = Excon::Response.new + response.status = 201 + data = { + 'id' => Fog::Mock.random_numbers(6).to_s, + 'subnet_id' => subnet_id, + 'router_id' => router_id, + 'name' => options[:name], + 'description' => options[:description], + 'status' => 'ACTIVE', + 'admin_state_up' => options[:admin_state_up], + 'tenant_id' => options[:tenant_id], + 'external_v4_ip' => '1.2.3.4', + 'external_v6_ip' => '::1' + } + + self.data[:vpn_services][data['id']] = data + response.body = { 'vpnservice' => data } + response + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/delete_floating_ip.rb b/lib/fog/openstack/network/requests/delete_floating_ip.rb similarity index 87% rename from lib/fog/network/openstack/requests/delete_floating_ip.rb rename to lib/fog/openstack/network/requests/delete_floating_ip.rb index a2191e5d7..d5eb77b68 100644 --- a/lib/fog/network/openstack/requests/delete_floating_ip.rb +++ b/lib/fog/openstack/network/requests/delete_floating_ip.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_floating_ip(floating_ip_id) request( @@ -19,7 +19,7 @@ def delete_floating_ip(floating_ip_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_ike_policy.rb b/lib/fog/openstack/network/requests/delete_ike_policy.rb similarity index 87% rename from lib/fog/network/openstack/requests/delete_ike_policy.rb rename to lib/fog/openstack/network/requests/delete_ike_policy.rb index d3c641b9f..2e6c821b1 100644 --- a/lib/fog/network/openstack/requests/delete_ike_policy.rb +++ b/lib/fog/openstack/network/requests/delete_ike_policy.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_ike_policy(ike_policy_id) request( @@ -19,7 +19,7 @@ def delete_ike_policy(ike_policy_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_ipsec_policy.rb b/lib/fog/openstack/network/requests/delete_ipsec_policy.rb similarity index 87% rename from lib/fog/network/openstack/requests/delete_ipsec_policy.rb rename to lib/fog/openstack/network/requests/delete_ipsec_policy.rb index 6f4e4a6fc..1936c6179 100644 --- a/lib/fog/network/openstack/requests/delete_ipsec_policy.rb +++ b/lib/fog/openstack/network/requests/delete_ipsec_policy.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_ipsec_policy(ipsec_policy_id) request( @@ -19,7 +19,7 @@ def delete_ipsec_policy(ipsec_policy_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_ipsec_site_connection.rb b/lib/fog/openstack/network/requests/delete_ipsec_site_connection.rb similarity index 89% rename from lib/fog/network/openstack/requests/delete_ipsec_site_connection.rb rename to lib/fog/openstack/network/requests/delete_ipsec_site_connection.rb index f0ea5942c..1a81b28eb 100644 --- a/lib/fog/network/openstack/requests/delete_ipsec_site_connection.rb +++ b/lib/fog/openstack/network/requests/delete_ipsec_site_connection.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_ipsec_site_connection(ipsec_site_connection_id) request( @@ -20,7 +20,7 @@ def delete_ipsec_site_connection(ipsec_site_connection_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_lb_health_monitor.rb b/lib/fog/openstack/network/requests/delete_lb_health_monitor.rb similarity index 88% rename from lib/fog/network/openstack/requests/delete_lb_health_monitor.rb rename to lib/fog/openstack/network/requests/delete_lb_health_monitor.rb index a61adefbd..3e6d88bcf 100644 --- a/lib/fog/network/openstack/requests/delete_lb_health_monitor.rb +++ b/lib/fog/openstack/network/requests/delete_lb_health_monitor.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_lb_health_monitor(health_monitor_id) request( @@ -19,7 +19,7 @@ def delete_lb_health_monitor(health_monitor_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_lb_member.rb b/lib/fog/openstack/network/requests/delete_lb_member.rb similarity index 86% rename from lib/fog/network/openstack/requests/delete_lb_member.rb rename to lib/fog/openstack/network/requests/delete_lb_member.rb index f38fc1088..1a3b366d3 100644 --- a/lib/fog/network/openstack/requests/delete_lb_member.rb +++ b/lib/fog/openstack/network/requests/delete_lb_member.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_lb_member(member_id) request( @@ -19,7 +19,7 @@ def delete_lb_member(member_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_lb_pool.rb b/lib/fog/openstack/network/requests/delete_lb_pool.rb similarity index 86% rename from lib/fog/network/openstack/requests/delete_lb_pool.rb rename to lib/fog/openstack/network/requests/delete_lb_pool.rb index b74e69fd1..d38853117 100644 --- a/lib/fog/network/openstack/requests/delete_lb_pool.rb +++ b/lib/fog/openstack/network/requests/delete_lb_pool.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_lb_pool(pool_id) request( @@ -19,7 +19,7 @@ def delete_lb_pool(pool_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_lb_vip.rb b/lib/fog/openstack/network/requests/delete_lb_vip.rb similarity index 85% rename from lib/fog/network/openstack/requests/delete_lb_vip.rb rename to lib/fog/openstack/network/requests/delete_lb_vip.rb index 36eb03213..c7c8dbab2 100644 --- a/lib/fog/network/openstack/requests/delete_lb_vip.rb +++ b/lib/fog/openstack/network/requests/delete_lb_vip.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_lb_vip(vip_id) request( @@ -19,7 +19,7 @@ def delete_lb_vip(vip_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_lbaas_healthmonitor.rb b/lib/fog/openstack/network/requests/delete_lbaas_healthmonitor.rb similarity index 88% rename from lib/fog/network/openstack/requests/delete_lbaas_healthmonitor.rb rename to lib/fog/openstack/network/requests/delete_lbaas_healthmonitor.rb index f70beba42..b144d02a1 100644 --- a/lib/fog/network/openstack/requests/delete_lbaas_healthmonitor.rb +++ b/lib/fog/openstack/network/requests/delete_lbaas_healthmonitor.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_lbaas_healthmonitor(healthmonitor_id) request( @@ -19,7 +19,7 @@ def delete_lbaas_healthmonitor(healthmonitor_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_lbaas_l7policy.rb b/lib/fog/openstack/network/requests/delete_lbaas_l7policy.rb similarity index 87% rename from lib/fog/network/openstack/requests/delete_lbaas_l7policy.rb rename to lib/fog/openstack/network/requests/delete_lbaas_l7policy.rb index c3920a1d9..373be541e 100644 --- a/lib/fog/network/openstack/requests/delete_lbaas_l7policy.rb +++ b/lib/fog/openstack/network/requests/delete_lbaas_l7policy.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_lbaas_l7policy(l7policy_id) request( @@ -19,7 +19,7 @@ def delete_lbaas_l7policy(l7policy_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_lbaas_l7rule.rb b/lib/fog/openstack/network/requests/delete_lbaas_l7rule.rb similarity index 87% rename from lib/fog/network/openstack/requests/delete_lbaas_l7rule.rb rename to lib/fog/openstack/network/requests/delete_lbaas_l7rule.rb index a9d066d8c..4cf3209de 100644 --- a/lib/fog/network/openstack/requests/delete_lbaas_l7rule.rb +++ b/lib/fog/openstack/network/requests/delete_lbaas_l7rule.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_lbaas_l7rule(l7policy_id, l7rule_id) request( @@ -19,7 +19,7 @@ def delete_lbaas_l7rule(_l7policy_id, l7rule_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_lbaas_listener.rb b/lib/fog/openstack/network/requests/delete_lbaas_listener.rb similarity index 87% rename from lib/fog/network/openstack/requests/delete_lbaas_listener.rb rename to lib/fog/openstack/network/requests/delete_lbaas_listener.rb index 8dda0eb1c..1b74cd31e 100644 --- a/lib/fog/network/openstack/requests/delete_lbaas_listener.rb +++ b/lib/fog/openstack/network/requests/delete_lbaas_listener.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_lbaas_listener(listener_id) request( @@ -19,7 +19,7 @@ def delete_lbaas_listener(listener_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_lbaas_loadbalancer.rb b/lib/fog/openstack/network/requests/delete_lbaas_loadbalancer.rb similarity index 88% rename from lib/fog/network/openstack/requests/delete_lbaas_loadbalancer.rb rename to lib/fog/openstack/network/requests/delete_lbaas_loadbalancer.rb index 51d181c67..4625d00eb 100644 --- a/lib/fog/network/openstack/requests/delete_lbaas_loadbalancer.rb +++ b/lib/fog/openstack/network/requests/delete_lbaas_loadbalancer.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_lbaas_loadbalancer(loadbalancer_id) request( @@ -19,7 +19,7 @@ def delete_lbaas_loadbalancer(loadbalancer_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_lbaas_pool.rb b/lib/fog/openstack/network/requests/delete_lbaas_pool.rb similarity index 86% rename from lib/fog/network/openstack/requests/delete_lbaas_pool.rb rename to lib/fog/openstack/network/requests/delete_lbaas_pool.rb index 24c1170e0..7d9f72118 100644 --- a/lib/fog/network/openstack/requests/delete_lbaas_pool.rb +++ b/lib/fog/openstack/network/requests/delete_lbaas_pool.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_lbaas_pool(pool_id) request( @@ -19,7 +19,7 @@ def delete_lbaas_pool(pool_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_lbaas_pool_member.rb b/lib/fog/openstack/network/requests/delete_lbaas_pool_member.rb similarity index 87% rename from lib/fog/network/openstack/requests/delete_lbaas_pool_member.rb rename to lib/fog/openstack/network/requests/delete_lbaas_pool_member.rb index 884fc3078..441fd94ef 100644 --- a/lib/fog/network/openstack/requests/delete_lbaas_pool_member.rb +++ b/lib/fog/openstack/network/requests/delete_lbaas_pool_member.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_lbaas_pool_member(pool_id, member_id) request( @@ -19,7 +19,7 @@ def delete_lbaas_pool_member(pool_id, member_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_network.rb b/lib/fog/openstack/network/requests/delete_network.rb similarity index 86% rename from lib/fog/network/openstack/requests/delete_network.rb rename to lib/fog/openstack/network/requests/delete_network.rb index b6c339e9d..5be821ec6 100644 --- a/lib/fog/network/openstack/requests/delete_network.rb +++ b/lib/fog/openstack/network/requests/delete_network.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_network(network_id) request( @@ -19,7 +19,7 @@ def delete_network(network_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/openstack/network/requests/delete_port.rb b/lib/fog/openstack/network/requests/delete_port.rb new file mode 100644 index 000000000..930b30f2b --- /dev/null +++ b/lib/fog/openstack/network/requests/delete_port.rb @@ -0,0 +1,28 @@ +module Fog + module OpenStack + class Network + class Real + def delete_port(port_id) + request( + expects: 204, + method: 'DELETE', + path: "ports/#{port_id}" + ) + end + end + + class Mock + def delete_port(port_id) + response = Excon::Response.new + if list_ports.body['ports'].map { |r| r['id'] }.include? port_id + data[:ports].delete(port_id) + response.status = 204 + response + else + raise Fog::OpenStack::Network::NotFound + end + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/delete_quota.rb b/lib/fog/openstack/network/requests/delete_quota.rb similarity index 91% rename from lib/fog/network/openstack/requests/delete_quota.rb rename to lib/fog/openstack/network/requests/delete_quota.rb index 4cb550626..cb2109adc 100644 --- a/lib/fog/network/openstack/requests/delete_quota.rb +++ b/lib/fog/openstack/network/requests/delete_quota.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_quota(tenant_id) request( diff --git a/lib/fog/network/openstack/requests/delete_rbac_policy.rb b/lib/fog/openstack/network/requests/delete_rbac_policy.rb similarity index 87% rename from lib/fog/network/openstack/requests/delete_rbac_policy.rb rename to lib/fog/openstack/network/requests/delete_rbac_policy.rb index f5c5e38bf..67d23f0eb 100644 --- a/lib/fog/network/openstack/requests/delete_rbac_policy.rb +++ b/lib/fog/openstack/network/requests/delete_rbac_policy.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_rbac_policy(rbac_policy_id) request( @@ -19,7 +19,7 @@ def delete_rbac_policy(rbac_policy_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_router.rb b/lib/fog/openstack/network/requests/delete_router.rb similarity index 86% rename from lib/fog/network/openstack/requests/delete_router.rb rename to lib/fog/openstack/network/requests/delete_router.rb index 08a47c59f..3987f52c0 100644 --- a/lib/fog/network/openstack/requests/delete_router.rb +++ b/lib/fog/openstack/network/requests/delete_router.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_router(router_id) request( @@ -19,7 +19,7 @@ def delete_router(router_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/openstack/network/requests/delete_security_group.rb b/lib/fog/openstack/network/requests/delete_security_group.rb new file mode 100644 index 000000000..2845b304b --- /dev/null +++ b/lib/fog/openstack/network/requests/delete_security_group.rb @@ -0,0 +1,32 @@ +module Fog + module OpenStack + class Network + class Real + # Delete a security group + # + # ==== Parameters + # * 'security_group_id'<~String> - UUID of the security group to delete + def delete_security_group(security_group_id) + request( + expects: 204, + method: 'DELETE', + path: "security-groups/#{security_group_id}" + ) + end + end + + class Mock + def delete_security_group(security_group_id) + response = Excon::Response.new + if data[:security_groups][security_group_id] + data[:security_groups].delete(security_group_id) + response.status = 204 + response + else + raise Fog::OpenStack::Network::NotFound + end + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/delete_security_group_rule.rb b/lib/fog/openstack/network/requests/delete_security_group_rule.rb new file mode 100644 index 000000000..aae442411 --- /dev/null +++ b/lib/fog/openstack/network/requests/delete_security_group_rule.rb @@ -0,0 +1,32 @@ +module Fog + module OpenStack + class Network + class Real + # Delete a security group rule + # + # ==== Parameters + # * 'security_group_rule_id'<~String> - UUID of the security group rule to delete + def delete_security_group_rule(security_group_rule_id) + request( + expects: 204, + method: "DELETE", + path: "security-group-rules/#{security_group_rule_id}" + ) + end + end + + class Mock + def delete_security_group_rule(security_group_rule_id) + response = Excon::Response.new + if data[:security_group_rules][security_group_rule_id] + data[:security_group_rules].delete(security_group_rule_id) + response.status = 204 + response + else + raise Fog::OpenStack::Network::NotFound + end + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/delete_subnet.rb b/lib/fog/openstack/network/requests/delete_subnet.rb similarity index 86% rename from lib/fog/network/openstack/requests/delete_subnet.rb rename to lib/fog/openstack/network/requests/delete_subnet.rb index 1093552a8..83daea103 100644 --- a/lib/fog/network/openstack/requests/delete_subnet.rb +++ b/lib/fog/openstack/network/requests/delete_subnet.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_subnet(subnet_id) request( @@ -19,7 +19,7 @@ def delete_subnet(subnet_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_subnet_pool.rb b/lib/fog/openstack/network/requests/delete_subnet_pool.rb similarity index 87% rename from lib/fog/network/openstack/requests/delete_subnet_pool.rb rename to lib/fog/openstack/network/requests/delete_subnet_pool.rb index d37a0e832..d5ac9f442 100644 --- a/lib/fog/network/openstack/requests/delete_subnet_pool.rb +++ b/lib/fog/openstack/network/requests/delete_subnet_pool.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_subnet_pool(subnet_pool_id) request( @@ -19,7 +19,7 @@ def delete_subnet_pool(subnet_pool_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/delete_vpn_service.rb b/lib/fog/openstack/network/requests/delete_vpn_service.rb similarity index 87% rename from lib/fog/network/openstack/requests/delete_vpn_service.rb rename to lib/fog/openstack/network/requests/delete_vpn_service.rb index b759f258c..377ef5b5d 100644 --- a/lib/fog/network/openstack/requests/delete_vpn_service.rb +++ b/lib/fog/openstack/network/requests/delete_vpn_service.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def delete_vpn_service(vpn_service_id) request( @@ -19,7 +19,7 @@ def delete_vpn_service(vpn_service_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/disassociate_floating_ip.rb b/lib/fog/openstack/network/requests/disassociate_floating_ip.rb similarity index 77% rename from lib/fog/network/openstack/requests/disassociate_floating_ip.rb rename to lib/fog/openstack/network/requests/disassociate_floating_ip.rb index 82e0c3098..38e16d834 100644 --- a/lib/fog/network/openstack/requests/disassociate_floating_ip.rb +++ b/lib/fog/openstack/network/requests/disassociate_floating_ip.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def disassociate_floating_ip(floating_ip_id, options = {}) data = { @@ -28,13 +28,13 @@ def disassociate_floating_ip(_floating_ip_id, options = {}) response = Excon::Response.new response.status = 200 data = { - 'id' => '00000000-0000-0000-0000-000000000000', - 'router_id' => nil, - 'tenant_id' => options["tenant_id"], + 'id' => '00000000-0000-0000-0000-000000000000', + 'router_id' => nil, + 'tenant_id' => options["tenant_id"], 'floating_network_id' => options["floating_network_id"], - 'fixed_ip_address' => nil, + 'fixed_ip_address' => nil, 'floating_ip_address' => options["floating_ip_address"], - 'port_id' => options["port_id"] + 'port_id' => options["port_id"] } self.data[:floating_ips][data['floating_ip_id']] = data diff --git a/lib/fog/network/openstack/requests/disassociate_lb_health_monitor.rb b/lib/fog/openstack/network/requests/disassociate_lb_health_monitor.rb similarity index 89% rename from lib/fog/network/openstack/requests/disassociate_lb_health_monitor.rb rename to lib/fog/openstack/network/requests/disassociate_lb_health_monitor.rb index 60705a984..d864d9bbf 100644 --- a/lib/fog/network/openstack/requests/disassociate_lb_health_monitor.rb +++ b/lib/fog/openstack/network/requests/disassociate_lb_health_monitor.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def disassociate_lb_health_monitor(pool_id, health_monitor_id) request( @@ -20,7 +20,7 @@ def disassociate_lb_health_monitor(pool_id, health_monitor_id) response.status = 204 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_extension.rb b/lib/fog/openstack/network/requests/get_extension.rb similarity index 85% rename from lib/fog/network/openstack/requests/get_extension.rb rename to lib/fog/openstack/network/requests/get_extension.rb index 3a7966b13..897f61f96 100644 --- a/lib/fog/network/openstack/requests/get_extension.rb +++ b/lib/fog/openstack/network/requests/get_extension.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_extension(name) request( @@ -19,7 +19,7 @@ def get_extension(name) response.body = { 'extension' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/openstack/network/requests/get_floating_ip.rb b/lib/fog/openstack/network/requests/get_floating_ip.rb new file mode 100644 index 000000000..baac191dc --- /dev/null +++ b/lib/fog/openstack/network/requests/get_floating_ip.rb @@ -0,0 +1,39 @@ +module Fog + module OpenStack + class Network + class Real + def get_floating_ip(floating_ip_id) + request( + expects: [200], + method: 'GET', + path: "floatingips/#{floating_ip_id}" + ) + end + end + + class Mock + def get_floating_ip(floating_ip_id) + response = Excon::Response.new + if data = self.data[:floating_ips][floating_ip_id] + response.status = 200 + response.body = { + "floatingip" => { + "id" => "00000000-0000-0000-0000-000000000000", + # changed + # "floating_ip_id" => floating_ip_id, + "port_id" => data["port_id"], + "tenant_id" => data["tenant_id"], + "fixed_ip_address" => data["fixed_ip_address"], + "router_id" => "00000000-0000-0000-0000-000000000000", + "floating_ip_address" => data["floating_ip_address"] + } + } + response + else + raise Fog::OpenStack::Network::NotFound + end + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/get_ike_policy.rb b/lib/fog/openstack/network/requests/get_ike_policy.rb similarity index 86% rename from lib/fog/network/openstack/requests/get_ike_policy.rb rename to lib/fog/openstack/network/requests/get_ike_policy.rb index 064735d8b..c366a81d5 100644 --- a/lib/fog/network/openstack/requests/get_ike_policy.rb +++ b/lib/fog/openstack/network/requests/get_ike_policy.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_ike_policy(ike_policy_id) request( @@ -19,7 +19,7 @@ def get_ike_policy(ike_policy_id) response.body = { 'ikepolicy' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_ipsec_policy.rb b/lib/fog/openstack/network/requests/get_ipsec_policy.rb similarity index 86% rename from lib/fog/network/openstack/requests/get_ipsec_policy.rb rename to lib/fog/openstack/network/requests/get_ipsec_policy.rb index 576e664a5..688e25562 100644 --- a/lib/fog/network/openstack/requests/get_ipsec_policy.rb +++ b/lib/fog/openstack/network/requests/get_ipsec_policy.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_ipsec_policy(ipsec_policy_id) request( @@ -19,7 +19,7 @@ def get_ipsec_policy(ipsec_policy_id) response.body = { 'ipsecpolicy' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_ipsec_site_connection.rb b/lib/fog/openstack/network/requests/get_ipsec_site_connection.rb similarity index 88% rename from lib/fog/network/openstack/requests/get_ipsec_site_connection.rb rename to lib/fog/openstack/network/requests/get_ipsec_site_connection.rb index cefeae96a..7c06e01b3 100644 --- a/lib/fog/network/openstack/requests/get_ipsec_site_connection.rb +++ b/lib/fog/openstack/network/requests/get_ipsec_site_connection.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_ipsec_site_connection(ipsec_site_connection_id) request( @@ -19,7 +19,7 @@ def get_ipsec_site_connection(ipsec_site_connection_id) response.body = { 'ipsec_site_connection' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_lb_health_monitor.rb b/lib/fog/openstack/network/requests/get_lb_health_monitor.rb similarity index 87% rename from lib/fog/network/openstack/requests/get_lb_health_monitor.rb rename to lib/fog/openstack/network/requests/get_lb_health_monitor.rb index 08a8dfde0..3bc4dcada 100644 --- a/lib/fog/network/openstack/requests/get_lb_health_monitor.rb +++ b/lib/fog/openstack/network/requests/get_lb_health_monitor.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_lb_health_monitor(health_monitor_id) request( @@ -19,7 +19,7 @@ def get_lb_health_monitor(health_monitor_id) response.body = { 'health_monitor' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_lb_member.rb b/lib/fog/openstack/network/requests/get_lb_member.rb similarity index 85% rename from lib/fog/network/openstack/requests/get_lb_member.rb rename to lib/fog/openstack/network/requests/get_lb_member.rb index e13013014..d2285190d 100644 --- a/lib/fog/network/openstack/requests/get_lb_member.rb +++ b/lib/fog/openstack/network/requests/get_lb_member.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_lb_member(member_id) request( @@ -19,7 +19,7 @@ def get_lb_member(member_id) response.body = { 'member' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_lb_pool.rb b/lib/fog/openstack/network/requests/get_lb_pool.rb similarity index 85% rename from lib/fog/network/openstack/requests/get_lb_pool.rb rename to lib/fog/openstack/network/requests/get_lb_pool.rb index 773cc25d6..d3e2adff4 100644 --- a/lib/fog/network/openstack/requests/get_lb_pool.rb +++ b/lib/fog/openstack/network/requests/get_lb_pool.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_lb_pool(pool_id) request( @@ -19,7 +19,7 @@ def get_lb_pool(pool_id) response.body = { 'pool' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_lb_pool_stats.rb b/lib/fog/openstack/network/requests/get_lb_pool_stats.rb similarity index 82% rename from lib/fog/network/openstack/requests/get_lb_pool_stats.rb rename to lib/fog/openstack/network/requests/get_lb_pool_stats.rb index c1291e52a..8467da099 100644 --- a/lib/fog/network/openstack/requests/get_lb_pool_stats.rb +++ b/lib/fog/openstack/network/requests/get_lb_pool_stats.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_lb_pool_stats(pool_id) request( @@ -14,7 +14,7 @@ def get_lb_pool_stats(pool_id) class Mock def get_lb_pool_stats(pool_id) response = Excon::Response.new - if data = self.data[:lb_pools][pool_id] + if data[:lb_pools][pool_id] stats = {} stats["active_connections"] = 0 stats["bytes_in"] = 0 @@ -24,7 +24,7 @@ def get_lb_pool_stats(pool_id) response.body = { 'stats' => stats } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_lb_vip.rb b/lib/fog/openstack/network/requests/get_lb_vip.rb similarity index 85% rename from lib/fog/network/openstack/requests/get_lb_vip.rb rename to lib/fog/openstack/network/requests/get_lb_vip.rb index 8a91d061c..53cb8c56b 100644 --- a/lib/fog/network/openstack/requests/get_lb_vip.rb +++ b/lib/fog/openstack/network/requests/get_lb_vip.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_lb_vip(vip_id) request( @@ -19,7 +19,7 @@ def get_lb_vip(vip_id) response.body = { 'vip' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_lbaas_healthmonitor.rb b/lib/fog/openstack/network/requests/get_lbaas_healthmonitor.rb similarity index 87% rename from lib/fog/network/openstack/requests/get_lbaas_healthmonitor.rb rename to lib/fog/openstack/network/requests/get_lbaas_healthmonitor.rb index 8e6587315..d4b0c0292 100644 --- a/lib/fog/network/openstack/requests/get_lbaas_healthmonitor.rb +++ b/lib/fog/openstack/network/requests/get_lbaas_healthmonitor.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_lbaas_healthmonitor(healthmonitor_id) request( @@ -19,7 +19,7 @@ def get_lbaas_healthmonitor(healthmonitor_id) response.body = { 'healthmonitor' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_lbaas_l7policy.rb b/lib/fog/openstack/network/requests/get_lbaas_l7policy.rb similarity index 86% rename from lib/fog/network/openstack/requests/get_lbaas_l7policy.rb rename to lib/fog/openstack/network/requests/get_lbaas_l7policy.rb index 56ca53422..0879798fd 100644 --- a/lib/fog/network/openstack/requests/get_lbaas_l7policy.rb +++ b/lib/fog/openstack/network/requests/get_lbaas_l7policy.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_lbaas_l7policy(l7policy_id) request( @@ -19,7 +19,7 @@ def get_lbaas_l7policy(l7policy_id) response.body = { 'l7policy' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_lbaas_l7rule.rb b/lib/fog/openstack/network/requests/get_lbaas_l7rule.rb similarity index 87% rename from lib/fog/network/openstack/requests/get_lbaas_l7rule.rb rename to lib/fog/openstack/network/requests/get_lbaas_l7rule.rb index 5ce076aab..7385fdaf6 100644 --- a/lib/fog/network/openstack/requests/get_lbaas_l7rule.rb +++ b/lib/fog/openstack/network/requests/get_lbaas_l7rule.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_lbaas_l7rule(l7policy_id, l7rule_id) request( @@ -19,7 +19,7 @@ def get_lbaas_l7rule(_l7policy_id, l7rule_id) response.body = { 'rule' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_lbaas_listener.rb b/lib/fog/openstack/network/requests/get_lbaas_listener.rb similarity index 86% rename from lib/fog/network/openstack/requests/get_lbaas_listener.rb rename to lib/fog/openstack/network/requests/get_lbaas_listener.rb index c536e016f..c4c32fc74 100644 --- a/lib/fog/network/openstack/requests/get_lbaas_listener.rb +++ b/lib/fog/openstack/network/requests/get_lbaas_listener.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_lbaas_listener(listener_id) request( @@ -19,7 +19,7 @@ def get_lbaas_listener(listener_id) response.body = { 'listener' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_lbaas_loadbalancer.rb b/lib/fog/openstack/network/requests/get_lbaas_loadbalancer.rb similarity index 87% rename from lib/fog/network/openstack/requests/get_lbaas_loadbalancer.rb rename to lib/fog/openstack/network/requests/get_lbaas_loadbalancer.rb index 231f3e535..061446d1a 100644 --- a/lib/fog/network/openstack/requests/get_lbaas_loadbalancer.rb +++ b/lib/fog/openstack/network/requests/get_lbaas_loadbalancer.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_lbaas_loadbalancer(loadbalancer_id) request( @@ -19,7 +19,7 @@ def get_lbaas_loadbalancer(loadbalancer_id) response.body = { 'loadbalancer' => data[:lbaas_loadbalancer] } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_lbaas_pool.rb b/lib/fog/openstack/network/requests/get_lbaas_pool.rb similarity index 85% rename from lib/fog/network/openstack/requests/get_lbaas_pool.rb rename to lib/fog/openstack/network/requests/get_lbaas_pool.rb index 2d7f1b31a..c84e512b5 100644 --- a/lib/fog/network/openstack/requests/get_lbaas_pool.rb +++ b/lib/fog/openstack/network/requests/get_lbaas_pool.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_lbaas_pool(pool_id) request( @@ -19,7 +19,7 @@ def get_lbaas_pool(pool_id) response.body = { 'pool' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_lbaas_pool_member.rb b/lib/fog/openstack/network/requests/get_lbaas_pool_member.rb similarity index 87% rename from lib/fog/network/openstack/requests/get_lbaas_pool_member.rb rename to lib/fog/openstack/network/requests/get_lbaas_pool_member.rb index c43242b9b..8af45cd44 100644 --- a/lib/fog/network/openstack/requests/get_lbaas_pool_member.rb +++ b/lib/fog/openstack/network/requests/get_lbaas_pool_member.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_lbaas_pool_member(pool_id, member_id) request( @@ -19,7 +19,7 @@ def get_lbaas_pool_member(_pool_id, member_id) response.body = { 'member' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_network.rb b/lib/fog/openstack/network/requests/get_network.rb similarity index 85% rename from lib/fog/network/openstack/requests/get_network.rb rename to lib/fog/openstack/network/requests/get_network.rb index ca54eb65d..b9fd960a4 100644 --- a/lib/fog/network/openstack/requests/get_network.rb +++ b/lib/fog/openstack/network/requests/get_network.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_network(network_id) request( @@ -19,7 +19,7 @@ def get_network(network_id) response.body = { 'network' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_network_ip_availability.rb b/lib/fog/openstack/network/requests/get_network_ip_availability.rb similarity index 87% rename from lib/fog/network/openstack/requests/get_network_ip_availability.rb rename to lib/fog/openstack/network/requests/get_network_ip_availability.rb index aa0b06ea5..f79039a6b 100644 --- a/lib/fog/network/openstack/requests/get_network_ip_availability.rb +++ b/lib/fog/openstack/network/requests/get_network_ip_availability.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_network_ip_availability(network_id) request( @@ -19,7 +19,7 @@ def get_network_ip_availability(_network_id) response.body = { 'network_ip_availability' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/openstack/network/requests/get_port.rb b/lib/fog/openstack/network/requests/get_port.rb new file mode 100644 index 000000000..83d6f4c46 --- /dev/null +++ b/lib/fog/openstack/network/requests/get_port.rb @@ -0,0 +1,28 @@ +module Fog + module OpenStack + class Network + class Real + def get_port(port_id) + request( + expects: [200], + method: 'GET', + path: "ports/#{port_id}" + ) + end + end + + class Mock + def get_port(port_id) + response = Excon::Response.new + if data = self.data[:ports][port_id] + response.status = 200 + response.body = { 'port' => data } + response + else + raise Fog::OpenStack::Network::NotFound + end + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/get_quota.rb b/lib/fog/openstack/network/requests/get_quota.rb new file mode 100644 index 000000000..573a67164 --- /dev/null +++ b/lib/fog/openstack/network/requests/get_quota.rb @@ -0,0 +1,26 @@ +module Fog + module OpenStack + class Network + class Real + def get_quota(tenant_id) + request( + expects: 200, + method: 'GET', + path: "/quotas/#{tenant_id}" + ) + end + end + + class Mock + def get_quota(_tenant_id) + response = Excon::Response.new + response.status = 200 + response.body = { + 'quota' => (data[:quota_updated] || data[:quota]) + } + response + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/get_quotas.rb b/lib/fog/openstack/network/requests/get_quotas.rb similarity index 92% rename from lib/fog/network/openstack/requests/get_quotas.rb rename to lib/fog/openstack/network/requests/get_quotas.rb index 28e471c9d..4ae1e8795 100644 --- a/lib/fog/network/openstack/requests/get_quotas.rb +++ b/lib/fog/openstack/network/requests/get_quotas.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_quotas request( diff --git a/lib/fog/network/openstack/requests/get_rbac_policy.rb b/lib/fog/openstack/network/requests/get_rbac_policy.rb similarity index 86% rename from lib/fog/network/openstack/requests/get_rbac_policy.rb rename to lib/fog/openstack/network/requests/get_rbac_policy.rb index f862dd1bd..982dcc6ee 100644 --- a/lib/fog/network/openstack/requests/get_rbac_policy.rb +++ b/lib/fog/openstack/network/requests/get_rbac_policy.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_rbac_policy(rbac_policy_id) request( @@ -19,7 +19,7 @@ def get_rbac_policy(rbac_policy_id) response.body = { 'rbac_policy' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_router.rb b/lib/fog/openstack/network/requests/get_router.rb similarity index 86% rename from lib/fog/network/openstack/requests/get_router.rb rename to lib/fog/openstack/network/requests/get_router.rb index fc8371e37..303fb7122 100644 --- a/lib/fog/network/openstack/requests/get_router.rb +++ b/lib/fog/openstack/network/requests/get_router.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_router(router_id) request( @@ -21,7 +21,7 @@ def get_router(router_id) } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/openstack/network/requests/get_security_group.rb b/lib/fog/openstack/network/requests/get_security_group.rb new file mode 100644 index 000000000..20952ecd6 --- /dev/null +++ b/lib/fog/openstack/network/requests/get_security_group.rb @@ -0,0 +1,52 @@ +module Fog + module OpenStack + class Network + class Real + # Get details about a security group + # + # ==== Parameters + # * 'security_group_id'<~String> - UUID of the security group + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'security_group'<~Array>: + # * 'id'<~String> - UUID of the security group + # * 'name'<~String> - Name of the security group + # * 'description'<~String> - Description of the security group + # * 'tenant_id'<~String> - Tenant id that owns the security group + # * 'security_group_rules'<~Array>: - Array of security group rules + # * 'id'<~String> - UUID of the security group rule + # * 'direction'<~String> - Direction of traffic, must be in ['ingress', 'egress'] + # * 'port_range_min'<~Integer> - Start port for rule i.e. 22 (or -1 for ICMP wildcard) + # * 'port_range_max'<~Integer> - End port for rule i.e. 22 (or -1 for ICMP wildcard) + # * 'protocol'<~String> - IP protocol for rule, must be in ['tcp', 'udp', 'icmp'] + # * 'ethertype'<~String> - Type of ethernet support, must be in ['IPv4', 'IPv6'] + # * 'security_group_id'<~String> - UUID of the parent security group + # * 'remote_group_id'<~String> - UUID of the remote security group + # * 'remote_ip_prefix'<~String> - IP cidr range address i.e. '0.0.0.0/0' + # * 'tenant_id'<~String> - Tenant id that owns the security group rule + def get_security_group(security_group_id) + request( + expects: 200, + method: "GET", + path: "security-groups/#{security_group_id}" + ) + end + end + + class Mock + def get_security_group(security_group_id) + response = Excon::Response.new + if sec_group = data[:security_groups][security_group_id] + response.status = 200 + response.body = { "security_group" => sec_group } + response + else + raise Fog::OpenStack::Network::NotFound + end + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/get_security_group_rule.rb b/lib/fog/openstack/network/requests/get_security_group_rule.rb new file mode 100644 index 000000000..0d74a55fc --- /dev/null +++ b/lib/fog/openstack/network/requests/get_security_group_rule.rb @@ -0,0 +1,47 @@ +module Fog + module OpenStack + class Network + class Real + # Get details about a security group rule + # + # ==== Parameters + # * 'security_group_rule_id'<~String> - UUID of the security group rule + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'security_group_rule'<~Hash>: + # * 'id'<~String> - UUID of the security group rule + # * 'direction'<~String> - Direction of traffic, must be in ['ingress', 'egress'] + # * 'port_range_min'<~Integer> - Start port for rule i.e. 22 (or -1 for ICMP wildcard) + # * 'port_range_max'<~Integer> - End port for rule i.e. 22 (or -1 for ICMP wildcard) + # * 'protocol'<~String> - IP protocol for rule, must be in ['tcp', 'udp', 'icmp'] + # * 'ethertype'<~String> - Type of ethernet support, must be in ['IPv4', 'IPv6'] + # * 'security_group_id'<~String> - UUID of the parent security group + # * 'remote_group_id'<~String> - UUID of the remote security group + # * 'remote_ip_prefix'<~String> - IP cidr range address i.e. '0.0.0.0/0' + # * 'tenant_id'<~String> - Tenant id that owns the security group rule + def get_security_group_rule(security_group_rule_id) + request( + expects: 200, + method: "GET", + path: "security-group-rules/#{security_group_rule_id}" + ) + end + end + + class Mock + def get_security_group_rule(security_group_rule_id) + response = Excon::Response.new + if sec_group_rule = data[:security_group_rules][security_group_rule_id] + response.status = 200 + response.body = { "security_group_rule" => sec_group_rule } + response + else + raise Fog::OpenStack::Network::NotFound + end + end + end + end + end +end diff --git a/lib/fog/openstack/network/requests/get_subnet.rb b/lib/fog/openstack/network/requests/get_subnet.rb new file mode 100644 index 000000000..e6124a88b --- /dev/null +++ b/lib/fog/openstack/network/requests/get_subnet.rb @@ -0,0 +1,30 @@ +module Fog + module OpenStack + class Network + class Real + def get_subnet(subnet_id) + request( + expects: [200], + method: 'GET', + path: "subnets/#{subnet_id}" + ) + end + end + + class Mock + def get_subnet(subnet_id) + response = Excon::Response.new + if data = self.data[:subnets][subnet_id] + response.status = 200 + response.body = { + "subnet" => data + } + response + else + raise Fog::OpenStack::Network::NotFound + end + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/get_subnet_pool.rb b/lib/fog/openstack/network/requests/get_subnet_pool.rb similarity index 86% rename from lib/fog/network/openstack/requests/get_subnet_pool.rb rename to lib/fog/openstack/network/requests/get_subnet_pool.rb index 042b8e564..e95381338 100644 --- a/lib/fog/network/openstack/requests/get_subnet_pool.rb +++ b/lib/fog/openstack/network/requests/get_subnet_pool.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_subnet_pool(subnet_pool_id) request( @@ -20,7 +20,7 @@ def get_subnet_pool(subnet_pool_id) response.body = { 'subnetpool' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/get_vpn_service.rb b/lib/fog/openstack/network/requests/get_vpn_service.rb similarity index 86% rename from lib/fog/network/openstack/requests/get_vpn_service.rb rename to lib/fog/openstack/network/requests/get_vpn_service.rb index 45972a8da..048640287 100644 --- a/lib/fog/network/openstack/requests/get_vpn_service.rb +++ b/lib/fog/openstack/network/requests/get_vpn_service.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def get_vpn_service(vpn_service_id) request( @@ -19,7 +19,7 @@ def get_vpn_service(vpn_service_id) response.body = { 'vpnservice' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/list_extensions.rb b/lib/fog/openstack/network/requests/list_extensions.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_extensions.rb rename to lib/fog/openstack/network/requests/list_extensions.rb index caf74a995..240f0033f 100644 --- a/lib/fog/network/openstack/requests/list_extensions.rb +++ b/lib/fog/openstack/network/requests/list_extensions.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_extensions(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_floating_ips.rb b/lib/fog/openstack/network/requests/list_floating_ips.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_floating_ips.rb rename to lib/fog/openstack/network/requests/list_floating_ips.rb index e3ab75319..4a13d104f 100644 --- a/lib/fog/network/openstack/requests/list_floating_ips.rb +++ b/lib/fog/openstack/network/requests/list_floating_ips.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_floating_ips(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_ike_policies.rb b/lib/fog/openstack/network/requests/list_ike_policies.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_ike_policies.rb rename to lib/fog/openstack/network/requests/list_ike_policies.rb index 5a6474947..e2da0ffa3 100644 --- a/lib/fog/network/openstack/requests/list_ike_policies.rb +++ b/lib/fog/openstack/network/requests/list_ike_policies.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_ike_policies(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_ipsec_policies.rb b/lib/fog/openstack/network/requests/list_ipsec_policies.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_ipsec_policies.rb rename to lib/fog/openstack/network/requests/list_ipsec_policies.rb index 303064fe5..5a736d4c4 100644 --- a/lib/fog/network/openstack/requests/list_ipsec_policies.rb +++ b/lib/fog/openstack/network/requests/list_ipsec_policies.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_ipsec_policies(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_ipsec_site_connections.rb b/lib/fog/openstack/network/requests/list_ipsec_site_connections.rb similarity index 93% rename from lib/fog/network/openstack/requests/list_ipsec_site_connections.rb rename to lib/fog/openstack/network/requests/list_ipsec_site_connections.rb index 59bdc134c..d0fd467f8 100644 --- a/lib/fog/network/openstack/requests/list_ipsec_site_connections.rb +++ b/lib/fog/openstack/network/requests/list_ipsec_site_connections.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_ipsec_site_connections(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_lb_health_monitors.rb b/lib/fog/openstack/network/requests/list_lb_health_monitors.rb similarity index 93% rename from lib/fog/network/openstack/requests/list_lb_health_monitors.rb rename to lib/fog/openstack/network/requests/list_lb_health_monitors.rb index e155f6e0b..043f2313a 100644 --- a/lib/fog/network/openstack/requests/list_lb_health_monitors.rb +++ b/lib/fog/openstack/network/requests/list_lb_health_monitors.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_lb_health_monitors(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_lb_members.rb b/lib/fog/openstack/network/requests/list_lb_members.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_lb_members.rb rename to lib/fog/openstack/network/requests/list_lb_members.rb index c0a2df4ee..45a66fcfb 100644 --- a/lib/fog/network/openstack/requests/list_lb_members.rb +++ b/lib/fog/openstack/network/requests/list_lb_members.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_lb_members(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_lb_pools.rb b/lib/fog/openstack/network/requests/list_lb_pools.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_lb_pools.rb rename to lib/fog/openstack/network/requests/list_lb_pools.rb index 7fc26094f..031b77c42 100644 --- a/lib/fog/network/openstack/requests/list_lb_pools.rb +++ b/lib/fog/openstack/network/requests/list_lb_pools.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_lb_pools(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_lb_vips.rb b/lib/fog/openstack/network/requests/list_lb_vips.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_lb_vips.rb rename to lib/fog/openstack/network/requests/list_lb_vips.rb index 1236a61fd..b73df0a8f 100644 --- a/lib/fog/network/openstack/requests/list_lb_vips.rb +++ b/lib/fog/openstack/network/requests/list_lb_vips.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_lb_vips(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_lbaas_healthmonitors.rb b/lib/fog/openstack/network/requests/list_lbaas_healthmonitors.rb similarity index 93% rename from lib/fog/network/openstack/requests/list_lbaas_healthmonitors.rb rename to lib/fog/openstack/network/requests/list_lbaas_healthmonitors.rb index c65fd9a73..1fda26e54 100644 --- a/lib/fog/network/openstack/requests/list_lbaas_healthmonitors.rb +++ b/lib/fog/openstack/network/requests/list_lbaas_healthmonitors.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_lbaas_healthmonitors(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_lbaas_l7policies.rb b/lib/fog/openstack/network/requests/list_lbaas_l7policies.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_lbaas_l7policies.rb rename to lib/fog/openstack/network/requests/list_lbaas_l7policies.rb index 752bc11cc..5a4ebc382 100644 --- a/lib/fog/network/openstack/requests/list_lbaas_l7policies.rb +++ b/lib/fog/openstack/network/requests/list_lbaas_l7policies.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_lbaas_l7policies(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_lbaas_l7rules.rb b/lib/fog/openstack/network/requests/list_lbaas_l7rules.rb similarity index 93% rename from lib/fog/network/openstack/requests/list_lbaas_l7rules.rb rename to lib/fog/openstack/network/requests/list_lbaas_l7rules.rb index 390dd951c..b39172d6e 100644 --- a/lib/fog/network/openstack/requests/list_lbaas_l7rules.rb +++ b/lib/fog/openstack/network/requests/list_lbaas_l7rules.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_lbaas_l7rules(l7policy_id, filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_lbaas_listeners.rb b/lib/fog/openstack/network/requests/list_lbaas_listeners.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_lbaas_listeners.rb rename to lib/fog/openstack/network/requests/list_lbaas_listeners.rb index 1836f1bfa..54649f5d6 100644 --- a/lib/fog/network/openstack/requests/list_lbaas_listeners.rb +++ b/lib/fog/openstack/network/requests/list_lbaas_listeners.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_lbaas_listeners(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_lbaas_loadbalancers.rb b/lib/fog/openstack/network/requests/list_lbaas_loadbalancers.rb similarity index 93% rename from lib/fog/network/openstack/requests/list_lbaas_loadbalancers.rb rename to lib/fog/openstack/network/requests/list_lbaas_loadbalancers.rb index 993a7eedc..5632ef768 100644 --- a/lib/fog/network/openstack/requests/list_lbaas_loadbalancers.rb +++ b/lib/fog/openstack/network/requests/list_lbaas_loadbalancers.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_lbaas_loadbalancers(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_lbaas_pool_members.rb b/lib/fog/openstack/network/requests/list_lbaas_pool_members.rb similarity index 93% rename from lib/fog/network/openstack/requests/list_lbaas_pool_members.rb rename to lib/fog/openstack/network/requests/list_lbaas_pool_members.rb index 325f3dd44..dacb1e3a0 100644 --- a/lib/fog/network/openstack/requests/list_lbaas_pool_members.rb +++ b/lib/fog/openstack/network/requests/list_lbaas_pool_members.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_lbaas_pool_members(pool_id, filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_lbaas_pools.rb b/lib/fog/openstack/network/requests/list_lbaas_pools.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_lbaas_pools.rb rename to lib/fog/openstack/network/requests/list_lbaas_pools.rb index c33e55273..2ce3d97d1 100644 --- a/lib/fog/network/openstack/requests/list_lbaas_pools.rb +++ b/lib/fog/openstack/network/requests/list_lbaas_pools.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_lbaas_pools(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_network_ip_availabilities.rb b/lib/fog/openstack/network/requests/list_network_ip_availabilities.rb similarity index 86% rename from lib/fog/network/openstack/requests/list_network_ip_availabilities.rb rename to lib/fog/openstack/network/requests/list_network_ip_availabilities.rb index b832f001e..0c1ef1599 100644 --- a/lib/fog/network/openstack/requests/list_network_ip_availabilities.rb +++ b/lib/fog/openstack/network/requests/list_network_ip_availabilities.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_network_ip_availabilities request( @@ -19,7 +19,7 @@ def list_network_ip_availabilities response.body = { 'network_ip_availabilities' => data } response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/list_networks.rb b/lib/fog/openstack/network/requests/list_networks.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_networks.rb rename to lib/fog/openstack/network/requests/list_networks.rb index 1c6bddabf..9f9ffd4f8 100644 --- a/lib/fog/network/openstack/requests/list_networks.rb +++ b/lib/fog/openstack/network/requests/list_networks.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_networks(filters = {}) request( diff --git a/lib/fog/openstack/network/requests/list_ports.rb b/lib/fog/openstack/network/requests/list_ports.rb new file mode 100644 index 000000000..fb03cf643 --- /dev/null +++ b/lib/fog/openstack/network/requests/list_ports.rb @@ -0,0 +1,25 @@ +module Fog + module OpenStack + class Network + class Real + def list_ports(filters = {}) + request( + expects: 200, + method: 'GET', + path: 'ports', + query: filters + ) + end + end + + class Mock + def list_ports(_filters = {}) + Excon::Response.new( + body: { 'ports' => data[:ports].values }, + status: 200 + ) + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/list_rbac_policies.rb b/lib/fog/openstack/network/requests/list_rbac_policies.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_rbac_policies.rb rename to lib/fog/openstack/network/requests/list_rbac_policies.rb index f1d5fc100..d9369c8d8 100644 --- a/lib/fog/network/openstack/requests/list_rbac_policies.rb +++ b/lib/fog/openstack/network/requests/list_rbac_policies.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_rbac_policies(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_routers.rb b/lib/fog/openstack/network/requests/list_routers.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_routers.rb rename to lib/fog/openstack/network/requests/list_routers.rb index af59062f5..d7e10672a 100644 --- a/lib/fog/network/openstack/requests/list_routers.rb +++ b/lib/fog/openstack/network/requests/list_routers.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_routers(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_security_group_rules.rb b/lib/fog/openstack/network/requests/list_security_group_rules.rb similarity index 97% rename from lib/fog/network/openstack/requests/list_security_group_rules.rb rename to lib/fog/openstack/network/requests/list_security_group_rules.rb index be15f624e..4c01fc924 100644 --- a/lib/fog/network/openstack/requests/list_security_group_rules.rb +++ b/lib/fog/openstack/network/requests/list_security_group_rules.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real # List all security group rules # diff --git a/lib/fog/openstack/network/requests/list_security_groups.rb b/lib/fog/openstack/network/requests/list_security_groups.rb new file mode 100644 index 000000000..87e44eb55 --- /dev/null +++ b/lib/fog/openstack/network/requests/list_security_groups.rb @@ -0,0 +1,53 @@ +module Fog + module OpenStack + class Network + class Real + # List all security groups + # + # ==== Parameters + # * options<~Hash>: + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash>: + # * 'security_groups'<~Array>: + # * 'id'<~String> - UUID of the security group + # * 'name'<~String> - Name of the security group + # * 'description'<~String> - Description of the security group + # * 'tenant_id'<~String> - Tenant id that owns the security group + # * 'security_group_rules'<~Array>: - Array of security group rules + # * 'id'<~String> - UUID of the security group rule + # * 'direction'<~String> - Direction of traffic, must be in ['ingress', 'egress'] + # * 'port_range_min'<~Integer> - Start port for rule i.e. 22 (or -1 for ICMP wildcard) + # * 'port_range_max'<~Integer> - End port for rule i.e. 22 (or -1 for ICMP wildcard) + # * 'protocol'<~String> - IP protocol for rule, must be in ['tcp', 'udp', 'icmp'] + # * 'ethertype'<~String> - Type of ethernet support, must be in ['IPv4', 'IPv6'] + # * 'security_group_id'<~String> - UUID of the parent security group + # * 'remote_group_id'<~String> - UUID of the remote security group + # * 'remote_ip_prefix'<~String> - IP cidr range address i.e. '0.0.0.0/0' + # * 'tenant_id'<~String> - Tenant id that owns the security group rule + def list_security_groups(options = {}) + request( + expects: 200, + method: 'GET', + path: 'security-groups', + query: options + ) + end + end + + class Mock + def list_security_groups(_options = {}) + response = Excon::Response.new + + sec_groups = [] + sec_groups = data[:security_groups].values unless data[:security_groups].nil? + + response.status = 200 + response.body = { 'security_groups' => sec_groups } + response + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/list_subnet_pools.rb b/lib/fog/openstack/network/requests/list_subnet_pools.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_subnet_pools.rb rename to lib/fog/openstack/network/requests/list_subnet_pools.rb index cfb9782de..b598121ad 100644 --- a/lib/fog/network/openstack/requests/list_subnet_pools.rb +++ b/lib/fog/openstack/network/requests/list_subnet_pools.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_subnet_pools(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_subnets.rb b/lib/fog/openstack/network/requests/list_subnets.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_subnets.rb rename to lib/fog/openstack/network/requests/list_subnets.rb index ac6f32d02..7828e72bd 100644 --- a/lib/fog/network/openstack/requests/list_subnets.rb +++ b/lib/fog/openstack/network/requests/list_subnets.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_subnets(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/list_vpn_services.rb b/lib/fog/openstack/network/requests/list_vpn_services.rb similarity index 92% rename from lib/fog/network/openstack/requests/list_vpn_services.rb rename to lib/fog/openstack/network/requests/list_vpn_services.rb index 2f929a7d7..76489d93d 100644 --- a/lib/fog/network/openstack/requests/list_vpn_services.rb +++ b/lib/fog/openstack/network/requests/list_vpn_services.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def list_vpn_services(filters = {}) request( diff --git a/lib/fog/network/openstack/requests/remove_router_interface.rb b/lib/fog/openstack/network/requests/remove_router_interface.rb similarity index 95% rename from lib/fog/network/openstack/requests/remove_router_interface.rb rename to lib/fog/openstack/network/requests/remove_router_interface.rb index 46102cb0d..3a6d8cdb9 100644 --- a/lib/fog/network/openstack/requests/remove_router_interface.rb +++ b/lib/fog/openstack/network/requests/remove_router_interface.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def remove_router_interface(router_id, subnet_id, _options = {}) data = { diff --git a/lib/fog/openstack/network/requests/set_tenant.rb b/lib/fog/openstack/network/requests/set_tenant.rb new file mode 100644 index 000000000..805f37521 --- /dev/null +++ b/lib/fog/openstack/network/requests/set_tenant.rb @@ -0,0 +1,19 @@ +module Fog + module OpenStack + class Network + class Real + def set_tenant(tenant) + @openstack_must_reauthenticate = true + @openstack_tenant = tenant.to_s + authenticate + end + end + + class Mock + def set_tenant(_tenant) + true + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/update_ike_policy.rb b/lib/fog/openstack/network/requests/update_ike_policy.rb similarity index 95% rename from lib/fog/network/openstack/requests/update_ike_policy.rb rename to lib/fog/openstack/network/requests/update_ike_policy.rb index 2b69c08e0..a6235f71a 100644 --- a/lib/fog/network/openstack/requests/update_ike_policy.rb +++ b/lib/fog/openstack/network/requests/update_ike_policy.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_ike_policy(ike_policy_id, options = {}) data = { 'ikepolicy' => {} } @@ -39,7 +39,7 @@ def update_ike_policy(ike_policy_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_ipsec_policy.rb b/lib/fog/openstack/network/requests/update_ipsec_policy.rb similarity index 95% rename from lib/fog/network/openstack/requests/update_ipsec_policy.rb rename to lib/fog/openstack/network/requests/update_ipsec_policy.rb index db04aa55f..58a4e9191 100644 --- a/lib/fog/network/openstack/requests/update_ipsec_policy.rb +++ b/lib/fog/openstack/network/requests/update_ipsec_policy.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_ipsec_policy(ipsec_policy_id, options = {}) data = { 'ipsecpolicy' => {} } @@ -42,7 +42,7 @@ def update_ipsec_policy(ipsec_policy_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_ipsec_site_connection.rb b/lib/fog/openstack/network/requests/update_ipsec_site_connection.rb similarity index 97% rename from lib/fog/network/openstack/requests/update_ipsec_site_connection.rb rename to lib/fog/openstack/network/requests/update_ipsec_site_connection.rb index e848f31dd..7d64724ea 100644 --- a/lib/fog/network/openstack/requests/update_ipsec_site_connection.rb +++ b/lib/fog/openstack/network/requests/update_ipsec_site_connection.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_ipsec_site_connection(ipsec_site_connection_id, options = {}) data = { 'ipsec_site_connection' => {} } @@ -54,7 +54,7 @@ def update_ipsec_site_connection(ipsec_site_connection_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_lb_health_monitor.rb b/lib/fog/openstack/network/requests/update_lb_health_monitor.rb similarity index 94% rename from lib/fog/network/openstack/requests/update_lb_health_monitor.rb rename to lib/fog/openstack/network/requests/update_lb_health_monitor.rb index f5d2446b0..991a703c8 100644 --- a/lib/fog/network/openstack/requests/update_lb_health_monitor.rb +++ b/lib/fog/openstack/network/requests/update_lb_health_monitor.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_lb_health_monitor(health_monitor_id, options = {}) data = { 'health_monitor' => {} } @@ -34,7 +34,7 @@ def update_lb_health_monitor(health_monitor_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_lb_member.rb b/lib/fog/openstack/network/requests/update_lb_member.rb similarity index 92% rename from lib/fog/network/openstack/requests/update_lb_member.rb rename to lib/fog/openstack/network/requests/update_lb_member.rb index cc6ea7241..68c66ee9f 100644 --- a/lib/fog/network/openstack/requests/update_lb_member.rb +++ b/lib/fog/openstack/network/requests/update_lb_member.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_lb_member(member_id, options = {}) data = { 'member' => {} } @@ -30,7 +30,7 @@ def update_lb_member(member_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_lb_pool.rb b/lib/fog/openstack/network/requests/update_lb_pool.rb similarity index 92% rename from lib/fog/network/openstack/requests/update_lb_pool.rb rename to lib/fog/openstack/network/requests/update_lb_pool.rb index 9071c4772..2e8116d69 100644 --- a/lib/fog/network/openstack/requests/update_lb_pool.rb +++ b/lib/fog/openstack/network/requests/update_lb_pool.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_lb_pool(pool_id, options = {}) data = { 'pool' => {} } @@ -31,7 +31,7 @@ def update_lb_pool(pool_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_lb_vip.rb b/lib/fog/openstack/network/requests/update_lb_vip.rb similarity index 93% rename from lib/fog/network/openstack/requests/update_lb_vip.rb rename to lib/fog/openstack/network/requests/update_lb_vip.rb index fa59a7cf1..c9e5ef9fb 100644 --- a/lib/fog/network/openstack/requests/update_lb_vip.rb +++ b/lib/fog/openstack/network/requests/update_lb_vip.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_lb_vip(vip_id, options = {}) data = { 'vip' => {} } @@ -33,7 +33,7 @@ def update_lb_vip(vip_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_lbaas_healthmonitor.rb b/lib/fog/openstack/network/requests/update_lbaas_healthmonitor.rb similarity index 94% rename from lib/fog/network/openstack/requests/update_lbaas_healthmonitor.rb rename to lib/fog/openstack/network/requests/update_lbaas_healthmonitor.rb index 126cf2011..90f8e581a 100644 --- a/lib/fog/network/openstack/requests/update_lbaas_healthmonitor.rb +++ b/lib/fog/openstack/network/requests/update_lbaas_healthmonitor.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_lbaas_healthmonitor(healthmonitor_id, options = {}) data = { 'healthmonitor' => {} } @@ -34,7 +34,7 @@ def update_lbaas_healthmonitor(healthmonitor_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_lbaas_l7policy.rb b/lib/fog/openstack/network/requests/update_lbaas_l7policy.rb similarity index 93% rename from lib/fog/network/openstack/requests/update_lbaas_l7policy.rb rename to lib/fog/openstack/network/requests/update_lbaas_l7policy.rb index c1e90b662..e0b66924c 100644 --- a/lib/fog/network/openstack/requests/update_lbaas_l7policy.rb +++ b/lib/fog/openstack/network/requests/update_lbaas_l7policy.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_lbaas_l7policy(l7policy_id, options = {}) data = { 'l7policy' => {} } @@ -33,7 +33,7 @@ def update_lbaas_l7rule(l7policy_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_lbaas_l7rule.rb b/lib/fog/openstack/network/requests/update_lbaas_l7rule.rb similarity index 93% rename from lib/fog/network/openstack/requests/update_lbaas_l7rule.rb rename to lib/fog/openstack/network/requests/update_lbaas_l7rule.rb index 6b2904fcf..de6582662 100644 --- a/lib/fog/network/openstack/requests/update_lbaas_l7rule.rb +++ b/lib/fog/openstack/network/requests/update_lbaas_l7rule.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_lbaas_l7rule(l7policy_id, l7rule_id, options = {}) data = { 'rule' => {} } @@ -32,7 +32,7 @@ def update_lbaas_l7rule(_l7policy_id, l7rule_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_lbaas_listener.rb b/lib/fog/openstack/network/requests/update_lbaas_listener.rb similarity index 94% rename from lib/fog/network/openstack/requests/update_lbaas_listener.rb rename to lib/fog/openstack/network/requests/update_lbaas_listener.rb index 9b7ef0780..5cb9540f2 100644 --- a/lib/fog/network/openstack/requests/update_lbaas_listener.rb +++ b/lib/fog/openstack/network/requests/update_lbaas_listener.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_lbaas_listener(listener_id, options = {}) data = { 'listener' => {} } @@ -34,7 +34,7 @@ def update_lbaas_listener(listener_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_lbaas_loadbalancer.rb b/lib/fog/openstack/network/requests/update_lbaas_loadbalancer.rb similarity index 93% rename from lib/fog/network/openstack/requests/update_lbaas_loadbalancer.rb rename to lib/fog/openstack/network/requests/update_lbaas_loadbalancer.rb index ac2d2e61c..9c61507a7 100644 --- a/lib/fog/network/openstack/requests/update_lbaas_loadbalancer.rb +++ b/lib/fog/openstack/network/requests/update_lbaas_loadbalancer.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_lbaas_loadbalancer(loadbalancer_id, options = {}) data = { @@ -32,7 +32,7 @@ def update_lbaas_loadbalancer(loadbalancer_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_lbaas_pool.rb b/lib/fog/openstack/network/requests/update_lbaas_pool.rb similarity index 92% rename from lib/fog/network/openstack/requests/update_lbaas_pool.rb rename to lib/fog/openstack/network/requests/update_lbaas_pool.rb index d63f97f0e..2eb26adff 100644 --- a/lib/fog/network/openstack/requests/update_lbaas_pool.rb +++ b/lib/fog/openstack/network/requests/update_lbaas_pool.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_lbaas_pool(pool_id, options = {}) data = { 'pool' => {} } @@ -31,7 +31,7 @@ def update_lbaas_pool(pool_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_lbaas_pool_member.rb b/lib/fog/openstack/network/requests/update_lbaas_pool_member.rb similarity index 92% rename from lib/fog/network/openstack/requests/update_lbaas_pool_member.rb rename to lib/fog/openstack/network/requests/update_lbaas_pool_member.rb index f3ade70be..94d155f9b 100644 --- a/lib/fog/network/openstack/requests/update_lbaas_pool_member.rb +++ b/lib/fog/openstack/network/requests/update_lbaas_pool_member.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_lbaas_pool_member(pool_id, member_id, options = {}) data = { 'member' => {} } @@ -30,7 +30,7 @@ def update_lbaas_pool_member(_pool_id, member_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_network.rb b/lib/fog/openstack/network/requests/update_network.rb similarity index 90% rename from lib/fog/network/openstack/requests/update_network.rb rename to lib/fog/openstack/network/requests/update_network.rb index 2c31b94bc..d03e87970 100644 --- a/lib/fog/network/openstack/requests/update_network.rb +++ b/lib/fog/openstack/network/requests/update_network.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real # Not all options can be updated UPDATE_OPTIONS = [ @@ -44,12 +44,12 @@ class Mock def update_network(network_id, options = {}) response = Excon::Response.new if network = list_networks.body['networks'].find { |_| _['id'] == network_id } - network.merge!(Fog::Network::OpenStack::Real.update(options)) + network.merge!(Fog::OpenStack::Network::Real.update(options)) response.body = { 'network' => network } response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_port.rb b/lib/fog/openstack/network/requests/update_port.rb similarity index 94% rename from lib/fog/network/openstack/requests/update_port.rb rename to lib/fog/openstack/network/requests/update_port.rb index bd84a0e79..5fa9bdf15 100644 --- a/lib/fog/network/openstack/requests/update_port.rb +++ b/lib/fog/openstack/network/requests/update_port.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_port(port_id, options = {}) data = { 'port' => {} } @@ -35,7 +35,7 @@ def update_port(port_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/openstack/network/requests/update_quota.rb b/lib/fog/openstack/network/requests/update_quota.rb new file mode 100644 index 000000000..13c6cb153 --- /dev/null +++ b/lib/fog/openstack/network/requests/update_quota.rb @@ -0,0 +1,27 @@ +module Fog + module OpenStack + class Network + class Real + def update_quota(tenant_id, options = {}) + request( + body: Fog::JSON.encode('quota' => options), + expects: 200, + method: 'PUT', + path: "/quotas/#{tenant_id}" + ) + end + end + + class Mock + def update_quota(_tenant_id, options = {}) + data[:quota_updated] = data[:quota].merge options + + response = Excon::Response.new + response.status = 200 + response.body = { 'quota' => data[:quota_updated] } + response + end + end + end + end +end diff --git a/lib/fog/network/openstack/requests/update_rbac_policy.rb b/lib/fog/openstack/network/requests/update_rbac_policy.rb similarity index 92% rename from lib/fog/network/openstack/requests/update_rbac_policy.rb rename to lib/fog/openstack/network/requests/update_rbac_policy.rb index 6175a1a04..03c159442 100644 --- a/lib/fog/network/openstack/requests/update_rbac_policy.rb +++ b/lib/fog/openstack/network/requests/update_rbac_policy.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_rbac_policy(rbac_policy_id, options = {}) data = { 'rbac_policy' => {} } @@ -32,7 +32,7 @@ def update_rbac_policy(rbac_policy_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_router.rb b/lib/fog/openstack/network/requests/update_router.rb similarity index 88% rename from lib/fog/network/openstack/requests/update_router.rb rename to lib/fog/openstack/network/requests/update_router.rb index ea888b07e..e3da0097d 100644 --- a/lib/fog/network/openstack/requests/update_router.rb +++ b/lib/fog/openstack/network/requests/update_router.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real # Update Router # @@ -18,7 +18,7 @@ def update_router(router_id, options = {}) # remove this in a future egi = options[:external_gateway_info] if egi - if egi.kind_of?(Fog::Network::OpenStack::Network) + if egi.kind_of?(Fog::OpenStack::Network::Network) Fog::Logger.deprecation "Passing a model objects into options[:external_gateway_info] is deprecated. \ Please pass external external gateway as follows options[:external_gateway_info] = { :network_id => NETWORK_ID }]" data['router'][:external_gateway_info] = { network_id: egi.id } @@ -43,21 +43,21 @@ def update_router(router_id, options = {}) response = Excon::Response.new router = list_routers.body['routers'].find { |r| r[:id] == router_id } - raise Fog::Network::OpenStack::NotFound unless router + raise Fog::OpenStack::Network::NotFound unless router options.keys.each { |k| router[k] = options[k] } # remove this in a future egi = options[:external_gateway_info] if egi - if egi.kind_of?(Fog::Network::OpenStack::Network) + if egi.kind_of?(Fog::OpenStack::Network::Network) Fog::Logger.deprecation "Passing a model objects into options[:external_gateway_info] is deprecated. \ Please pass external external gateway as follows options[:external_gateway_info] = { :network_id => NETWORK_ID }]" router[:external_gateway_info] = { network_id: egi.id } elsif egi.is_a?(Hash) router[:external_gateway_info] = egi else - raise ArgumentError.new('Invalid external_gateway_info attribute') + raise ArgumentError, 'Invalid external_gateway_info attribute' end end diff --git a/lib/fog/network/openstack/requests/update_security_group.rb b/lib/fog/openstack/network/requests/update_security_group.rb similarity index 92% rename from lib/fog/network/openstack/requests/update_security_group.rb rename to lib/fog/openstack/network/requests/update_security_group.rb index c9ed00631..ea4bb4013 100644 --- a/lib/fog/network/openstack/requests/update_security_group.rb +++ b/lib/fog/openstack/network/requests/update_security_group.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_security_group(security_group_id, options = {}) data = { 'security_group' => {} } @@ -32,7 +32,7 @@ def update_security_group(security_group_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_subnet.rb b/lib/fog/openstack/network/requests/update_subnet.rb similarity index 93% rename from lib/fog/network/openstack/requests/update_subnet.rb rename to lib/fog/openstack/network/requests/update_subnet.rb index 9f5a6a20f..6afcc2c56 100644 --- a/lib/fog/network/openstack/requests/update_subnet.rb +++ b/lib/fog/openstack/network/requests/update_subnet.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_subnet(subnet_id, options = {}) data = { 'subnet' => {} } @@ -34,7 +34,7 @@ def update_subnet(subnet_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_subnet_pool.rb b/lib/fog/openstack/network/requests/update_subnet_pool.rb similarity index 94% rename from lib/fog/network/openstack/requests/update_subnet_pool.rb rename to lib/fog/openstack/network/requests/update_subnet_pool.rb index f28c3e757..294e484cc 100644 --- a/lib/fog/network/openstack/requests/update_subnet_pool.rb +++ b/lib/fog/openstack/network/requests/update_subnet_pool.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_subnet_pool(subnet_pool_id, options = {}) data = { 'subnetpool' => {} } @@ -37,7 +37,7 @@ def update_subnet_pool(subnet_pool_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/network/openstack/requests/update_vpn_service.rb b/lib/fog/openstack/network/requests/update_vpn_service.rb similarity index 94% rename from lib/fog/network/openstack/requests/update_vpn_service.rb rename to lib/fog/openstack/network/requests/update_vpn_service.rb index a63b36384..f34f860e7 100644 --- a/lib/fog/network/openstack/requests/update_vpn_service.rb +++ b/lib/fog/openstack/network/requests/update_vpn_service.rb @@ -1,6 +1,6 @@ module Fog - module Network - class OpenStack + module OpenStack + class Network class Real def update_vpn_service(vpn_service_id, options = {}) data = { 'vpnservice' => {} } @@ -37,7 +37,7 @@ def update_vpn_service(vpn_service_id, options = {}) response.status = 200 response else - raise Fog::Network::OpenStack::NotFound + raise Fog::OpenStack::Network::NotFound end end end diff --git a/lib/fog/openstack/nfv.rb b/lib/fog/openstack/nfv.rb new file mode 100644 index 000000000..79c2abe19 --- /dev/null +++ b/lib/fog/openstack/nfv.rb @@ -0,0 +1,114 @@ +require 'yaml' + +module Fog + module OpenStack + class NFV < Fog::Service + SUPPORTED_VERSIONS = /v1.0/.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version + + ## REQUESTS + # + request_path 'fog/openstack/nfv/requests' + + # vnfds requests + request :list_vnfds + request :get_vnfd + request :create_vnfd + request :delete_vnfd + + # vfns requests + request :list_vnfs + request :get_vnf + request :create_vnf + request :update_vnf + request :delete_vnf + + ## MODELS + # + model_path 'fog/openstack/nfv/models' + model :vnfd + collection :vnfds + model :vnf + collection :vnfs + + class Mock + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + vnfs: [ + { + "status" => "ACTIVE", + "description" => "demo-example", + "tenant_id" => "943b6ff8229a4ec2bed0a306f869a0ea", + "instance_id" => "5a9a7d3b-24f5-4226-8d43-262972a1776e", + "mgmt_url" => "{\"vdu1\": \"192.168.0.8\"}", + "attributes" => { "monitoring_policy" => "{\"vdus\": {}}" }, + "id" => "cb4cdbd8-cf1a-4758-8d36-40db788a37a1", + "name" => "LadasTest" + } + ], + vnfds: [ + { + "service_types" => [{ "service_type" => "vnfd", "id" => "f9211d81-b58a-4849-8d38-e25376c421bd" }], + "description" => "demo-example", + "tenant_id" => "943b6ff8229a4ec2bed0a306f869a0ea", + "mgmt_driver" => "noop", + "infra_driver" => "heat", + "attributes" => { "vnfd" => "template_name: sample-vnfd" }, + "id" => "1f8f33cf-8c94-427e-a040-f3e393b773b7", + "name" => "sample-vnfd" + } + ] + } + end + end + + def self.reset + @data = nil + end + + include Fog::OpenStack::Core + + def initialize(_options = {}) + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86_400).iso8601 + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::NFV::NotFound + end + + def default_path_prefix + 'v1.0' + end + + def default_service_type + %w[servicevm] + end + end + end + end +end diff --git a/lib/fog/nfv/openstack/models/vnf.rb b/lib/fog/openstack/nfv/models/vnf.rb similarity index 97% rename from lib/fog/nfv/openstack/models/vnf.rb rename to lib/fog/openstack/nfv/models/vnf.rb index 05d00c105..9dcbc0fe3 100644 --- a/lib/fog/nfv/openstack/models/vnf.rb +++ b/lib/fog/openstack/nfv/models/vnf.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module NFV - class OpenStack + module OpenStack + class NFV class Vnf < Fog::OpenStack::Model identity :id diff --git a/lib/fog/nfv/openstack/models/vnfd.rb b/lib/fog/openstack/nfv/models/vnfd.rb similarity index 97% rename from lib/fog/nfv/openstack/models/vnfd.rb rename to lib/fog/openstack/nfv/models/vnfd.rb index da07a415f..4cf4d8549 100644 --- a/lib/fog/nfv/openstack/models/vnfd.rb +++ b/lib/fog/openstack/nfv/models/vnfd.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module NFV - class OpenStack + module OpenStack + class NFV class Vnfd < Fog::OpenStack::Model identity :id diff --git a/lib/fog/openstack/nfv/models/vnfds.rb b/lib/fog/openstack/nfv/models/vnfds.rb new file mode 100644 index 000000000..9d213f235 --- /dev/null +++ b/lib/fog/openstack/nfv/models/vnfds.rb @@ -0,0 +1,28 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/nfv/models/vnfd' + +module Fog + module OpenStack + class NFV + class Vnfds < Fog::OpenStack::Collection + model Fog::OpenStack::NFV::Vnfd + + def all(options = {}) + load_response(service.list_vnfds(options), 'vnfds') + end + + def get(uuid) + data = service.get_vnfd(uuid).body['vnfd'] + new(data) + rescue Fog::OpenStack::NFV::NotFound + nil + end + + def destroy(uuid) + vnfd = get(uuid) + vnfd.destroy + end + end + end + end +end diff --git a/lib/fog/openstack/nfv/models/vnfs.rb b/lib/fog/openstack/nfv/models/vnfs.rb new file mode 100644 index 000000000..73813b470 --- /dev/null +++ b/lib/fog/openstack/nfv/models/vnfs.rb @@ -0,0 +1,28 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/nfv/models/vnf' + +module Fog + module OpenStack + class NFV + class Vnfs < Fog::OpenStack::Collection + model Fog::OpenStack::NFV::Vnf + + def all(options = {}) + load_response(service.list_vnfs(options), 'vnfs') + end + + def get(uuid) + data = service.get_vnf(uuid).body['vnf'] + new(data) + rescue Fog::OpenStack::NFV::NotFound + nil + end + + def destroy(uuid) + vnf = get(uuid) + vnf.destroy + end + end + end + end +end diff --git a/lib/fog/nfv/openstack/requests/create_vnf.rb b/lib/fog/openstack/nfv/requests/create_vnf.rb similarity index 92% rename from lib/fog/nfv/openstack/requests/create_vnf.rb rename to lib/fog/openstack/nfv/requests/create_vnf.rb index 52eda456d..4abdb4807 100644 --- a/lib/fog/nfv/openstack/requests/create_vnf.rb +++ b/lib/fog/openstack/nfv/requests/create_vnf.rb @@ -1,6 +1,6 @@ module Fog - module NFV - class OpenStack + module OpenStack + class NFV class Real def create_vnf(options) options_valid = [ @@ -23,7 +23,7 @@ def create_vnf(options) end class Mock - def create_vnf(_) + def create_vnf(_options) response = Excon::Response.new response.status = 201 diff --git a/lib/fog/nfv/openstack/requests/create_vnfd.rb b/lib/fog/openstack/nfv/requests/create_vnfd.rb similarity index 91% rename from lib/fog/nfv/openstack/requests/create_vnfd.rb rename to lib/fog/openstack/nfv/requests/create_vnfd.rb index 712d9985e..87126e96e 100644 --- a/lib/fog/nfv/openstack/requests/create_vnfd.rb +++ b/lib/fog/openstack/nfv/requests/create_vnfd.rb @@ -1,6 +1,6 @@ module Fog - module NFV - class OpenStack + module OpenStack + class NFV class Real def create_vnfd(options) options_valid = [ @@ -23,7 +23,7 @@ def create_vnfd(options) end class Mock - def create_vnfd(_) + def create_vnfd(_options) response = Excon::Response.new response.status = 201 response.body = { "vnfd" => data[:vnfds].first } diff --git a/lib/fog/nfv/openstack/requests/delete_vnf.rb b/lib/fog/openstack/nfv/requests/delete_vnf.rb similarity index 92% rename from lib/fog/nfv/openstack/requests/delete_vnf.rb rename to lib/fog/openstack/nfv/requests/delete_vnf.rb index 54efa0a04..f41b94c4e 100644 --- a/lib/fog/nfv/openstack/requests/delete_vnf.rb +++ b/lib/fog/openstack/nfv/requests/delete_vnf.rb @@ -1,6 +1,6 @@ module Fog - module NFV - class OpenStack + module OpenStack + class NFV class Real def delete_vnf(vnf_id) request( diff --git a/lib/fog/nfv/openstack/requests/delete_vnfd.rb b/lib/fog/openstack/nfv/requests/delete_vnfd.rb similarity index 92% rename from lib/fog/nfv/openstack/requests/delete_vnfd.rb rename to lib/fog/openstack/nfv/requests/delete_vnfd.rb index 877f2f357..5fab9d336 100644 --- a/lib/fog/nfv/openstack/requests/delete_vnfd.rb +++ b/lib/fog/openstack/nfv/requests/delete_vnfd.rb @@ -1,6 +1,6 @@ module Fog - module NFV - class OpenStack + module OpenStack + class NFV class Real def delete_vnfd(vnfd_id) request( diff --git a/lib/fog/nfv/openstack/requests/get_vnf.rb b/lib/fog/openstack/nfv/requests/get_vnf.rb similarity index 92% rename from lib/fog/nfv/openstack/requests/get_vnf.rb rename to lib/fog/openstack/nfv/requests/get_vnf.rb index 98676265f..3da02adc2 100644 --- a/lib/fog/nfv/openstack/requests/get_vnf.rb +++ b/lib/fog/openstack/nfv/requests/get_vnf.rb @@ -1,6 +1,6 @@ module Fog - module NFV - class OpenStack + module OpenStack + class NFV class Real def get_vnf(vnf_id) request( diff --git a/lib/fog/nfv/openstack/requests/get_vnfd.rb b/lib/fog/openstack/nfv/requests/get_vnfd.rb similarity index 93% rename from lib/fog/nfv/openstack/requests/get_vnfd.rb rename to lib/fog/openstack/nfv/requests/get_vnfd.rb index 7b5e5f839..66df9070d 100644 --- a/lib/fog/nfv/openstack/requests/get_vnfd.rb +++ b/lib/fog/openstack/nfv/requests/get_vnfd.rb @@ -1,6 +1,6 @@ module Fog - module NFV - class OpenStack + module OpenStack + class NFV class Real def get_vnfd(vnfd_id) request( diff --git a/lib/fog/nfv/openstack/requests/list_vnfds.rb b/lib/fog/openstack/nfv/requests/list_vnfds.rb similarity index 93% rename from lib/fog/nfv/openstack/requests/list_vnfds.rb rename to lib/fog/openstack/nfv/requests/list_vnfds.rb index 97cdb896f..3861c1985 100644 --- a/lib/fog/nfv/openstack/requests/list_vnfds.rb +++ b/lib/fog/openstack/nfv/requests/list_vnfds.rb @@ -1,6 +1,6 @@ module Fog - module NFV - class OpenStack + module OpenStack + class NFV class Real def list_vnfds(options = {}) request( diff --git a/lib/fog/nfv/openstack/requests/list_vnfs.rb b/lib/fog/openstack/nfv/requests/list_vnfs.rb similarity index 93% rename from lib/fog/nfv/openstack/requests/list_vnfs.rb rename to lib/fog/openstack/nfv/requests/list_vnfs.rb index ea95b51f1..792ff149a 100644 --- a/lib/fog/nfv/openstack/requests/list_vnfs.rb +++ b/lib/fog/openstack/nfv/requests/list_vnfs.rb @@ -1,6 +1,6 @@ module Fog - module NFV - class OpenStack + module OpenStack + class NFV class Real def list_vnfs(options = {}) request( diff --git a/lib/fog/nfv/openstack/requests/update_vnf.rb b/lib/fog/openstack/nfv/requests/update_vnf.rb similarity index 91% rename from lib/fog/nfv/openstack/requests/update_vnf.rb rename to lib/fog/openstack/nfv/requests/update_vnf.rb index 163d10cc9..498856132 100644 --- a/lib/fog/nfv/openstack/requests/update_vnf.rb +++ b/lib/fog/openstack/nfv/requests/update_vnf.rb @@ -1,6 +1,6 @@ module Fog - module NFV - class OpenStack + module OpenStack + class NFV class Real def update_vnf(id, options) options_valid = [ @@ -23,7 +23,7 @@ def update_vnf(id, options) end class Mock - def update_vnf(_, _) + def update_vnf(_id, _options) response = Excon::Response.new response.status = 200 response.body = { "vnf" => data[:vnfs].first } diff --git a/lib/fog/openstack/orchestration.rb b/lib/fog/openstack/orchestration.rb new file mode 100644 index 000000000..7d8438c6a --- /dev/null +++ b/lib/fog/openstack/orchestration.rb @@ -0,0 +1,137 @@ +module Fog + module OpenStack + class Orchestration < Fog::Service + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version + + model_path 'fog/openstack/orchestration/models' + model :stack + collection :stacks + + model :resource + collection :resources + + collection :resource_schemas + + model :event + collection :events + + model :template + collection :templates + + request_path 'fog/openstack/orchestration/requests' + request :abandon_stack + request :build_info + request :create_stack + request :delete_stack + request :get_stack_template + request :list_events + request :list_resource_events + request :list_resource_types + request :list_resources + request :list_stack_data + request :list_stack_data_detailed + request :list_stack_events + request :preview_stack + request :show_event_details + request :show_resource_data + request :show_resource_metadata + request :show_resource_schema + request :show_resource_template + request :show_stack_details + request :update_stack + request :patch_stack + request :validate_template + request :cancel_update + + module Reflectable + REFLECTION_REGEX = %r{/stacks/(\w+)/([\w|-]+)/resources/(\w+)}.freeze + + def resource + @resource ||= service.resources.get(r[3], stack) + end + + def stack + @stack ||= service.stacks.get(r[1], r[2]) + end + + private + + def reflection + @reflection ||= REFLECTION_REGEX.match(links[0]['href']) + end + alias r reflection + end + + class Mock + attr_reader :auth_token + attr_reader :auth_token_expiration + attr_reader :current_user + attr_reader :current_tenant + + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + stacks: {} + } + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @current_tenant = options[:openstack_tenant] + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 8774 + management_url.path = '/v1' + @openstack_management_url = management_url.to_s + end + + def data + self.class.data["#{@openstack_username}-#{@current_tenant}"] + end + + def reset_data + self.class.data.delete("#{@openstack_username}-#{@current_tenant}") + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_management_url: @openstack_management_url } + end + end + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Orchestration::NotFound + end + + def default_service_type + %w[orchestration] + end + end + end + end +end diff --git a/lib/fog/openstack/orchestration/models/event.rb b/lib/fog/openstack/orchestration/models/event.rb new file mode 100644 index 000000000..283f9c476 --- /dev/null +++ b/lib/fog/openstack/orchestration/models/event.rb @@ -0,0 +1,18 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Orchestration + class Event < Fog::OpenStack::Model + include Reflectable + + identity :id + + %w(resource_name event_time links logical_resource_id resource_status + resource_status_reason physical_resource_id).each do |a| + attribute a.to_sym + end + end + end + end +end diff --git a/lib/fog/openstack/orchestration/models/events.rb b/lib/fog/openstack/orchestration/models/events.rb new file mode 100644 index 000000000..b2a823fe1 --- /dev/null +++ b/lib/fog/openstack/orchestration/models/events.rb @@ -0,0 +1,31 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/orchestration/models/event' + +module Fog + module OpenStack + class Orchestration + class Events < Fog::OpenStack::Collection + model Fog::OpenStack::Orchestration::Event + + def all(options = {}, options_deprecated = {}) + data = if options.kind_of?(Stack) + service.list_stack_events(options, options_deprecated) + elsif options.kind_of?(Hash) + service.list_events(options) + else + service.list_resource_events(options.stack, options, options_deprecated) + end + + load_response(data, 'events') + end + + def get(stack, resource, event_id) + data = service.show_event_details(stack, resource, event_id).body['event'] + new(data) + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/orchestration/models/resource.rb b/lib/fog/openstack/orchestration/models/resource.rb new file mode 100644 index 000000000..705e93e07 --- /dev/null +++ b/lib/fog/openstack/orchestration/models/resource.rb @@ -0,0 +1,30 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Orchestration + class Resource < Fog::OpenStack::Model + include Reflectable + + identity :id + + %w(resource_name description links logical_resource_id physical_resource_id resource_status + updated_time required_by resource_status_reason resource_type).each do |a| + attribute a.to_sym + end + + def events(options = {}) + @events ||= service.events.all(self, options) + end + + def metadata + @metadata ||= service.show_resource_metadata(stack, resource_name).body['metadata'] + end + + def template + @template ||= service.templates.get(self) + end + end + end + end +end diff --git a/lib/fog/openstack/orchestration/models/resource_schemas.rb b/lib/fog/openstack/orchestration/models/resource_schemas.rb new file mode 100644 index 000000000..bd177115c --- /dev/null +++ b/lib/fog/openstack/orchestration/models/resource_schemas.rb @@ -0,0 +1,15 @@ +require 'fog/openstack/models/collection' + +module Fog + module OpenStack + class Orchestration + class ResourceSchemas < Fog::OpenStack::Collection + def get(resource_type) + service.show_resource_schema(resource_type).body + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/orchestration/models/resources.rb b/lib/fog/openstack/orchestration/models/resources.rb new file mode 100644 index 000000000..fbc3f1988 --- /dev/null +++ b/lib/fog/openstack/orchestration/models/resources.rb @@ -0,0 +1,35 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/orchestration/models/resource' + +module Fog + module OpenStack + class Orchestration + class Resources < Fog::OpenStack::Collection + model Fog::OpenStack::Orchestration::Resource + + def types + service.list_resource_types.body['resource_types'].sort + end + + def all(options = {}, deprecated_options = {}) + data = service.list_resources(options, deprecated_options) + load_response(data, 'resources') + end + + def get(resource_name, stack = nil) + stack = first.stack if stack.nil? + data = service.show_resource_data(stack.stack_name, stack.id, resource_name).body['resource'] + new(data) + rescue Fog::OpenStack::Compute::NotFound + nil + end + + def metadata(stack_name, stack_id, resource_name) + service.show_resource_metadata(stack_name, stack_id, resource_name).body['resource'] + rescue Fog::OpenStack::Compute::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/orchestration/openstack/models/stack.rb b/lib/fog/openstack/orchestration/models/stack.rb similarity index 87% rename from lib/fog/orchestration/openstack/models/stack.rb rename to lib/fog/openstack/orchestration/models/stack.rb index 2de925097..2569f28fe 100644 --- a/lib/fog/orchestration/openstack/models/stack.rb +++ b/lib/fog/openstack/orchestration/models/stack.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Stack < Fog::OpenStack::Model identity :id @@ -15,7 +15,7 @@ class Stack < Fog::OpenStack::Model def save(options = {}) if persisted? stack_default_options = default_options - if (options.key?(:template_url)) + if options.key?(:template_url) stack_default_options.delete(:template) end service.update_stack(self, stack_default_options.merge(options)).body['stack'] @@ -26,14 +26,14 @@ def save(options = {}) # Deprecated def create - Fog::Logger.deprecation("#create is deprecated, use #save(options) instead [light_black](#{caller.first})[/]") + Fog::Logger.deprecation("#create is deprecated, use #save(options) instead [light_black](#{caller(1..1).first})[/]") requires :stack_name service.stacks.create(default_options) end # Deprecated def update - Fog::Logger.deprecation("#update is deprecated, use #save(options) instead [light_black](#{caller.first})[/]") + Fog::Logger.deprecation("#update is deprecated, use #save(options) instead [light_black](#{caller(1..1).first})[/]") requires :stack_name service.update_stack(self, default_options).body['stack'] end @@ -74,38 +74,40 @@ def cancel_update # Deprecated def template_url - Fog::Logger.deprecation("#template_url is deprecated, use it in options for #save(options) instead [light_black](#{caller.first})[/]") + Fog::Logger.deprecation("#template_url is deprecated, use it in options for #save(options) instead [light_black](#{caller(1..1).first})[/]") @template_url end # Deprecated def template_url=(url) - Fog::Logger.deprecation("#template_url= is deprecated, use it in options for #save(options) instead [light_black](#{caller.first})[/]") + Fog::Logger.deprecation("#template_url= is deprecated, use it in options for #save(options) instead [light_black](#{caller(1..1).first})[/]") @template_url = url end # Deprecated def template=(content) - Fog::Logger.deprecation("#template=(content) is deprecated, use it in options for #save(options) instead [light_black](#{caller.first})[/]") + Fog::Logger.deprecation("#template=(content) is deprecated, use it in options for #save(options) instead [light_black](#{caller(1..1).first})[/]") @template = content end # Deprecated def timeout_in_minutes - Fog::Logger.deprecation("#timeout_in_minutes is deprecated, set timeout_mins in options for save(options) instead [light_black](#{caller.first})[/]") + Fog::Logger.deprecation("#timeout_in_minutes is deprecated, set timeout_mins in options for save(options) instead [light_black](#{caller(1..1).first})[/]") timeout_mins end # Deprecated def timeout_in_minutes=(minutes) - Fog::Logger.deprecation("#timeout_in_minutes=(minutes) is deprecated, set timeout_mins in options for save(options) instead [light_black](#{caller.first})[/]") - timeout_mins = minutes + Fog::Logger.deprecation("#timeout_in_minutes=(minutes) is deprecated, set timeout_mins in options for save(options) instead [light_black](#{caller(1..1).first})[/]") + self.timeout_mins = minutes end + private + # build options to create or update stack def default_options template_content = - if template && template.kind_of?(Fog::Orchestration::OpenStack::Template) + if template && template.kind_of?(Fog::OpenStack::Orchestration::Template) template.content else template @@ -121,7 +123,6 @@ def default_options options[:files] = @files if @files options end - private :default_options end end end diff --git a/lib/fog/orchestration/openstack/models/stacks.rb b/lib/fog/openstack/orchestration/models/stacks.rb similarity index 82% rename from lib/fog/orchestration/openstack/models/stacks.rb rename to lib/fog/openstack/orchestration/models/stacks.rb index 1a4e8b0b8..35fde56c3 100644 --- a/lib/fog/orchestration/openstack/models/stacks.rb +++ b/lib/fog/openstack/orchestration/models/stacks.rb @@ -1,11 +1,11 @@ require 'fog/openstack/models/collection' -require 'fog/orchestration/openstack/models/stack' +require 'fog/openstack/orchestration/models/stack' module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Stacks < Fog::OpenStack::Collection - model Fog::Orchestration::OpenStack::Stack + model Fog::OpenStack::Orchestration::Stack def all(options = {}) # TODO(lsmola) we can uncomment this when https://bugs.launchpad.net/heat/+bug/1468318 is fixed, till then @@ -22,14 +22,14 @@ def summary(options = {}) # Deprecated def find_by_id(id) - Fog::Logger.deprecation("#find_by_id(id) is deprecated, use #get(name, id) instead [light_black](#{caller.first})[/]") + Fog::Logger.deprecation("#find_by_id(id) is deprecated, use #get(name, id) instead [light_black](#{caller(1..1).first})[/]") find { |stack| stack.id == id } end def get(arg1, arg2 = nil) if arg2.nil? # Deprecated: get(id) - Fog::Logger.deprecation("#get(id) is deprecated, use #get(name, id) instead [light_black](#{caller.first})[/]") + Fog::Logger.deprecation("#get(id) is deprecated, use #get(name, id) instead [light_black](#{caller(1..1).first})[/]") return find_by_id(arg1) end @@ -38,7 +38,7 @@ def get(arg1, arg2 = nil) id = arg2 data = service.show_stack_details(name, id).body['stack'] new(data) - rescue Fog::Compute::OpenStack::NotFound + rescue Fog::OpenStack::Compute::NotFound nil end diff --git a/lib/fog/orchestration/openstack/models/template.rb b/lib/fog/openstack/orchestration/models/template.rb similarity index 85% rename from lib/fog/orchestration/openstack/models/template.rb rename to lib/fog/openstack/orchestration/models/template.rb index b99687efb..5f16d20ba 100644 --- a/lib/fog/orchestration/openstack/models/template.rb +++ b/lib/fog/openstack/orchestration/models/template.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Template < Fog::OpenStack::Model %w(format description template_version parameters resources content).each do |a| attribute a.to_sym diff --git a/lib/fog/orchestration/openstack/models/templates.rb b/lib/fog/openstack/orchestration/models/templates.rb similarity index 85% rename from lib/fog/orchestration/openstack/models/templates.rb rename to lib/fog/openstack/orchestration/models/templates.rb index 9d1182666..b1d0dbd52 100644 --- a/lib/fog/orchestration/openstack/models/templates.rb +++ b/lib/fog/openstack/orchestration/models/templates.rb @@ -1,11 +1,11 @@ require 'fog/openstack/models/collection' -require 'fog/orchestration/openstack/models/template' +require 'fog/openstack/orchestration/models/template' module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Templates < Fog::OpenStack::Collection - model Fog::Orchestration::OpenStack::Template + model Fog::OpenStack::Orchestration::Template def get(obj) data = if obj.kind_of?(Stack) @@ -28,7 +28,7 @@ def get(obj) end new(data) - rescue Fog::Orchestration::OpenStack::NotFound + rescue Fog::OpenStack::Orchestration::NotFound nil end diff --git a/lib/fog/orchestration/openstack/requests/abandon_stack.rb b/lib/fog/openstack/orchestration/requests/abandon_stack.rb similarity index 85% rename from lib/fog/orchestration/openstack/requests/abandon_stack.rb rename to lib/fog/openstack/orchestration/requests/abandon_stack.rb index 9c7dbed84..3c7ef6344 100644 --- a/lib/fog/orchestration/openstack/requests/abandon_stack.rb +++ b/lib/fog/openstack/orchestration/requests/abandon_stack.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def abandon_stack(stack) request( diff --git a/lib/fog/orchestration/openstack/requests/build_info.rb b/lib/fog/openstack/orchestration/requests/build_info.rb similarity index 82% rename from lib/fog/orchestration/openstack/requests/build_info.rb rename to lib/fog/openstack/orchestration/requests/build_info.rb index c487eb29d..d0ef9d2c1 100644 --- a/lib/fog/orchestration/openstack/requests/build_info.rb +++ b/lib/fog/openstack/orchestration/requests/build_info.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def build_info request( diff --git a/lib/fog/orchestration/openstack/requests/cancel_update.rb b/lib/fog/openstack/orchestration/requests/cancel_update.rb similarity index 86% rename from lib/fog/orchestration/openstack/requests/cancel_update.rb rename to lib/fog/openstack/orchestration/requests/cancel_update.rb index ae7e79e4c..0bac4df1b 100644 --- a/lib/fog/orchestration/openstack/requests/cancel_update.rb +++ b/lib/fog/openstack/orchestration/requests/cancel_update.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def cancel_update(stack) request( @@ -15,7 +15,7 @@ def cancel_update(stack) end class Mock - def cancel_update(_) + def cancel_update(_stack) response = Excon::Response.new response.status = 200 response.body = {} diff --git a/lib/fog/orchestration/openstack/requests/create_stack.rb b/lib/fog/openstack/orchestration/requests/create_stack.rb similarity index 80% rename from lib/fog/orchestration/openstack/requests/create_stack.rb rename to lib/fog/openstack/orchestration/requests/create_stack.rb index 89319acba..92aafd6c6 100644 --- a/lib/fog/orchestration/openstack/requests/create_stack.rb +++ b/lib/fog/openstack/orchestration/requests/create_stack.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real # Create a stack. # @@ -23,7 +23,10 @@ def create_stack(arg1, arg2 = nil) options = arg1 else # Deprecated: create_stack(stack_name, options = {}) - Fog::Logger.deprecation("#create_stack(stack_name, options) is deprecated, use #create_stack(options) instead [light_black](#{caller.first})[/]") + Fog::Logger.deprecation( + "#create_stack(stack_name, options) is deprecated, use #create_stack(options)" \ + "instead [light_black](#{caller(1..1).first})[/]" + ) options = { stack_name: arg1 }.merge(arg2.nil? ? {} : arg2) @@ -57,28 +60,28 @@ def create_stack(arg1, arg2 = nil) options = arg1 else # Deprecated: create_stack(stack_name, options = {}) - Fog::Logger.deprecation("#create_stack(stack_name, options) is deprecated, use #create_stack(options) instead [light_black](#{caller.first})[/]") + Fog::Logger.deprecation("#create_stack(stack_name, options) is deprecated, use #create_stack(options) instead [light_black](#{caller(1..1).first})[/]") options = { stack_name: arg1 }.merge(arg2.nil? ? {} : arg2) end stack_id = Fog::Mock.random_hex(32) - stack = data[:stacks][stack_id] = { - 'id' => stack_id, - 'stack_name' => options[:stack_name], - 'links' => [], - 'description' => options[:description], - 'stack_status' => 'CREATE_COMPLETE', + data[:stacks][stack_id] = { + 'id' => stack_id, + 'stack_name' => options[:stack_name], + 'links' => [], + 'description' => options[:description], + 'stack_status' => 'CREATE_COMPLETE', 'stack_status_reason' => 'Stack successfully created', - 'creation_time' => Time.now, - 'updated_time' => Time.now + 'creation_time' => Time.now, + 'updated_time' => Time.now } response = Excon::Response.new response.status = 201 response.body = { - 'id' => stack_id, + 'id' => stack_id, 'links' => [{ "href" => "http://localhost:8004/v1/fake_tenant_id/stacks/#{options[:stack_name]}/#{stack_id}", "rel" => "self" }] } @@ -87,7 +90,7 @@ def create_stack(arg1, arg2 = nil) end if options.key?(:template) || options.key?(:template_url) - file_resolver = Util::RecursiveHotFileLoader.new(options[:template] || options[:template_url], options[:files]) + file_resolver = OrchestrationUtil::RecursiveHotFileLoader.new(options[:template] || options[:template_url], options[:files]) response.body['files'] = file_resolver.files unless file_resolver.files.empty? end diff --git a/lib/fog/orchestration/openstack/requests/delete_stack.rb b/lib/fog/openstack/orchestration/requests/delete_stack.rb similarity index 89% rename from lib/fog/orchestration/openstack/requests/delete_stack.rb rename to lib/fog/openstack/orchestration/requests/delete_stack.rb index 396cc1653..af25ce29a 100644 --- a/lib/fog/orchestration/openstack/requests/delete_stack.rb +++ b/lib/fog/openstack/orchestration/requests/delete_stack.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real # Delete a stack. # @@ -18,7 +18,7 @@ def delete_stack(arg1, arg2 = nil) stack_id = stack.id else # Deprecated: delete_stack(stack_name, stack_id) - Fog::Logger.deprecation("#delete_stack(stack_name, stack_id) is deprecated, use #delete_stack(stack) instead [light_black](#{caller.first})[/]") + Fog::Logger.deprecation("#delete_stack(stack_name, stack_id) is deprecated, use #delete_stack(stack) instead [light_black](#{caller(1..1).first})[/]") stack_name = arg1 stack_id = arg2 end @@ -36,12 +36,10 @@ def delete_stack(arg1, arg2 = nil) if arg1.kind_of?(Stack) # Normal use: delete_stack(stack) stack = arg1 - stack_name = stack.stack_name stack_id = stack.id else # Deprecated: delete_stack(stack_name, stack_id) - Fog::Logger.deprecation("#delete_stack(stack_name, stack_id) is deprecated, use #delete_stack(stack) instead [light_black](#{caller.first})[/]") - stack_name = arg1 + Fog::Logger.deprecation("#delete_stack(stack_name, stack_id) is deprecated, use #delete_stack(stack) instead [light_black](#{caller(1..1).first})[/]") stack_id = arg2 end diff --git a/lib/fog/orchestration/openstack/requests/get_stack_template.rb b/lib/fog/openstack/orchestration/requests/get_stack_template.rb similarity index 88% rename from lib/fog/orchestration/openstack/requests/get_stack_template.rb rename to lib/fog/openstack/orchestration/requests/get_stack_template.rb index 763c18cd1..884e73c2b 100644 --- a/lib/fog/orchestration/openstack/requests/get_stack_template.rb +++ b/lib/fog/openstack/orchestration/requests/get_stack_template.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def get_stack_template(stack) request( diff --git a/lib/fog/openstack/orchestration/requests/list_events.rb b/lib/fog/openstack/orchestration/requests/list_events.rb new file mode 100644 index 000000000..e0d63777e --- /dev/null +++ b/lib/fog/openstack/orchestration/requests/list_events.rb @@ -0,0 +1,46 @@ +module Fog + module OpenStack + class Orchestration + class Real + def list_events(options = {}) + if !options.key?(:stack) && !(options.key?(:stack_name) && options.key?(:stack_id)) + raise(ArgumentError, "Missing required options keys: :stack or :stack_name and :stack_id, while calling "\ + " .list_events(options)") + end + + stack = options.delete(:stack) + stack_name = options.delete(:stack_name) + stack_name ||= stack.stack_name if stack && stack.respond_to?(:stack_name) + stack_id = options.delete(:stack_id) + stack_id ||= stack.id if stack && stack.respond_to?(:id) + + resource = options.delete(:resource) + resource_name = options.delete(:resource_name) + resource_name ||= resource.resource_name if resource && resource.respond_to?(:resource_name) + + path = if resource_name + "stacks/#{stack_name}/#{stack_id}/resources/#{resource_name}/events" + else + "stacks/#{stack_name}/#{stack_id}/events" + end + + request(method: 'GET', + path: path, + expects: 200, + query: options) + end + end + + class Mock + def list_events(_options = {}) + events = data[:events].values + + Excon::Response.new( + body: { 'events' => events }, + status: 200 + ) + end + end + end + end +end diff --git a/lib/fog/orchestration/openstack/requests/list_resource_events.rb b/lib/fog/openstack/orchestration/requests/list_resource_events.rb similarity index 95% rename from lib/fog/orchestration/openstack/requests/list_resource_events.rb rename to lib/fog/openstack/orchestration/requests/list_resource_events.rb index fd7d7c095..45ac73ea8 100644 --- a/lib/fog/orchestration/openstack/requests/list_resource_events.rb +++ b/lib/fog/openstack/orchestration/requests/list_resource_events.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def list_resource_events(stack, resource, options = {}) Fog::Logger.deprecation('Calling OpenStack[:orchestration].list_resource_events(stack, resource, options)'\ diff --git a/lib/fog/orchestration/openstack/requests/list_resource_types.rb b/lib/fog/openstack/orchestration/requests/list_resource_types.rb similarity index 92% rename from lib/fog/orchestration/openstack/requests/list_resource_types.rb rename to lib/fog/openstack/orchestration/requests/list_resource_types.rb index 51cf6c12d..33cd97976 100644 --- a/lib/fog/orchestration/openstack/requests/list_resource_types.rb +++ b/lib/fog/openstack/orchestration/requests/list_resource_types.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def list_resource_types(_options = {}) request( diff --git a/lib/fog/openstack/orchestration/requests/list_resources.rb b/lib/fog/openstack/orchestration/requests/list_resources.rb new file mode 100644 index 000000000..e62b8c11e --- /dev/null +++ b/lib/fog/openstack/orchestration/requests/list_resources.rb @@ -0,0 +1,46 @@ +module Fog + module OpenStack + class Orchestration + class Real + def list_resources(options = {}, options_deprecated = {}) + if options.kind_of?(Hash) + if !options.key?(:stack) && !(options.key?(:stack_name) && options.key?(:stack_id)) + raise(ArgumentError, "Missing required options keys: :stack or :stack_name and :stack_id, while calling "\ + " .list_resources(options)") + end + + stack = options.delete(:stack) + stack_name = options.delete(:stack_name) + stack_name ||= stack.stack_name if stack && stack.respond_to?(:stack_name) + stack_id = options.delete(:stack_id) + stack_id ||= stack.id if stack && stack.respond_to?(:id) + path = "stacks/#{stack_name}/#{stack_id}/resources" + params = options + else + Fog::Logger.deprecation('Calling OpenStack[:orchestration].list_resources(stack, options) is deprecated, '\ + ' call .list_resources(:stack => stack) or '\ + ' .list_resources(:stack_name => value, :stack_id => value) instead') + path = "stacks/#{options.stack_name}/#{options.id}/resources" + params = options_deprecated + end + + request(method: 'GET', + path: path, + expects: 200, + query: params) + end + end + + class Mock + def list_resources(_options = {}, _options_deprecated = {}) + resources = data[:resources].values + + Excon::Response.new( + body: { 'resources' => resources }, + status: 200 + ) + end + end + end + end +end diff --git a/lib/fog/orchestration/openstack/requests/list_stack_data.rb b/lib/fog/openstack/orchestration/requests/list_stack_data.rb similarity index 91% rename from lib/fog/orchestration/openstack/requests/list_stack_data.rb rename to lib/fog/openstack/orchestration/requests/list_stack_data.rb index dbe2d596a..b86dcd2c7 100644 --- a/lib/fog/orchestration/openstack/requests/list_stack_data.rb +++ b/lib/fog/openstack/orchestration/requests/list_stack_data.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def list_stack_data(options = {}) request( diff --git a/lib/fog/openstack/orchestration/requests/list_stack_data_detailed.rb b/lib/fog/openstack/orchestration/requests/list_stack_data_detailed.rb new file mode 100644 index 000000000..68e2864f1 --- /dev/null +++ b/lib/fog/openstack/orchestration/requests/list_stack_data_detailed.rb @@ -0,0 +1,49 @@ +module Fog + module OpenStack + class Orchestration + class Real + def list_stack_data_detailed(options = {}) + request( + method: 'GET', + path: 'stacks/detail', + expects: 200, + query: options + ) + end + end + + class Mock + def list_stack_data_detailed(_options = {}) + Excon::Response.new( + body: { + 'stacks' => + [{ "parent" => nil, + "disable_rollback" => true, + "description" => "No description", + "links" => [{ "href" => "http://192.0.2.1:8004/v1/ae084f19a7974d5b95703f633e57fd64/stacks/overcloud/9ea5226f-0bb3-40bf-924b-f89ea11bb69c", + "rel" => "self" }], + "stack_status_reason" => "Stack CREATE completed successfully", + "stack_name" => "overcloud", + "stack_user_project_id" => "ae084f19a7974d5b95703f633e57fd64", + "stack_owner" => "admin", + "creation_time" => "2015-06-24T07:19:01Z", + "capabilities" => [], + "notification_topics" => [], + "updated_time" => nil, + "timeout_mins" => nil, + "stack_status" => "CREATE_COMPLETE", + "parameters" => { "Controller-1::SSLKey" => "******", + "Compute-1::RabbitClientUseSSL" => "False", + "Controller-1::KeystoneSSLCertificate" => "", + "Controller-1::CinderLVMLoopDeviceSize" => "5000" }, + "id" => "9ea5226f-0bb3-40bf-924b-f89ea11bb69c", + "outputs" => [], + "template_description" => "No description" }] + }, + status: 200 + ) + end + end + end + end +end diff --git a/lib/fog/orchestration/openstack/requests/list_stack_events.rb b/lib/fog/openstack/orchestration/requests/list_stack_events.rb similarity index 94% rename from lib/fog/orchestration/openstack/requests/list_stack_events.rb rename to lib/fog/openstack/orchestration/requests/list_stack_events.rb index 7d60a9525..45e49f729 100644 --- a/lib/fog/orchestration/openstack/requests/list_stack_events.rb +++ b/lib/fog/openstack/orchestration/requests/list_stack_events.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def list_stack_events(stack, options = {}) Fog::Logger.deprecation('Calling OpenStack[:orchestration].list_stack_events(stack, options)'\ diff --git a/lib/fog/orchestration/openstack/requests/patch_stack.rb b/lib/fog/openstack/orchestration/requests/patch_stack.rb similarity index 89% rename from lib/fog/orchestration/openstack/requests/patch_stack.rb rename to lib/fog/openstack/orchestration/requests/patch_stack.rb index 030aed8b1..bc20deb85 100644 --- a/lib/fog/orchestration/openstack/requests/patch_stack.rb +++ b/lib/fog/openstack/orchestration/requests/patch_stack.rb @@ -1,10 +1,10 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real # patch a stack. # - # @param [Fog::Orchestration::OpenStack::Stack] the stack to patch. + # @param [Fog::OpenStack::Orchestration::Stack] the stack to patch. # @param [Hash] options # * :template [String] Structure containing the template body. # or (one of the two Template parameters is required) diff --git a/lib/fog/orchestration/openstack/requests/preview_stack.rb b/lib/fog/openstack/orchestration/requests/preview_stack.rb similarity index 86% rename from lib/fog/orchestration/openstack/requests/preview_stack.rb rename to lib/fog/openstack/orchestration/requests/preview_stack.rb index c91a410fe..cd03e14f6 100644 --- a/lib/fog/orchestration/openstack/requests/preview_stack.rb +++ b/lib/fog/openstack/orchestration/requests/preview_stack.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def preview_stack(options = {}) request( diff --git a/lib/fog/orchestration/openstack/requests/show_event_details.rb b/lib/fog/openstack/orchestration/requests/show_event_details.rb similarity index 92% rename from lib/fog/orchestration/openstack/requests/show_event_details.rb rename to lib/fog/openstack/orchestration/requests/show_event_details.rb index 7e5b139b0..5ccf8901a 100644 --- a/lib/fog/orchestration/openstack/requests/show_event_details.rb +++ b/lib/fog/openstack/orchestration/requests/show_event_details.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def show_event_details(stack, resource, event_id) request( diff --git a/lib/fog/orchestration/openstack/requests/show_resource_data.rb b/lib/fog/openstack/orchestration/requests/show_resource_data.rb similarity index 93% rename from lib/fog/orchestration/openstack/requests/show_resource_data.rb rename to lib/fog/openstack/orchestration/requests/show_resource_data.rb index 393614d0c..d825c6022 100644 --- a/lib/fog/orchestration/openstack/requests/show_resource_data.rb +++ b/lib/fog/openstack/orchestration/requests/show_resource_data.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def show_resource_data(stack_name, stack_id, resource_name) request( diff --git a/lib/fog/orchestration/openstack/requests/show_resource_metadata.rb b/lib/fog/openstack/orchestration/requests/show_resource_metadata.rb similarity index 92% rename from lib/fog/orchestration/openstack/requests/show_resource_metadata.rb rename to lib/fog/openstack/orchestration/requests/show_resource_metadata.rb index 544216d36..48c18b073 100644 --- a/lib/fog/orchestration/openstack/requests/show_resource_metadata.rb +++ b/lib/fog/openstack/orchestration/requests/show_resource_metadata.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def show_resource_metadata(stack, resource_name) request( diff --git a/lib/fog/orchestration/openstack/requests/show_resource_schema.rb b/lib/fog/openstack/orchestration/requests/show_resource_schema.rb similarity index 84% rename from lib/fog/orchestration/openstack/requests/show_resource_schema.rb rename to lib/fog/openstack/orchestration/requests/show_resource_schema.rb index 5d88a7f24..7287570b1 100644 --- a/lib/fog/orchestration/openstack/requests/show_resource_schema.rb +++ b/lib/fog/openstack/orchestration/requests/show_resource_schema.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def show_resource_schema(name) request( diff --git a/lib/fog/orchestration/openstack/requests/show_resource_template.rb b/lib/fog/openstack/orchestration/requests/show_resource_template.rb similarity index 88% rename from lib/fog/orchestration/openstack/requests/show_resource_template.rb rename to lib/fog/openstack/orchestration/requests/show_resource_template.rb index 4b6812beb..04594930a 100644 --- a/lib/fog/orchestration/openstack/requests/show_resource_template.rb +++ b/lib/fog/openstack/orchestration/requests/show_resource_template.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def show_resource_template(name) request( diff --git a/lib/fog/openstack/orchestration/requests/show_stack_details.rb b/lib/fog/openstack/orchestration/requests/show_stack_details.rb new file mode 100644 index 000000000..3136a1987 --- /dev/null +++ b/lib/fog/openstack/orchestration/requests/show_stack_details.rb @@ -0,0 +1,27 @@ +module Fog + module OpenStack + class Orchestration + class Real + def show_stack_details(name, id) + request( + method: 'GET', + path: "stacks/#{name}/#{id}", + expects: 200 + ) + end + end + + class Mock + def show_stack_details(_name, id) + stack = data[:stacks][id] + raise Fog::OpenStack::Orchestration::NotFound if stack.nil? + + Excon::Response.new( + body: { 'stack' => stack }, + status: 200 + ) + end + end + end + end +end diff --git a/lib/fog/openstack/orchestration/requests/update_stack.rb b/lib/fog/openstack/orchestration/requests/update_stack.rb new file mode 100644 index 000000000..dbfff57f1 --- /dev/null +++ b/lib/fog/openstack/orchestration/requests/update_stack.rb @@ -0,0 +1,117 @@ +module Fog + module OpenStack + class Orchestration + class Real + # Update a stack. + # + # @param [Fog::OpenStack::Orchestration::Stack] the stack to update. + # @param [Hash] options + # * :template [String] Structure containing the template body. + # or (one of the two Template parameters is required) + # * :template_url [String] URL of file containing the template body. + # * :parameters [Hash] Hash of providers to supply to template. + # * :files [Hash] Hash with files resources. + # + def update_stack(arg1, arg2 = nil, arg3 = nil) + if arg1.kind_of?(Stack) + # Normal use, update_stack(stack, options = {}) + stack = arg1 + stack_name = stack.stack_name + stack_id = stack.id + options = arg2.nil? ? {} : arg2 + else + # Deprecated, update_stack(stack_id, stack_name, options = {}) + Fog::Logger.deprecation("#update_stack(stack_id, stack_name, options) is deprecated, use #update_stack(stack, options) instead [light_black](#{caller(1..1).first})[/]") + stack_id = arg1 + stack_name = arg2 + options = { + stack_name: stack_name + }.merge(arg3.nil? ? {} : arg3) + end + + # Templates should always: + # - be strings + # - contain URI references instead of relative paths. + # Passing :template_url may not work well with `get_file` and remote `type`: + # the python client implementation in shade retrieves from :template_uri + # and replaces it with :template. + # see https://github.com/openstack-infra/shade/blob/master/shade/openstackcloud.py#L1201 + # see https://developer.openstack.org/api-ref/orchestration/v1/index.html#create-stack + file_resolver = Util::RecursiveHotFileLoader.new(options[:template] || options[:template_url], options[:files]) + options[:template] = file_resolver.template + options[:files] = file_resolver.files unless file_resolver.files.empty? + + request( + expects: 202, + path: "stacks/#{stack_name}/#{stack_id}", + method: 'PUT', + body: Fog::JSON.encode(options) + ) + end + end + + class Mock + def update_stack(arg1, arg2 = nil, arg3 = nil) + if arg1.kind_of?(Stack) + # Normal use, update_stack(stack, options = {}) + stack = arg1 + stack_id = stack.id + options = arg2.nil? ? {} : arg2 + else + # Deprecated, update_stack(stack_id, stack_name, options = {}) + Fog::Logger.deprecation("#update_stack(stack_id, stack_name, options) is deprecated, use #update_stack(stack, options) instead [light_black](#{caller(1..1).first})[/]") + stack_id = arg1 + stack_name = arg2 + options = { + stack_name: stack_name + }.merge(arg3.nil? ? {} : arg3) + end + stack_obj = data[:stacks][stack_id] + raise Fog::OpenStack::Orchestration::NotFound if stack_obj.nil? + + clear_parameters = options.key?(:clear_parameters) ? options[:clear_parameters] : {} + options.each_pair do |key, value| + case key + when :files + next if options.include?(:template) || options.include?(:template_url) + + if stack_obj['files'].nil? || clear_parameters.include?(:files) + stack_obj['files'] = value + else + stack_obj['files'].merge!(value) + end + when :template, :template_url + file_resolver = Util::RecursiveHotFileLoader.new(value, options[:files]) + n_files = file_resolver.files unless file_resolver.files.empty? + if stack_obj['files'].nil? || clear_parameters.include?(:files) + stack_obj['files'] = n_files + else + stack_obj['files'].merge!(n_files) + end + else + key_s = key.to_s + if !stack_obj.key?(key_s) || stack_obj[key_s].nil? || clear_parameters.include?(key) + stack_obj[key_s] = value + elsif stack_obj[key_s].kind_of(Array) + if value.kind_of(Array) + stack_obj[key_s].concat(value) + else + stack_obj[key_s].append(value) + end + elsif stack_obj[key_s].kind_of(Hash) + stack_obj[key_s].merge!(value) + else + stack_obj[key_s] = value + end + end + end + + response = Excon::Response.new + response.status = 202 + response.body = {} + response + end + end + end + end +end diff --git a/lib/fog/orchestration/openstack/requests/validate_template.rb b/lib/fog/openstack/orchestration/requests/validate_template.rb similarity index 86% rename from lib/fog/orchestration/openstack/requests/validate_template.rb rename to lib/fog/openstack/orchestration/requests/validate_template.rb index e5aeddb68..5c4d76bab 100644 --- a/lib/fog/orchestration/openstack/requests/validate_template.rb +++ b/lib/fog/openstack/orchestration/requests/validate_template.rb @@ -1,6 +1,6 @@ module Fog - module Orchestration - class OpenStack + module OpenStack + class Orchestration class Real def validate_template(options = {}) request( diff --git a/lib/fog/orchestration/util/recursive_hot_file_loader.rb b/lib/fog/openstack/orchestration/util/recursive_hot_file_loader.rb similarity index 98% rename from lib/fog/orchestration/util/recursive_hot_file_loader.rb rename to lib/fog/openstack/orchestration/util/recursive_hot_file_loader.rb index 74af237e7..fef9eaa49 100644 --- a/lib/fog/orchestration/util/recursive_hot_file_loader.rb +++ b/lib/fog/openstack/orchestration/util/recursive_hot_file_loader.rb @@ -5,8 +5,8 @@ require 'fog/core' module Fog - module Orchestration - module Util + module OpenStack + module OrchestrationUtil # # Resolve get_file resources found in a HOT template populating # a files Hash conforming to Heat Specs @@ -102,6 +102,7 @@ def get_file_contents(from_data, base_url) # I'm on a Hash, process it. return unless from_data.kind_of?(Hash) + from_data.each do |key, value| next if ignore_if(key, value) @@ -160,7 +161,7 @@ def read_uri(uri_or_filename) # open-uri doesn't open "file:///" uris. uri_or_filename = uri_or_filename.sub(/^file:/, "") - open(uri_or_filename) { |f| content = f.read } + File.open(uri_or_filename) { |f| content = f.read } content end diff --git a/lib/fog/openstack/planning.rb b/lib/fog/openstack/planning.rb new file mode 100644 index 000000000..c95756507 --- /dev/null +++ b/lib/fog/openstack/planning.rb @@ -0,0 +1,137 @@ +module Fog + module OpenStack + class Planning < Fog::Service + SUPPORTED_VERSIONS = /v2/.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version + + ## MODELS + # + model_path 'fog/openstack/planning/models' + model :role + collection :roles + model :plan + collection :plans + + ## REQUESTS + # + request_path 'fog/openstack/planning/requests' + + # Role requests + request :list_roles + + # Plan requests + request :list_plans + request :get_plan_templates + request :get_plan + request :patch_plan + request :create_plan + request :delete_plan + request :add_role_to_plan + request :remove_role_from_plan + + class Mock + def self.data + @data ||= {} + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 9292 + management_url.path = '/v1' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].find { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_region: @openstack_region, + openstack_management_url: @openstack_management_url } + end + end + + class Real + include Fog::OpenStack::Core + + def default_endpoint_type + 'admin' + end + + def default_path_prefix + 'v2' + end + + def default_service_type + %w[management] + end + + # NOTE: uncommenting this should be treated as api-change! + # def self.not_found_class + # Fog::Planning::OpenStack::NotFound + # end + end + end + + # TODO: get rid of inconform self.[] & self.new & self.services + def self.[](service) + new(service: service) + end + + def self.new(attributes) + attributes = attributes.dup # Prevent delete from having side effects + service = attributes.delete(:service).to_s.downcase.to_sym + if services.include?(service) + return Fog::OpenStack.const_get(service.to_s.capitalize).new(attributes) + end + + raise ArgumentError, "Openstack has no #{service} service" + end + + def self.services + # Ruby 1.8.7 compatibility for select returning Array of Arrays (pairs) + Hash[Fog.services.select { |_service, providers| providers.include?(:openstack) }].keys + end + end +end diff --git a/lib/fog/planning/openstack/models/plan.rb b/lib/fog/openstack/planning/models/plan.rb similarity index 92% rename from lib/fog/planning/openstack/models/plan.rb rename to lib/fog/openstack/planning/models/plan.rb index 088368c25..9a0006560 100644 --- a/lib/fog/planning/openstack/models/plan.rb +++ b/lib/fog/openstack/planning/models/plan.rb @@ -29,8 +29,8 @@ def environment end def provider_resource_templates - templates.select do |key, _template| - ![MASTER_TEMPLATE_NAME, ENVIRONMENT_NAME].include?(key) + templates.reject do |key, _template| + [MASTER_TEMPLATE_NAME, ENVIRONMENT_NAME].include?(key) end end diff --git a/lib/fog/openstack/planning/models/plans.rb b/lib/fog/openstack/planning/models/plans.rb new file mode 100644 index 000000000..a0c760c4f --- /dev/null +++ b/lib/fog/openstack/planning/models/plans.rb @@ -0,0 +1,35 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/planning/models/plan' + +module Fog + module OpenStack + class Planning + class Plans < Fog::OpenStack::Collection + model Fog::OpenStack::Planning::Plan + + def all(options = {}) + load_response(service.list_plans(options)) + end + + def find_by_uuid(plan_uuid) + new(service.get_plan(plan_uuid).body) + end + alias get find_by_uuid + + def method_missing(method_sym, *arguments, &block) + if method_sym.to_s =~ /^find_by_(.*)$/ + all.find do |plan| + plan.send(Regexp.last_match(1)) == arguments.first + end + else + super + end + end + + def respond_to_missing?(method_sym, include_private = false) + method_sym.to_s.start_with?('find_by_') || super + end + end + end + end +end diff --git a/lib/fog/planning/openstack/models/role.rb b/lib/fog/openstack/planning/models/role.rb similarity index 100% rename from lib/fog/planning/openstack/models/role.rb rename to lib/fog/openstack/planning/models/role.rb diff --git a/lib/fog/openstack/planning/models/roles.rb b/lib/fog/openstack/planning/models/roles.rb new file mode 100644 index 000000000..61cb22c69 --- /dev/null +++ b/lib/fog/openstack/planning/models/roles.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/planning/models/role' + +module Fog + module OpenStack + class Planning + class Roles < Fog::OpenStack::Collection + model Fog::OpenStack::Planning::Role + + def all(options = {}) + load_response(service.list_roles(options)) + end + end + end + end +end diff --git a/lib/fog/openstack/planning/requests/add_role_to_plan.rb b/lib/fog/openstack/planning/requests/add_role_to_plan.rb new file mode 100644 index 000000000..a120846b8 --- /dev/null +++ b/lib/fog/openstack/planning/requests/add_role_to_plan.rb @@ -0,0 +1,40 @@ +module Fog + module OpenStack + class Planning + class Real + def add_role_to_plan(plan_uuid, role_uuid) + request( + expects: [201], + method: 'POST', + path: "plans/#{plan_uuid}/roles", + body: Fog::JSON.encode('uuid' => role_uuid) + ) + end + end + + class Mock + def add_role_to_plan(_plan_uuid, _role_uuid) + response = Excon::Response.new + response.status = 201 + response.body = { + "created_at" => "2014-09-26T20:23:14.222815", + "description" => "Development testing cloud", + "name" => "dev-cloud", + "parameters" => [], + "roles" => [ + { + "description" => "OpenStack hypervisor node. Can be wrapped in a ResourceGroup for scaling.\n", + "name" => "compute", + "uuid" => "f72c0656-5696-4c66-81a5-d6d88a48e385", + "version" => 1 + } + ], + "updated_at" => nil, + "uuid" => "53268a27-afc8-4b21-839f-90227dd7a001" + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/planning/requests/create_plan.rb b/lib/fog/openstack/planning/requests/create_plan.rb new file mode 100644 index 000000000..4e0cea2bd --- /dev/null +++ b/lib/fog/openstack/planning/requests/create_plan.rb @@ -0,0 +1,33 @@ +module Fog + module OpenStack + class Planning + class Real + def create_plan(parameters) + request( + expects: [201], + method: 'POST', + path: "plans", + body: Fog::JSON.encode(parameters) + ) + end + end + + class Mock + def create_plan(_parameters) + response = Excon::Response.new + response.status = 201 + response.body = { + "created_at" => "2014-09-26T20:23:14.222815", + "description" => "Development testing cloud", + "name" => "dev-cloud", + "parameters" => [], + "roles" => [], + "updated_at" => nil, + "uuid" => "53268a27-afc8-4b21-839f-90227dd7a001" + } + response + end + end + end + end +end diff --git a/lib/fog/planning/openstack/requests/delete_plan.rb b/lib/fog/openstack/planning/requests/delete_plan.rb similarity index 100% rename from lib/fog/planning/openstack/requests/delete_plan.rb rename to lib/fog/openstack/planning/requests/delete_plan.rb diff --git a/lib/fog/openstack/planning/requests/get_plan.rb b/lib/fog/openstack/planning/requests/get_plan.rb new file mode 100644 index 000000000..b000914aa --- /dev/null +++ b/lib/fog/openstack/planning/requests/get_plan.rb @@ -0,0 +1,58 @@ +module Fog + module OpenStack + class Planning + class Real + def get_plan(plan_uuid) + request( + expects: [200, 204], + method: 'GET', + path: "plans/#{plan_uuid}" + ) + end + end + + class Mock + def get_plan(_parameters = nil) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.body = { + "created_at" => "2014-09-26T20:23:14.222815", + "description" => "Development testing cloud", + "name" => "dev-cloud", + "parameters" => + [ + { + "default" => "guest", + "description" => "The password for RabbitMQ", + "hidden" => true, + "label" => nil, + "name" => "compute-1 => =>RabbitPassword", + "value" => "secret-password" + }, + { + "default" => "default", + "description" => "description", + "hidden" => true, + "label" => nil, + "name" => "name", + "value" => "value" + } + ], + "roles" => + [ + { + "description" => "OpenStack hypervisor node. Can be wrapped in a ResourceGroup for scaling.\n", + "name" => "compute", + "uuid" => "b7b1583c-5c80-481f-a25b-708ed4a39734", + "version" => 1 + } + ], + "updated_at" => nil, + "uuid" => "53268a27-afc8-4b21-839f-90227dd7a001" + } + response + end + end + end + end +end diff --git a/lib/fog/planning/openstack/requests/get_plan_templates.rb b/lib/fog/openstack/planning/requests/get_plan_templates.rb similarity index 79% rename from lib/fog/planning/openstack/requests/get_plan_templates.rb rename to lib/fog/openstack/planning/requests/get_plan_templates.rb index 8e7451502..00abe1b6c 100644 --- a/lib/fog/planning/openstack/requests/get_plan_templates.rb +++ b/lib/fog/openstack/planning/requests/get_plan_templates.rb @@ -16,8 +16,8 @@ def get_plan_templates(_plan_uuid) response = Excon::Response.new response.status = [200, 204][rand(2)] response.body = { - "environment.yaml" => "... content of template file ...", - "plan.yaml" => "... content of template file ...", + "environment.yaml" => "... content of template file ...", + "plan.yaml" => "... content of template file ...", "provider-compute-1.yaml" => "... content of template file ..." } response diff --git a/lib/fog/openstack/planning/requests/list_plans.rb b/lib/fog/openstack/planning/requests/list_plans.rb new file mode 100644 index 000000000..e53db8a5d --- /dev/null +++ b/lib/fog/openstack/planning/requests/list_plans.rb @@ -0,0 +1,61 @@ +module Fog + module OpenStack + class Planning + class Real + def list_plans(options = {}) + request( + expects: [200, 204], + method: 'GET', + path: 'plans', + query: options + ) + end + end + + class Mock + def list_plans(_options = {}) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.body = [ + { + "created_at" => "2014-09-26T20:23:14.222815", + "description" => "Development testing cloud", + "name" => "dev-cloud", + "parameters" => + [ + { + "default" => "guest", + "description" => "The password for RabbitMQ", + "hidden" => true, + "label" => nil, + "name" => "compute-1 => =>RabbitPassword", + "value" => "secret-password" + }, + { + "default" => "default", + "description" => "description", + "hidden" => true, + "label" => nil, + "name" => "name", + "value" => "value" + } + ], + "roles" => + [ + { + "description" => "OpenStack hypervisor node. Can be wrapped in a ResourceGroup for scaling.\n", + "name" => "compute", + "uuid" => "b7b1583c-5c80-481f-a25b-708ed4a39734", + "version" => 1 + } + ], + "updated_at" => nil, + "uuid" => "53268a27-afc8-4b21-839f-90227dd7a001" + } + ] + response + end + end + end + end +end diff --git a/lib/fog/openstack/planning/requests/list_roles.rb b/lib/fog/openstack/planning/requests/list_roles.rb new file mode 100644 index 000000000..74ed1e000 --- /dev/null +++ b/lib/fog/openstack/planning/requests/list_roles.rb @@ -0,0 +1,32 @@ +module Fog + module OpenStack + class Planning + class Real + def list_roles(options = {}) + request( + expects: [200, 204], + method: 'GET', + path: 'roles', + query: options + ) + end + end + + class Mock + def list_roles(_options = {}) + response = Excon::Response.new + response.status = [200, 204][rand(2)] + response.body = [ + { + "description" => "OpenStack hypervisor node. Can be wrapped in a ResourceGroup for scaling.\n", + "name" => "compute", + "uuid" => "f72c0656-5696-4c66-81a5-d6d88a48e385", + "version" => 1 + } + ] + response + end + end + end + end +end diff --git a/lib/fog/openstack/planning/requests/patch_plan.rb b/lib/fog/openstack/planning/requests/patch_plan.rb new file mode 100644 index 000000000..9baf0a9e4 --- /dev/null +++ b/lib/fog/openstack/planning/requests/patch_plan.rb @@ -0,0 +1,51 @@ +module Fog + module OpenStack + class Planning + class Real + def patch_plan(plan_uuid, parameters) + request( + expects: [201], + method: 'PATCH', + path: "plans/#{plan_uuid}", + body: Fog::JSON.encode(parameters) + ) + end + end + + class Mock + def patch_plan(_plan_uuid, _parameters) + response = Excon::Response.new + response.status = 201 + response.body = { + "created_at" => "2014-09-26T20:23:14.222815", + "description" => "Development testing cloud", + "name" => "dev-cloud", + "parameters" => + [ + { + "default" => "guest", + "description" => "The password for RabbitMQ", + "hidden" => true, + "label" => nil, + "name" => "compute-1::RabbitPassword", + "value" => "secret-password" + } + ], + "roles" => + [ + { + "description" => "OpenStack hypervisor node. Can be wrapped in a ResourceGroup for scaling.\n", + "name" => "compute", + "uuid" => "b7b1583c-5c80-481f-a25b-708ed4a39734", + "version" => 1 + } + ], + "updated_at" => nil, + "uuid" => "53268a27-afc8-4b21-839f-90227dd7a001" + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/planning/requests/remove_role_from_plan.rb b/lib/fog/openstack/planning/requests/remove_role_from_plan.rb new file mode 100644 index 000000000..016397821 --- /dev/null +++ b/lib/fog/openstack/planning/requests/remove_role_from_plan.rb @@ -0,0 +1,32 @@ +module Fog + module OpenStack + class Planning + class Real + def remove_role_from_plan(plan_uuid, role_uuid) + request( + expects: [200], + method: 'DELETE', + path: "plans/#{plan_uuid}/roles/#{role_uuid}" + ) + end + end + + class Mock + def remove_role_from_plan(_plan_uuid, _role_uuid) + response = Excon::Response.new + response.status = 200 + response.body = { + "created_at" => "2014-09-26T20:23:14.222815", + "description" => "Development testing cloud", + "name" => "dev-cloud", + "parameters" => [], + "roles" => [], + "updated_at" => nil, + "uuid" => "53268a27-afc8-4b21-839f-90227dd7a001" + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/shared_file_system.rb b/lib/fog/openstack/shared_file_system.rb new file mode 100644 index 000000000..c51a0f066 --- /dev/null +++ b/lib/fog/openstack/shared_file_system.rb @@ -0,0 +1,372 @@ +module Fog + module OpenStack + class SharedFileSystem < Fog::Service + SUPPORTED_VERSIONS = /v2(\.0)*/.freeze + SUPPORTED_MICROVERSION = '2.15'.freeze + + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version, :openstack_shared_file_system_microversion + + model_path 'fog/openstack/shared_file_system/models' + model :network + collection :networks + model :share + collection :shares + model :snapshot + collection :snapshots + model :share_access_rule + collection :share_access_rules + model :share_export_location + collection :share_export_locations + model :availability_zone + collection :availability_zones + + request_path 'fog/openstack/shared_file_system/requests' + # share networks + request :list_share_networks + request :list_share_networks_detail + request :get_share_network + request :create_share_network + request :update_share_network + request :delete_share_network + request :share_network_action + request :add_security_service_to_share_network + request :remove_security_service_from_share_network + + # shares + request :list_shares + request :list_shares_detail + request :get_share + request :create_share + request :update_share + request :delete_share + request :share_action + request :grant_share_access + request :revoke_share_access + request :list_share_access_rules + request :list_share_export_locations + request :extend_share + request :shrink_share + + # snapshots + request :list_snapshots + request :list_snapshots_detail + request :get_snapshot + request :create_snapshot + request :update_snapshot + request :delete_snapshot + + # security services + request :list_security_services + request :list_security_services_detail + request :get_security_service + request :create_security_service + request :update_security_service + request :delete_security_service + + # quota + limits + request :get_limits + request :get_quota + request :update_quota + + # availability zones + request :list_availability_zones + + # rubocop:disable Metrics/MethodLength + class Mock + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + shares: [ + { + "id" => "d94a8548-2079-4be0-b21c-0a887acd31ca", + "links" => [ + { + "href" => "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/shares/d94a8548-2079-4be0-b21c-0a887acd31ca", + "rel" => "self" + }, + { + "href" => "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/d94a8548-2079-4be0-b21c-0a887acd31ca", + "rel" => "bookmark" + } + ], + "name" => "My_share" + }, + { + "id" => "406ea93b-32e9-4907-a117-148b3945749f", + "links" => [ + { + "href" => "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/shares/406ea93b-32e9-4907-a117-148b3945749f", + "rel" => "self" + }, + { + "href" => "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/406ea93b-32e9-4907-a117-148b3945749f", + "rel" => "bookmark" + } + ], + "name" => "Share1" + } + ], + shares_detail: [ + { + "links" => [ + { + "href" => "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/shares/f45cc5b2-d1bb-4a3e-ba5b-5c4125613adc", + "rel" => "self" + }, + { + "href" => "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/f45cc5b2-d1bb-4a3e-ba5b-5c4125613adc", + "rel" => "bookmark" + } + ], + "availability_zone" => "nova", + "share_network_id" => "f9b2e754-ac01-4466-86e1-5c569424754e", + "export_locations" => [], + "share_server_id" => "87d8943a-f5da-47a4-b2f2-ddfa6794aa82", + "snapshot_id" => '', + "id" => "f45cc5b2-d1bb-4a3e-ba5b-5c4125613adc", + "size" => 1, + "share_type" => "25747776-08e5-494f-ab40-a64b9d20d8f7", + "share_type_name" => "default", + "export_location" => '', + "consistency_group_id" => "9397c191-8427-4661-a2e8-b23820dc01d4", + "project_id" => "16e1ab15c35a457e9c2b2aa189f544e1", + "metadata" => {}, + "status" => "available", + "access_rules_status" => "active", + "description" => "There is a share description.", + "host" => "manila2@generic1#GENERIC1", + "task_state" => '', + "is_public" => 'true', + "snapshot_support" => 'true', + "name" => "my_share4", + "has_replicas" => 'false', + "replication_type" => '', + "created_at" => "2015-09-16T18:19:50.000000", + "share_proto" => "NFS", + "volume_type" => "default", + "source_cgsnapshot_member_id" => '' + } + ], + share_networks: [ + { + "id" => "32763294-e3d4-456a-998d-60047677c2fb", + "name" => "net_my1" + }, + { + "id" => "713df749-aac0-4a54-af52-10f6c991e80c", + "name" => "net_my" + } + ], + share_networks_detail: [ + { + "name" => "net_my1", + "segmentation_id" => '', + "created_at" => "2015-09-04T14:57:13.000000", + "neutron_subnet_id" => "53482b62-2c84-4a53-b6ab-30d9d9800d06", + "updated_at" => '', + "id" => "32763294-e3d4-456a-998d-60047677c2fb", + "neutron_net_id" => "998b42ee-2cee-4d36-8b95-67b5ca1f2109", + "ip_version" => '', + "nova_net_id" => '', + "cidr" => '', + "project_id" => "16e1ab15c35a457e9c2b2aa189f544e1", + "network_type" => '', + "description" => "descr" + } + ], + snapshots: [ + { + "id" => "086a1aa6-c425-4ecd-9612-391a3b1b9375", + "links" => [ + { + "href" => "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/086a1aa6-c425-4ecd-9612-391a3b1b9375", + "rel" => "self" + }, + { + "href" => "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/086a1aa6-c425-4ecd-9612-391a3b1b9375", + "rel" => "bookmark" + } + ], + "name" => "snapshot_My_share" + } + ], + security_services_detail: [ + { + "status" => "new", + "domain" => "", + "project_id" => "16e1ab15c35a457e9c2b2aa189f544e1", + "name" => "SecServ1", + "created_at" => "2015-09-07T12:19:10.000000", + "updated_at" => "", + "server" => "", + "dns_ip" => "10.0.0.0/24", + "user" => "demo", + "password" => "supersecret", + "type" => "kerberos", + "id" => "3c829734-0679-4c17-9637-801da48c0d5f", + "description" => "Creating my first Security Service" + } + ], + security_services: [ + { + "status" => "new", + "type" => "ldap", + "id" => "5a1d3a12-34a7-4087-8983-50e9ed03509a", + "name" => "SecServ2" + } + ], + availability_zones: [ + { + "name" => "nova", + "created_at" => "2015-09-18T09:50:55.000000", + "updated_at" => nil, + "id" => "388c983d-258e-4a0e-b1ba-10da37d766db" + } + ], + snapshots_detail: [ + { + "status" => "available", + "share_id" => "d94a8548-2079-4be0-b21c-0a887acd31ca", + "name" => "snapshot_My_share", + "links" => [ + { + "href" => "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/086a1aa6-c425-4ecd-9612-391a3b1b9375", + "rel" => "self" + }, + { + "href" => "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/086a1aa6-c425-4ecd-9612-391a3b1b9375", + "rel" => "bookmark" + } + ], + "created_at" => "2015-09-07T11:55:09.000000", + "description" => "Here is a snapshot of share My_share", + "share_proto" => "NFS", + "share_size" => 1, + "id" => "086a1aa6-c425-4ecd-9612-391a3b1b9375", + "size" => 1 + } + ], + export_locations: [ + { + "path" => "10.254.0.3:/shares/share-e1c2d35e-fe67-4028-ad7a-45f668732b1d", + "share_instance_id" => "e1c2d35e-fe67-4028-ad7a-45f668732b1d", + "is_admin_only" => false, + "id" => "b6bd76ce-12a2-42a9-a30a-8a43b503867d", + "preferred" => false + }, + { + "path" => "10.0.0.3:/shares/share-e1c2d35e-fe67-4028-ad7a-45f668732b1d", + "share_instance_id" => "e1c2d35e-fe67-4028-ad7a-45f668732b1d", + "is_admin_only" => true, + "id" => "6921e862-88bc-49a5-a2df-efeed9acd583", + "preferred" => false + } + ], + access_rules: [ + { + "share_id" => "406ea93b-32e9-4907-a117-148b3945749f", + "created_at" => "2015-09-07T09:14:48.000000", + "updated_at" => '', + "access_type" => "ip", + "access_to" => "0.0.0.0/0", + "access_level" => "rw", + "access_key" => '', + "id" => "a25b2df3-90bd-4add-afa6-5f0dbbd50452" + } + ], + quota: { + "gigabytes" => 1000, + "shares" => 50, + "snapshot_gigabytes" => 1000, + "snapshots" => 50, + "share_networks" => 10, + "id" => "16e1ab15c35a457e9c2b2aa189f544e1" + } + } + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 8786 + management_url.path = '/v2' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].detect { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_region: @openstack_region, + openstack_management_url: @openstack_management_url } + end + end + # rubocop:enable Metrics/MethodLength + + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::SharedFileSystem::NotFound + end + + def action_prefix + microversion_newer_than?('2.6') ? '' : 'os-' + end + + def default_service_type + %w[sharev2] + end + + def initialize(options = {}) + @supported_versions = SUPPORTED_VERSIONS + @supported_microversion = SUPPORTED_MICROVERSION + @fixed_microversion = options[:openstack_shared_file_system_microversion] + @microversion_key = 'X-Openstack-Manila-Api-Version'.freeze + super + end + end + end + end +end diff --git a/lib/fog/openstack/shared_file_system/models/availability_zone.rb b/lib/fog/openstack/shared_file_system/models/availability_zone.rb new file mode 100644 index 000000000..10c2c463f --- /dev/null +++ b/lib/fog/openstack/shared_file_system/models/availability_zone.rb @@ -0,0 +1,15 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class SharedFileSystem + class AvailabilityZone < Fog::OpenStack::Model + identity :id + + attribute :name + attribute :created_at + attribute :updated_at + end + end + end +end diff --git a/lib/fog/openstack/shared_file_system/models/availability_zones.rb b/lib/fog/openstack/shared_file_system/models/availability_zones.rb new file mode 100644 index 000000000..e6c9b0443 --- /dev/null +++ b/lib/fog/openstack/shared_file_system/models/availability_zones.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/shared_file_system/models/availability_zone' + +module Fog + module OpenStack + class SharedFileSystem + class AvailabilityZones < Fog::OpenStack::Collection + model Fog::OpenStack::SharedFileSystem::AvailabilityZone + + def all + load_response(service.list_availability_zones, 'availability_zones') + end + end + end + end +end diff --git a/lib/fog/openstack/shared_file_system/models/network.rb b/lib/fog/openstack/shared_file_system/models/network.rb new file mode 100644 index 000000000..c0652980d --- /dev/null +++ b/lib/fog/openstack/shared_file_system/models/network.rb @@ -0,0 +1,43 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class SharedFileSystem + class Network < Fog::OpenStack::Model + identity :id + + attribute :name + attribute :description + attribute :neutron_net_id + attribute :neutron_subnet_id + attribute :nova_net_id + attribute :network_type + attribute :segmentation_id + attribute :cidr + attribute :ip_version + attribute :project_id + attribute :created_at + attribute :updated_at + + def save + raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? + + merge_attributes(service.create_share_network(attributes).body['share_network']) + true + end + + def update(options = nil) + requires :id + merge_attributes(service.update_share_network(id, options || attributes).body['share_network']) + self + end + + def destroy + requires :id + service.delete_share_network(id) + true + end + end + end + end +end diff --git a/lib/fog/openstack/shared_file_system/models/networks.rb b/lib/fog/openstack/shared_file_system/models/networks.rb new file mode 100644 index 000000000..2edc0209a --- /dev/null +++ b/lib/fog/openstack/shared_file_system/models/networks.rb @@ -0,0 +1,28 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/shared_file_system/models/network' + +module Fog + module OpenStack + class SharedFileSystem + class Networks < Fog::OpenStack::Collection + model Fog::OpenStack::SharedFileSystem::Network + + def all(options = {}) + load_response(service.list_share_networks_detail(options), 'share_networks') + end + + def find_by_id(id) + net_hash = service.get_share_network(id).body['share_network'] + new(net_hash.merge(service: service)) + end + + alias get find_by_id + + def destroy(id) + net = find_by_id(id) + net.destroy + end + end + end + end +end diff --git a/lib/fog/shared_file_system/openstack/models/share.rb b/lib/fog/openstack/shared_file_system/models/share.rb similarity index 98% rename from lib/fog/shared_file_system/openstack/models/share.rb rename to lib/fog/openstack/shared_file_system/models/share.rb index 5c6796fe8..b8c76571f 100644 --- a/lib/fog/shared_file_system/openstack/models/share.rb +++ b/lib/fog/openstack/shared_file_system/models/share.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Share < Fog::OpenStack::Model identity :id @@ -37,6 +37,7 @@ class Share < Fog::OpenStack::Model def save raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? + requires :size, :share_proto merge_attributes(service.create_share(share_proto, size, attributes).body['share']) true diff --git a/lib/fog/shared_file_system/openstack/models/share_access_rule.rb b/lib/fog/openstack/shared_file_system/models/share_access_rule.rb similarity index 94% rename from lib/fog/shared_file_system/openstack/models/share_access_rule.rb rename to lib/fog/openstack/shared_file_system/models/share_access_rule.rb index 932e01ec6..d314578bc 100644 --- a/lib/fog/shared_file_system/openstack/models/share_access_rule.rb +++ b/lib/fog/openstack/shared_file_system/models/share_access_rule.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class ShareAccessRule < Fog::OpenStack::Model attr_accessor :share @@ -16,6 +16,7 @@ class ShareAccessRule < Fog::OpenStack::Model def save requires :share, :access_level, :access_type, :access_to raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? + merge_attributes(service.grant_share_access(@share.id, access_to, access_type, access_level).body['access']) true end diff --git a/lib/fog/shared_file_system/openstack/models/share_access_rules.rb b/lib/fog/openstack/shared_file_system/models/share_access_rules.rb similarity index 76% rename from lib/fog/shared_file_system/openstack/models/share_access_rules.rb rename to lib/fog/openstack/shared_file_system/models/share_access_rules.rb index 6895deaaf..6674131a1 100644 --- a/lib/fog/shared_file_system/openstack/models/share_access_rules.rb +++ b/lib/fog/openstack/shared_file_system/models/share_access_rules.rb @@ -1,11 +1,11 @@ require 'fog/openstack/models/collection' -require 'fog/shared_file_system/openstack/models/share_access_rule' +require 'fog/openstack/shared_file_system/models/share_access_rule' module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class ShareAccessRules < Fog::OpenStack::Collection - model Fog::SharedFileSystem::OpenStack::ShareAccessRule + model Fog::OpenStack::SharedFileSystem::ShareAccessRule attr_accessor :share diff --git a/lib/fog/shared_file_system/openstack/models/share_export_location.rb b/lib/fog/openstack/shared_file_system/models/share_export_location.rb similarity index 85% rename from lib/fog/shared_file_system/openstack/models/share_export_location.rb rename to lib/fog/openstack/shared_file_system/models/share_export_location.rb index 7ca115c63..e25dd6d5d 100644 --- a/lib/fog/shared_file_system/openstack/models/share_export_location.rb +++ b/lib/fog/openstack/shared_file_system/models/share_export_location.rb @@ -1,8 +1,8 @@ require 'fog/openstack/models/model' module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class ShareExportLocation < Fog::OpenStack::Model identity :id diff --git a/lib/fog/shared_file_system/openstack/models/share_export_locations.rb b/lib/fog/openstack/shared_file_system/models/share_export_locations.rb similarity index 79% rename from lib/fog/shared_file_system/openstack/models/share_export_locations.rb rename to lib/fog/openstack/shared_file_system/models/share_export_locations.rb index a42b7c3a6..b0d0d6025 100644 --- a/lib/fog/shared_file_system/openstack/models/share_export_locations.rb +++ b/lib/fog/openstack/shared_file_system/models/share_export_locations.rb @@ -1,11 +1,11 @@ require 'fog/openstack/models/collection' -require 'fog/shared_file_system/openstack/models/share_access_rule' +require 'fog/openstack/shared_file_system/models/share_access_rule' module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class ShareExportLocations < Fog::OpenStack::Collection - model Fog::SharedFileSystem::OpenStack::ShareExportLocation + model Fog::OpenStack::SharedFileSystem::ShareExportLocation attr_accessor :share diff --git a/lib/fog/shared_file_system/openstack/models/shares.rb b/lib/fog/openstack/shared_file_system/models/shares.rb similarity index 76% rename from lib/fog/shared_file_system/openstack/models/shares.rb rename to lib/fog/openstack/shared_file_system/models/shares.rb index 96bd16756..f26777bd4 100644 --- a/lib/fog/shared_file_system/openstack/models/shares.rb +++ b/lib/fog/openstack/shared_file_system/models/shares.rb @@ -1,11 +1,11 @@ require 'fog/openstack/models/collection' -require 'fog/shared_file_system/openstack/models/share' +require 'fog/openstack/shared_file_system/models/share' module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Shares < Fog::OpenStack::Collection - model Fog::SharedFileSystem::OpenStack::Share + model Fog::OpenStack::SharedFileSystem::Share def all(options = {}) load_response(service.list_shares_detail(options), 'shares') diff --git a/lib/fog/openstack/shared_file_system/models/snapshot.rb b/lib/fog/openstack/shared_file_system/models/snapshot.rb new file mode 100644 index 000000000..c7f1598a0 --- /dev/null +++ b/lib/fog/openstack/shared_file_system/models/snapshot.rb @@ -0,0 +1,46 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class SharedFileSystem + class Snapshot < Fog::OpenStack::Model + identity :id + + attribute :share_id + attribute :status + attribute :name + attribute :description + attribute :share_proto + attribute :share_size + attribute :size + attribute :provider_location + attribute :links + attribute :created_at + + def save + raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? + + requires :share_id + merge_attributes(service.create_snapshot(share_id, attributes).body['snapshot']) + true + end + + def update(options = nil) + requires :id + merge_attributes(service.update_snapshot(id, options || attributes).body['snapshot']) + self + end + + def destroy + requires :id + service.delete_snapshot(id) + true + end + + def ready? + status == 'available' + end + end + end + end +end diff --git a/lib/fog/openstack/shared_file_system/models/snapshots.rb b/lib/fog/openstack/shared_file_system/models/snapshots.rb new file mode 100644 index 000000000..7c150f76c --- /dev/null +++ b/lib/fog/openstack/shared_file_system/models/snapshots.rb @@ -0,0 +1,28 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/shared_file_system/models/snapshot' + +module Fog + module OpenStack + class SharedFileSystem + class Snapshots < Fog::OpenStack::Collection + model Fog::OpenStack::SharedFileSystem::Snapshot + + def all(options = {}) + load_response(service.list_snapshots_detail(options), 'snapshots') + end + + def find_by_id(id) + snapshot_hash = service.get_snapshot(id).body['snapshot'] + new(snapshot_hash.merge(service: service)) + end + + alias get find_by_id + + def destroy(id) + snapshot = find_by_id(id) + snapshot.destroy + end + end + end + end +end diff --git a/lib/fog/shared_file_system/openstack/requests/add_security_service_to_share_network.rb b/lib/fog/openstack/shared_file_system/requests/add_security_service_to_share_network.rb similarity index 94% rename from lib/fog/shared_file_system/openstack/requests/add_security_service_to_share_network.rb rename to lib/fog/openstack/shared_file_system/requests/add_security_service_to_share_network.rb index 5866094e2..0383482e4 100644 --- a/lib/fog/shared_file_system/openstack/requests/add_security_service_to_share_network.rb +++ b/lib/fog/openstack/shared_file_system/requests/add_security_service_to_share_network.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def add_security_service_to_share_network(security_service_id, share_network_id) action = { diff --git a/lib/fog/shared_file_system/openstack/requests/create_security_service.rb b/lib/fog/openstack/shared_file_system/requests/create_security_service.rb similarity index 96% rename from lib/fog/shared_file_system/openstack/requests/create_security_service.rb rename to lib/fog/openstack/shared_file_system/requests/create_security_service.rb index 597f1ed6b..b1074367b 100644 --- a/lib/fog/shared_file_system/openstack/requests/create_security_service.rb +++ b/lib/fog/openstack/shared_file_system/requests/create_security_service.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def create_security_service(type, name, options = {}) data = { diff --git a/lib/fog/shared_file_system/openstack/requests/create_share.rb b/lib/fog/openstack/shared_file_system/requests/create_share.rb similarity index 93% rename from lib/fog/shared_file_system/openstack/requests/create_share.rb rename to lib/fog/openstack/shared_file_system/requests/create_share.rb index abe2a1392..2486caaad 100644 --- a/lib/fog/shared_file_system/openstack/requests/create_share.rb +++ b/lib/fog/openstack/shared_file_system/requests/create_share.rb @@ -1,11 +1,11 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def create_share(protocol, size, options = {}) data = { 'share_proto' => protocol, - 'size' => size + 'size' => size } vanilla_options = [ diff --git a/lib/fog/shared_file_system/openstack/requests/create_share_network.rb b/lib/fog/openstack/shared_file_system/requests/create_share_network.rb similarity index 95% rename from lib/fog/shared_file_system/openstack/requests/create_share_network.rb rename to lib/fog/openstack/shared_file_system/requests/create_share_network.rb index 3ec7c2790..7891ff48a 100644 --- a/lib/fog/shared_file_system/openstack/requests/create_share_network.rb +++ b/lib/fog/openstack/shared_file_system/requests/create_share_network.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def create_share_network(options = {}) data = {} diff --git a/lib/fog/openstack/shared_file_system/requests/create_snapshot.rb b/lib/fog/openstack/shared_file_system/requests/create_snapshot.rb new file mode 100644 index 000000000..7d224d2df --- /dev/null +++ b/lib/fog/openstack/shared_file_system/requests/create_snapshot.rb @@ -0,0 +1,46 @@ +module Fog + module OpenStack + class SharedFileSystem + class Real + def create_snapshot(share_id, options = {}) + data = { + 'share_id' => share_id + } + + vanilla_options = [ + :name, :description, :display_name, :display_description, :force + ] + + vanilla_options.select { |o| options[o] }.each do |key| + data[key] = options[key] + end + + request( + body: Fog::JSON.encode('snapshot' => data), + expects: 202, + method: 'POST', + path: 'snapshots' + ) + end + end + + class Mock + def create_snapshot(share_id, options = {}) + # stringify keys + options = Hash[options.map { |k, v| [k.to_s, v] }] + + response = Excon::Response.new + response.status = 202 + + snapshot = data[:snapshots_detail].first.dup + + snapshot['share_id'] = share_id + snapshot['status'] = 'creating' + + response.body = { 'snapshot' => snapshot.merge(options) } + response + end + end + end + end +end diff --git a/lib/fog/shared_file_system/openstack/requests/delete_security_service.rb b/lib/fog/openstack/shared_file_system/requests/delete_security_service.rb similarity index 89% rename from lib/fog/shared_file_system/openstack/requests/delete_security_service.rb rename to lib/fog/openstack/shared_file_system/requests/delete_security_service.rb index 7fbb3a372..6be0c2c59 100644 --- a/lib/fog/shared_file_system/openstack/requests/delete_security_service.rb +++ b/lib/fog/openstack/shared_file_system/requests/delete_security_service.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def delete_security_service(id) request( diff --git a/lib/fog/shared_file_system/openstack/requests/delete_share.rb b/lib/fog/openstack/shared_file_system/requests/delete_share.rb similarity index 93% rename from lib/fog/shared_file_system/openstack/requests/delete_share.rb rename to lib/fog/openstack/shared_file_system/requests/delete_share.rb index ea2d86b29..83714e6e2 100644 --- a/lib/fog/shared_file_system/openstack/requests/delete_share.rb +++ b/lib/fog/openstack/shared_file_system/requests/delete_share.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def delete_share(id) request( diff --git a/lib/fog/shared_file_system/openstack/requests/delete_share_network.rb b/lib/fog/openstack/shared_file_system/requests/delete_share_network.rb similarity index 92% rename from lib/fog/shared_file_system/openstack/requests/delete_share_network.rb rename to lib/fog/openstack/shared_file_system/requests/delete_share_network.rb index b00cbbe42..d080a8b61 100644 --- a/lib/fog/shared_file_system/openstack/requests/delete_share_network.rb +++ b/lib/fog/openstack/shared_file_system/requests/delete_share_network.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def delete_share_network(id) request( diff --git a/lib/fog/openstack/shared_file_system/requests/delete_snapshot.rb b/lib/fog/openstack/shared_file_system/requests/delete_snapshot.rb new file mode 100644 index 000000000..f5cd95d21 --- /dev/null +++ b/lib/fog/openstack/shared_file_system/requests/delete_snapshot.rb @@ -0,0 +1,30 @@ +module Fog + module OpenStack + class SharedFileSystem + class Real + def delete_snapshot(id) + request( + expects: 202, + method: 'DELETE', + path: "snapshots/#{id}" + ) + end + end + + class Mock + def delete_snapshot(id) + response = Excon::Response.new + response.status = 202 + + snapshot = data[:snapshot_updated] || data[:snapshots_detail].first.dup + snapshot['id'] = id + snapshot['status'] = 'deleting' + snapshot['links']['self'] = "https://127.0.0.1:8786/v2/snapshots/#{id}" + + response.body = { 'snapshot' => snapshot } + response + end + end + end + end +end diff --git a/lib/fog/shared_file_system/openstack/requests/extend_share.rb b/lib/fog/openstack/shared_file_system/requests/extend_share.rb similarity index 90% rename from lib/fog/shared_file_system/openstack/requests/extend_share.rb rename to lib/fog/openstack/shared_file_system/requests/extend_share.rb index 6fd4fcd99..723db63ce 100644 --- a/lib/fog/shared_file_system/openstack/requests/extend_share.rb +++ b/lib/fog/openstack/shared_file_system/requests/extend_share.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def extend_share(share_id, new_size) action = { diff --git a/lib/fog/openstack/shared_file_system/requests/get_limits.rb b/lib/fog/openstack/shared_file_system/requests/get_limits.rb new file mode 100644 index 000000000..9ab1a68b3 --- /dev/null +++ b/lib/fog/openstack/shared_file_system/requests/get_limits.rb @@ -0,0 +1,45 @@ +module Fog + module OpenStack + class SharedFileSystem + class Real + def get_limits + request( + expects: 200, + method: 'GET', + path: 'limits' + ) + end + end + + class Mock + def get_limits + absolute_limits = { + # Max + 'maxTotalShareGigabytes' => 1000, + 'maxTotalShareNetworks' => 10, + 'maxTotalShares' => 50, + 'maxTotalSnapshotGigabytes' => 1000, + 'maxTotalShareSnapshots' => 50, + + # Used + 'totalShareNetworksUsed' => 0, + 'totalSharesUsed' => 0, + 'totalShareGigabytesUsed' => 0, + 'totalShareSnapshotsUsed' => 0, + 'totalSnapshotGigabytesUsed' => 0 + } + + Excon::Response.new( + status: 200, + body: { + 'limits' => { + 'rate' => [], + 'absolute' => absolute_limits + } + } + ) + end + end + end + end +end diff --git a/lib/fog/openstack/shared_file_system/requests/get_quota.rb b/lib/fog/openstack/shared_file_system/requests/get_quota.rb new file mode 100644 index 000000000..64392a23f --- /dev/null +++ b/lib/fog/openstack/shared_file_system/requests/get_quota.rb @@ -0,0 +1,26 @@ +module Fog + module OpenStack + class SharedFileSystem + class Real + def get_quota(project_id) + request( + expects: 200, + method: 'GET', + path: "#{action_prefix}quota-sets/#{project_id}" + ) + end + end + + class Mock + def get_quota(project_id) + response = Excon::Response.new + response.status = 200 + quota_data = data[:quota_updated] || data[:quota] + quota_data['id'] = project_id + response.body = { 'quota_set' => quota_data } + response + end + end + end + end +end diff --git a/lib/fog/shared_file_system/openstack/requests/get_security_service.rb b/lib/fog/openstack/shared_file_system/requests/get_security_service.rb similarity index 92% rename from lib/fog/shared_file_system/openstack/requests/get_security_service.rb rename to lib/fog/openstack/shared_file_system/requests/get_security_service.rb index 02b783aeb..161ec0017 100644 --- a/lib/fog/shared_file_system/openstack/requests/get_security_service.rb +++ b/lib/fog/openstack/shared_file_system/requests/get_security_service.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def get_security_service(id) request( diff --git a/lib/fog/shared_file_system/openstack/requests/get_share.rb b/lib/fog/openstack/shared_file_system/requests/get_share.rb similarity index 91% rename from lib/fog/shared_file_system/openstack/requests/get_share.rb rename to lib/fog/openstack/shared_file_system/requests/get_share.rb index 4e781270e..b78cf305f 100644 --- a/lib/fog/shared_file_system/openstack/requests/get_share.rb +++ b/lib/fog/openstack/shared_file_system/requests/get_share.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def get_share(id) request( diff --git a/lib/fog/shared_file_system/openstack/requests/get_share_export_location.rb b/lib/fog/openstack/shared_file_system/requests/get_share_export_location.rb similarity index 95% rename from lib/fog/shared_file_system/openstack/requests/get_share_export_location.rb rename to lib/fog/openstack/shared_file_system/requests/get_share_export_location.rb index d8ca707eb..99f886b2c 100644 --- a/lib/fog/shared_file_system/openstack/requests/get_share_export_location.rb +++ b/lib/fog/openstack/shared_file_system/requests/get_share_export_location.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real # For older versions v1.0-2.8 the export locations are responsed as an attribute of share (export_locations). # For newer API versions (>= 2.9) it is available in separate APIs. diff --git a/lib/fog/shared_file_system/openstack/requests/get_share_network.rb b/lib/fog/openstack/shared_file_system/requests/get_share_network.rb similarity index 92% rename from lib/fog/shared_file_system/openstack/requests/get_share_network.rb rename to lib/fog/openstack/shared_file_system/requests/get_share_network.rb index d2f21fd0d..59e453bb0 100644 --- a/lib/fog/shared_file_system/openstack/requests/get_share_network.rb +++ b/lib/fog/openstack/shared_file_system/requests/get_share_network.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def get_share_network(id) request( diff --git a/lib/fog/shared_file_system/openstack/requests/get_snapshot.rb b/lib/fog/openstack/shared_file_system/requests/get_snapshot.rb similarity index 91% rename from lib/fog/shared_file_system/openstack/requests/get_snapshot.rb rename to lib/fog/openstack/shared_file_system/requests/get_snapshot.rb index 30ff2fe6a..40eb902d7 100644 --- a/lib/fog/shared_file_system/openstack/requests/get_snapshot.rb +++ b/lib/fog/openstack/shared_file_system/requests/get_snapshot.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def get_snapshot(id) request( diff --git a/lib/fog/shared_file_system/openstack/requests/grant_share_access.rb b/lib/fog/openstack/shared_file_system/requests/grant_share_access.rb similarity index 86% rename from lib/fog/shared_file_system/openstack/requests/grant_share_access.rb rename to lib/fog/openstack/shared_file_system/requests/grant_share_access.rb index 37d9044ed..2db83b69e 100644 --- a/lib/fog/shared_file_system/openstack/requests/grant_share_access.rb +++ b/lib/fog/openstack/shared_file_system/requests/grant_share_access.rb @@ -1,12 +1,12 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def grant_share_access(share_id, access_to = '0.0.0.0/0', access_type = 'ip', access_level = 'rw') action = { "#{action_prefix}allow_access" => { - 'access_to' => access_to, - 'access_type' => access_type, + 'access_to' => access_to, + 'access_type' => access_type, 'access_level' => access_level } } diff --git a/lib/fog/openstack/shared_file_system/requests/list_availability_zones.rb b/lib/fog/openstack/shared_file_system/requests/list_availability_zones.rb new file mode 100644 index 000000000..8f4dee5a7 --- /dev/null +++ b/lib/fog/openstack/shared_file_system/requests/list_availability_zones.rb @@ -0,0 +1,24 @@ +module Fog + module OpenStack + class SharedFileSystem + class Real + def list_availability_zones + request( + expects: 200, + method: 'GET', + path: microversion_newer_than?('2.6') ? 'availability-zones' : 'os-availability-zone' + ) + end + end + + class Mock + def list_availability_zones + response = Excon::Response.new + response.status = 200 + response.body = { 'availability_zones' => data[:availability_zones] } + response + end + end + end + end +end diff --git a/lib/fog/shared_file_system/openstack/requests/list_security_services.rb b/lib/fog/openstack/shared_file_system/requests/list_security_services.rb similarity index 91% rename from lib/fog/shared_file_system/openstack/requests/list_security_services.rb rename to lib/fog/openstack/shared_file_system/requests/list_security_services.rb index e70e1a6ca..2fe46a207 100644 --- a/lib/fog/shared_file_system/openstack/requests/list_security_services.rb +++ b/lib/fog/openstack/shared_file_system/requests/list_security_services.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def list_security_services(options = {}) request( diff --git a/lib/fog/shared_file_system/openstack/requests/list_security_services_detail.rb b/lib/fog/openstack/shared_file_system/requests/list_security_services_detail.rb similarity index 92% rename from lib/fog/shared_file_system/openstack/requests/list_security_services_detail.rb rename to lib/fog/openstack/shared_file_system/requests/list_security_services_detail.rb index 49f0eebe0..4f18a16b4 100644 --- a/lib/fog/shared_file_system/openstack/requests/list_security_services_detail.rb +++ b/lib/fog/openstack/shared_file_system/requests/list_security_services_detail.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def list_security_services_detail(options = {}) request( diff --git a/lib/fog/shared_file_system/openstack/requests/list_share_access_rules.rb b/lib/fog/openstack/shared_file_system/requests/list_share_access_rules.rb similarity index 92% rename from lib/fog/shared_file_system/openstack/requests/list_share_access_rules.rb rename to lib/fog/openstack/shared_file_system/requests/list_share_access_rules.rb index cb849b69c..892250a83 100644 --- a/lib/fog/shared_file_system/openstack/requests/list_share_access_rules.rb +++ b/lib/fog/openstack/shared_file_system/requests/list_share_access_rules.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def list_share_access_rules(share_id) action = { diff --git a/lib/fog/shared_file_system/openstack/requests/list_share_export_locations.rb b/lib/fog/openstack/shared_file_system/requests/list_share_export_locations.rb similarity index 94% rename from lib/fog/shared_file_system/openstack/requests/list_share_export_locations.rb rename to lib/fog/openstack/shared_file_system/requests/list_share_export_locations.rb index d17346c5b..6ece116c6 100644 --- a/lib/fog/shared_file_system/openstack/requests/list_share_export_locations.rb +++ b/lib/fog/openstack/shared_file_system/requests/list_share_export_locations.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real # For older versions v1.0-2.8 the export locations are responsed as an attribute of share (export_locations). # For newer API versions (>= 2.9) it is available in separate APIs. diff --git a/lib/fog/shared_file_system/openstack/requests/list_share_networks.rb b/lib/fog/openstack/shared_file_system/requests/list_share_networks.rb similarity index 91% rename from lib/fog/shared_file_system/openstack/requests/list_share_networks.rb rename to lib/fog/openstack/shared_file_system/requests/list_share_networks.rb index e3fb333e5..847e40f29 100644 --- a/lib/fog/shared_file_system/openstack/requests/list_share_networks.rb +++ b/lib/fog/openstack/shared_file_system/requests/list_share_networks.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def list_share_networks(options = {}) request( diff --git a/lib/fog/shared_file_system/openstack/requests/list_share_networks_detail.rb b/lib/fog/openstack/shared_file_system/requests/list_share_networks_detail.rb similarity index 92% rename from lib/fog/shared_file_system/openstack/requests/list_share_networks_detail.rb rename to lib/fog/openstack/shared_file_system/requests/list_share_networks_detail.rb index d7515c1c0..0b588102b 100644 --- a/lib/fog/shared_file_system/openstack/requests/list_share_networks_detail.rb +++ b/lib/fog/openstack/shared_file_system/requests/list_share_networks_detail.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def list_share_networks_detail(options = {}) request( diff --git a/lib/fog/shared_file_system/openstack/requests/list_shares.rb b/lib/fog/openstack/shared_file_system/requests/list_shares.rb similarity index 91% rename from lib/fog/shared_file_system/openstack/requests/list_shares.rb rename to lib/fog/openstack/shared_file_system/requests/list_shares.rb index 2be81f302..959ddce5a 100644 --- a/lib/fog/shared_file_system/openstack/requests/list_shares.rb +++ b/lib/fog/openstack/shared_file_system/requests/list_shares.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def list_shares(options = {}) request( diff --git a/lib/fog/shared_file_system/openstack/requests/list_shares_detail.rb b/lib/fog/openstack/shared_file_system/requests/list_shares_detail.rb similarity index 91% rename from lib/fog/shared_file_system/openstack/requests/list_shares_detail.rb rename to lib/fog/openstack/shared_file_system/requests/list_shares_detail.rb index 9dd6649f1..aaf5d7549 100644 --- a/lib/fog/shared_file_system/openstack/requests/list_shares_detail.rb +++ b/lib/fog/openstack/shared_file_system/requests/list_shares_detail.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def list_shares_detail(options = {}) request( diff --git a/lib/fog/openstack/shared_file_system/requests/list_snapshots.rb b/lib/fog/openstack/shared_file_system/requests/list_snapshots.rb new file mode 100644 index 000000000..9278d51d3 --- /dev/null +++ b/lib/fog/openstack/shared_file_system/requests/list_snapshots.rb @@ -0,0 +1,25 @@ +module Fog + module OpenStack + class SharedFileSystem + class Real + def list_snapshots(options = {}) + request( + expects: 200, + method: 'GET', + path: 'snapshots', + query: options + ) + end + end + + class Mock + def list_snapshots(_options = {}) + response = Excon::Response.new + response.status = 200 + response.body = { 'snapshots' => data[:snapshots] } + response + end + end + end + end +end diff --git a/lib/fog/openstack/shared_file_system/requests/list_snapshots_detail.rb b/lib/fog/openstack/shared_file_system/requests/list_snapshots_detail.rb new file mode 100644 index 000000000..7a69b6e1e --- /dev/null +++ b/lib/fog/openstack/shared_file_system/requests/list_snapshots_detail.rb @@ -0,0 +1,25 @@ +module Fog + module OpenStack + class SharedFileSystem + class Real + def list_snapshots_detail(options = {}) + request( + expects: 200, + method: 'GET', + path: 'snapshots/detail', + query: options + ) + end + end + + class Mock + def list_snapshots_detail(_options = {}) + response = Excon::Response.new + response.status = 200 + response.body = { 'snapshots' => data[:snapshots_detail] } + response + end + end + end + end +end diff --git a/lib/fog/shared_file_system/openstack/requests/remove_security_service_from_share_network.rb b/lib/fog/openstack/shared_file_system/requests/remove_security_service_from_share_network.rb similarity index 94% rename from lib/fog/shared_file_system/openstack/requests/remove_security_service_from_share_network.rb rename to lib/fog/openstack/shared_file_system/requests/remove_security_service_from_share_network.rb index 7952751b5..18311722f 100644 --- a/lib/fog/shared_file_system/openstack/requests/remove_security_service_from_share_network.rb +++ b/lib/fog/openstack/shared_file_system/requests/remove_security_service_from_share_network.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def remove_security_service_from_share_network(security_service_id, share_network_id) action = { diff --git a/lib/fog/shared_file_system/openstack/requests/revoke_share_access.rb b/lib/fog/openstack/shared_file_system/requests/revoke_share_access.rb similarity index 91% rename from lib/fog/shared_file_system/openstack/requests/revoke_share_access.rb rename to lib/fog/openstack/shared_file_system/requests/revoke_share_access.rb index 3f7016dd3..47610ee97 100644 --- a/lib/fog/shared_file_system/openstack/requests/revoke_share_access.rb +++ b/lib/fog/openstack/shared_file_system/requests/revoke_share_access.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def revoke_share_access(share_id, access_id) action = { diff --git a/lib/fog/shared_file_system/openstack/requests/share_action.rb b/lib/fog/openstack/shared_file_system/requests/share_action.rb similarity index 87% rename from lib/fog/shared_file_system/openstack/requests/share_action.rb rename to lib/fog/openstack/shared_file_system/requests/share_action.rb index 460e307f0..64a95d3bc 100644 --- a/lib/fog/shared_file_system/openstack/requests/share_action.rb +++ b/lib/fog/openstack/shared_file_system/requests/share_action.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def share_action(id, options = {}, expects_status = 202) request( diff --git a/lib/fog/shared_file_system/openstack/requests/share_network_action.rb b/lib/fog/openstack/shared_file_system/requests/share_network_action.rb similarity index 87% rename from lib/fog/shared_file_system/openstack/requests/share_network_action.rb rename to lib/fog/openstack/shared_file_system/requests/share_network_action.rb index 5e951fa0c..804f0255e 100644 --- a/lib/fog/shared_file_system/openstack/requests/share_network_action.rb +++ b/lib/fog/openstack/shared_file_system/requests/share_network_action.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def share_network_action(id, options = {}, expects_status = 200) request( diff --git a/lib/fog/shared_file_system/openstack/requests/shrink_share.rb b/lib/fog/openstack/shared_file_system/requests/shrink_share.rb similarity index 90% rename from lib/fog/shared_file_system/openstack/requests/shrink_share.rb rename to lib/fog/openstack/shared_file_system/requests/shrink_share.rb index 377b8ddb1..e0ebe59fc 100644 --- a/lib/fog/shared_file_system/openstack/requests/shrink_share.rb +++ b/lib/fog/openstack/shared_file_system/requests/shrink_share.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def shrink_share(share_id, new_size) action = { diff --git a/lib/fog/openstack/shared_file_system/requests/update_quota.rb b/lib/fog/openstack/shared_file_system/requests/update_quota.rb new file mode 100644 index 000000000..11cc8dbda --- /dev/null +++ b/lib/fog/openstack/shared_file_system/requests/update_quota.rb @@ -0,0 +1,30 @@ +module Fog + module OpenStack + class SharedFileSystem + class Real + def update_quota(project_id, options = {}) + request( + body: Fog::JSON.encode('quota_set' => options), + expects: 200, + method: 'PUT', + path: "#{action_prefix}quota-sets/#{project_id}" + ) + end + end + + class Mock + def update_quota(project_id, options = {}) + # stringify keys + options = Hash[options.map { |k, v| [k.to_s, v] }] + data[:quota_updated] = data[:quota].merge(options) + data[:quota_updated]['id'] = project_id + + response = Excon::Response.new + response.status = 200 + response.body = { 'quota_set' => data[:quota_updated] } + response + end + end + end + end +end diff --git a/lib/fog/shared_file_system/openstack/requests/update_security_service.rb b/lib/fog/openstack/shared_file_system/requests/update_security_service.rb similarity index 94% rename from lib/fog/shared_file_system/openstack/requests/update_security_service.rb rename to lib/fog/openstack/shared_file_system/requests/update_security_service.rb index f0af15c5d..76bf4342a 100644 --- a/lib/fog/shared_file_system/openstack/requests/update_security_service.rb +++ b/lib/fog/openstack/shared_file_system/requests/update_security_service.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def update_security_service(id, options = {}) request( diff --git a/lib/fog/shared_file_system/openstack/requests/update_share.rb b/lib/fog/openstack/shared_file_system/requests/update_share.rb similarity index 95% rename from lib/fog/shared_file_system/openstack/requests/update_share.rb rename to lib/fog/openstack/shared_file_system/requests/update_share.rb index efce07636..2a0e66880 100644 --- a/lib/fog/shared_file_system/openstack/requests/update_share.rb +++ b/lib/fog/openstack/shared_file_system/requests/update_share.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def update_share(id, options = {}) request( diff --git a/lib/fog/shared_file_system/openstack/requests/update_share_network.rb b/lib/fog/openstack/shared_file_system/requests/update_share_network.rb similarity index 94% rename from lib/fog/shared_file_system/openstack/requests/update_share_network.rb rename to lib/fog/openstack/shared_file_system/requests/update_share_network.rb index d7d8c9365..3d7a1ce20 100644 --- a/lib/fog/shared_file_system/openstack/requests/update_share_network.rb +++ b/lib/fog/openstack/shared_file_system/requests/update_share_network.rb @@ -1,6 +1,6 @@ module Fog - module SharedFileSystem - class OpenStack + module OpenStack + class SharedFileSystem class Real def update_share_network(id, options = {}) request( diff --git a/lib/fog/openstack/shared_file_system/requests/update_snapshot.rb b/lib/fog/openstack/shared_file_system/requests/update_snapshot.rb new file mode 100644 index 000000000..910c362a4 --- /dev/null +++ b/lib/fog/openstack/shared_file_system/requests/update_snapshot.rb @@ -0,0 +1,31 @@ +module Fog + module OpenStack + class SharedFileSystem + class Real + def update_snapshot(id, options = {}) + request( + body: Fog::JSON.encode('snapshot' => options), + expects: 200, + method: 'PUT', + path: "snapshots/#{id}" + ) + end + end + + class Mock + def update_snapshot(id, options = {}) + # stringify keys + options = Hash[options.map { |k, v| [k.to_s, v] }] + + data[:snapshot_updated] = data[:snapshots_detail].first.merge(options) + data[:snapshot_updated]['id'] = id + + response = Excon::Response.new + response.status = 200 + response.body = { 'snapshot' => data[:snapshot_updated] } + response + end + end + end + end +end diff --git a/lib/fog/openstack/storage.rb b/lib/fog/openstack/storage.rb new file mode 100644 index 000000000..1e28665ba --- /dev/null +++ b/lib/fog/openstack/storage.rb @@ -0,0 +1,166 @@ +module Fog + module OpenStack + class Storage < Fog::Service + requires :openstack_auth_url + recognizes :openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, :openstack_userid, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_auth_omit_default_port, + :openstack_project_name, :openstack_project_id, :openstack_cache_ttl, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version, :openstack_temp_url_key + + model_path 'fog/openstack/storage/models' + model :directory + collection :directories + model :file + collection :files + + request_path 'fog/openstack/storage/requests' + request :copy_object + request :delete_container + request :delete_object + request :delete_multiple_objects + request :delete_static_large_object + request :get_container + request :get_containers + request :get_object + request :get_object_http_url + request :get_object_https_url + request :head_container + request :head_containers + request :head_object + request :put_container + request :put_object + request :post_object + request :put_object_manifest + request :put_dynamic_obj_manifest + request :put_static_obj_manifest + request :post_set_meta_temp_url_key + request :public_url + + module Utils + def require_mime_types + # Use mime/types/columnar if available, for reduced memory usage + require 'mime/types/columnar' + rescue LoadError + begin + require 'mime/types' + rescue LoadError + Fog::Logger.warning("'mime-types' missing, please install and try again.") + exit(1) + end + end + end + + class Mock + include Utils + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = {} + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + require_mime_types + @openstack_api_key = options[:openstack_api_key] + @openstack_username = options[:openstack_username] + @openstack_management_url = options[:openstack_management_url] || 'http://example:8774/v2/AUTH_1234' + + @openstack_management_uri = URI.parse(@openstack_management_url) + @path = @openstack_management_uri.path + @path.sub!(%r{/$}, '') + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def change_account(account) + @original_path ||= @path + version_string = @original_path.split('/')[1] + @path = "/#{version_string}/#{account}" + end + + def reset_account_name + @path = @original_path + end + end + + class Real + include Utils + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Storage::NotFound + end + + def default_service_type + %w[object-store] + end + + def initialize(options = {}) + require_mime_types + super + end + + # Change the current account while re-using the auth token. + # + # This is usefull when you have an admin role and you're able + # to HEAD other user accounts, set quotas, list files, etc. + # + # For example: + # + # # List current user account details + # service = Fog::OpenStack::Storage.new + # service.request :method => 'HEAD' + # + # Would return something like: + # + # Account: AUTH_1234 + # Date: Tue, 05 Mar 2013 16:50:52 GMT + # X-Account-Bytes-Used: 0 (0.00 Bytes) + # X-Account-Container-Count: 0 + # X-Account-Object-Count: 0 + # + # Now let's change the account + # + # service.change_account('AUTH_3333') + # service.request :method => 'HEAD' + # + # Would return something like: + # + # Account: AUTH_3333 + # Date: Tue, 05 Mar 2013 16:51:53 GMT + # X-Account-Bytes-Used: 23423433 + # X-Account-Container-Count: 2 + # X-Account-Object-Count: 10 + # + # If we wan't to go back to our original admin account: + # + # service.reset_account_name + # + def change_account(account) + @original_path ||= @path + version_string = @path.split('/')[1] + @path = "/#{version_string}/#{account}" + end + + def reset_account_name + @path = @original_path + end + end + end + end +end diff --git a/lib/fog/openstack/storage/models/directories.rb b/lib/fog/openstack/storage/models/directories.rb new file mode 100644 index 000000000..14c7fbb03 --- /dev/null +++ b/lib/fog/openstack/storage/models/directories.rb @@ -0,0 +1,36 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/storage/models/directory' + +module Fog + module OpenStack + class Storage + class Directories < Fog::OpenStack::Collection + model Fog::OpenStack::Storage::Directory + + def all(options = {}) + data = service.get_containers(options) + load_response(data) + end + + def get(key, options = {}) + data = service.get_container(key, options) + directory = new(key: key) + data.headers.each do |l_key, value| + if ['X-Container-Bytes-Used', 'X-Container-Object-Count'].include?(l_key) + directory.merge_attributes(l_key => value) + end + end + directory.files.merge_attributes(options) + directory.files.instance_variable_set(:@loaded, true) + + data.body.each do |file| + directory.files << directory.files.new(file) + end + directory + rescue Fog::OpenStack::Storage::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/storage/models/directory.rb b/lib/fog/openstack/storage/models/directory.rb new file mode 100644 index 000000000..653038e69 --- /dev/null +++ b/lib/fog/openstack/storage/models/directory.rb @@ -0,0 +1,50 @@ +require 'fog/openstack/models/model' +require 'fog/openstack/storage/models/files' + +module Fog + module OpenStack + class Storage + class Directory < Fog::OpenStack::Model + identity :key, aliases: 'name' + + attribute :bytes, aliases: 'X-Container-Bytes-Used' + attribute :count, aliases: 'X-Container-Object-Count' + + attr_writer :public + + def destroy + requires :key + service.delete_container(key) + true + rescue Excon::Errors::NotFound + false + end + + def files + @files ||= begin + Fog::OpenStack::Storage::Files.new( + directory: self, + service: service + ) + end + end + + def public_url + requires :key + + @public_url ||= begin + service.public_url(key) + rescue Fog::OpenStack::Storage::NotFound => _err + nil + end + end + + def save + requires :key + service.put_container(key, public: @public) + true + end + end + end + end +end diff --git a/lib/fog/storage/openstack/models/file.rb b/lib/fog/openstack/storage/models/file.rb similarity index 95% rename from lib/fog/storage/openstack/models/file.rb rename to lib/fog/openstack/storage/models/file.rb index cbe54645a..51ccb1c08 100644 --- a/lib/fog/storage/openstack/models/file.rb +++ b/lib/fog/openstack/storage/models/file.rb @@ -1,12 +1,13 @@ require 'fog/openstack/models/model' module Fog - module Storage - class OpenStack + module OpenStack + class Storage class File < Fog::OpenStack::Model identity :key, aliases: 'name' attribute :access_control_allow_origin, aliases: ['Access-Control-Allow-Origin'] + attribute :cache_control, aliases: ['Cache-Control'] attribute :content_length, aliases: ['bytes', 'Content-Length'], type: :integer attribute :content_type, aliases: ['content_type', 'Content-Type'] attribute :content_disposition, aliases: ['content_disposition', 'Content-Disposition'] @@ -35,7 +36,7 @@ class File < Fog::OpenStack::Model def initialize(new_attributes = {}) super - @dirty = if last_modified then false else true end + @dirty = last_modified ? false : true end def body @@ -108,6 +109,7 @@ def public_url def save(options = {}) requires :directory, :key + options['Cache-Control'] = cache_control if cache_control options['Content-Type'] = content_type if content_type options['Content-Disposition'] = content_disposition if content_disposition options['Access-Control-Allow-Origin'] = access_control_allow_origin if access_control_allow_origin @@ -117,7 +119,7 @@ def save(options = {}) options['Content-Encoding'] = content_encoding if content_encoding options.merge!(metadata_to_headers) - if not @dirty + if !@dirty data = service.post_object(directory.key, key, options) else requires :body @@ -170,7 +172,7 @@ def key_to_header(key) def metadata_attributes if last_modified headers = service.head_object(directory.key, key).headers - headers.reject! { |k, _v| !metadata_attribute?(k) } + headers.select! { |k, _v| metadata_attribute?(k) } else {} end diff --git a/lib/fog/storage/openstack/models/files.rb b/lib/fog/openstack/storage/models/files.rb similarity index 86% rename from lib/fog/storage/openstack/models/files.rb rename to lib/fog/openstack/storage/models/files.rb index c658b022a..53976eaea 100644 --- a/lib/fog/storage/openstack/models/files.rb +++ b/lib/fog/openstack/storage/models/files.rb @@ -1,9 +1,9 @@ require 'fog/openstack/models/collection' -require 'fog/storage/openstack/models/file' +require 'fog/openstack/storage/models/file' module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Files < Fog::OpenStack::Collection attribute :directory attribute :limit @@ -11,14 +11,14 @@ class Files < Fog::OpenStack::Collection attribute :path attribute :prefix - model Fog::Storage::OpenStack::File + model Fog::OpenStack::Storage::File def all(options = {}) requires :directory options = { - 'limit' => limit, + 'limit' => limit, 'marker' => marker, - 'path' => path, + 'path' => path, 'prefix' => prefix }.merge!(options) merge_attributes(options) @@ -34,9 +34,7 @@ def all(options = {}) alias each_file_this_page each def each - if !block_given? - self - else + if block_given? subset = dup.all subset.each_file_this_page { |f| yield f } @@ -44,9 +42,8 @@ def each subset = subset.all(marker: subset.last.key) subset.each_file_this_page { |f| yield f } end - - self end + self end def get(key, &block) @@ -55,7 +52,7 @@ def get(key, &block) file_data = data.headers.merge(body: data.body, key: key) new(file_data) - rescue Fog::Storage::OpenStack::NotFound + rescue Fog::OpenStack::Storage::NotFound nil end @@ -81,7 +78,7 @@ def head(key, _options = {}) data = service.head_object(directory.key, key) file_data = data.headers.merge(key: key) new(file_data) - rescue Fog::Storage::OpenStack::NotFound + rescue Fog::OpenStack::Storage::NotFound nil end diff --git a/lib/fog/storage/openstack/requests/copy_object.rb b/lib/fog/openstack/storage/requests/copy_object.rb similarity index 91% rename from lib/fog/storage/openstack/requests/copy_object.rb rename to lib/fog/openstack/storage/requests/copy_object.rb index b8c24248e..6aa2287b7 100644 --- a/lib/fog/storage/openstack/requests/copy_object.rb +++ b/lib/fog/openstack/storage/requests/copy_object.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Copy object # @@ -12,7 +12,7 @@ class Real # * options<~Hash> - Additional headers def copy_object(source_container_name, source_object_name, target_container_name, target_object_name, options = {}) headers = { 'X-Copy-From' => "/#{source_container_name}/#{source_object_name}" }.merge(options) - request(expects: 201, + request(expects: [201, 202], headers: headers, method: 'PUT', path: "#{Fog::OpenStack.escape(target_container_name)}/#{Fog::OpenStack.escape(target_object_name)}") diff --git a/lib/fog/openstack/storage/requests/delete_container.rb b/lib/fog/openstack/storage/requests/delete_container.rb new file mode 100644 index 000000000..a63c9764d --- /dev/null +++ b/lib/fog/openstack/storage/requests/delete_container.rb @@ -0,0 +1,20 @@ +module Fog + module OpenStack + class Storage + class Real + # Delete an existing container + # + # ==== Parameters + # * name<~String> - Name of container to delete + # + def delete_container(name) + request( + expects: 204, + method: 'DELETE', + path: Fog::OpenStack.escape(name) + ) + end + end + end + end +end diff --git a/lib/fog/storage/openstack/requests/delete_multiple_objects.rb b/lib/fog/openstack/storage/requests/delete_multiple_objects.rb similarity index 97% rename from lib/fog/storage/openstack/requests/delete_multiple_objects.rb rename to lib/fog/openstack/storage/requests/delete_multiple_objects.rb index 340b46165..7fcf8e54c 100644 --- a/lib/fog/storage/openstack/requests/delete_multiple_objects.rb +++ b/lib/fog/openstack/storage/requests/delete_multiple_objects.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Deletes multiple objects or containers with a single request. # @@ -45,7 +45,7 @@ class Real def delete_multiple_objects(container, object_names, options = {}) body = object_names.map do |name| object_name = container ? "#{container}/#{name}" : name - URI.encode(object_name) + URI.encode_www_form_component(object_name) end.join("\n") response = request({ diff --git a/lib/fog/storage/openstack/requests/delete_object.rb b/lib/fog/openstack/storage/requests/delete_object.rb similarity index 92% rename from lib/fog/storage/openstack/requests/delete_object.rb rename to lib/fog/openstack/storage/requests/delete_object.rb index 6819c8bae..fc83bc711 100644 --- a/lib/fog/storage/openstack/requests/delete_object.rb +++ b/lib/fog/openstack/storage/requests/delete_object.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Delete an existing object # diff --git a/lib/fog/storage/openstack/requests/delete_static_large_object.rb b/lib/fog/openstack/storage/requests/delete_static_large_object.rb similarity index 98% rename from lib/fog/storage/openstack/requests/delete_static_large_object.rb rename to lib/fog/openstack/storage/requests/delete_static_large_object.rb index 009c812aa..33b85fe1f 100644 --- a/lib/fog/storage/openstack/requests/delete_static_large_object.rb +++ b/lib/fog/openstack/storage/requests/delete_static_large_object.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Delete a static large object. # diff --git a/lib/fog/openstack/storage/requests/get_container.rb b/lib/fog/openstack/storage/requests/get_container.rb new file mode 100644 index 000000000..1583e07cc --- /dev/null +++ b/lib/fog/openstack/storage/requests/get_container.rb @@ -0,0 +1,42 @@ +module Fog + module OpenStack + class Storage + class Real + # Get details for container and total bytes stored + # + # ==== Parameters + # * container<~String> - Name of container to retrieve info for + # * options<~String>: + # * 'limit'<~String> - Maximum number of objects to return + # * 'marker'<~String> - Only return objects whose name is greater than marker + # * 'prefix'<~String> - Limits results to those starting with prefix + # * 'path'<~String> - Return objects nested in the pseudo path + # + # ==== Returns + # * response<~Excon::Response>: + # * headers<~Hash>: + # * 'X-Account-Container-Count'<~String> - Count of containers + # * 'X-Account-Bytes-Used'<~String> - Bytes used + # * body<~Array>: + # * 'bytes'<~Integer> - Number of bytes used by container + # * 'count'<~Integer> - Number of items in container + # * 'name'<~String> - Name of container + # * item<~Hash>: + # * 'bytes'<~String> - Size of object + # * 'content_type'<~String> Content-Type of object + # * 'hash'<~String> - Hash of object (etag?) + # * 'last_modified'<~String> - Last modified timestamp + # * 'name'<~String> - Name of object + def get_container(container, options = {}) + options = options.reject { |_key, value| value.nil? } + request( + expects: 200, + method: 'GET', + path: Fog::OpenStack.escape(container), + query: { 'format' => 'json' }.merge!(options) + ) + end + end + end + end +end diff --git a/lib/fog/storage/openstack/requests/get_containers.rb b/lib/fog/openstack/storage/requests/get_containers.rb similarity index 96% rename from lib/fog/storage/openstack/requests/get_containers.rb rename to lib/fog/openstack/storage/requests/get_containers.rb index ca92a612d..64a6cc2d3 100644 --- a/lib/fog/storage/openstack/requests/get_containers.rb +++ b/lib/fog/openstack/storage/requests/get_containers.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # List existing storage containers # diff --git a/lib/fog/storage/openstack/requests/get_object.rb b/lib/fog/openstack/storage/requests/get_object.rb similarity index 94% rename from lib/fog/storage/openstack/requests/get_object.rb rename to lib/fog/openstack/storage/requests/get_object.rb index 7ac22103a..1ebe3d431 100644 --- a/lib/fog/storage/openstack/requests/get_object.rb +++ b/lib/fog/openstack/storage/requests/get_object.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Get details for object # diff --git a/lib/fog/storage/openstack/requests/get_object_http_url.rb b/lib/fog/openstack/storage/requests/get_object_http_url.rb similarity index 94% rename from lib/fog/storage/openstack/requests/get_object_http_url.rb rename to lib/fog/openstack/storage/requests/get_object_http_url.rb index a024f8550..cdbc7c8df 100644 --- a/lib/fog/storage/openstack/requests/get_object_http_url.rb +++ b/lib/fog/openstack/storage/requests/get_object_http_url.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Get an expiring object http url # diff --git a/lib/fog/openstack/storage/requests/get_object_https_url.rb b/lib/fog/openstack/storage/requests/get_object_https_url.rb new file mode 100644 index 000000000..181f841b5 --- /dev/null +++ b/lib/fog/openstack/storage/requests/get_object_https_url.rb @@ -0,0 +1,90 @@ +module Fog + module OpenStack + class Storage + class Real + # Get an expiring object https url from Cloud Files + # + # ==== Parameters + # * container<~String> - Name of container containing object + # * object<~String> - Name of object to get expiring url for + # * expires<~Time> - An expiry time for this url + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~String> - url for object + def get_object_https_url(container, object, expires, options = {}) + create_temp_url(container, object, expires, "GET", { port: 443 }.merge(options).merge(scheme: "https")) + end + + # creates a temporary url + # + # ==== Parameters + # * container<~String> - Name of container containing object + # * object<~String> - Name of object to get expiring url for + # * expires<~Time> - An expiry time for this url + # * method<~String> - The method to use for accessing the object (GET, PUT, HEAD) + # * options<~Hash> - An optional options hash + # * 'scheme'<~String> - The scheme to use (http, https) + # * 'host'<~String> - The host to use + # * 'port'<~Integer> - The port to use + # * 'filename'<~String> - Filename returned Content-Disposition response header + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~String> - url for object + # + # ==== See Also + # http://docs.rackspace.com/files/api/v1/cf-devguide/content/Create_TempURL-d1a444.html + # https://developer.openstack.org/api-ref/object-store/?expanded=get-object-content-and-metadata-detail#get-object-content-and-metadata + def create_temp_url(container, object, expires, method, options = {}) + raise ArgumentError, "Insufficient parameters specified." unless container && object && expires && method + raise ArgumentError, "Storage must be instantiated with the :openstack_temp_url_key option" if @openstack_temp_url_key.nil? + + scheme = options[:scheme] || @openstack_management_uri.scheme + host = options[:host] || @openstack_management_uri.host + port = options[:port] || @openstack_management_uri.port + + # POST not allowed + allowed_methods = %w(GET PUT HEAD) + unless allowed_methods.include?(method) + raise ArgumentError, "Invalid method '#{method}' specified. Valid methods are: #{allowed_methods.join(', ')}" + end + + expires = expires.to_i + object_path_escaped = "#{@path}/#{Fog::OpenStack.escape(container)}/#{Fog::OpenStack.escape(object, '/')}" + object_path_unescaped = "#{@path}/#{Fog::OpenStack.escape(container)}/#{object}" + string_to_sign = "#{method}\n#{expires}\n#{object_path_unescaped}" + + hmac = Fog::HMAC.new('sha1', @openstack_temp_url_key.to_s) + + query = { + temp_url_sig: sig_to_hex(hmac.sign(string_to_sign)), + temp_url_expires: expires + } + query[:filename] = options[:filename] if options[:filename] + + temp_url_options = { + scheme: scheme, + host: host, + port: port, + path: object_path_escaped, + query: query.map { |k, v| "#{k}=#{v}" }.join('&') + } + URI::Generic.build(temp_url_options).to_s + end + + private + + def sig_to_hex(str) + str = str.unpack("C*").map do |c| + c.to_s(16) + end + str = str.map do |h| + h.size == 1 ? "0#{h}" : h + end + str.join + end + end + end + end +end diff --git a/lib/fog/storage/openstack/requests/head_container.rb b/lib/fog/openstack/storage/requests/head_container.rb similarity index 94% rename from lib/fog/storage/openstack/requests/head_container.rb rename to lib/fog/openstack/storage/requests/head_container.rb index 593e05b9d..da9be9196 100644 --- a/lib/fog/storage/openstack/requests/head_container.rb +++ b/lib/fog/openstack/storage/requests/head_container.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # List number of objects and total bytes stored # diff --git a/lib/fog/storage/openstack/requests/head_containers.rb b/lib/fog/openstack/storage/requests/head_containers.rb similarity index 93% rename from lib/fog/storage/openstack/requests/head_containers.rb rename to lib/fog/openstack/storage/requests/head_containers.rb index 3569ddba8..8fff2cebd 100644 --- a/lib/fog/storage/openstack/requests/head_containers.rb +++ b/lib/fog/openstack/storage/requests/head_containers.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # List number of containers and total bytes stored # diff --git a/lib/fog/storage/openstack/requests/head_object.rb b/lib/fog/openstack/storage/requests/head_object.rb similarity index 93% rename from lib/fog/storage/openstack/requests/head_object.rb rename to lib/fog/openstack/storage/requests/head_object.rb index 898a68a31..545793f02 100644 --- a/lib/fog/storage/openstack/requests/head_object.rb +++ b/lib/fog/openstack/storage/requests/head_object.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Get headers for object # diff --git a/lib/fog/storage/openstack/requests/post_object.rb b/lib/fog/openstack/storage/requests/post_object.rb similarity index 94% rename from lib/fog/storage/openstack/requests/post_object.rb rename to lib/fog/openstack/storage/requests/post_object.rb index eee925241..094f22abb 100644 --- a/lib/fog/storage/openstack/requests/post_object.rb +++ b/lib/fog/openstack/storage/requests/post_object.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Update object metadata # diff --git a/lib/fog/storage/openstack/requests/post_set_meta_temp_url_key.rb b/lib/fog/openstack/storage/requests/post_set_meta_temp_url_key.rb similarity index 96% rename from lib/fog/storage/openstack/requests/post_set_meta_temp_url_key.rb rename to lib/fog/openstack/storage/requests/post_set_meta_temp_url_key.rb index 8faa319bd..3cc484236 100644 --- a/lib/fog/storage/openstack/requests/post_set_meta_temp_url_key.rb +++ b/lib/fog/openstack/storage/requests/post_set_meta_temp_url_key.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Set the account wide Temp URL Key. This is a secret key that's # used to generate signed expiring URLs. diff --git a/lib/fog/storage/openstack/requests/public_url.rb b/lib/fog/openstack/storage/requests/public_url.rb similarity index 78% rename from lib/fog/storage/openstack/requests/public_url.rb rename to lib/fog/openstack/storage/requests/public_url.rb index a4210da23..70ffcfa98 100644 --- a/lib/fog/storage/openstack/requests/public_url.rb +++ b/lib/fog/openstack/storage/requests/public_url.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage module PublicUrl # Get public_url for an object # @@ -10,6 +10,7 @@ module PublicUrl # def public_url(container = nil, object = nil) return nil if container.nil? + u = "#{url}/#{Fog::OpenStack.escape(container)}" u << "/#{Fog::OpenStack.escape(object)}" unless object.nil? u @@ -18,7 +19,8 @@ def public_url(container = nil, object = nil) private def url - "#{@scheme}://#{@host}:#{@port}#{@path}" + "#{@openstack_management_uri.scheme}://#{@openstack_management_uri.host}:"\ + "#{@openstack_management_uri.port}#{@path}" end end diff --git a/lib/fog/storage/openstack/requests/put_container.rb b/lib/fog/openstack/storage/requests/put_container.rb similarity index 94% rename from lib/fog/storage/openstack/requests/put_container.rb rename to lib/fog/openstack/storage/requests/put_container.rb index ea73273d8..af17f86bb 100644 --- a/lib/fog/storage/openstack/requests/put_container.rb +++ b/lib/fog/openstack/storage/requests/put_container.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Create a new container # diff --git a/lib/fog/storage/openstack/requests/put_dynamic_obj_manifest.rb b/lib/fog/openstack/storage/requests/put_dynamic_obj_manifest.rb similarity index 95% rename from lib/fog/storage/openstack/requests/put_dynamic_obj_manifest.rb rename to lib/fog/openstack/storage/requests/put_dynamic_obj_manifest.rb index 876dc9b80..058a45d2c 100644 --- a/lib/fog/storage/openstack/requests/put_dynamic_obj_manifest.rb +++ b/lib/fog/openstack/storage/requests/put_dynamic_obj_manifest.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Create a new dynamic large object manifest # @@ -19,7 +19,7 @@ class Real # @param options [Hash] Config headers for +object+. # @option options [String] 'X-Object-Manifest' ("container/object") "/" for segment objects. # - # @raise [Fog::Storage::OpenStack::NotFound] HTTP 404 + # @raise [Fog::OpenStack::Storage::NotFound] HTTP 404 # @raise [Excon::Errors::BadRequest] HTTP 400 # @raise [Excon::Errors::Unauthorized] HTTP 401 # @raise [Excon::Errors::HTTPStatusError] diff --git a/lib/fog/storage/openstack/requests/put_object.rb b/lib/fog/openstack/storage/requests/put_object.rb similarity index 96% rename from lib/fog/storage/openstack/requests/put_object.rb rename to lib/fog/openstack/storage/requests/put_object.rb index d879901f7..c3cf26a65 100644 --- a/lib/fog/storage/openstack/requests/put_object.rb +++ b/lib/fog/openstack/storage/requests/put_object.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Create a new object # @@ -26,7 +26,7 @@ def put_object(container, object, data, options = {}, &block) end params.merge!( - expects: 201, + expects: [201, 202], idempotent: !params[:request_block], headers: headers, method: 'PUT', @@ -46,6 +46,7 @@ def put_object(_container, _object, data, _options = {}) Kernel.loop do chunk = yield break if chunk.empty? + dgst.update chunk end elsif data.kind_of?(String) diff --git a/lib/fog/storage/openstack/requests/put_object_manifest.rb b/lib/fog/openstack/storage/requests/put_object_manifest.rb similarity index 90% rename from lib/fog/storage/openstack/requests/put_object_manifest.rb rename to lib/fog/openstack/storage/requests/put_object_manifest.rb index 1fe01c6d8..e52456217 100644 --- a/lib/fog/storage/openstack/requests/put_object_manifest.rb +++ b/lib/fog/openstack/storage/requests/put_object_manifest.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Create a new dynamic large object manifest # diff --git a/lib/fog/storage/openstack/requests/put_static_obj_manifest.rb b/lib/fog/openstack/storage/requests/put_static_obj_manifest.rb similarity index 96% rename from lib/fog/storage/openstack/requests/put_static_obj_manifest.rb rename to lib/fog/openstack/storage/requests/put_static_obj_manifest.rb index 5407ae6d0..87441f023 100644 --- a/lib/fog/storage/openstack/requests/put_static_obj_manifest.rb +++ b/lib/fog/openstack/storage/requests/put_static_obj_manifest.rb @@ -1,6 +1,6 @@ module Fog - module Storage - class OpenStack + module OpenStack + class Storage class Real # Create a new static large object manifest. # @@ -33,7 +33,7 @@ class Real # @param segments [Array] Segment data for the object. # @param options [Hash] Config headers for +object+. # - # @raise [Fog::Storage::OpenStack::NotFound] HTTP 404 + # @raise [Fog::OpenStack::Storage::NotFound] HTTP 404 # @raise [Excon::Errors::BadRequest] HTTP 400 # @raise [Excon::Errors::Unauthorized] HTTP 401 # @raise [Excon::Errors::HTTPStatusError] diff --git a/lib/fog/openstack/version.rb b/lib/fog/openstack/version.rb index ed9d30b48..a2d7ab0a8 100644 --- a/lib/fog/openstack/version.rb +++ b/lib/fog/openstack/version.rb @@ -1,5 +1,5 @@ module Fog - module Openstack - VERSION = "0.1.24" + module OpenStack + VERSION = '1.0.8'.freeze end end diff --git a/lib/fog/openstack/volume.rb b/lib/fog/openstack/volume.rb new file mode 100644 index 000000000..70a6403fd --- /dev/null +++ b/lib/fog/openstack/volume.rb @@ -0,0 +1,31 @@ +module Fog + module OpenStack + class Volume < Fog::Service + autoload :V1, 'fog/openstack/volume/v1' + autoload :V2, 'fog/openstack/volume/v2' + + @@recognizes = [:openstack_auth_token, :openstack_management_url, + :persistent, :openstack_service_type, :openstack_service_name, + :openstack_tenant, :openstack_tenant_id, + :openstack_api_key, :openstack_username, :openstack_identity_endpoint, + :current_user, :current_tenant, :openstack_region, + :openstack_endpoint_type, :openstack_cache_ttl, + :openstack_project_name, :openstack_project_id, + :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, + :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, + :openstack_identity_api_version] + + # Fog::OpenStack::Image.new() will return a Fog::OpenStack::Volume::V2 or a Fog::OpenStack::Volume::V1, + # choosing the V2 by default, as V1 is deprecated since OpenStack Juno + def self.new(args = {}) + @openstack_auth_uri = URI.parse(args[:openstack_auth_url]) if args[:openstack_auth_url] + service = if inspect == 'Fog::OpenStack::Volume' + Fog::OpenStack::Volume::V2.new(args) || Fog::OpenStack::Volume::V1.new(args) + else + super + end + service + end + end + end +end diff --git a/lib/fog/openstack/volume/models/availability_zone.rb b/lib/fog/openstack/volume/models/availability_zone.rb new file mode 100644 index 000000000..bdbe24823 --- /dev/null +++ b/lib/fog/openstack/volume/models/availability_zone.rb @@ -0,0 +1,10 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Volume + class AvailabilityZone < Fog::OpenStack::Model + end + end + end +end diff --git a/lib/fog/openstack/volume/models/availability_zones.rb b/lib/fog/openstack/volume/models/availability_zones.rb new file mode 100644 index 000000000..413e5b2c8 --- /dev/null +++ b/lib/fog/openstack/volume/models/availability_zones.rb @@ -0,0 +1,14 @@ +require 'fog/openstack/models/collection' + +module Fog + module OpenStack + class Volume + module AvailabilityZones + def all(options = {}) + data = service.list_zones(options) + load_response(data, 'availabilityZoneInfo') + end + end + end + end +end diff --git a/lib/fog/openstack/volume/models/backup.rb b/lib/fog/openstack/volume/models/backup.rb new file mode 100644 index 000000000..bb76a2bc7 --- /dev/null +++ b/lib/fog/openstack/volume/models/backup.rb @@ -0,0 +1,46 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Volume + class Backup < Fog::OpenStack::Model + attribute :availability_zone + attribute :container + attribute :created_at + attribute :description + attribute :fail_reason + attribute :name + attribute :object_count + attribute :size + attribute :status + attribute :volume_id + attribute :is_incremental + attribute :has_dependent_backups + + def create + requires :name, :volume_id + data = service.create_backup(attributes) + merge_attributes(data.body['backup']) + true + end + + def destroy + requires :id + service.delete_backup(id) + true + end + + def restore(volume_id = nil, name = nil) + requires :id + service.restore_backup(id, volume_id, name) + true + end + + def volume + requires :id + service.get_volume_details(volume_id).body['volume'] + end + end + end + end +end diff --git a/lib/fog/openstack/volume/models/backups.rb b/lib/fog/openstack/volume/models/backups.rb new file mode 100644 index 000000000..3315bcd18 --- /dev/null +++ b/lib/fog/openstack/volume/models/backups.rb @@ -0,0 +1,26 @@ +require 'fog/openstack/models/collection' + +module Fog + module OpenStack + class Volume + module Backups + def all(options = {}) + load_response(service.list_backups_detailed(options), 'backups') + end + + def summary(options = {}) + load_response(service.list_backups(options), 'backups') + end + + def get(backup_id) + backup = service.get_backup_details(backup_id).body['backup'] + if backup + new(backup) + end + rescue Fog::OpenStack::Volume::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/volume/models/snapshot.rb b/lib/fog/openstack/volume/models/snapshot.rb new file mode 100644 index 000000000..83b4363e8 --- /dev/null +++ b/lib/fog/openstack/volume/models/snapshot.rb @@ -0,0 +1,38 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Volume + class Snapshot < Fog::OpenStack::Model + def update(data) + requires :id + + response = service.update_snapshot(id, data) + merge_attributes(response.body['snapshot']) + + self + end + + def destroy + requires :id + service.delete_snapshot(id) + true + end + + # Existing keys have values updated and new key-value pairs are created, but none are deleted + def update_metadata(metadata) + requires :id + service.update_snapshot_metadata(id, metadata) + true + end + + # Delete one specific key-value pair by specifying the key name + def delete_metadata(key_name) + requires :id + service.delete_snapshot_metadata(id, key_name) + true + end + end + end + end +end diff --git a/lib/fog/openstack/volume/models/snapshots.rb b/lib/fog/openstack/volume/models/snapshots.rb new file mode 100644 index 000000000..2537440e7 --- /dev/null +++ b/lib/fog/openstack/volume/models/snapshots.rb @@ -0,0 +1,26 @@ +require 'fog/openstack/models/collection' + +module Fog + module OpenStack + class Volume + module Snapshots + def all(options = {}) + load_response(service.list_snapshots_detailed(options), 'snapshots') + end + + def summary(options = {}) + load_response(service.list_snapshots(options), 'snapshots') + end + + def get(snapshots_id) + snapshot = service.get_snapshot_details(snapshots_id).body['snapshot'] + if snapshot + new(snapshot) + end + rescue Fog::OpenStack::Volume::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/volume/models/transfer.rb b/lib/fog/openstack/volume/models/transfer.rb new file mode 100644 index 000000000..949336015 --- /dev/null +++ b/lib/fog/openstack/volume/models/transfer.rb @@ -0,0 +1,28 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Volume + class Transfer < Fog::OpenStack::Model + def save + requires :name, :volume_id + data = service.create_transfer(volume_id, name: name) + merge_attributes(data.body['transfer']) + true + end + + def destroy + requires :id + service.delete_transfer(id) + true + end + + def initialize(attributes) + # Old 'connection' is renamed as service and should be used instead + prepare_service_value(attributes) + super + end + end + end + end +end diff --git a/lib/fog/openstack/volume/models/transfers.rb b/lib/fog/openstack/volume/models/transfers.rb new file mode 100644 index 000000000..5118419eb --- /dev/null +++ b/lib/fog/openstack/volume/models/transfers.rb @@ -0,0 +1,34 @@ +require 'fog/openstack/models/collection' + +module Fog + module OpenStack + class Volume + module Transfers + def all(options = {}) + load_response(service.list_transfers_detailed(options), 'transfers') + end + + def summary(options = {}) + load_response(service.list_transfers(options), 'transfers') + end + + def get(transfer_id) + if transfer = service.get_transfer_details(transfer_id).body['transfer'] + new(transfer) + end + rescue Fog::OpenStack::Volume::NotFound + nil + end + + def accept(transfer_id, auth_key) + # NOTE: This is NOT a method on the Transfer object, since the + # receiver cannot see the transfer object in the get_transfer_details + # or list_transfers(_detailed) requests. + if transfer = service.accept_transfer(transfer_id, auth_key).body['transfer'] + new(transfer) + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/models/volume.rb b/lib/fog/openstack/volume/models/volume.rb new file mode 100644 index 000000000..b78460d3b --- /dev/null +++ b/lib/fog/openstack/volume/models/volume.rb @@ -0,0 +1,66 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Volume + class Volume < Fog::OpenStack::Model + attribute :metadata + attribute :status + attribute :size + attribute :volume_type, aliases: %w(volumeType type) + attribute :snapshot_id, aliases: 'snapshotId' + attribute :imageRef, aliases: 'image_id' + attribute :availability_zone, aliases: 'availabilityZone' + attribute :created_at, aliases: 'createdAt' + attribute :attachments + attribute :source_volid + + def destroy + requires :id + service.delete_volume(id) + true + end + + def extend(size) + requires :id + service.extend_volume(id, size) + true + end + + def ready? + status == 'available' + end + + def reset_status(status) + requires :id + service.action(id, 'os-reset_status' => { status: status }) + end + + def create_metadata(metadata) + replace_metadata(metadata) + end + + # Existing keys have values updated and new key-value pairs are created, but none are deleted + def update_metadata(metadata) + requires :id + service.update_metadata(id, metadata) + true + end + + # All existing key-value pairs are deleted and replaced with the key-value pairs specified here + def replace_metadata(metadata) + requires :id + service.replace_metadata(id, metadata) + true + end + + # Delete one specific key-value pair by specifying the key name + def delete_metadata(key_name) + requires :id + service.delete_metadata(id, key_name) + true + end + end + end + end +end diff --git a/lib/fog/openstack/volume/models/volume_type.rb b/lib/fog/openstack/volume/models/volume_type.rb new file mode 100644 index 000000000..6f23d4082 --- /dev/null +++ b/lib/fog/openstack/volume/models/volume_type.rb @@ -0,0 +1,35 @@ +require 'fog/openstack/models/model' + +module Fog + module OpenStack + class Volume + class VolumeType < Fog::OpenStack::Model + attribute :extra_specs + + def create + requires :name + + response = service.create_volume_type(attributes) + merge_attributes(response.body['volume_type']) + + self + end + + def update + requires :id + + response = service.update_volume_type(id, attributes) + merge_attributes(response.body['volume_type']) + + self + end + + def destroy + requires :id + service.delete_volume_type(id) + true + end + end + end + end +end diff --git a/lib/fog/openstack/volume/models/volume_types.rb b/lib/fog/openstack/volume/models/volume_types.rb new file mode 100644 index 000000000..3e1cd9851 --- /dev/null +++ b/lib/fog/openstack/volume/models/volume_types.rb @@ -0,0 +1,22 @@ +require 'fog/openstack/models/collection' + +module Fog + module OpenStack + class Volume + module VolumeTypes + def all(options = {}) + response = service.list_volume_types(options) + load_response(response, 'volume_types') + end + + def get(volume_type_id) + if volume_type = service.get_volume_type_details(volume_type_id).body['volume_type'] + new(volume_type) + end + rescue Fog::OpenStack::Volume::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/volume/models/volumes.rb b/lib/fog/openstack/volume/models/volumes.rb new file mode 100644 index 000000000..7efa2ad6f --- /dev/null +++ b/lib/fog/openstack/volume/models/volumes.rb @@ -0,0 +1,35 @@ +require 'fog/openstack/models/collection' + +module Fog + module OpenStack + class Volume + module Volumes + def all(options = {}) + # the parameter has been "detailed = true" before. Make sure we are + # backwards compatible + detailed = options.kind_of?(Hash) ? options.delete(:detailed) : options + if detailed.nil? || detailed + # This method gives details by default, unless false or {:detailed => false} is passed + load_response(service.list_volumes_detailed(options), 'volumes') + else + Fog::Logger.deprecation('Calling OpenStack[:volume].volumes.all(false) or volumes.all(:detailed => false) '\ + ' is deprecated, call .volumes.summary instead') + load_response(service.list_volumes(options), 'volumes') + end + end + + def summary(options = {}) + load_response(service.list_volumes(options), 'volumes') + end + + def get(volume_id) + if volume = service.get_volume_details(volume_id).body['volume'] + new(volume) + end + rescue Fog::OpenStack::Volume::NotFound + nil + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/accept_transfer.rb b/lib/fog/openstack/volume/requests/accept_transfer.rb new file mode 100644 index 000000000..c56ddf838 --- /dev/null +++ b/lib/fog/openstack/volume/requests/accept_transfer.rb @@ -0,0 +1,22 @@ +module Fog + module OpenStack + class Volume + module Real + def accept_transfer(transfer_id, auth_key) + data = { + 'accept' => { + 'auth_key' => auth_key + } + } + + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'POST', + path: "os-volume-transfer/#{transfer_id}/accept" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/action.rb b/lib/fog/openstack/volume/requests/action.rb new file mode 100644 index 000000000..630e0bf1a --- /dev/null +++ b/lib/fog/openstack/volume/requests/action.rb @@ -0,0 +1,16 @@ +module Fog + module OpenStack + class Volume + module Real + def action(id, data) + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'POST', + path: "volumes/#{id}/action" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/create_backup.rb b/lib/fog/openstack/volume/requests/create_backup.rb new file mode 100644 index 000000000..fa5542635 --- /dev/null +++ b/lib/fog/openstack/volume/requests/create_backup.rb @@ -0,0 +1,49 @@ +module Fog + module OpenStack + class Volume + module Real + def create_backup(attributes) + desired_options = [ + :container, + :name, + :description, + :volume_id, + :incremental, + :force + ] + + # Filter only allowed creation attributes + data = { + backup: attributes.select { |key, _value| desired_options.include?(key.to_sym) } + } + + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'POST', + path: 'backups' + ) + end + end + + module Mock + def create_backup(_options = {}) + response = Excon::Response.new + response.status = 202 + response.body = { + "backup" => { + "id" => "1", + "volume_id" => "2", + "name" => "backup 1", + "status" => "available", + "size" => 1, + "object_count" => 16, + "container" => "testcontainer" + } + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/create_snapshot.rb b/lib/fog/openstack/volume/requests/create_snapshot.rb new file mode 100644 index 000000000..9cd5b3c8e --- /dev/null +++ b/lib/fog/openstack/volume/requests/create_snapshot.rb @@ -0,0 +1,18 @@ +module Fog + module OpenStack + class Volume + module Real + private + + def _create_snapshot(data) + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'POST', + path: "snapshots" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/create_transfer.rb b/lib/fog/openstack/volume/requests/create_transfer.rb new file mode 100644 index 000000000..956337824 --- /dev/null +++ b/lib/fog/openstack/volume/requests/create_transfer.rb @@ -0,0 +1,25 @@ +module Fog + module OpenStack + class Volume + module Real + def create_transfer(volume_id, options = {}) + data = { + 'transfer' => { + 'volume_id' => volume_id + } + } + if options[:name] + data['transfer']['name'] = options[:name] + end + + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'POST', + path: 'os-volume-transfer' + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/create_volume.rb b/lib/fog/openstack/volume/requests/create_volume.rb new file mode 100644 index 000000000..fb1b1b923 --- /dev/null +++ b/lib/fog/openstack/volume/requests/create_volume.rb @@ -0,0 +1,24 @@ +module Fog + module OpenStack + class Volume + module Real + private + + def _create_volume(data, options = {}) + vanilla_options = [:snapshot_id, :imageRef, :volume_type, + :source_volid, :availability_zone, :metadata, + :multiattach] + vanilla_options.select { |o| options[o] }.each do |key| + data['volume'][key] = options[key] + end + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'POST', + path: "volumes" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/create_volume_type.rb b/lib/fog/openstack/volume/requests/create_volume_type.rb new file mode 100644 index 000000000..a63c8d258 --- /dev/null +++ b/lib/fog/openstack/volume/requests/create_volume_type.rb @@ -0,0 +1,41 @@ +module Fog + module OpenStack + class Volume + module Real + def create_volume_type(options = {}) + data = { + 'volume_type' => {} + } + + vanilla_options = [:name, :extra_specs] + vanilla_options.select { |o| options[o] }.each do |key| + data['volume_type'][key] = options[key] + end + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'POST', + path: "types" + ) + end + end + + module Mock + def create_volume_type(_options = {}) + response = Excon::Response.new + response.status = 202 + response.body = { + "volume_type" => { + "id" => "6685584b-1eac-4da6-b5c3-555430cf68ff", + "name" => "vol-type-001", + "extra_specs" => { + "capabilities" => "gpu" + } + } + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/delete_backup.rb b/lib/fog/openstack/volume/requests/delete_backup.rb new file mode 100644 index 000000000..848c6e675 --- /dev/null +++ b/lib/fog/openstack/volume/requests/delete_backup.rb @@ -0,0 +1,23 @@ +module Fog + module OpenStack + class Volume + module Real + def delete_backup(backup_id) + request( + expects: 202, + method: 'DELETE', + path: "backups/#{backup_id}" + ) + end + end + + module Mock + def delete_backup(_backup_id) + response = Excon::Response.new + response.status = 204 + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/delete_metadata.rb b/lib/fog/openstack/volume/requests/delete_metadata.rb new file mode 100644 index 000000000..5108460c6 --- /dev/null +++ b/lib/fog/openstack/volume/requests/delete_metadata.rb @@ -0,0 +1,15 @@ +module Fog + module OpenStack + class Volume + module Real + def delete_metadata(volume_id, key_name) + request( + expects: [200], + method: 'DELETE', + path: "volumes/#{volume_id}/metadata/#{key_name}" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/delete_snapshot.rb b/lib/fog/openstack/volume/requests/delete_snapshot.rb new file mode 100644 index 000000000..0928a61a7 --- /dev/null +++ b/lib/fog/openstack/volume/requests/delete_snapshot.rb @@ -0,0 +1,23 @@ +module Fog + module OpenStack + class Volume + module Real + def delete_snapshot(snapshot_id) + request( + expects: 202, + method: 'DELETE', + path: "snapshots/#{snapshot_id}" + ) + end + end + + module Mock + def delete_snapshot(_snapshot_id) + response = Excon::Response.new + response.status = 202 + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/delete_snapshot_metadata.rb b/lib/fog/openstack/volume/requests/delete_snapshot_metadata.rb new file mode 100644 index 000000000..93d276ed7 --- /dev/null +++ b/lib/fog/openstack/volume/requests/delete_snapshot_metadata.rb @@ -0,0 +1,15 @@ +module Fog + module OpenStack + class Volume + module Real + def delete_snapshot_metadata(snapshot_id, key_name) + request( + expects: [200], + method: 'DELETE', + path: "snapshots/#{snapshot_id}/metadata/#{key_name}" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/delete_transfer.rb b/lib/fog/openstack/volume/requests/delete_transfer.rb new file mode 100644 index 000000000..e9678158e --- /dev/null +++ b/lib/fog/openstack/volume/requests/delete_transfer.rb @@ -0,0 +1,15 @@ +module Fog + module OpenStack + class Volume + module Real + def delete_transfer(transfer_id) + request( + expects: 202, + method: 'DELETE', + path: "os-volume-transfer/#{transfer_id}" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/delete_volume.rb b/lib/fog/openstack/volume/requests/delete_volume.rb new file mode 100644 index 000000000..1124fcbaf --- /dev/null +++ b/lib/fog/openstack/volume/requests/delete_volume.rb @@ -0,0 +1,23 @@ +module Fog + module OpenStack + class Volume + module Real + def delete_volume(volume_id) + request( + expects: 202, + method: 'DELETE', + path: "volumes/#{volume_id}" + ) + end + end + + module Mock + def delete_volume(_volume_id) + response = Excon::Response.new + response.status = 204 + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/delete_volume_type.rb b/lib/fog/openstack/volume/requests/delete_volume_type.rb new file mode 100644 index 000000000..5e26b2a6a --- /dev/null +++ b/lib/fog/openstack/volume/requests/delete_volume_type.rb @@ -0,0 +1,23 @@ +module Fog + module OpenStack + class Volume + module Real + def delete_volume_type(volume_type_id) + request( + expects: 202, + method: 'DELETE', + path: "types/#{volume_type_id}" + ) + end + end + + module Mock + def delete_volume_type(_volume_type_id) + response = Excon::Response.new + response.status = 204 + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/extend_volume.rb b/lib/fog/openstack/volume/requests/extend_volume.rb new file mode 100644 index 000000000..41b66358e --- /dev/null +++ b/lib/fog/openstack/volume/requests/extend_volume.rb @@ -0,0 +1,25 @@ +module Fog + module OpenStack + class Volume + module Real + def extend_volume(volume_id, size) + body = { 'os-extend' => { 'new_size' => size } } + request( + expects: 202, + method: 'POST', + path: "volumes/#{volume_id}/action", + body: Fog::JSON.encode(body) + ) + end + end + + module Mock + def extend_volume(_volume_id, _size) + response = Excon::Response.new + response.status = 202 + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/get_backup_details.rb b/lib/fog/openstack/volume/requests/get_backup_details.rb new file mode 100644 index 000000000..a317e1329 --- /dev/null +++ b/lib/fog/openstack/volume/requests/get_backup_details.rb @@ -0,0 +1,34 @@ +module Fog + module OpenStack + class Volume + module Real + def get_backup_details(backup_id) + request( + expects: 200, + method: 'GET', + path: "backups/#{backup_id}" + ) + end + end + + module Mock + def get_backup_details(_backup_id) + response = Excon::Response.new + response.status = 200 + response.body = { + "backup" => { + "id" => "1", + "volume_id" => "2", + "name" => "backup 1", + "status" => "available", + "size" => 1, + "object_count" => 16, + "container" => "testcontainer" + } + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/get_quota.rb b/lib/fog/openstack/volume/requests/get_quota.rb new file mode 100644 index 000000000..f54f40e8a --- /dev/null +++ b/lib/fog/openstack/volume/requests/get_quota.rb @@ -0,0 +1,26 @@ +module Fog + module OpenStack + class Volume + module Real + def get_quota(tenant_id) + request( + expects: 200, + method: 'GET', + path: "/os-quota-sets/#{tenant_id}" + ) + end + end + + module Mock + def get_quota(tenant_id) + response = Excon::Response.new + response.status = 200 + response.body = { + 'quota_set' => (data[:quota_updated] || data[:quota]).merge('id' => tenant_id) + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/get_quota_defaults.rb b/lib/fog/openstack/volume/requests/get_quota_defaults.rb new file mode 100644 index 000000000..70a1a4298 --- /dev/null +++ b/lib/fog/openstack/volume/requests/get_quota_defaults.rb @@ -0,0 +1,26 @@ +module Fog + module OpenStack + class Volume + module Real + def get_quota_defaults(tenant_id) + request( + expects: 200, + method: 'GET', + path: "/os-quota-sets/#{tenant_id}/defaults" + ) + end + end + + module Mock + def get_quota_defaults(tenant_id) + response = Excon::Response.new + response.status = 200 + response.body = { + 'quota_set' => data[:quota].merge('id' => tenant_id) + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/get_quota_usage.rb b/lib/fog/openstack/volume/requests/get_quota_usage.rb new file mode 100644 index 000000000..4e251ae78 --- /dev/null +++ b/lib/fog/openstack/volume/requests/get_quota_usage.rb @@ -0,0 +1,43 @@ +module Fog + module OpenStack + class Volume + module Real + def get_quota_usage(tenant_id) + request( + expects: 200, + method: 'GET', + path: "/os-quota-sets/#{tenant_id}?usage=True" + ) + end + end + + module Mock + def get_quota_usage(tenant_id) + response = Excon::Response.new + response.status = 200 + response.body = { + 'quota_set' => { + 'gigabytes' => { + 'reserved' => 0, + 'limit' => -1, + 'in_use' => 160 + }, + 'snapshots' => { + 'reserved' => 0, + 'limit' => 50, + 'in_use' => 3 + }, + 'volumes' => { + 'reserved' => 0, + 'limit' => 50, + 'in_use' => 5 + }, + 'id' => tenant_id + } + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/get_snapshot_details.rb b/lib/fog/openstack/volume/requests/get_snapshot_details.rb new file mode 100644 index 000000000..495c3dc82 --- /dev/null +++ b/lib/fog/openstack/volume/requests/get_snapshot_details.rb @@ -0,0 +1,15 @@ +module Fog + module OpenStack + class Volume + module Real + def get_snapshot_details(snapshot_id) + request( + expects: 200, + method: 'GET', + path: "snapshots/#{snapshot_id}" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/get_transfer_details.rb b/lib/fog/openstack/volume/requests/get_transfer_details.rb new file mode 100644 index 000000000..1ecd0fca7 --- /dev/null +++ b/lib/fog/openstack/volume/requests/get_transfer_details.rb @@ -0,0 +1,17 @@ +module Fog + module OpenStack + class Volume + # no Mock needed, test coverage in RSpec + + module Real + def get_transfer_details(transfer_id) + request( + expects: 200, + method: 'GET', + path: "os-volume-transfer/#{transfer_id}" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/get_volume_details.rb b/lib/fog/openstack/volume/requests/get_volume_details.rb new file mode 100644 index 000000000..0986d9625 --- /dev/null +++ b/lib/fog/openstack/volume/requests/get_volume_details.rb @@ -0,0 +1,15 @@ +module Fog + module OpenStack + class Volume + module Real + def get_volume_details(volume_id) + request( + expects: 200, + method: 'GET', + path: "volumes/#{volume_id}" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/get_volume_type_details.rb b/lib/fog/openstack/volume/requests/get_volume_type_details.rb new file mode 100644 index 000000000..26302d088 --- /dev/null +++ b/lib/fog/openstack/volume/requests/get_volume_type_details.rb @@ -0,0 +1,32 @@ +module Fog + module OpenStack + class Volume + module Real + def get_volume_type_details(volume_type_id) + request( + expects: 200, + method: 'GET', + path: "types/#{volume_type_id}" + ) + end + end + + module Mock + def get_volume_type_details(_volume_type_id) + response = Excon::Response.new + response.status = 200 + response.body = { + "volume_type" => { + "id" => "1", + "name" => "type 1", + "extra_specs" => { + "volume_backend_name" => "type 1 backend name" + } + } + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/list_backups.rb b/lib/fog/openstack/volume/requests/list_backups.rb new file mode 100644 index 000000000..797fb0397 --- /dev/null +++ b/lib/fog/openstack/volume/requests/list_backups.rb @@ -0,0 +1,16 @@ +module Fog + module OpenStack + class Volume + module Real + def list_backups(options = {}) + request( + expects: 200, + method: 'GET', + path: 'backups', + query: options + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/list_backups_detailed.rb b/lib/fog/openstack/volume/requests/list_backups_detailed.rb new file mode 100644 index 000000000..f95d32a0b --- /dev/null +++ b/lib/fog/openstack/volume/requests/list_backups_detailed.rb @@ -0,0 +1,45 @@ +module Fog + module OpenStack + class Volume + module Real + def list_backups_detailed(options = {}) + request( + expects: 200, + method: 'GET', + path: 'backups/detail', + query: options + ) + end + end + + module Mock + def list_backups_detailed(_options = {}) + response = Excon::Response.new + response.status = 200 + data[:backups] ||= [ + { + "id" => "1", + "volume_id" => "2", + "name" => "backup 1", + "status" => "available", + "size" => 1, + "object_count" => 16, + "container" => "testcontainer" + }, + { + "id" => "2", + "volume_id" => "2", + "name" => "backup 2", + "status" => "available", + "size" => 1, + "object_count" => 16, + "container" => "testcontainer" + } + ] + response.body = { 'backups' => data[:backups] } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/list_snapshots.rb b/lib/fog/openstack/volume/requests/list_snapshots.rb new file mode 100644 index 000000000..facd337e0 --- /dev/null +++ b/lib/fog/openstack/volume/requests/list_snapshots.rb @@ -0,0 +1,41 @@ +module Fog + module OpenStack + class Volume + module Real + def list_snapshots(options = true, options_deprecated = {}) + if options.kind_of?(Hash) + path = 'snapshots' + query = options + else + # Backwards compatibility layer, when 'detailed' boolean was sent as first param + if options + Fog::Logger.deprecation('Calling OpenStack[:volume].list_snapshots(true) is deprecated, use .list_snapshots_detailed instead') + else + Fog::Logger.deprecation('Calling OpenStack[:volume].list_snapshots(false) is deprecated, use .list_snapshots({}) instead') + end + path = options ? 'snapshots/detail' : 'snapshots' + query = options_deprecated + end + + request( + expects: 200, + method: 'GET', + path: path, + query: query + ) + end + end + + module Mock + def list_snapshots(_detailed = true, _options = {}) + response = Excon::Response.new + response.status = 200 + response.body = { + 'snapshots' => [get_snapshot_details.body["snapshot"]] + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/list_snapshots_detailed.rb b/lib/fog/openstack/volume/requests/list_snapshots_detailed.rb new file mode 100644 index 000000000..7a6c9efb5 --- /dev/null +++ b/lib/fog/openstack/volume/requests/list_snapshots_detailed.rb @@ -0,0 +1,27 @@ +module Fog + module OpenStack + class Volume + module Real + def list_snapshots_detailed(options = {}) + request( + expects: 200, + method: 'GET', + path: 'snapshots/detail', + query: options + ) + end + end + + module Mock + def list_snapshots_detailed(_options = {}) + response = Excon::Response.new + response.status = 200 + response.body = { + 'snapshots' => [get_snapshot_details.body["snapshot"]] + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/list_transfers.rb b/lib/fog/openstack/volume/requests/list_transfers.rb new file mode 100644 index 000000000..73932b8cf --- /dev/null +++ b/lib/fog/openstack/volume/requests/list_transfers.rb @@ -0,0 +1,18 @@ +module Fog + module OpenStack + class Volume + # no Mock needed, test coverage in RSpec + + module Real + def list_transfers(options = {}) + request( + expects: 200, + method: 'GET', + path: 'os-volume-transfer', + query: options + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/list_transfers_detailed.rb b/lib/fog/openstack/volume/requests/list_transfers_detailed.rb new file mode 100644 index 000000000..5d02054b8 --- /dev/null +++ b/lib/fog/openstack/volume/requests/list_transfers_detailed.rb @@ -0,0 +1,18 @@ +module Fog + module OpenStack + class Volume + # no Mock needed, test coverage in RSpec + + module Real + def list_transfers_detailed(options = {}) + request( + expects: 200, + method: 'GET', + path: 'os-volume-transfer/detail', + query: options + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/list_volume_types.rb b/lib/fog/openstack/volume/requests/list_volume_types.rb new file mode 100644 index 000000000..76b5c0d95 --- /dev/null +++ b/lib/fog/openstack/volume/requests/list_volume_types.rb @@ -0,0 +1,41 @@ +module Fog + module OpenStack + class Volume + module Real + def list_volume_types(options = {}) + request( + expects: 200, + method: 'GET', + path: 'types', + query: options + ) + end + end + + module Mock + def list_volume_types(_options = {}) + response = Excon::Response.new + response.status = 200 + data[:volume_types] ||= [ + { + "id" => "1", + "name" => "type 1", + "extra_specs" => { + "volume_backend_name" => "type 1 backend name" + } + }, + { + "id" => "2", + "name" => "type 2", + "extra_specs" => { + "volume_backend_name" => "type 2 backend name" + } + } + ] + response.body = { 'volume_types' => data[:volume_types] } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/list_volumes.rb b/lib/fog/openstack/volume/requests/list_volumes.rb new file mode 100644 index 000000000..73353be21 --- /dev/null +++ b/lib/fog/openstack/volume/requests/list_volumes.rb @@ -0,0 +1,30 @@ +module Fog + module OpenStack + class Volume + module Real + def list_volumes(options = true, options_deprecated = {}) + if options.kind_of?(Hash) + path = 'volumes' + query = options + else + # Backwards compatibility layer, when 'detailed' boolean was sent as first param + if options + Fog::Logger.deprecation('Calling OpenStack[:volume].list_volumes(true) is deprecated, use .list_volumes_detailed instead') + else + Fog::Logger.deprecation('Calling OpenStack[:volume].list_volumes(false) is deprecated, use .list_volumes({}) instead') + end + path = options ? 'volumes/detail' : 'volumes' + query = options_deprecated + end + + request( + expects: 200, + method: 'GET', + path: path, + query: query + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/list_volumes_detailed.rb b/lib/fog/openstack/volume/requests/list_volumes_detailed.rb new file mode 100644 index 000000000..51c9aa037 --- /dev/null +++ b/lib/fog/openstack/volume/requests/list_volumes_detailed.rb @@ -0,0 +1,16 @@ +module Fog + module OpenStack + class Volume + module Real + def list_volumes_detailed(options = {}) + request( + expects: 200, + method: 'GET', + path: 'volumes/detail', + query: options + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/list_zones.rb b/lib/fog/openstack/volume/requests/list_zones.rb new file mode 100644 index 000000000..a1bd76eda --- /dev/null +++ b/lib/fog/openstack/volume/requests/list_zones.rb @@ -0,0 +1,32 @@ +module Fog + module OpenStack + class Volume + module Real + def list_zones(options = {}) + request( + expects: 200, + method: 'GET', + path: 'os-availability-zone.json', + query: options + ) + end + end + + module Mock + def list_zones(_options = {}) + Excon::Response.new( + body: { + "availabilityZoneInfo" => [ + { + "zoneState" => { "available" => true }, + "zoneName" => "nova" + } + ] + }, + status: 200 + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/replace_metadata.rb b/lib/fog/openstack/volume/requests/replace_metadata.rb new file mode 100644 index 000000000..4de81d237 --- /dev/null +++ b/lib/fog/openstack/volume/requests/replace_metadata.rb @@ -0,0 +1,20 @@ +module Fog + module OpenStack + class Volume + module Real + def replace_metadata(volume_id, metadata = {}) + data = { + 'metadata' => metadata + } + + request( + body: Fog::JSON.encode(data), + expects: [200], + method: 'PUT', + path: "volumes/#{volume_id}/metadata" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/restore_backup.rb b/lib/fog/openstack/volume/requests/restore_backup.rb new file mode 100644 index 000000000..e28b52dd3 --- /dev/null +++ b/lib/fog/openstack/volume/requests/restore_backup.rb @@ -0,0 +1,17 @@ +module Fog + module OpenStack + class Volume + module Real + def restore_backup(backup_id, volume_id = nil, name = nil) + data = { 'restore' => { 'volume_id' => volume_id, 'name' => name } } + request( + expects: 202, + method: 'POST', + path: "backups/#{backup_id}/restore", + body: Fog::JSON.encode(data) + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/set_tenant.rb b/lib/fog/openstack/volume/requests/set_tenant.rb new file mode 100644 index 000000000..9853a01a2 --- /dev/null +++ b/lib/fog/openstack/volume/requests/set_tenant.rb @@ -0,0 +1,19 @@ +module Fog + module OpenStack + class Volume + module Real + def set_tenant(tenant) + @openstack_must_reauthenticate = true + @openstack_tenant = tenant.to_s + authenticate + end + end + + module Mock + def set_tenant(_tenant) + true + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/snapshot_action.rb b/lib/fog/openstack/volume/requests/snapshot_action.rb new file mode 100644 index 000000000..441a8cad6 --- /dev/null +++ b/lib/fog/openstack/volume/requests/snapshot_action.rb @@ -0,0 +1,16 @@ +module Fog + module OpenStack + class Volume + module Real + def snapshot_action(id, data) + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'POST', + path: "snapshots/#{id}/action" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/update_metadata.rb b/lib/fog/openstack/volume/requests/update_metadata.rb new file mode 100644 index 000000000..091c09aba --- /dev/null +++ b/lib/fog/openstack/volume/requests/update_metadata.rb @@ -0,0 +1,20 @@ +module Fog + module OpenStack + class Volume + module Real + def update_metadata(volume_id, metadata = {}) + data = { + 'metadata' => metadata + } + + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'POST', + path: "volumes/#{volume_id}/metadata" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/update_quota.rb b/lib/fog/openstack/volume/requests/update_quota.rb new file mode 100644 index 000000000..aa83df754 --- /dev/null +++ b/lib/fog/openstack/volume/requests/update_quota.rb @@ -0,0 +1,27 @@ +module Fog + module OpenStack + class Volume + module Real + def update_quota(tenant_id, options = {}) + request( + body: Fog::JSON.encode('quota_set' => options), + expects: 200, + method: 'PUT', + path: "/os-quota-sets/#{tenant_id}" + ) + end + end + + module Mock + def update_quota(_tenant_id, options = {}) + data[:quota_updated] = data[:quota].merge options + + response = Excon::Response.new + response.status = 200 + response.body = { 'quota_set' => data[:quota_updated] } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/update_snapshot.rb b/lib/fog/openstack/volume/requests/update_snapshot.rb new file mode 100644 index 000000000..eb6b8bccd --- /dev/null +++ b/lib/fog/openstack/volume/requests/update_snapshot.rb @@ -0,0 +1,38 @@ +module Fog + module OpenStack + class Volume + module Real + def update_snapshot(snapshot_id, data = {}) + request( + body: Fog::JSON.encode('snapshot' => data), + expects: 200, + method: 'PUT', + path: "snapshots/#{snapshot_id}" + ) + end + end + + module Mock + def update_snapshot(snapshot_id, options = {}) + unless snapshot_id + raise ArgumentError, 'snapshot_id is required' + end + + response = Excon::Response.new + if snapshot = data[:snapshots][snapshot_id] + response.status = 200 + snapshot['display_name'] = options['display_name'] if options['display_name'] + snapshot['display_description'] = options['display_description'] if options['display_description'] + snapshot['name'] = options['name'] if options['name'] + snapshot['description'] = options['description'] if options['description'] + snapshot['metadata'] = options['metadata'] if options['metadata'] + response.body = { 'snapshot' => snapshot } + response + else + raise Fog::HP::BlockStorageV2::NotFound + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/update_snapshot_metadata.rb b/lib/fog/openstack/volume/requests/update_snapshot_metadata.rb new file mode 100644 index 000000000..7cd6bfd90 --- /dev/null +++ b/lib/fog/openstack/volume/requests/update_snapshot_metadata.rb @@ -0,0 +1,20 @@ +module Fog + module OpenStack + class Volume + module Real + def update_snapshot_metadata(snapshot_id, metadata = {}) + data = { + 'metadata' => metadata + } + + request( + body: Fog::JSON.encode(data), + expects: [200], + method: 'POST', + path: "snapshots/#{snapshot_id}/metadata" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/update_volume.rb b/lib/fog/openstack/volume/requests/update_volume.rb new file mode 100644 index 000000000..8ecd71a3d --- /dev/null +++ b/lib/fog/openstack/volume/requests/update_volume.rb @@ -0,0 +1,14 @@ +module Fog + module OpenStack + class Volume + module Mock + def update_volume(volume_id, data = {}) + response = Excon::Response.new + response.status = 200 + response.body = { 'volume' => data.merge('id' => volume_id) } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/requests/update_volume_type.rb b/lib/fog/openstack/volume/requests/update_volume_type.rb new file mode 100644 index 000000000..9c8798233 --- /dev/null +++ b/lib/fog/openstack/volume/requests/update_volume_type.rb @@ -0,0 +1,41 @@ +module Fog + module OpenStack + class Volume + module Real + def update_volume_type(volume_type_id, options = {}) + data = { + 'volume_type' => {} + } + + vanilla_options = [:name, :extra_specs] + vanilla_options.select { |o| options[o] }.each do |key| + data['volume_type'][key] = options[key] + end + request( + body: Fog::JSON.encode(data), + expects: [200, 202], + method: 'PUT', + path: "types/#{volume_type_id}" + ) + end + end + + module Mock + def update_volume_type(_volume_type_id, _options = {}) + response = Excon::Response.new + response.status = 202 + response.body = { + "volume_type" => { + "id" => "6685584b-1eac-4da6-b5c3-555430cf68ff", + "name" => "vol-type-001", + "extra_specs" => { + "capabilities" => "gpu" + } + } + } + response + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1.rb b/lib/fog/openstack/volume/v1.rb new file mode 100644 index 000000000..b1208166e --- /dev/null +++ b/lib/fog/openstack/volume/v1.rb @@ -0,0 +1,92 @@ +require 'fog/openstack/core' +require 'fog/openstack/volume' + +module Fog + module OpenStack + class Volume + class V1 < Fog::OpenStack::Volume + SUPPORTED_VERSIONS = /v1(\.(0-9))*/.freeze + + requires :openstack_auth_url + + recognizes *@@recognizes + + model_path 'fog/openstack/volume/v1/models' + + model :volume + collection :volumes + + model :availability_zone + collection :availability_zones + + model :volume_type + collection :volume_types + + model :snapshot + collection :snapshots + + model :transfer + collection :transfers + + model :backup + collection :backups + + request_path 'fog/openstack/volume/v1/requests' + + # Volume + request :list_volumes + request :list_volumes_detailed + request :create_volume + request :update_volume + request :get_volume_details + request :extend_volume + request :delete_volume + + request :list_zones + + request :list_volume_types + request :create_volume_type + request :delete_volume_type + request :get_volume_type_details + + request :create_snapshot + request :update_snapshot + request :list_snapshots + request :list_snapshots_detailed + request :get_snapshot_details + request :delete_snapshot + request :update_snapshot_metadata + request :delete_snapshot_metadata + + request :list_transfers + request :list_transfers_detailed + request :create_transfer + request :get_transfer_details + request :accept_transfer + request :delete_transfer + + request :list_backups + request :list_backups_detailed + request :create_backup + request :get_backup_details + request :restore_backup + request :delete_backup + + request :update_quota + request :get_quota + request :get_quota_defaults + request :get_quota_usage + + request :update_metadata + request :replace_metadata + request :delete_metadata + + request :set_tenant + request :action + + autoload :Mock, 'fog/openstack/volume/v1/mock' + autoload :Real, 'fog/openstack/volume/v1/real' + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/mock.rb b/lib/fog/openstack/volume/v1/mock.rb new file mode 100644 index 000000000..1ddc6ae1f --- /dev/null +++ b/lib/fog/openstack/volume/v1/mock.rb @@ -0,0 +1,68 @@ +module Fog + module OpenStack + class Volume + class V1 < Fog::OpenStack::Volume + class Mock + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + users: {}, + tenants: {}, + quota: { + 'gigabytes' => 1000, + 'volumes' => 10, + 'snapshots' => 10 + } + } + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 8776 + management_url.path = '/v1' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].find { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_management_url: @openstack_management_url } + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/models/availability_zone.rb b/lib/fog/openstack/volume/v1/models/availability_zone.rb new file mode 100644 index 000000000..e46cbd50f --- /dev/null +++ b/lib/fog/openstack/volume/v1/models/availability_zone.rb @@ -0,0 +1,15 @@ +require 'fog/openstack/volume/models/availability_zone' + +module Fog + module OpenStack + class Volume + class V1 + class AvailabilityZone < Fog::OpenStack::Volume::AvailabilityZone + identity :zoneName + + attribute :zoneState + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/models/availability_zones.rb b/lib/fog/openstack/volume/v1/models/availability_zones.rb new file mode 100644 index 000000000..c8411fcb2 --- /dev/null +++ b/lib/fog/openstack/volume/v1/models/availability_zones.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/volume/v1/models/availability_zone' +require 'fog/openstack/volume/models/availability_zones' + +module Fog + module OpenStack + class Volume + class V1 + class AvailabilityZones < Fog::OpenStack::Collection + model Fog::OpenStack::Volume::V1::AvailabilityZone + include Fog::OpenStack::Volume::AvailabilityZones + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/models/backup.rb b/lib/fog/openstack/volume/v1/models/backup.rb new file mode 100644 index 000000000..48e79cfe4 --- /dev/null +++ b/lib/fog/openstack/volume/v1/models/backup.rb @@ -0,0 +1,15 @@ +require 'fog/openstack/volume/models/backup' + +module Fog + module OpenStack + class Volume + class V1 + class Backup < Fog::OpenStack::Volume::Backup + identity :id + + superclass.attributes.each { |attrib| attribute attrib } + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/models/backups.rb b/lib/fog/openstack/volume/v1/models/backups.rb new file mode 100644 index 000000000..f986fe81c --- /dev/null +++ b/lib/fog/openstack/volume/v1/models/backups.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/volume/v1/models/backup' +require 'fog/openstack/volume/models/backups' + +module Fog + module OpenStack + class Volume + class V1 + class Backups < Fog::OpenStack::Collection + model Fog::OpenStack::Volume::V1::Backup + include Fog::OpenStack::Volume::Backups + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/models/snapshot.rb b/lib/fog/openstack/volume/v1/models/snapshot.rb new file mode 100644 index 000000000..9dc1451fe --- /dev/null +++ b/lib/fog/openstack/volume/v1/models/snapshot.rb @@ -0,0 +1,44 @@ +require 'fog/openstack/volume/models/snapshot' + +module Fog + module OpenStack + class Volume + class V1 + class Snapshot < Fog::OpenStack::Volume::Snapshot + identity :id + + attribute :display_name + attribute :status + attribute :display_description + attribute :metadata + attribute :force + attribute :size + + def save + requires :display_name + data = if id.nil? + service.create_snapshot(attributes[:volume_id], display_name, display_description, force) + else + service.update_snapshot(id, attributes.reject { |k, _v| k == :id }) + end + merge_attributes(data.body['snapshot']) + true + end + + def create + requires :display_name + + # volume_id, name, description, force=false + response = service.create_snapshot(attributes[:volume_id], + attributes[:display_name], + attributes[:display_description], + attributes[:force]) + merge_attributes(response.body['snapshot']) + + self + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/models/snapshots.rb b/lib/fog/openstack/volume/v1/models/snapshots.rb new file mode 100644 index 000000000..43a7694d4 --- /dev/null +++ b/lib/fog/openstack/volume/v1/models/snapshots.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/volume/v1/models/snapshot' +require 'fog/openstack/volume/models/snapshots' + +module Fog + module OpenStack + class Volume + class V1 + class Snapshots < Fog::OpenStack::Collection + model Fog::OpenStack::Volume::V1::Snapshot + include Fog::OpenStack::Volume::Snapshots + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/models/transfer.rb b/lib/fog/openstack/volume/v1/models/transfer.rb new file mode 100644 index 000000000..8d5e14961 --- /dev/null +++ b/lib/fog/openstack/volume/v1/models/transfer.rb @@ -0,0 +1,18 @@ +require 'fog/openstack/volume/models/transfer' + +module Fog + module OpenStack + class Volume + class V1 + class Transfer < Fog::OpenStack::Volume::Transfer + identity :id + + attribute :auth_key, aliases: 'authKey' + attribute :created_at, aliases: 'createdAt' + attribute :name + attribute :volume_id, aliases: 'volumeId' + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/models/transfers.rb b/lib/fog/openstack/volume/v1/models/transfers.rb new file mode 100644 index 000000000..8dfede857 --- /dev/null +++ b/lib/fog/openstack/volume/v1/models/transfers.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/volume/v1/models/transfer' +require 'fog/openstack/volume/models/transfers' + +module Fog + module OpenStack + class Volume + class V1 + class Transfers < Fog::OpenStack::Collection + model Fog::OpenStack::Volume::V1::Transfer + include Fog::OpenStack::Volume::Transfers + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/models/volume.rb b/lib/fog/openstack/volume/v1/models/volume.rb new file mode 100644 index 000000000..e3aebe810 --- /dev/null +++ b/lib/fog/openstack/volume/v1/models/volume.rb @@ -0,0 +1,38 @@ +require 'fog/openstack/volume/models/volume' + +module Fog + module OpenStack + class Volume + class V1 + class Volume < Fog::OpenStack::Volume::Volume + identity :id + + superclass.attributes.each { |attrib| attribute attrib } + attribute :display_name, aliases: 'displayName' + attribute :display_description, aliases: 'displayDescription' + attribute :tenant_id, aliases: 'os-vol-tenant-attr:tenant_id' + + def save + requires :display_name, :size + data = if id.nil? + service.create_volume(display_name, display_description, size, attributes) + else + attrib = attributes.select { |key| [:display_name, :display_description, :metadata].include?(key) } + service.update_volume(id, attrib) + end + merge_attributes(data.body['volume']) + true + end + + def update(attr = nil) + requires :id + merge_attributes( + service.update_volume(id, attr || attributes).body['volume'] + ) + self + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/models/volume_type.rb b/lib/fog/openstack/volume/v1/models/volume_type.rb new file mode 100644 index 000000000..f30127c52 --- /dev/null +++ b/lib/fog/openstack/volume/v1/models/volume_type.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/volume/models/volume_type' + +module Fog + module OpenStack + class Volume + class V1 + class VolumeType < Fog::OpenStack::Volume::VolumeType + identity :id + + attribute :name + attribute :volume_backend_name + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/models/volume_types.rb b/lib/fog/openstack/volume/v1/models/volume_types.rb new file mode 100644 index 000000000..2e336a1e6 --- /dev/null +++ b/lib/fog/openstack/volume/v1/models/volume_types.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/volume/v1/models/volume_type' +require 'fog/openstack/volume/models/volume_types' + +module Fog + module OpenStack + class Volume + class V1 + class VolumeTypes < Fog::OpenStack::Collection + model Fog::OpenStack::Volume::V1::VolumeType + include Fog::OpenStack::Volume::VolumeTypes + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/models/volumes.rb b/lib/fog/openstack/volume/v1/models/volumes.rb new file mode 100644 index 000000000..3c66ccdad --- /dev/null +++ b/lib/fog/openstack/volume/v1/models/volumes.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/volume/v1/models/volume' +require 'fog/openstack/volume/models/volumes' + +module Fog + module OpenStack + class Volume + class V1 + class Volumes < Fog::OpenStack::Collection + model Fog::OpenStack::Volume::V1::Volume + include Fog::OpenStack::Volume::Volumes + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/real.rb b/lib/fog/openstack/volume/v1/real.rb new file mode 100644 index 000000000..ecd9d317c --- /dev/null +++ b/lib/fog/openstack/volume/v1/real.rb @@ -0,0 +1,23 @@ +module Fog + module OpenStack + class Volume + class V1 < Fog::OpenStack::Volume + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Volume::NotFound + end + + def default_endtpoint_type + 'admin' + end + + def default_service_type + %w[volume] + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/requests/accept_transfer.rb b/lib/fog/openstack/volume/v1/requests/accept_transfer.rb new file mode 100644 index 000000000..0bdc678ff --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/accept_transfer.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/accept_transfer' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/action.rb b/lib/fog/openstack/volume/v1/requests/action.rb new file mode 100644 index 000000000..e49b96818 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/action.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/action' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/create_backup.rb b/lib/fog/openstack/volume/v1/requests/create_backup.rb new file mode 100644 index 000000000..1135e30ea --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/create_backup.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/create_backup' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/create_snapshot.rb b/lib/fog/openstack/volume/v1/requests/create_snapshot.rb new file mode 100644 index 000000000..5df79854f --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/create_snapshot.rb @@ -0,0 +1,45 @@ +require 'fog/openstack/volume/requests/create_snapshot' + +module Fog + module OpenStack + class Volume + class V1 + class Real + include Fog::OpenStack::Volume::Real + + def create_snapshot(volume_id, name, description, force = false) + data = { + 'snapshot' => { + 'volume_id' => volume_id, + 'display_name' => name, + 'display_description' => description, + 'force' => force.nil? ? false : force + } + } + + _create_snapshot(data) + end + end + + class Mock + def create_snapshot(volume_id, name, description, _force = false) + response = Excon::Response.new + response.status = 202 + response.body = { + "snapshot" => { + "status" => "creating", + "display_name" => name, + "created_at" => Time.now, + "display_description" => description, + "volume_id" => volume_id, + "id" => "5", + "size" => 1 + } + } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/requests/create_transfer.rb b/lib/fog/openstack/volume/v1/requests/create_transfer.rb new file mode 100644 index 000000000..90f2ebe26 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/create_transfer.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/create_transfer' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/create_volume.rb b/lib/fog/openstack/volume/v1/requests/create_volume.rb new file mode 100644 index 000000000..4cb6b3ffb --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/create_volume.rb @@ -0,0 +1,49 @@ +require 'fog/openstack/volume/requests/create_volume' + +module Fog + module OpenStack + class Volume + class V1 + class Real + def create_volume(name, description, size, options = {}) + data = { + 'volume' => { + 'display_name' => name, + 'display_description' => description, + 'size' => size + } + } + + _create_volume(data, options) + end + + include Fog::OpenStack::Volume::Real + end + + class Mock + def create_volume(name, description, size, options = {}) + response = Excon::Response.new + response.status = 202 + response.body = { + 'volume' => { + 'id' => Fog::Mock.random_numbers(2), + 'display_name' => name, + 'display_description' => description, + 'metadata' => options['metadata'] || {}, + 'size' => size, + 'status' => 'creating', + 'snapshot_id' => options[:snapshot_id] || nil, + 'image_id' => options[:imageRef] || nil, + 'volume_type' => nil, + 'availability_zone' => 'nova', + 'created_at' => Time.now, + 'attachments' => [] + } + } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/requests/create_volume_type.rb b/lib/fog/openstack/volume/v1/requests/create_volume_type.rb new file mode 100644 index 000000000..b0be257c7 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/create_volume_type.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/create_volume_type' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/delete_backup.rb b/lib/fog/openstack/volume/v1/requests/delete_backup.rb new file mode 100644 index 000000000..a801dceaa --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/delete_backup.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_backup' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/delete_metadata.rb b/lib/fog/openstack/volume/v1/requests/delete_metadata.rb new file mode 100644 index 000000000..924d1c2ed --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/delete_metadata.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_metadata' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/delete_snapshot.rb b/lib/fog/openstack/volume/v1/requests/delete_snapshot.rb new file mode 100644 index 000000000..4ed627842 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/delete_snapshot.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_snapshot' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/delete_snapshot_metadata.rb b/lib/fog/openstack/volume/v1/requests/delete_snapshot_metadata.rb new file mode 100644 index 000000000..c2f24ba75 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/delete_snapshot_metadata.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_snapshot_metadata' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/delete_transfer.rb b/lib/fog/openstack/volume/v1/requests/delete_transfer.rb new file mode 100644 index 000000000..2394932c4 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/delete_transfer.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_transfer' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/delete_volume.rb b/lib/fog/openstack/volume/v1/requests/delete_volume.rb new file mode 100644 index 000000000..f5dbbe801 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/delete_volume.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_volume' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/delete_volume_type.rb b/lib/fog/openstack/volume/v1/requests/delete_volume_type.rb new file mode 100644 index 000000000..e14b2e3d7 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/delete_volume_type.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_volume_type' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/extend_volume.rb b/lib/fog/openstack/volume/v1/requests/extend_volume.rb new file mode 100644 index 000000000..1b2bc73ae --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/extend_volume.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/extend_volume' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/get_backup_details.rb b/lib/fog/openstack/volume/v1/requests/get_backup_details.rb new file mode 100644 index 000000000..d92ca3a94 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/get_backup_details.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/get_backup_details' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/get_quota.rb b/lib/fog/openstack/volume/v1/requests/get_quota.rb new file mode 100644 index 000000000..b909d6de5 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/get_quota.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/get_quota' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/get_quota_defaults.rb b/lib/fog/openstack/volume/v1/requests/get_quota_defaults.rb new file mode 100644 index 000000000..406b1542b --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/get_quota_defaults.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/get_quota_defaults' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/get_quota_usage.rb b/lib/fog/openstack/volume/v1/requests/get_quota_usage.rb new file mode 100644 index 000000000..cde513e68 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/get_quota_usage.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/get_quota_usage' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/get_snapshot_details.rb b/lib/fog/openstack/volume/v1/requests/get_snapshot_details.rb new file mode 100644 index 000000000..b6557fd94 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/get_snapshot_details.rb @@ -0,0 +1,32 @@ +require 'fog/openstack/volume/requests/get_snapshot_details' + +module Fog + module OpenStack + class Volume + class V1 + class Real + include Fog::OpenStack::Volume::Real + end + + class Mock + def get_snapshot_details(_detailed = true) + response = Excon::Response.new + response.status = 200 + response.body = { + 'snapshot' => { + 'id' => '1', + 'display_name' => 'Snapshot1', + 'display_description' => 'Volume1 snapshot', + 'size' => 1, + 'volume_id' => '1', + 'status' => 'available', + 'created_at' => Time.now + } + } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/requests/get_transfer_details.rb b/lib/fog/openstack/volume/v1/requests/get_transfer_details.rb new file mode 100644 index 000000000..75b32b293 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/get_transfer_details.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/get_transfer_details' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/get_volume_details.rb b/lib/fog/openstack/volume/v1/requests/get_volume_details.rb new file mode 100644 index 000000000..344a993f9 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/get_volume_details.rb @@ -0,0 +1,35 @@ +require 'fog/openstack/volume/requests/get_volume_details' + +module Fog + module OpenStack + class Volume + class V1 + class Real + include Fog::OpenStack::Volume::Real + end + + class Mock + def get_volume_details(_detailed = true) + response = Excon::Response.new + response.status = 200 + response.body = { + 'volume' => { + 'id' => '1', + 'display_name' => Fog::Mock.random_letters(rand(5..12)), + 'display_description' => Fog::Mock.random_letters(rand(10..21)), + 'size' => 3, + 'volume_type' => nil, + 'snapshot_id' => '4', + 'status' => 'online', + 'availability_zone' => 'nova', + 'created_at' => Time.now, + 'attachments' => [] + } + } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/requests/get_volume_type_details.rb b/lib/fog/openstack/volume/v1/requests/get_volume_type_details.rb new file mode 100644 index 000000000..e3c124195 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/get_volume_type_details.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/get_volume_type_details' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/list_backups.rb b/lib/fog/openstack/volume/v1/requests/list_backups.rb new file mode 100644 index 000000000..8db51bc44 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/list_backups.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_backups' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/list_backups_detailed.rb b/lib/fog/openstack/volume/v1/requests/list_backups_detailed.rb new file mode 100644 index 000000000..c8418b0ee --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/list_backups_detailed.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_backups_detailed' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/list_snapshots.rb b/lib/fog/openstack/volume/v1/requests/list_snapshots.rb new file mode 100644 index 000000000..8fcfee35c --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/list_snapshots.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_snapshots' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/list_snapshots_detailed.rb b/lib/fog/openstack/volume/v1/requests/list_snapshots_detailed.rb new file mode 100644 index 000000000..df242787d --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/list_snapshots_detailed.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_snapshots_detailed' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/list_transfers.rb b/lib/fog/openstack/volume/v1/requests/list_transfers.rb new file mode 100644 index 000000000..2535a2589 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/list_transfers.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_transfers' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/list_transfers_detailed.rb b/lib/fog/openstack/volume/v1/requests/list_transfers_detailed.rb new file mode 100644 index 000000000..fd94ac7a3 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/list_transfers_detailed.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_transfers_detailed' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/list_volume_types.rb b/lib/fog/openstack/volume/v1/requests/list_volume_types.rb new file mode 100644 index 000000000..ea52d0e1a --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/list_volume_types.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_volume_types' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/list_volumes.rb b/lib/fog/openstack/volume/v1/requests/list_volumes.rb new file mode 100644 index 000000000..95b158634 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/list_volumes.rb @@ -0,0 +1,46 @@ +require 'fog/openstack/volume/requests/list_volumes' + +module Fog + module OpenStack + class Volume + class V1 + class Real + include Fog::OpenStack::Volume::Real + end + + class Mock + def list_volumes(_options = true, _options_deprecated = {}) + response = Excon::Response.new + response.status = 200 + data[:volumes] ||= [ + { "status" => "available", + "display_description" => "test 1 desc", + "availability_zone" => "nova", + "display_name" => "Volume1", + "attachments" => [{}], + "volume_type" => nil, + "snapshot_id" => nil, + "size" => 1, + "id" => 1, + "created_at" => Time.now, + "metadata" => {} }, + { "status" => "available", + "display_description" => "test 2 desc", + "availability_zone" => "nova", + "display_name" => "Volume2", + "attachments" => [{}], + "volume_type" => nil, + "snapshot_id" => nil, + "size" => 1, + "id" => 2, + "created_at" => Time.now, + "metadata" => {} } + ] + response.body = { 'volumes' => data[:volumes] } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/requests/list_volumes_detailed.rb b/lib/fog/openstack/volume/v1/requests/list_volumes_detailed.rb new file mode 100644 index 000000000..c35ec9200 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/list_volumes_detailed.rb @@ -0,0 +1,46 @@ +require 'fog/openstack/volume/requests/list_volumes_detailed' + +module Fog + module OpenStack + class Volume + class V1 + class Real + include Fog::OpenStack::Volume::Real + end + + class Mock + def list_volumes_detailed(_options = {}) + response = Excon::Response.new + response.status = 200 + data[:volumes] ||= [ + { "status" => "available", + "display_description" => "test 1 desc", + "availability_zone" => "nova", + "display_name" => "Volume1", + "attachments" => [{}], + "volume_type" => nil, + "snapshot_id" => nil, + "size" => 1, + "id" => 1, + "created_at" => Time.now, + "metadata" => {} }, + { "status" => "available", + "display_description" => "test 2 desc", + "availability_zone" => "nova", + "display_name" => "Volume2", + "attachments" => [{}], + "volume_type" => nil, + "snapshot_id" => nil, + "size" => 1, + "id" => 2, + "created_at" => Time.now, + "metadata" => {} } + ] + response.body = { 'volumes' => data[:volumes] } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/requests/list_zones.rb b/lib/fog/openstack/volume/v1/requests/list_zones.rb new file mode 100644 index 000000000..ec96a724e --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/list_zones.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_zones' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/real.rb b/lib/fog/openstack/volume/v1/requests/real.rb new file mode 100644 index 000000000..c021f0318 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/real.rb @@ -0,0 +1,11 @@ +module Fog + module OpenStack + class Volume + class V1 + class Real + include Fog::OpenStack::Volume::Real + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/requests/real_mock.rb b/lib/fog/openstack/volume/v1/requests/real_mock.rb new file mode 100644 index 000000000..8856c5ab5 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/real_mock.rb @@ -0,0 +1,14 @@ +module Fog + module OpenStack + class Volume + class V1 + class Real + include Fog::OpenStack::Volume::Real + end + class Mock + include Fog::OpenStack::Volume::Mock + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v1/requests/replace_metadata.rb b/lib/fog/openstack/volume/v1/requests/replace_metadata.rb new file mode 100644 index 000000000..f27a16398 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/replace_metadata.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/replace_metadata' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/restore_backup.rb b/lib/fog/openstack/volume/v1/requests/restore_backup.rb new file mode 100644 index 000000000..f186448f9 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/restore_backup.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/restore_backup' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/set_tenant.rb b/lib/fog/openstack/volume/v1/requests/set_tenant.rb new file mode 100644 index 000000000..19dac303b --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/set_tenant.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/set_tenant' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/update_metadata.rb b/lib/fog/openstack/volume/v1/requests/update_metadata.rb new file mode 100644 index 000000000..c5454974d --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/update_metadata.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/update_metadata' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/update_quota.rb b/lib/fog/openstack/volume/v1/requests/update_quota.rb new file mode 100644 index 000000000..671b65e6a --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/update_quota.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/update_quota' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v1/requests/update_snapshot.rb b/lib/fog/openstack/volume/v1/requests/update_snapshot.rb new file mode 100644 index 000000000..8a9a231e7 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/update_snapshot.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/update_snapshot' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/update_snapshot_metadata.rb b/lib/fog/openstack/volume/v1/requests/update_snapshot_metadata.rb new file mode 100644 index 000000000..f98829982 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/update_snapshot_metadata.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/update_snapshot_metadata' +require 'fog/openstack/volume/v1/requests/real' diff --git a/lib/fog/openstack/volume/v1/requests/update_volume.rb b/lib/fog/openstack/volume/v1/requests/update_volume.rb new file mode 100644 index 000000000..e83436e10 --- /dev/null +++ b/lib/fog/openstack/volume/v1/requests/update_volume.rb @@ -0,0 +1,19 @@ +require 'fog/openstack/volume/requests/update_volume' +require 'fog/openstack/volume/v1/requests/real' + +module Fog + module OpenStack + class Volume + module Real + def update_volume(volume_id, data = {}) + request( + body: Fog::JSON.encode('volume' => data), + expects: 200, + method: 'PUT', + path: "volumes/#{volume_id}" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2.rb b/lib/fog/openstack/volume/v2.rb new file mode 100644 index 000000000..ad2b07911 --- /dev/null +++ b/lib/fog/openstack/volume/v2.rb @@ -0,0 +1,94 @@ +require 'fog/openstack/core' +require 'fog/openstack/volume' + +module Fog + module OpenStack + class Volume + class V2 < Fog::OpenStack::Volume + SUPPORTED_VERSIONS = /v2(\.(0-9))*/.freeze + + requires :openstack_auth_url + + recognizes *@@recognizes + + model_path 'fog/openstack/volume/v2/models' + + model :volume + collection :volumes + + model :availability_zone + collection :availability_zones + + model :volume_type + collection :volume_types + + model :snapshot + collection :snapshots + + model :transfer + collection :transfers + + model :backup + collection :backups + + request_path 'fog/openstack/volume/v2/requests' + + # Volume + request :list_volumes + request :list_volumes_detailed + request :create_volume + request :update_volume + request :get_volume_details + request :extend_volume + request :delete_volume + + request :list_zones + + request :list_volume_types + request :create_volume_type + request :update_volume_type + request :delete_volume_type + request :get_volume_type_details + + request :create_snapshot + request :update_snapshot + request :list_snapshots + request :list_snapshots_detailed + request :get_snapshot_details + request :delete_snapshot + request :update_snapshot_metadata + request :delete_snapshot_metadata + + request :list_transfers + request :list_transfers_detailed + request :create_transfer + request :get_transfer_details + request :accept_transfer + request :delete_transfer + + request :list_backups + request :list_backups_detailed + request :create_backup + request :get_backup_details + request :restore_backup + request :delete_backup + + request :update_quota + request :get_quota + request :get_quota_defaults + request :get_quota_usage + + request :update_metadata + request :replace_metadata + request :delete_metadata + + request :set_tenant + request :action + request :snapshot_action + + autoload :Mock, 'fog/openstack/volume/v2/mock' + autoload :Real, 'fog/openstack/volume/v2/real' + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/mock.rb b/lib/fog/openstack/volume/v2/mock.rb new file mode 100644 index 000000000..c739aea0a --- /dev/null +++ b/lib/fog/openstack/volume/v2/mock.rb @@ -0,0 +1,68 @@ +module Fog + module OpenStack + class Volume + class V2 < Fog::OpenStack::Volume + class Mock + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + users: {}, + tenants: {}, + quota: { + 'gigabytes' => 1000, + 'volumes' => 10, + 'snapshots' => 10 + } + } + end + end + + def self.reset + @data = nil + end + + def initialize(options = {}) + @openstack_username = options[:openstack_username] + @openstack_tenant = options[:openstack_tenant] + @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) + + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86400).iso8601 + + management_url = URI.parse(options[:openstack_auth_url]) + management_url.port = 8776 + management_url.path = '/v1' + @openstack_management_url = management_url.to_s + + @data ||= { users: {} } + unless @data[:users].find { |u| u['name'] == options[:openstack_username] } + id = Fog::Mock.random_numbers(6).to_s + @data[:users][id] = { + 'id' => id, + 'name' => options[:openstack_username], + 'email' => "#{options[:openstack_username]}@mock.com", + 'tenantId' => Fog::Mock.random_numbers(6).to_s, + 'enabled' => true + } + end + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + + def credentials + { provider: 'openstack', + openstack_auth_url: @openstack_auth_uri.to_s, + openstack_auth_token: @auth_token, + openstack_management_url: @openstack_management_url } + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/models/availability_zone.rb b/lib/fog/openstack/volume/v2/models/availability_zone.rb new file mode 100644 index 000000000..c0e4c528d --- /dev/null +++ b/lib/fog/openstack/volume/v2/models/availability_zone.rb @@ -0,0 +1,15 @@ +require 'fog/openstack/volume/models/availability_zone' + +module Fog + module OpenStack + class Volume + class V2 + class AvailabilityZone < Fog::OpenStack::Volume::AvailabilityZone + identity :zoneName + + attribute :zoneState + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/models/availability_zones.rb b/lib/fog/openstack/volume/v2/models/availability_zones.rb new file mode 100644 index 000000000..1c028c819 --- /dev/null +++ b/lib/fog/openstack/volume/v2/models/availability_zones.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/volume/v2/models/availability_zone' +require 'fog/openstack/volume/models/availability_zones' + +module Fog + module OpenStack + class Volume + class V2 + class AvailabilityZones < Fog::OpenStack::Collection + model Fog::OpenStack::Volume::V2::AvailabilityZone + include Fog::OpenStack::Volume::AvailabilityZones + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/models/backup.rb b/lib/fog/openstack/volume/v2/models/backup.rb new file mode 100644 index 000000000..5d9941cb3 --- /dev/null +++ b/lib/fog/openstack/volume/v2/models/backup.rb @@ -0,0 +1,15 @@ +require 'fog/openstack/volume/models/backup' + +module Fog + module OpenStack + class Volume + class V2 + class Backup < Fog::OpenStack::Volume::Backup + identity :id + + superclass.attributes.each { |attrib| attribute attrib } + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/models/backups.rb b/lib/fog/openstack/volume/v2/models/backups.rb new file mode 100644 index 000000000..75f53a770 --- /dev/null +++ b/lib/fog/openstack/volume/v2/models/backups.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/volume/v2/models/backup' +require 'fog/openstack/volume/models/backups' + +module Fog + module OpenStack + class Volume + class V2 + class Backups < Fog::OpenStack::Collection + model Fog::OpenStack::Volume::V2::Backup + include Fog::OpenStack::Volume::Backups + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/models/snapshot.rb b/lib/fog/openstack/volume/v2/models/snapshot.rb new file mode 100644 index 000000000..4a2a5bcd1 --- /dev/null +++ b/lib/fog/openstack/volume/v2/models/snapshot.rb @@ -0,0 +1,44 @@ +require 'fog/openstack/volume/models/snapshot' + +module Fog + module OpenStack + class Volume + class V2 + class Snapshot < Fog::OpenStack::Volume::Snapshot + identity :id + + attribute :name + attribute :status + attribute :description + attribute :metadata + attribute :force + attribute :size + + def save + requires :name + data = if id.nil? + service.create_snapshot(attributes[:volume_id], name, description, force) + else + service.update_snapshot(id, attributes.reject { |k, _v| k == :id }) + end + merge_attributes(data.body['snapshot']) + true + end + + def create + requires :name + + # volume_id, name, description, force=false + response = service.create_snapshot(attributes[:volume_id], + attributes[:name], + attributes[:description], + attributes[:force]) + merge_attributes(response.body['snapshot']) + + self + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/models/snapshots.rb b/lib/fog/openstack/volume/v2/models/snapshots.rb new file mode 100644 index 000000000..653c0bc98 --- /dev/null +++ b/lib/fog/openstack/volume/v2/models/snapshots.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/volume/v2/models/snapshot' +require 'fog/openstack/volume/models/snapshots' + +module Fog + module OpenStack + class Volume + class V2 + class Snapshots < Fog::OpenStack::Collection + model Fog::OpenStack::Volume::V2::Snapshot + include Fog::OpenStack::Volume::Snapshots + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/models/transfer.rb b/lib/fog/openstack/volume/v2/models/transfer.rb new file mode 100644 index 000000000..a29c75f31 --- /dev/null +++ b/lib/fog/openstack/volume/v2/models/transfer.rb @@ -0,0 +1,18 @@ +require 'fog/openstack/volume/models/transfer' + +module Fog + module OpenStack + class Volume + class V2 + class Transfer < Fog::OpenStack::Volume::Transfer + identity :id + + attribute :auth_key, aliases: 'authKey' + attribute :created_at, aliases: 'createdAt' + attribute :name + attribute :volume_id, aliases: 'volumeId' + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/models/transfers.rb b/lib/fog/openstack/volume/v2/models/transfers.rb new file mode 100644 index 000000000..cbee48f5e --- /dev/null +++ b/lib/fog/openstack/volume/v2/models/transfers.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/volume/v2/models/transfer' +require 'fog/openstack/volume/models/transfers' + +module Fog + module OpenStack + class Volume + class V2 + class Transfers < Fog::OpenStack::Collection + model Fog::OpenStack::Volume::V2::Transfer + include Fog::OpenStack::Volume::Transfers + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/models/volume.rb b/lib/fog/openstack/volume/v2/models/volume.rb new file mode 100644 index 000000000..b78ea76fe --- /dev/null +++ b/lib/fog/openstack/volume/v2/models/volume.rb @@ -0,0 +1,37 @@ +require 'fog/openstack/volume/models/volume' + +module Fog + module OpenStack + class Volume + class V2 + class Volume < Fog::OpenStack::Volume::Volume + identity :id + + superclass.attributes.each { |attrib| attribute attrib } + attribute :name + attribute :description + attribute :tenant_id, aliases: 'os-vol-tenant-attr:tenant_id' + + def save + requires :name, :size + data = if id.nil? + service.create_volume(name, description, size, attributes) + else + service.update_volume(id, attributes.select { |key| [:name, :description, :metadata].include?(key) }) + end + merge_attributes(data.body['volume']) + true + end + + def update(attr = nil) + requires :id + merge_attributes( + service.update_volume(id, attr || attributes).body['volume'] + ) + self + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/models/volume_type.rb b/lib/fog/openstack/volume/v2/models/volume_type.rb new file mode 100644 index 000000000..13924bd76 --- /dev/null +++ b/lib/fog/openstack/volume/v2/models/volume_type.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/volume/models/volume_type' + +module Fog + module OpenStack + class Volume + class V2 + class VolumeType < Fog::OpenStack::Volume::VolumeType + identity :id + + attribute :name + attribute :volume_backend_name + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/models/volume_types.rb b/lib/fog/openstack/volume/v2/models/volume_types.rb new file mode 100644 index 000000000..33e118c1b --- /dev/null +++ b/lib/fog/openstack/volume/v2/models/volume_types.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/volume/v2/models/volume_type' +require 'fog/openstack/volume/models/volume_types' + +module Fog + module OpenStack + class Volume + class V2 + class VolumeTypes < Fog::OpenStack::Collection + model Fog::OpenStack::Volume::V2::VolumeType + include Fog::OpenStack::Volume::VolumeTypes + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/models/volumes.rb b/lib/fog/openstack/volume/v2/models/volumes.rb new file mode 100644 index 000000000..d0a2dfe95 --- /dev/null +++ b/lib/fog/openstack/volume/v2/models/volumes.rb @@ -0,0 +1,16 @@ +require 'fog/openstack/models/collection' +require 'fog/openstack/volume/v2/models/volume' +require 'fog/openstack/volume/models/volumes' + +module Fog + module OpenStack + class Volume + class V2 + class Volumes < Fog::OpenStack::Collection + model Fog::OpenStack::Volume::V2::Volume + include Fog::OpenStack::Volume::Volumes + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/real.rb b/lib/fog/openstack/volume/v2/real.rb new file mode 100644 index 000000000..32ffc028c --- /dev/null +++ b/lib/fog/openstack/volume/v2/real.rb @@ -0,0 +1,23 @@ +module Fog + module OpenStack + class Volume + class V2 < Fog::OpenStack::Volume + class Real + include Fog::OpenStack::Core + + def self.not_found_class + Fog::OpenStack::Volume::NotFound + end + + def default_endtpoint_type + 'admin' + end + + def default_service_type + %w[volumev2] + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/requests/accept_transfer.rb b/lib/fog/openstack/volume/v2/requests/accept_transfer.rb new file mode 100644 index 000000000..b0c99657c --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/accept_transfer.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/accept_transfer' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/action.rb b/lib/fog/openstack/volume/v2/requests/action.rb new file mode 100644 index 000000000..ccc36a89e --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/action.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/action' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/create_backup.rb b/lib/fog/openstack/volume/v2/requests/create_backup.rb new file mode 100644 index 000000000..e2099585b --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/create_backup.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/create_backup' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/create_snapshot.rb b/lib/fog/openstack/volume/v2/requests/create_snapshot.rb new file mode 100644 index 000000000..84afdf222 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/create_snapshot.rb @@ -0,0 +1,45 @@ +require 'fog/openstack/volume/requests/create_snapshot' + +module Fog + module OpenStack + class Volume + class V2 + class Real + include Fog::OpenStack::Volume::Real + + def create_snapshot(volume_id, name, description, force = false) + data = { + 'snapshot' => { + 'volume_id' => volume_id, + 'name' => name, + 'description' => description, + 'force' => force.nil? ? false : force + } + } + + _create_snapshot(data) + end + end + + class Mock + def create_snapshot(volume_id, name, description, _force = false) + response = Excon::Response.new + response.status = 202 + response.body = { + "snapshot" => { + "status" => "creating", + "name" => name, + "created_at" => Time.now, + "description" => description, + "volume_id" => volume_id, + "id" => "5", + "size" => 1 + } + } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/requests/create_transfer.rb b/lib/fog/openstack/volume/v2/requests/create_transfer.rb new file mode 100644 index 000000000..250ab3f55 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/create_transfer.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/create_transfer' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/create_volume.rb b/lib/fog/openstack/volume/v2/requests/create_volume.rb new file mode 100644 index 000000000..17dd3fbce --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/create_volume.rb @@ -0,0 +1,49 @@ +require 'fog/openstack/volume/requests/create_volume' + +module Fog + module OpenStack + class Volume + class V2 + class Real + def create_volume(name, description, size, options = {}) + data = { + 'volume' => { + 'name' => name, + 'description' => description, + 'size' => size + } + } + + _create_volume(data, options) + end + + include Fog::OpenStack::Volume::Real + end + + class Mock + def create_volume(name, description, size, options = {}) + response = Excon::Response.new + response.status = 202 + response.body = { + 'volume' => { + 'id' => Fog::Mock.random_numbers(2), + 'name' => name, + 'description' => description, + 'metadata' => options['metadata'] || {}, + 'size' => size, + 'status' => 'creating', + 'snapshot_id' => options[:snapshot_id] || nil, + 'image_id' => options[:imageRef] || nil, + 'volume_type' => nil, + 'availability_zone' => 'nova', + 'created_at' => Time.now, + 'attachments' => [] + } + } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/requests/create_volume_type.rb b/lib/fog/openstack/volume/v2/requests/create_volume_type.rb new file mode 100644 index 000000000..e5c10b5c8 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/create_volume_type.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/create_volume_type' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/delete_backup.rb b/lib/fog/openstack/volume/v2/requests/delete_backup.rb new file mode 100644 index 000000000..bb6ea632c --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/delete_backup.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_backup' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/delete_metadata.rb b/lib/fog/openstack/volume/v2/requests/delete_metadata.rb new file mode 100644 index 000000000..6174c85dc --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/delete_metadata.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_metadata' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/delete_snapshot.rb b/lib/fog/openstack/volume/v2/requests/delete_snapshot.rb new file mode 100644 index 000000000..7e55826a9 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/delete_snapshot.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_snapshot' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/delete_snapshot_metadata.rb b/lib/fog/openstack/volume/v2/requests/delete_snapshot_metadata.rb new file mode 100644 index 000000000..a674e33a7 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/delete_snapshot_metadata.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_snapshot_metadata' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/delete_transfer.rb b/lib/fog/openstack/volume/v2/requests/delete_transfer.rb new file mode 100644 index 000000000..a743af6bb --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/delete_transfer.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_transfer' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/delete_volume.rb b/lib/fog/openstack/volume/v2/requests/delete_volume.rb new file mode 100644 index 000000000..ace5f64f7 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/delete_volume.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_volume' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/delete_volume_type.rb b/lib/fog/openstack/volume/v2/requests/delete_volume_type.rb new file mode 100644 index 000000000..4a923106d --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/delete_volume_type.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/delete_volume_type' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/extend_volume.rb b/lib/fog/openstack/volume/v2/requests/extend_volume.rb new file mode 100644 index 000000000..e5b0cec1e --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/extend_volume.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/extend_volume' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/get_backup_details.rb b/lib/fog/openstack/volume/v2/requests/get_backup_details.rb new file mode 100644 index 000000000..b7b580b0b --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/get_backup_details.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/get_backup_details' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/get_quota.rb b/lib/fog/openstack/volume/v2/requests/get_quota.rb new file mode 100644 index 000000000..c5bd543de --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/get_quota.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/get_quota' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/get_quota_defaults.rb b/lib/fog/openstack/volume/v2/requests/get_quota_defaults.rb new file mode 100644 index 000000000..fdda9129f --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/get_quota_defaults.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/get_quota_defaults' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/get_quota_usage.rb b/lib/fog/openstack/volume/v2/requests/get_quota_usage.rb new file mode 100644 index 000000000..9487a898e --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/get_quota_usage.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/get_quota_usage' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/get_snapshot_details.rb b/lib/fog/openstack/volume/v2/requests/get_snapshot_details.rb new file mode 100644 index 000000000..ab6727e2e --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/get_snapshot_details.rb @@ -0,0 +1,32 @@ +require 'fog/openstack/volume/requests/get_snapshot_details' + +module Fog + module OpenStack + class Volume + class V2 + class Real + include Fog::OpenStack::Volume::Real + end + + class Mock + def get_snapshot_details(_detailed = true) + response = Excon::Response.new + response.status = 200 + response.body = { + 'snapshot' => { + 'id' => '1', + 'name' => 'Snapshot1', + 'description' => 'Volume1 snapshot', + 'size' => 1, + 'volume_id' => '1', + 'status' => 'available', + 'created_at' => Time.now + } + } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/requests/get_transfer_details.rb b/lib/fog/openstack/volume/v2/requests/get_transfer_details.rb new file mode 100644 index 000000000..b4db93b7f --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/get_transfer_details.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/get_transfer_details' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/get_volume_details.rb b/lib/fog/openstack/volume/v2/requests/get_volume_details.rb new file mode 100644 index 000000000..289245790 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/get_volume_details.rb @@ -0,0 +1,35 @@ +require 'fog/openstack/volume/requests/get_volume_details' + +module Fog + module OpenStack + class Volume + class V2 + class Real + include Fog::OpenStack::Volume::Real + end + + class Mock + def get_volume_details(_detailed = true) + response = Excon::Response.new + response.status = 200 + response.body = { + 'volume' => { + 'id' => '1', + 'name' => Fog::Mock.random_letters(rand(5..12)), + 'description' => Fog::Mock.random_letters(rand(10..21)), + 'size' => 3, + 'volume_type' => nil, + 'snapshot_id' => '4', + 'status' => 'online', + 'availability_zone' => 'nova', + 'created_at' => Time.now, + 'attachments' => [] + } + } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/requests/get_volume_type_details.rb b/lib/fog/openstack/volume/v2/requests/get_volume_type_details.rb new file mode 100644 index 000000000..500ff567e --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/get_volume_type_details.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/get_volume_type_details' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/list_backups.rb b/lib/fog/openstack/volume/v2/requests/list_backups.rb new file mode 100644 index 000000000..9db231553 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/list_backups.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_backups' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/list_backups_detailed.rb b/lib/fog/openstack/volume/v2/requests/list_backups_detailed.rb new file mode 100644 index 000000000..0350a0033 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/list_backups_detailed.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_backups_detailed' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/list_snapshots.rb b/lib/fog/openstack/volume/v2/requests/list_snapshots.rb new file mode 100644 index 000000000..9fe012b85 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/list_snapshots.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_snapshots' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/list_snapshots_detailed.rb b/lib/fog/openstack/volume/v2/requests/list_snapshots_detailed.rb new file mode 100644 index 000000000..5fcbf469a --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/list_snapshots_detailed.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_snapshots_detailed' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/list_transfers.rb b/lib/fog/openstack/volume/v2/requests/list_transfers.rb new file mode 100644 index 000000000..26681aa7a --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/list_transfers.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_transfers' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/list_transfers_detailed.rb b/lib/fog/openstack/volume/v2/requests/list_transfers_detailed.rb new file mode 100644 index 000000000..31157701c --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/list_transfers_detailed.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_transfers_detailed' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/list_volume_types.rb b/lib/fog/openstack/volume/v2/requests/list_volume_types.rb new file mode 100644 index 000000000..f67411696 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/list_volume_types.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_volume_types' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/list_volumes.rb b/lib/fog/openstack/volume/v2/requests/list_volumes.rb new file mode 100644 index 000000000..9bab0f2a1 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/list_volumes.rb @@ -0,0 +1,46 @@ +require 'fog/openstack/volume/requests/list_volumes' + +module Fog + module OpenStack + class Volume + class V2 + class Real + include Fog::OpenStack::Volume::Real + end + + class Mock + def list_volumes(_options = true, _options_deprecated = {}) + response = Excon::Response.new + response.status = 200 + data[:volumes] ||= [ + { "status" => "available", + "description" => "test 1 desc", + "availability_zone" => "nova", + "name" => "Volume1", + "attachments" => [{}], + "volume_type" => nil, + "snapshot_id" => nil, + "size" => 1, + "id" => 1, + "created_at" => Time.now, + "metadata" => {} }, + { "status" => "available", + "description" => "test 2 desc", + "availability_zone" => "nova", + "name" => "Volume2", + "attachments" => [{}], + "volume_type" => nil, + "snapshot_id" => nil, + "size" => 1, + "id" => 2, + "created_at" => Time.now, + "metadata" => {} } + ] + response.body = { 'volumes' => data[:volumes] } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/requests/list_volumes_detailed.rb b/lib/fog/openstack/volume/v2/requests/list_volumes_detailed.rb new file mode 100644 index 000000000..d8cca58c8 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/list_volumes_detailed.rb @@ -0,0 +1,46 @@ +require 'fog/openstack/volume/requests/list_volumes_detailed' + +module Fog + module OpenStack + class Volume + class V2 + class Real + include Fog::OpenStack::Volume::Real + end + + class Mock + def list_volumes_detailed(_options = {}) + response = Excon::Response.new + response.status = 200 + data[:volumes] ||= [ + { "status" => "available", + "description" => "test 1 desc", + "availability_zone" => "nova", + "name" => "Volume1", + "attachments" => [{}], + "volume_type" => nil, + "snapshot_id" => nil, + "size" => 1, + "id" => 1, + "created_at" => Time.now, + "metadata" => {} }, + { "status" => "available", + "description" => "test 2 desc", + "availability_zone" => "nova", + "name" => "Volume2", + "attachments" => [{}], + "volume_type" => nil, + "snapshot_id" => nil, + "size" => 1, + "id" => 2, + "created_at" => Time.now, + "metadata" => {} } + ] + response.body = { 'volumes' => data[:volumes] } + response + end + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/requests/list_zones.rb b/lib/fog/openstack/volume/v2/requests/list_zones.rb new file mode 100644 index 000000000..e07fafc5f --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/list_zones.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/list_zones' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/real.rb b/lib/fog/openstack/volume/v2/requests/real.rb new file mode 100644 index 000000000..016ac048b --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/real.rb @@ -0,0 +1,11 @@ +module Fog + module OpenStack + class Volume + class V2 + class Real + include Fog::OpenStack::Volume::Real + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/requests/real_mock.rb b/lib/fog/openstack/volume/v2/requests/real_mock.rb new file mode 100644 index 000000000..cc2fca322 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/real_mock.rb @@ -0,0 +1,14 @@ +module Fog + module OpenStack + class Volume + class V2 + class Real + include Fog::OpenStack::Volume::Real + end + class Mock + include Fog::OpenStack::Volume::Mock + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/requests/replace_metadata.rb b/lib/fog/openstack/volume/v2/requests/replace_metadata.rb new file mode 100644 index 000000000..ea96993a5 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/replace_metadata.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/replace_metadata' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/restore_backup.rb b/lib/fog/openstack/volume/v2/requests/restore_backup.rb new file mode 100644 index 000000000..6e5d56df8 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/restore_backup.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/restore_backup' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/set_tenant.rb b/lib/fog/openstack/volume/v2/requests/set_tenant.rb new file mode 100644 index 000000000..9c7ce462c --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/set_tenant.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/set_tenant' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/snapshot_action.rb b/lib/fog/openstack/volume/v2/requests/snapshot_action.rb new file mode 100644 index 000000000..34e77445f --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/snapshot_action.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/snapshot_action' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/update_metadata.rb b/lib/fog/openstack/volume/v2/requests/update_metadata.rb new file mode 100644 index 000000000..325ebabd3 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/update_metadata.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/update_metadata' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/update_quota.rb b/lib/fog/openstack/volume/v2/requests/update_quota.rb new file mode 100644 index 000000000..671b65e6a --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/update_quota.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/update_quota' +require 'fog/openstack/volume/v1/requests/real_mock' diff --git a/lib/fog/openstack/volume/v2/requests/update_snapshot.rb b/lib/fog/openstack/volume/v2/requests/update_snapshot.rb new file mode 100644 index 000000000..ca8f66113 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/update_snapshot.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/update_snapshot' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/update_snapshot_metadata.rb b/lib/fog/openstack/volume/v2/requests/update_snapshot_metadata.rb new file mode 100644 index 000000000..becbf026f --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/update_snapshot_metadata.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/update_snapshot_metadata' +require 'fog/openstack/volume/v2/requests/real' diff --git a/lib/fog/openstack/volume/v2/requests/update_volume.rb b/lib/fog/openstack/volume/v2/requests/update_volume.rb new file mode 100644 index 000000000..634473714 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/update_volume.rb @@ -0,0 +1,20 @@ +require 'fog/openstack/volume/requests/update_volume' +require 'fog/openstack/volume/v2/requests/real' + +module Fog + module OpenStack + class Volume + module Real + def update_volume(volume_id, data = {}) + data = data.select { |key| [:name, :description, :metadata].include? key } + request( + body: Fog::JSON.encode('volume' => data), + expects: 200, + method: 'PUT', + path: "volumes/#{volume_id}" + ) + end + end + end + end +end diff --git a/lib/fog/openstack/volume/v2/requests/update_volume_type.rb b/lib/fog/openstack/volume/v2/requests/update_volume_type.rb new file mode 100644 index 000000000..7e696c055 --- /dev/null +++ b/lib/fog/openstack/volume/v2/requests/update_volume_type.rb @@ -0,0 +1,2 @@ +require 'fog/openstack/volume/requests/update_volume_type' +require 'fog/openstack/volume/v2/requests/real_mock' diff --git a/lib/fog/openstack/workflow.rb b/lib/fog/openstack/workflow.rb new file mode 100644 index 000000000..23ba033cd --- /dev/null +++ b/lib/fog/openstack/workflow.rb @@ -0,0 +1,14 @@ +module Fog + module OpenStack + class Workflow < Fog::Service + autoload :V2, 'fog/openstack/workflow/v2' + + # Fog::OpenStack::Workflow.new() will return a Fog::OpenStack::Workflow::V2 + # Will choose the latest available once Mistral V3 is released. + def self.new(args = {}) + @openstack_auth_uri = URI.parse(args[:openstack_auth_url]) if args[:openstack_auth_url] + Fog::OpenStack::Workflow::V2.new(args) + end + end + end +end diff --git a/lib/fog/openstack/workflow/v2.rb b/lib/fog/openstack/workflow/v2.rb new file mode 100644 index 000000000..64c1547d1 --- /dev/null +++ b/lib/fog/openstack/workflow/v2.rb @@ -0,0 +1,143 @@ +require 'fog/openstack/workflow' + +module Fog + module OpenStack + class Workflow + class V2 < Fog::Service + SUPPORTED_VERSIONS = /v2/.freeze + + requires :openstack_auth_url + recognizes :openstack_username, :openstack_api_key, + :openstack_project_name, :openstack_domain_id + + ## REQUESTS + # + request_path 'fog/openstack/workflow/v2/requests' + + # Workflow requests + request :create_execution + request :get_execution + request :list_executions + request :update_execution + request :delete_execution + + request :create_action_execution + request :get_action_execution + request :list_action_executions + request :update_action_execution + request :delete_action_execution + + request :create_workbook + request :get_workbook + request :list_workbooks + request :update_workbook + request :validate_workbook + request :delete_workbook + + request :create_workflow + request :get_workflow + request :list_workflows + request :update_workflow + request :validate_workflow + request :delete_workflow + + request :create_action + request :get_action + request :list_actions + request :update_action + request :validate_action + request :delete_action + + request :get_task + request :list_tasks + request :rerun_task + + request :create_cron_trigger + request :get_cron_trigger + request :list_cron_triggers + request :delete_cron_trigger + + request :create_environment + request :get_environment + request :list_environments + request :update_environment + request :delete_environment + + request :list_services + + class Mock + def self.data + @data ||= Hash.new do |hash, key| + hash[key] = { + workflows: {} + } + end + end + + def self.reset + @data = nil + end + + include Fog::OpenStack::Core + + def initialize(_options = {}) + @auth_token = Fog::Mock.random_base64(64) + @auth_token_expiration = (Time.now.utc + 86_400).iso8601 + end + + def data + self.class.data[@openstack_username] + end + + def reset_data + self.class.data.delete(@openstack_username) + end + end + + class Real + include Fog::OpenStack::Core + + def default_path_prefix + 'v2' + end + + def default_service_type + %w[workflowv2] + end + + def request(params) + response = @connection.request( + params.merge( + headers: { + 'Content-Type' => 'application/json', + 'X-Auth-Token' => @auth_token + }.merge!(params[:headers] || {}), + path: "#{@path}/#{params[:path]}" + ) + ) + rescue Excon::Errors::Unauthorized => error + if error.response.body != "Bad username or password" # token expiration + @openstack_must_reauthenticate = true + authenticate + retry + else # bad credentials + raise error + end + rescue Excon::Errors::HTTPStatusError => error + raise case error + when Excon::Errors::NotFound + Fog::OpenStack::Workflow::NotFound.slurp(error) + else + error + end + else + unless response.body.empty? + response.body = Fog::JSON.decode(response.body) + end + response + end + end + end + end + end +end diff --git a/lib/fog/workflow/openstack/v2/requests/create_action.rb b/lib/fog/openstack/workflow/v2/requests/create_action.rb similarity index 93% rename from lib/fog/workflow/openstack/v2/requests/create_action.rb rename to lib/fog/openstack/workflow/v2/requests/create_action.rb index 685730ea4..43f11297e 100644 --- a/lib/fog/workflow/openstack/v2/requests/create_action.rb +++ b/lib/fog/openstack/workflow/v2/requests/create_action.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def create_action(definition) diff --git a/lib/fog/workflow/openstack/v2/requests/create_action_execution.rb b/lib/fog/openstack/workflow/v2/requests/create_action_execution.rb similarity index 95% rename from lib/fog/workflow/openstack/v2/requests/create_action_execution.rb rename to lib/fog/openstack/workflow/v2/requests/create_action_execution.rb index 820308087..a76b5b8a1 100644 --- a/lib/fog/workflow/openstack/v2/requests/create_action_execution.rb +++ b/lib/fog/openstack/workflow/v2/requests/create_action_execution.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def create_action_execution(action, input = {}, params = {}) diff --git a/lib/fog/workflow/openstack/v2/requests/create_cron_trigger.rb b/lib/fog/openstack/workflow/v2/requests/create_cron_trigger.rb similarity index 97% rename from lib/fog/workflow/openstack/v2/requests/create_cron_trigger.rb rename to lib/fog/openstack/workflow/v2/requests/create_cron_trigger.rb index 50158ce39..0413de5b7 100644 --- a/lib/fog/workflow/openstack/v2/requests/create_cron_trigger.rb +++ b/lib/fog/openstack/workflow/v2/requests/create_cron_trigger.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def create_cron_trigger(name, diff --git a/lib/fog/workflow/openstack/v2/requests/create_environment.rb b/lib/fog/openstack/workflow/v2/requests/create_environment.rb similarity index 94% rename from lib/fog/workflow/openstack/v2/requests/create_environment.rb rename to lib/fog/openstack/workflow/v2/requests/create_environment.rb index 13515d350..2157ea728 100644 --- a/lib/fog/workflow/openstack/v2/requests/create_environment.rb +++ b/lib/fog/openstack/workflow/v2/requests/create_environment.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def create_environment(definition) diff --git a/lib/fog/workflow/openstack/v2/requests/create_execution.rb b/lib/fog/openstack/workflow/v2/requests/create_execution.rb similarity index 94% rename from lib/fog/workflow/openstack/v2/requests/create_execution.rb rename to lib/fog/openstack/workflow/v2/requests/create_execution.rb index 6b9f284bd..2cfae41d1 100644 --- a/lib/fog/workflow/openstack/v2/requests/create_execution.rb +++ b/lib/fog/openstack/workflow/v2/requests/create_execution.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def create_execution(workflow, input = {}) diff --git a/lib/fog/workflow/openstack/v2/requests/create_workbook.rb b/lib/fog/openstack/workflow/v2/requests/create_workbook.rb similarity index 93% rename from lib/fog/workflow/openstack/v2/requests/create_workbook.rb rename to lib/fog/openstack/workflow/v2/requests/create_workbook.rb index 71a7c2f1d..11ce85ce3 100644 --- a/lib/fog/workflow/openstack/v2/requests/create_workbook.rb +++ b/lib/fog/openstack/workflow/v2/requests/create_workbook.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def create_workbook(definition) diff --git a/lib/fog/workflow/openstack/v2/requests/create_workflow.rb b/lib/fog/openstack/workflow/v2/requests/create_workflow.rb similarity index 93% rename from lib/fog/workflow/openstack/v2/requests/create_workflow.rb rename to lib/fog/openstack/workflow/v2/requests/create_workflow.rb index 376f4cf9b..ba2d7a426 100644 --- a/lib/fog/workflow/openstack/v2/requests/create_workflow.rb +++ b/lib/fog/openstack/workflow/v2/requests/create_workflow.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def create_workflow(definition) diff --git a/lib/fog/workflow/openstack/v2/requests/delete_action.rb b/lib/fog/openstack/workflow/v2/requests/delete_action.rb similarity index 79% rename from lib/fog/workflow/openstack/v2/requests/delete_action.rb rename to lib/fog/openstack/workflow/v2/requests/delete_action.rb index 2f337d7f5..95ef577e8 100644 --- a/lib/fog/workflow/openstack/v2/requests/delete_action.rb +++ b/lib/fog/openstack/workflow/v2/requests/delete_action.rb @@ -1,13 +1,13 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def delete_action(name) request( expects: 204, method: "DELETE", - path: "actions/#{URI.encode(name)}" + path: "actions/#{URI.encode_www_form_component(name)}" ) end end diff --git a/lib/fog/workflow/openstack/v2/requests/delete_action_execution.rb b/lib/fog/openstack/workflow/v2/requests/delete_action_execution.rb similarity index 92% rename from lib/fog/workflow/openstack/v2/requests/delete_action_execution.rb rename to lib/fog/openstack/workflow/v2/requests/delete_action_execution.rb index efd38e477..a208ae858 100644 --- a/lib/fog/workflow/openstack/v2/requests/delete_action_execution.rb +++ b/lib/fog/openstack/workflow/v2/requests/delete_action_execution.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def delete_action_execution(id) diff --git a/lib/fog/workflow/openstack/v2/requests/delete_cron_trigger.rb b/lib/fog/openstack/workflow/v2/requests/delete_cron_trigger.rb similarity index 78% rename from lib/fog/workflow/openstack/v2/requests/delete_cron_trigger.rb rename to lib/fog/openstack/workflow/v2/requests/delete_cron_trigger.rb index ffea770c5..85000b599 100644 --- a/lib/fog/workflow/openstack/v2/requests/delete_cron_trigger.rb +++ b/lib/fog/openstack/workflow/v2/requests/delete_cron_trigger.rb @@ -1,13 +1,13 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def delete_cron_trigger(name) request( expects: 204, method: "DELETE", - path: "cron_triggers/#{URI.encode(name)}" + path: "cron_triggers/#{URI.encode_www_form_component(name)}" ) end end diff --git a/lib/fog/workflow/openstack/v2/requests/delete_environment.rb b/lib/fog/openstack/workflow/v2/requests/delete_environment.rb similarity index 78% rename from lib/fog/workflow/openstack/v2/requests/delete_environment.rb rename to lib/fog/openstack/workflow/v2/requests/delete_environment.rb index f953cfd0c..633969319 100644 --- a/lib/fog/workflow/openstack/v2/requests/delete_environment.rb +++ b/lib/fog/openstack/workflow/v2/requests/delete_environment.rb @@ -1,13 +1,13 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def delete_environment(name) request( expects: 204, method: "DELETE", - path: "environments/#{URI.encode(name)}" + path: "environments/#{URI.encode_www_form_component(name)}" ) end end diff --git a/lib/fog/workflow/openstack/v2/requests/delete_execution.rb b/lib/fog/openstack/workflow/v2/requests/delete_execution.rb similarity index 92% rename from lib/fog/workflow/openstack/v2/requests/delete_execution.rb rename to lib/fog/openstack/workflow/v2/requests/delete_execution.rb index c23e6586f..c6fe90faa 100644 --- a/lib/fog/workflow/openstack/v2/requests/delete_execution.rb +++ b/lib/fog/openstack/workflow/v2/requests/delete_execution.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def delete_execution(id) diff --git a/lib/fog/workflow/openstack/v2/requests/delete_workbook.rb b/lib/fog/openstack/workflow/v2/requests/delete_workbook.rb similarity index 79% rename from lib/fog/workflow/openstack/v2/requests/delete_workbook.rb rename to lib/fog/openstack/workflow/v2/requests/delete_workbook.rb index b6b59a270..27454a327 100644 --- a/lib/fog/workflow/openstack/v2/requests/delete_workbook.rb +++ b/lib/fog/openstack/workflow/v2/requests/delete_workbook.rb @@ -1,13 +1,13 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def delete_workbook(name) request( expects: 204, method: "DELETE", - path: "workbooks/#{URI.encode(name)}" + path: "workbooks/#{URI.encode_www_form_component(name)}" ) end end diff --git a/lib/fog/workflow/openstack/v2/requests/delete_workflow.rb b/lib/fog/openstack/workflow/v2/requests/delete_workflow.rb similarity index 92% rename from lib/fog/workflow/openstack/v2/requests/delete_workflow.rb rename to lib/fog/openstack/workflow/v2/requests/delete_workflow.rb index e4e3ed264..ce5e56268 100644 --- a/lib/fog/workflow/openstack/v2/requests/delete_workflow.rb +++ b/lib/fog/openstack/workflow/v2/requests/delete_workflow.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def delete_workflow(identifier) diff --git a/lib/fog/workflow/openstack/v2/requests/get_action.rb b/lib/fog/openstack/workflow/v2/requests/get_action.rb similarity index 82% rename from lib/fog/workflow/openstack/v2/requests/get_action.rb rename to lib/fog/openstack/workflow/v2/requests/get_action.rb index fd906c5a0..d3e8fbe45 100644 --- a/lib/fog/workflow/openstack/v2/requests/get_action.rb +++ b/lib/fog/openstack/workflow/v2/requests/get_action.rb @@ -1,13 +1,13 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def get_action(name) request( expects: 200, method: "GET", - path: "actions/#{URI.encode(name)}" + path: "actions/#{URI.encode_www_form_component(name)}" ) end end diff --git a/lib/fog/workflow/openstack/v2/requests/get_action_execution.rb b/lib/fog/openstack/workflow/v2/requests/get_action_execution.rb similarity index 93% rename from lib/fog/workflow/openstack/v2/requests/get_action_execution.rb rename to lib/fog/openstack/workflow/v2/requests/get_action_execution.rb index 853788790..0d2bdb488 100644 --- a/lib/fog/workflow/openstack/v2/requests/get_action_execution.rb +++ b/lib/fog/openstack/workflow/v2/requests/get_action_execution.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def get_action_execution(execution_id) diff --git a/lib/fog/workflow/openstack/v2/requests/get_cron_trigger.rb b/lib/fog/openstack/workflow/v2/requests/get_cron_trigger.rb similarity index 75% rename from lib/fog/workflow/openstack/v2/requests/get_cron_trigger.rb rename to lib/fog/openstack/workflow/v2/requests/get_cron_trigger.rb index e279b7be3..a4b5b487a 100644 --- a/lib/fog/workflow/openstack/v2/requests/get_cron_trigger.rb +++ b/lib/fog/openstack/workflow/v2/requests/get_cron_trigger.rb @@ -1,13 +1,13 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def get_cron_trigger(name) request( expects: 200, method: "GET", - path: "cron_triggers/#{URI.encode(name)}" + path: "cron_triggers/#{URI.encode_www_form_component(name)}" ) end end @@ -17,7 +17,7 @@ def get_cron_trigger(_name) response = Excon::Response.new response.status = 200 response.body = { "version" => "2.0", - "name" => "cron_trigger1", + "name" => "cron_trigger1", "description" => "d1" } response end diff --git a/lib/fog/workflow/openstack/v2/requests/get_environment.rb b/lib/fog/openstack/workflow/v2/requests/get_environment.rb similarity index 84% rename from lib/fog/workflow/openstack/v2/requests/get_environment.rb rename to lib/fog/openstack/workflow/v2/requests/get_environment.rb index 5a03d75c4..f3d214b43 100644 --- a/lib/fog/workflow/openstack/v2/requests/get_environment.rb +++ b/lib/fog/openstack/workflow/v2/requests/get_environment.rb @@ -1,13 +1,13 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def get_environment(name) request( expects: 200, method: "GET", - path: "environments/#{URI.encode(name)}" + path: "environments/#{URI.encode_www_form_component(name)}" ) end end diff --git a/lib/fog/workflow/openstack/v2/requests/get_execution.rb b/lib/fog/openstack/workflow/v2/requests/get_execution.rb similarity index 93% rename from lib/fog/workflow/openstack/v2/requests/get_execution.rb rename to lib/fog/openstack/workflow/v2/requests/get_execution.rb index 36f6ec059..8052dc743 100644 --- a/lib/fog/workflow/openstack/v2/requests/get_execution.rb +++ b/lib/fog/openstack/workflow/v2/requests/get_execution.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def get_execution(execution_id) diff --git a/lib/fog/workflow/openstack/v2/requests/get_task.rb b/lib/fog/openstack/workflow/v2/requests/get_task.rb similarity index 93% rename from lib/fog/workflow/openstack/v2/requests/get_task.rb rename to lib/fog/openstack/workflow/v2/requests/get_task.rb index 0a13b03f9..cd0ecd5c9 100644 --- a/lib/fog/workflow/openstack/v2/requests/get_task.rb +++ b/lib/fog/openstack/workflow/v2/requests/get_task.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def get_task(id) diff --git a/lib/fog/workflow/openstack/v2/requests/get_workbook.rb b/lib/fog/openstack/workflow/v2/requests/get_workbook.rb similarity index 75% rename from lib/fog/workflow/openstack/v2/requests/get_workbook.rb rename to lib/fog/openstack/workflow/v2/requests/get_workbook.rb index 2f6a6abcf..f589dbd84 100644 --- a/lib/fog/workflow/openstack/v2/requests/get_workbook.rb +++ b/lib/fog/openstack/workflow/v2/requests/get_workbook.rb @@ -1,13 +1,13 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def get_workbook(name) request( expects: 200, method: "GET", - path: "workbooks/#{URI.encode(name)}" + path: "workbooks/#{URI.encode_www_form_component(name)}" ) end end @@ -17,7 +17,7 @@ def get_workbook(_name) response = Excon::Response.new response.status = 200 response.body = { "version" => "2.0", - "name" => "workbook1", + "name" => "workbook1", "description" => "d1" } response end diff --git a/lib/fog/workflow/openstack/v2/requests/get_workflow.rb b/lib/fog/openstack/workflow/v2/requests/get_workflow.rb similarity index 85% rename from lib/fog/workflow/openstack/v2/requests/get_workflow.rb rename to lib/fog/openstack/workflow/v2/requests/get_workflow.rb index 416d21a85..8ee0bdc49 100644 --- a/lib/fog/workflow/openstack/v2/requests/get_workflow.rb +++ b/lib/fog/openstack/workflow/v2/requests/get_workflow.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def get_workflow(identifier) @@ -17,7 +17,7 @@ def get_workflow(_identifier) response = Excon::Response.new response.status = 200 response.body = { "version" => "2.0", - "name" => "workflow1", + "name" => "workflow1", "description" => "d1" } response end diff --git a/lib/fog/workflow/openstack/v2/requests/list_action_executions.rb b/lib/fog/openstack/workflow/v2/requests/list_action_executions.rb similarity index 94% rename from lib/fog/workflow/openstack/v2/requests/list_action_executions.rb rename to lib/fog/openstack/workflow/v2/requests/list_action_executions.rb index 1a73687f2..bea67450f 100644 --- a/lib/fog/workflow/openstack/v2/requests/list_action_executions.rb +++ b/lib/fog/openstack/workflow/v2/requests/list_action_executions.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def list_action_executions diff --git a/lib/fog/workflow/openstack/v2/requests/list_actions.rb b/lib/fog/openstack/workflow/v2/requests/list_actions.rb similarity index 95% rename from lib/fog/workflow/openstack/v2/requests/list_actions.rb rename to lib/fog/openstack/workflow/v2/requests/list_actions.rb index d720933ce..a28baa5db 100644 --- a/lib/fog/workflow/openstack/v2/requests/list_actions.rb +++ b/lib/fog/openstack/workflow/v2/requests/list_actions.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def list_actions(params = {}) diff --git a/lib/fog/workflow/openstack/v2/requests/list_cron_triggers.rb b/lib/fog/openstack/workflow/v2/requests/list_cron_triggers.rb similarity index 94% rename from lib/fog/workflow/openstack/v2/requests/list_cron_triggers.rb rename to lib/fog/openstack/workflow/v2/requests/list_cron_triggers.rb index c366de0fb..81a2f10e0 100644 --- a/lib/fog/workflow/openstack/v2/requests/list_cron_triggers.rb +++ b/lib/fog/openstack/workflow/v2/requests/list_cron_triggers.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def list_cron_triggers diff --git a/lib/fog/workflow/openstack/v2/requests/list_environments.rb b/lib/fog/openstack/workflow/v2/requests/list_environments.rb similarity index 94% rename from lib/fog/workflow/openstack/v2/requests/list_environments.rb rename to lib/fog/openstack/workflow/v2/requests/list_environments.rb index d457c179e..28835edb6 100644 --- a/lib/fog/workflow/openstack/v2/requests/list_environments.rb +++ b/lib/fog/openstack/workflow/v2/requests/list_environments.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def list_environments diff --git a/lib/fog/workflow/openstack/v2/requests/list_executions.rb b/lib/fog/openstack/workflow/v2/requests/list_executions.rb similarity index 94% rename from lib/fog/workflow/openstack/v2/requests/list_executions.rb rename to lib/fog/openstack/workflow/v2/requests/list_executions.rb index 5120f466b..4f5b2d233 100644 --- a/lib/fog/workflow/openstack/v2/requests/list_executions.rb +++ b/lib/fog/openstack/workflow/v2/requests/list_executions.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def list_executions diff --git a/lib/fog/openstack/workflow/v2/requests/list_services.rb b/lib/fog/openstack/workflow/v2/requests/list_services.rb new file mode 100644 index 000000000..30b9de427 --- /dev/null +++ b/lib/fog/openstack/workflow/v2/requests/list_services.rb @@ -0,0 +1,28 @@ +module Fog + module OpenStack + class Workflow + class V2 + class Real + def list_services + request( + expects: 200, + method: "GET", + path: "services" + ) + end + end + + class Mock + def list_services + response = Excon::Response.new + response.status = 200 + response.body = { "services" => + [{ "name" => "service1", "description" => "d1" }, + { "name" => "service2", "description" => "d2" }] } + response + end + end + end + end + end +end diff --git a/lib/fog/workflow/openstack/v2/requests/list_tasks.rb b/lib/fog/openstack/workflow/v2/requests/list_tasks.rb similarity index 94% rename from lib/fog/workflow/openstack/v2/requests/list_tasks.rb rename to lib/fog/openstack/workflow/v2/requests/list_tasks.rb index c49258b56..833d49667 100644 --- a/lib/fog/workflow/openstack/v2/requests/list_tasks.rb +++ b/lib/fog/openstack/workflow/v2/requests/list_tasks.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def list_tasks(workflow_execution_id) diff --git a/lib/fog/workflow/openstack/v2/requests/list_workbooks.rb b/lib/fog/openstack/workflow/v2/requests/list_workbooks.rb similarity index 94% rename from lib/fog/workflow/openstack/v2/requests/list_workbooks.rb rename to lib/fog/openstack/workflow/v2/requests/list_workbooks.rb index a9a094195..13fbbed01 100644 --- a/lib/fog/workflow/openstack/v2/requests/list_workbooks.rb +++ b/lib/fog/openstack/workflow/v2/requests/list_workbooks.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def list_workbooks diff --git a/lib/fog/workflow/openstack/v2/requests/list_workflows.rb b/lib/fog/openstack/workflow/v2/requests/list_workflows.rb similarity index 95% rename from lib/fog/workflow/openstack/v2/requests/list_workflows.rb rename to lib/fog/openstack/workflow/v2/requests/list_workflows.rb index a6aed549a..cfa79c002 100644 --- a/lib/fog/workflow/openstack/v2/requests/list_workflows.rb +++ b/lib/fog/openstack/workflow/v2/requests/list_workflows.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def list_workflows(params = {}) diff --git a/lib/fog/workflow/openstack/v2/requests/rerun_task.rb b/lib/fog/openstack/workflow/v2/requests/rerun_task.rb similarity index 94% rename from lib/fog/workflow/openstack/v2/requests/rerun_task.rb rename to lib/fog/openstack/workflow/v2/requests/rerun_task.rb index 7d05bfce0..a3141f350 100644 --- a/lib/fog/workflow/openstack/v2/requests/rerun_task.rb +++ b/lib/fog/openstack/workflow/v2/requests/rerun_task.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def rerun_task(task_ex_id) diff --git a/lib/fog/workflow/openstack/v2/requests/update_action.rb b/lib/fog/openstack/workflow/v2/requests/update_action.rb similarity index 93% rename from lib/fog/workflow/openstack/v2/requests/update_action.rb rename to lib/fog/openstack/workflow/v2/requests/update_action.rb index e438c7658..f297f04b2 100644 --- a/lib/fog/workflow/openstack/v2/requests/update_action.rb +++ b/lib/fog/openstack/workflow/v2/requests/update_action.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def update_action(definition) diff --git a/lib/fog/workflow/openstack/v2/requests/update_action_execution.rb b/lib/fog/openstack/workflow/v2/requests/update_action_execution.rb similarity index 95% rename from lib/fog/workflow/openstack/v2/requests/update_action_execution.rb rename to lib/fog/openstack/workflow/v2/requests/update_action_execution.rb index dd7d33ea2..954fd29fe 100644 --- a/lib/fog/workflow/openstack/v2/requests/update_action_execution.rb +++ b/lib/fog/openstack/workflow/v2/requests/update_action_execution.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def update_action_execution(id, name, value) diff --git a/lib/fog/workflow/openstack/v2/requests/update_environment.rb b/lib/fog/openstack/workflow/v2/requests/update_environment.rb similarity index 94% rename from lib/fog/workflow/openstack/v2/requests/update_environment.rb rename to lib/fog/openstack/workflow/v2/requests/update_environment.rb index 806e6acc7..71c09e2ff 100644 --- a/lib/fog/workflow/openstack/v2/requests/update_environment.rb +++ b/lib/fog/openstack/workflow/v2/requests/update_environment.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def update_environment(definition) diff --git a/lib/fog/workflow/openstack/v2/requests/update_execution.rb b/lib/fog/openstack/workflow/v2/requests/update_execution.rb similarity index 95% rename from lib/fog/workflow/openstack/v2/requests/update_execution.rb rename to lib/fog/openstack/workflow/v2/requests/update_execution.rb index 38b2203a4..44824ce10 100644 --- a/lib/fog/workflow/openstack/v2/requests/update_execution.rb +++ b/lib/fog/openstack/workflow/v2/requests/update_execution.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def update_execution(id, name, value) diff --git a/lib/fog/workflow/openstack/v2/requests/update_workbook.rb b/lib/fog/openstack/workflow/v2/requests/update_workbook.rb similarity index 93% rename from lib/fog/workflow/openstack/v2/requests/update_workbook.rb rename to lib/fog/openstack/workflow/v2/requests/update_workbook.rb index d081eb2c4..5901e5f3d 100644 --- a/lib/fog/workflow/openstack/v2/requests/update_workbook.rb +++ b/lib/fog/openstack/workflow/v2/requests/update_workbook.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def update_workbook(definition) diff --git a/lib/fog/workflow/openstack/v2/requests/update_workflow.rb b/lib/fog/openstack/workflow/v2/requests/update_workflow.rb similarity index 93% rename from lib/fog/workflow/openstack/v2/requests/update_workflow.rb rename to lib/fog/openstack/workflow/v2/requests/update_workflow.rb index 9a757a28e..c068d7667 100644 --- a/lib/fog/workflow/openstack/v2/requests/update_workflow.rb +++ b/lib/fog/openstack/workflow/v2/requests/update_workflow.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def update_workflow(definition) diff --git a/lib/fog/workflow/openstack/v2/requests/validate_action.rb b/lib/fog/openstack/workflow/v2/requests/validate_action.rb similarity index 93% rename from lib/fog/workflow/openstack/v2/requests/validate_action.rb rename to lib/fog/openstack/workflow/v2/requests/validate_action.rb index cf09f36a8..26296e37f 100644 --- a/lib/fog/workflow/openstack/v2/requests/validate_action.rb +++ b/lib/fog/openstack/workflow/v2/requests/validate_action.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def validate_action(definition) diff --git a/lib/fog/workflow/openstack/v2/requests/validate_workbook.rb b/lib/fog/openstack/workflow/v2/requests/validate_workbook.rb similarity index 93% rename from lib/fog/workflow/openstack/v2/requests/validate_workbook.rb rename to lib/fog/openstack/workflow/v2/requests/validate_workbook.rb index 86f4a653e..967f4c1ab 100644 --- a/lib/fog/workflow/openstack/v2/requests/validate_workbook.rb +++ b/lib/fog/openstack/workflow/v2/requests/validate_workbook.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def validate_workbook(definition) diff --git a/lib/fog/workflow/openstack/v2/requests/validate_workflow.rb b/lib/fog/openstack/workflow/v2/requests/validate_workflow.rb similarity index 93% rename from lib/fog/workflow/openstack/v2/requests/validate_workflow.rb rename to lib/fog/openstack/workflow/v2/requests/validate_workflow.rb index 51a710338..0650937f1 100644 --- a/lib/fog/workflow/openstack/v2/requests/validate_workflow.rb +++ b/lib/fog/openstack/workflow/v2/requests/validate_workflow.rb @@ -1,6 +1,6 @@ module Fog - module Workflow - class OpenStack + module OpenStack + class Workflow class V2 class Real def validate_workflow(definition) diff --git a/lib/fog/orchestration/openstack.rb b/lib/fog/orchestration/openstack.rb deleted file mode 100644 index e0b6b5b47..000000000 --- a/lib/fog/orchestration/openstack.rb +++ /dev/null @@ -1,156 +0,0 @@ - - -module Fog - module Orchestration - class OpenStack < Fog::Service - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix - - model_path 'fog/orchestration/openstack/models' - model :stack - collection :stacks - - model :resource - collection :resources - - collection :resource_schemas - - model :event - collection :events - - model :template - collection :templates - - request_path 'fog/orchestration/openstack/requests' - request :abandon_stack - request :build_info - request :create_stack - request :delete_stack - request :get_stack_template - request :list_events - request :list_resource_events - request :list_resource_types - request :list_resources - request :list_stack_data - request :list_stack_data_detailed - request :list_stack_events - request :preview_stack - request :show_event_details - request :show_resource_data - request :show_resource_metadata - request :show_resource_schema - request :show_resource_template - request :show_stack_details - request :update_stack - request :patch_stack - request :validate_template - request :cancel_update - - module Reflectable - REFLECTION_REGEX = /\/stacks\/(\w+)\/([\w|-]+)\/resources\/(\w+)/ - - def resource - @resource ||= service.resources.get(r[3], stack) - end - - def stack - @stack ||= service.stacks.get(r[1], r[2]) - end - - private - - def reflection - @reflection ||= REFLECTION_REGEX.match(links[0]['href']) - end - alias r reflection - end - - class Mock - attr_reader :auth_token - attr_reader :auth_token_expiration - attr_reader :current_user - attr_reader :current_tenant - - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - stacks: {} - } - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @current_tenant = options[:openstack_tenant] - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 8774 - management_url.path = '/v1' - @openstack_management_url = management_url.to_s - - identity_public_endpoint = URI.parse(options[:openstack_auth_url]) - identity_public_endpoint.port = 5000 - @openstack_identity_public_endpoint = identity_public_endpoint.to_s - end - - def data - self.class.data["#{@openstack_username}-#{@current_tenant}"] - end - - def reset_data - self.class.data.delete("#{@openstack_username}-#{@current_tenant}") - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_management_url: @openstack_management_url, - openstack_identity_endpoint: @openstack_identity_public_endpoint } - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::Orchestration::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_identity_service_type = options[:openstack_identity_service_type] || 'identity' - - @openstack_service_type = options[:openstack_service_type] || ['orchestration'] - @openstack_service_name = options[:openstack_service_name] - - @connection_options = options[:connection_options] || {} - - authenticate - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - end - end - end -end diff --git a/lib/fog/orchestration/openstack/models/event.rb b/lib/fog/orchestration/openstack/models/event.rb deleted file mode 100644 index 8debd856a..000000000 --- a/lib/fog/orchestration/openstack/models/event.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Orchestration - class OpenStack - class Event < Fog::OpenStack::Model - include Reflectable - - identity :id - - %w(resource_name event_time links logical_resource_id resource_status - resource_status_reason physical_resource_id).each do |a| - attribute a.to_sym - end - end - end - end -end diff --git a/lib/fog/orchestration/openstack/models/events.rb b/lib/fog/orchestration/openstack/models/events.rb deleted file mode 100644 index 2d5ddd7f0..000000000 --- a/lib/fog/orchestration/openstack/models/events.rb +++ /dev/null @@ -1,31 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/orchestration/openstack/models/event' - -module Fog - module Orchestration - class OpenStack - class Events < Fog::OpenStack::Collection - model Fog::Orchestration::OpenStack::Event - - def all(options = {}, options_deprecated = {}) - data = if options.kind_of?(Stack) - service.list_stack_events(options, options_deprecated) - elsif options.kind_of?(Hash) - service.list_events(options) - else - service.list_resource_events(options.stack, options, options_deprecated) - end - - load_response(data, 'events') - end - - def get(stack, resource, event_id) - data = service.show_event_details(stack, resource, event_id).body['event'] - new(data) - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/orchestration/openstack/models/resource.rb b/lib/fog/orchestration/openstack/models/resource.rb deleted file mode 100644 index 6d8574cf6..000000000 --- a/lib/fog/orchestration/openstack/models/resource.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Orchestration - class OpenStack - class Resource < Fog::OpenStack::Model - include Reflectable - - identity :id - - %w(resource_name description links logical_resource_id physical_resource_id resource_status - updated_time required_by resource_status_reason resource_type).each do |a| - attribute a.to_sym - end - - def events(options = {}) - @events ||= service.events.all(self, options) - end - - def metadata - @metadata ||= service.show_resource_metadata(stack, resource_name).body['metadata'] - end - - def template - @template ||= service.templates.get(self) - end - end - end - end -end diff --git a/lib/fog/orchestration/openstack/models/resource_schemas.rb b/lib/fog/orchestration/openstack/models/resource_schemas.rb deleted file mode 100644 index f0131c84b..000000000 --- a/lib/fog/orchestration/openstack/models/resource_schemas.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'fog/openstack/models/collection' - -module Fog - module Orchestration - class OpenStack - class ResourceSchemas < Fog::OpenStack::Collection - def get(resource_type) - service.show_resource_schema(resource_type).body - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/orchestration/openstack/models/resources.rb b/lib/fog/orchestration/openstack/models/resources.rb deleted file mode 100644 index 6a9f7867c..000000000 --- a/lib/fog/orchestration/openstack/models/resources.rb +++ /dev/null @@ -1,35 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/orchestration/openstack/models/resource' - -module Fog - module Orchestration - class OpenStack - class Resources < Fog::OpenStack::Collection - model Fog::Orchestration::OpenStack::Resource - - def types - service.list_resource_types.body['resource_types'].sort - end - - def all(options = {}, deprecated_options = {}) - data = service.list_resources(options, deprecated_options) - load_response(data, 'resources') - end - - def get(resource_name, stack = nil) - stack = first.stack if stack.nil? - data = service.show_resource_data(stack.stack_name, stack.id, resource_name).body['resource'] - new(data) - rescue Fog::Compute::OpenStack::NotFound - nil - end - - def metadata(stack_name, stack_id, resource_name) - service.show_resource_metadata(stack_name, stack_id, resource_name).body['resource'] - rescue Fog::Compute::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/orchestration/openstack/requests/list_events.rb b/lib/fog/orchestration/openstack/requests/list_events.rb deleted file mode 100644 index bdf193e01..000000000 --- a/lib/fog/orchestration/openstack/requests/list_events.rb +++ /dev/null @@ -1,46 +0,0 @@ -module Fog - module Orchestration - class OpenStack - class Real - def list_events(options = {}) - if !options.key?(:stack) && !(options.key?(:stack_name) && options.key?(:stack_id)) - raise(ArgumentError, "Missing required options keys: :stack or :stack_name and :stack_id, while calling "\ - " .list_events(options)") - end - - stack = options.delete(:stack) - stack_name = options.delete(:stack_name) - stack_name ||= stack.stack_name if stack && stack.respond_to?(:stack_name) - stack_id = options.delete(:stack_id) - stack_id ||= stack.id if stack && stack.respond_to?(:id) - - resource = options.delete(:resource) - resource_name = options.delete(:resource_name) - resource_name ||= resource.resource_name if resource && resource.respond_to?(:resource_name) - - path = if resource_name - "stacks/#{stack_name}/#{stack_id}/resources/#{resource_name}/events" - else - "stacks/#{stack_name}/#{stack_id}/events" - end - - request(method: 'GET', - path: path, - expects: 200, - query: options) - end - end - - class Mock - def list_events(_options = {}) - events = data[:events].values - - Excon::Response.new( - body: { 'events' => events }, - status: 200 - ) - end - end - end - end -end diff --git a/lib/fog/orchestration/openstack/requests/list_resources.rb b/lib/fog/orchestration/openstack/requests/list_resources.rb deleted file mode 100644 index c0f7bd5d2..000000000 --- a/lib/fog/orchestration/openstack/requests/list_resources.rb +++ /dev/null @@ -1,46 +0,0 @@ -module Fog - module Orchestration - class OpenStack - class Real - def list_resources(options = {}, options_deprecated = {}) - if options.kind_of?(Hash) - if !options.key?(:stack) && !(options.key?(:stack_name) && options.key?(:stack_id)) - raise(ArgumentError, "Missing required options keys: :stack or :stack_name and :stack_id, while calling "\ - " .list_resources(options)") - end - - stack = options.delete(:stack) - stack_name = options.delete(:stack_name) - stack_name ||= stack.stack_name if stack && stack.respond_to?(:stack_name) - stack_id = options.delete(:stack_id) - stack_id ||= stack.id if stack && stack.respond_to?(:id) - path = "stacks/#{stack_name}/#{stack_id}/resources" - params = options - else - Fog::Logger.deprecation('Calling OpenStack[:orchestration].list_resources(stack, options) is deprecated, '\ - ' call .list_resources(:stack => stack) or '\ - ' .list_resources(:stack_name => value, :stack_id => value) instead') - path = "stacks/#{options.stack_name}/#{options.id}/resources" - params = options_deprecated - end - - request(method: 'GET', - path: path, - expects: 200, - query: params) - end - end - - class Mock - def list_resources(_options = {}, _options_deprecated = {}) - resources = data[:resources].values - - Excon::Response.new( - body: { 'resources' => resources }, - status: 200 - ) - end - end - end - end -end diff --git a/lib/fog/orchestration/openstack/requests/list_stack_data_detailed.rb b/lib/fog/orchestration/openstack/requests/list_stack_data_detailed.rb deleted file mode 100644 index a4878a121..000000000 --- a/lib/fog/orchestration/openstack/requests/list_stack_data_detailed.rb +++ /dev/null @@ -1,49 +0,0 @@ -module Fog - module Orchestration - class OpenStack - class Real - def list_stack_data_detailed(options = {}) - request( - method: 'GET', - path: 'stacks/detail', - expects: 200, - query: options - ) - end - end - - class Mock - def list_stack_data_detailed(_options = {}) - Excon::Response.new( - body: { - 'stacks' => - [{ "parent" => nil, - "disable_rollback" => true, - "description" => "No description", - "links" => [{ "href" => "http://192.0.2.1:8004/v1/ae084f19a7974d5b95703f633e57fd64/stacks/overcloud/9ea5226f-0bb3-40bf-924b-f89ea11bb69c", - "rel" => "self" }], - "stack_status_reason" => "Stack CREATE completed successfully", - "stack_name" => "overcloud", - "stack_user_project_id" => "ae084f19a7974d5b95703f633e57fd64", - "stack_owner" => "admin", - "creation_time" => "2015-06-24T07:19:01Z", - "capabilities" => [], - "notification_topics" => [], - "updated_time" => nil, - "timeout_mins" => nil, - "stack_status" => "CREATE_COMPLETE", - "parameters" => { "Controller-1::SSLKey" => "******", - "Compute-1::RabbitClientUseSSL" => "False", - "Controller-1::KeystoneSSLCertificate" => "", - "Controller-1::CinderLVMLoopDeviceSize" => "5000" }, - "id" => "9ea5226f-0bb3-40bf-924b-f89ea11bb69c", - "outputs" => [], - "template_description" => "No description" }] - }, - status: 200 - ) - end - end - end - end -end diff --git a/lib/fog/orchestration/openstack/requests/show_stack_details.rb b/lib/fog/orchestration/openstack/requests/show_stack_details.rb deleted file mode 100644 index 65f9ea689..000000000 --- a/lib/fog/orchestration/openstack/requests/show_stack_details.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Fog - module Orchestration - class OpenStack - class Real - def show_stack_details(name, id) - request( - method: 'GET', - path: "stacks/#{name}/#{id}", - expects: 200 - ) - end - end - - class Mock - def show_stack_details(_name, _id) - stack = data[:stack].values - - Excon::Response.new( - body: { 'stack' => stack }, - status: 200 - ) - end - end - end - end -end diff --git a/lib/fog/orchestration/openstack/requests/update_stack.rb b/lib/fog/orchestration/openstack/requests/update_stack.rb deleted file mode 100644 index 6182503ab..000000000 --- a/lib/fog/orchestration/openstack/requests/update_stack.rb +++ /dev/null @@ -1,88 +0,0 @@ -module Fog - module Orchestration - class OpenStack - class Real - # Update a stack. - # - # @param [Fog::Orchestration::OpenStack::Stack] the stack to update. - # @param [Hash] options - # * :template [String] Structure containing the template body. - # or (one of the two Template parameters is required) - # * :template_url [String] URL of file containing the template body. - # * :parameters [Hash] Hash of providers to supply to template. - # * :files [Hash] Hash with files resources. - # - def update_stack(arg1, arg2 = nil, arg3 = nil) - if arg1.kind_of?(Stack) - # Normal use, update_stack(stack, options = {}) - stack = arg1 - stack_name = stack.stack_name - stack_id = stack.id - options = arg2.nil? ? {} : arg2 - else - # Deprecated, update_stack(stack_id, stack_name, options = {}) - Fog::Logger.deprecation("#update_stack(stack_id, stack_name, options) is deprecated, use #update_stack(stack, options) instead [light_black](#{caller.first})[/]") - stack_id = arg1 - stack_name = arg2 - options = { - stack_name: stack_name - }.merge(arg3.nil? ? {} : arg3) - end - - # Templates should always: - # - be strings - # - contain URI references instead of relative paths. - # Passing :template_url may not work well with `get_file` and remote `type`: - # the python client implementation in shade retrieves from :template_uri - # and replaces it with :template. - # see https://github.com/openstack-infra/shade/blob/master/shade/openstackcloud.py#L1201 - # see https://developer.openstack.org/api-ref/orchestration/v1/index.html#create-stack - file_resolver = Util::RecursiveHotFileLoader.new(options[:template] || options[:template_url], options[:files]) - options[:template] = file_resolver.template - options[:files] = file_resolver.files unless file_resolver.files.empty? - - request( - expects: 202, - path: "stacks/#{stack_name}/#{stack_id}", - method: 'PUT', - body: Fog::JSON.encode(options) - ) - end - end - - class Mock - def update_stack(arg1, arg2 = nil, arg3 = nil) - if arg1.kind_of?(Stack) - # Normal use, update_stack(stack, options = {}) - stack = arg1 - stack_name = stack.stack_name - stack_id = stack.id - options = arg2.nil? ? {} : arg2 - else - # Deprecated, update_stack(stack_id, stack_name, options = {}) - Fog::Logger.deprecation("#update_stack(stack_id, stack_name, options) is deprecated, use #update_stack(stack, options) instead [light_black](#{caller.first})[/]") - stack_id = arg1 - stack_name = arg2 - options = { - stack_name: stack_name - }.merge(arg3.nil? ? {} : arg3) - end - - if options.key?(:files) - response.body['files'] = { 'foo.sh' => 'hello' } - end - - if options.key?(:template) || options.key?(:template_url) - file_resolver = Util::RecursiveHotFileLoader.new(options[:template] || options[:template_url], options[:files]) - response.body['files'] = file_resolver.files unless file_resolver.files.empty? - end - - response = Excon::Response.new - response.status = 202 - response.body = {} - response - end - end - end - end -end diff --git a/lib/fog/planning/openstack.rb b/lib/fog/planning/openstack.rb deleted file mode 100644 index 46f5b94c3..000000000 --- a/lib/fog/planning/openstack.rb +++ /dev/null @@ -1,149 +0,0 @@ - - -module Fog - module OpenStack - class Planning < Fog::Service - SUPPORTED_VERSIONS = /v2/ - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix - - ## MODELS - # - model_path 'fog/planning/openstack/models' - model :role - collection :roles - model :plan - collection :plans - - ## REQUESTS - # - request_path 'fog/planning/openstack/requests' - - # Role requests - request :list_roles - - # Plan requests - request :list_plans - request :get_plan_templates - request :get_plan - request :patch_plan - request :create_plan - request :delete_plan - request :add_role_to_plan - request :remove_role_from_plan - - class Mock - def self.data - @data ||= {} - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 9292 - management_url.path = '/v1' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].find { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_region: @openstack_region, - openstack_management_url: @openstack_management_url } - end - end - - class Real - include Fog::OpenStack::Core - - # NOTE: uncommenting this should be treated as api-change! - # def self.not_found_class - # Fog::Planning::OpenStack::NotFound - # end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['management'] # currently Tuskar is configured as 'management' service in Keystone - @openstack_service_name = options[:openstack_service_name] - @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL' - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - unless @path.match(SUPPORTED_VERSIONS) - @path = "/v2" - end - end - end - end - - # TODO: get rid of inconform self.[] & self.new & self.services - def self.[](service) - new(service: service) - end - - def self.new(attributes) - attributes = attributes.dup # Prevent delete from having side effects - service = attributes.delete(:service).to_s.downcase.to_sym - if services.include?(service) - require "fog/#{service}/openstack" - return Fog::OpenStack.const_get(service.to_s.capitalize).new(attributes) - end - raise ArgumentError, "Openstack has no #{service} service" - end - - def self.services - # Ruby 1.8.7 compatibility for select returning Array of Arrays (pairs) - Hash[Fog.services.select { |_service, providers| providers.include?(:openstack) }].keys - end - end -end diff --git a/lib/fog/planning/openstack/models/plans.rb b/lib/fog/planning/openstack/models/plans.rb deleted file mode 100644 index dec602896..000000000 --- a/lib/fog/planning/openstack/models/plans.rb +++ /dev/null @@ -1,31 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/planning/openstack/models/plan' - -module Fog - module OpenStack - class Planning - class Plans < Fog::OpenStack::Collection - model Fog::OpenStack::Planning::Plan - - def all(options = {}) - load_response(service.list_plans(options)) - end - - def find_by_uuid(plan_uuid) - new(service.get_plan(plan_uuid).body) - end - alias get find_by_uuid - - def method_missing(method_sym, *arguments, &block) - if method_sym.to_s =~ /^find_by_(.*)$/ - all.find do |plan| - plan.send($1) == arguments.first - end - else - super - end - end - end - end - end -end diff --git a/lib/fog/planning/openstack/models/roles.rb b/lib/fog/planning/openstack/models/roles.rb deleted file mode 100644 index 19dffd8bf..000000000 --- a/lib/fog/planning/openstack/models/roles.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/planning/openstack/models/role' - -module Fog - module OpenStack - class Planning - class Roles < Fog::OpenStack::Collection - model Fog::OpenStack::Planning::Role - - def all(options = {}) - load_response(service.list_roles(options)) - end - end - end - end -end diff --git a/lib/fog/planning/openstack/requests/add_role_to_plan.rb b/lib/fog/planning/openstack/requests/add_role_to_plan.rb deleted file mode 100644 index 26195fbcc..000000000 --- a/lib/fog/planning/openstack/requests/add_role_to_plan.rb +++ /dev/null @@ -1,40 +0,0 @@ -module Fog - module OpenStack - class Planning - class Real - def add_role_to_plan(plan_uuid, role_uuid) - request( - expects: [201], - method: 'POST', - path: "plans/#{plan_uuid}/roles", - body: Fog::JSON.encode('uuid' => role_uuid) - ) - end - end - - class Mock - def add_role_to_plan(_plan_uuid, _role_uuid) - response = Excon::Response.new - response.status = 201 - response.body = { - "created_at" => "2014-09-26T20:23:14.222815", - "description" => "Development testing cloud", - "name" => "dev-cloud", - "parameters" => [], - "roles" => [ - { - "description" => "OpenStack hypervisor node. Can be wrapped in a ResourceGroup for scaling.\n", - "name" => "compute", - "uuid" => "f72c0656-5696-4c66-81a5-d6d88a48e385", - "version" => 1 - } - ], - "updated_at" => nil, - "uuid" => "53268a27-afc8-4b21-839f-90227dd7a001" - } - response - end - end - end - end -end diff --git a/lib/fog/planning/openstack/requests/create_plan.rb b/lib/fog/planning/openstack/requests/create_plan.rb deleted file mode 100644 index 473ebec2b..000000000 --- a/lib/fog/planning/openstack/requests/create_plan.rb +++ /dev/null @@ -1,33 +0,0 @@ -module Fog - module OpenStack - class Planning - class Real - def create_plan(parameters) - request( - expects: [201], - method: 'POST', - path: "plans", - body: Fog::JSON.encode(parameters) - ) - end - end - - class Mock - def create_plan(_parameters) - response = Excon::Response.new - response.status = 201 - response.body = { - "created_at" => "2014-09-26T20:23:14.222815", - "description" => "Development testing cloud", - "name" => "dev-cloud", - "parameters" => [], - "roles" => [], - "updated_at" => nil, - "uuid" => "53268a27-afc8-4b21-839f-90227dd7a001" - } - response - end - end - end - end -end diff --git a/lib/fog/planning/openstack/requests/get_plan.rb b/lib/fog/planning/openstack/requests/get_plan.rb deleted file mode 100644 index f32b0c780..000000000 --- a/lib/fog/planning/openstack/requests/get_plan.rb +++ /dev/null @@ -1,58 +0,0 @@ -module Fog - module OpenStack - class Planning - class Real - def get_plan(plan_uuid) - request( - expects: [200, 204], - method: 'GET', - path: "plans/#{plan_uuid}" - ) - end - end - - class Mock - def get_plan(_parameters = nil) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = { - "created_at" => "2014-09-26T20:23:14.222815", - "description" => "Development testing cloud", - "name" => "dev-cloud", - "parameters" => - [ - { - "default" => "guest", - "description" => "The password for RabbitMQ", - "hidden" => true, - "label" => nil, - "name" => "compute-1 => =>RabbitPassword", - "value" => "secret-password" - }, - { - "default" => "default", - "description" => "description", - "hidden" => true, - "label" => nil, - "name" => "name", - "value" => "value" - } - ], - "roles" => - [ - { - "description" => "OpenStack hypervisor node. Can be wrapped in a ResourceGroup for scaling.\n", - "name" => "compute", - "uuid" => "b7b1583c-5c80-481f-a25b-708ed4a39734", - "version" => 1 - } - ], - "updated_at" => nil, - "uuid" => "53268a27-afc8-4b21-839f-90227dd7a001" - } - response - end - end - end - end -end diff --git a/lib/fog/planning/openstack/requests/list_plans.rb b/lib/fog/planning/openstack/requests/list_plans.rb deleted file mode 100644 index 8916ef4be..000000000 --- a/lib/fog/planning/openstack/requests/list_plans.rb +++ /dev/null @@ -1,61 +0,0 @@ -module Fog - module OpenStack - class Planning - class Real - def list_plans(options = {}) - request( - expects: [200, 204], - method: 'GET', - path: 'plans', - query: options - ) - end - end - - class Mock - def list_plans(_options = {}) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = [ - { - "created_at" => "2014-09-26T20:23:14.222815", - "description" => "Development testing cloud", - "name" => "dev-cloud", - "parameters" => - [ - { - "default" => "guest", - "description" => "The password for RabbitMQ", - "hidden" => true, - "label" => nil, - "name" => "compute-1 => =>RabbitPassword", - "value" => "secret-password" - }, - { - "default" => "default", - "description" => "description", - "hidden" => true, - "label" => nil, - "name" => "name", - "value" => "value" - } - ], - "roles" => - [ - { - "description" => "OpenStack hypervisor node. Can be wrapped in a ResourceGroup for scaling.\n", - "name" => "compute", - "uuid" => "b7b1583c-5c80-481f-a25b-708ed4a39734", - "version" => 1 - } - ], - "updated_at" => nil, - "uuid" => "53268a27-afc8-4b21-839f-90227dd7a001" - } - ] - response - end - end - end - end -end diff --git a/lib/fog/planning/openstack/requests/list_roles.rb b/lib/fog/planning/openstack/requests/list_roles.rb deleted file mode 100644 index edf025bfe..000000000 --- a/lib/fog/planning/openstack/requests/list_roles.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Fog - module OpenStack - class Planning - class Real - def list_roles(options = {}) - request( - expects: [200, 204], - method: 'GET', - path: 'roles', - query: options - ) - end - end - - class Mock - def list_roles(_options = {}) - response = Excon::Response.new - response.status = [200, 204][rand(2)] - response.body = [ - { - "description" => "OpenStack hypervisor node. Can be wrapped in a ResourceGroup for scaling.\n", - "name" => "compute", - "uuid" => "f72c0656-5696-4c66-81a5-d6d88a48e385", - "version" => 1 - } - ] - response - end - end - end - end -end diff --git a/lib/fog/planning/openstack/requests/patch_plan.rb b/lib/fog/planning/openstack/requests/patch_plan.rb deleted file mode 100644 index 5bc220e79..000000000 --- a/lib/fog/planning/openstack/requests/patch_plan.rb +++ /dev/null @@ -1,51 +0,0 @@ -module Fog - module OpenStack - class Planning - class Real - def patch_plan(plan_uuid, parameters) - request( - expects: [201], - method: 'PATCH', - path: "plans/#{plan_uuid}", - body: Fog::JSON.encode(parameters) - ) - end - end - - class Mock - def patch_plan(_plan_uuid, _parameters) - response = Excon::Response.new - response.status = 201 - response.body = { - "created_at" => "2014-09-26T20:23:14.222815", - "description" => "Development testing cloud", - "name" => "dev-cloud", - "parameters" => - [ - { - "default" => "guest", - "description" => "The password for RabbitMQ", - "hidden" => true, - "label" => nil, - "name" => "compute-1::RabbitPassword", - "value" => "secret-password" - } - ], - "roles" => - [ - { - "description" => "OpenStack hypervisor node. Can be wrapped in a ResourceGroup for scaling.\n", - "name" => "compute", - "uuid" => "b7b1583c-5c80-481f-a25b-708ed4a39734", - "version" => 1 - } - ], - "updated_at" => nil, - "uuid" => "53268a27-afc8-4b21-839f-90227dd7a001" - } - response - end - end - end - end -end diff --git a/lib/fog/planning/openstack/requests/remove_role_from_plan.rb b/lib/fog/planning/openstack/requests/remove_role_from_plan.rb deleted file mode 100644 index 36556bc6e..000000000 --- a/lib/fog/planning/openstack/requests/remove_role_from_plan.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Fog - module OpenStack - class Planning - class Real - def remove_role_from_plan(plan_uuid, role_uuid) - request( - expects: [200], - method: 'DELETE', - path: "plans/#{plan_uuid}/roles/#{role_uuid}" - ) - end - end - - class Mock - def remove_role_from_plan(_plan_uuid, _role_uuid) - response = Excon::Response.new - response.status = 200 - response.body = { - "created_at" => "2014-09-26T20:23:14.222815", - "description" => "Development testing cloud", - "name" => "dev-cloud", - "parameters" => [], - "roles" => [], - "updated_at" => nil, - "uuid" => "53268a27-afc8-4b21-839f-90227dd7a001" - } - response - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack.rb b/lib/fog/shared_file_system/openstack.rb deleted file mode 100644 index b6ba86177..000000000 --- a/lib/fog/shared_file_system/openstack.rb +++ /dev/null @@ -1,389 +0,0 @@ -module Fog - module SharedFileSystem - class OpenStack < Fog::Service - SUPPORTED_VERSIONS = /v2(\.0)*/ - SUPPORTED_MICROVERSION = '2.15'.freeze - - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix, :openstack_shared_file_system_microversion - - model_path 'fog/shared_file_system/openstack/models' - model :network - collection :networks - model :share - collection :shares - model :snapshot - collection :snapshots - model :share_access_rule - collection :share_access_rules - model :share_export_location - collection :share_export_locations - model :availability_zone - collection :availability_zones - - request_path 'fog/shared_file_system/openstack/requests' - # share networks - request :list_share_networks - request :list_share_networks_detail - request :get_share_network - request :create_share_network - request :update_share_network - request :delete_share_network - request :share_network_action - request :add_security_service_to_share_network - request :remove_security_service_from_share_network - - # shares - request :list_shares - request :list_shares_detail - request :get_share - request :create_share - request :update_share - request :delete_share - request :share_action - request :grant_share_access - request :revoke_share_access - request :list_share_access_rules - request :list_share_export_locations - request :extend_share - request :shrink_share - - # snapshots - request :list_snapshots - request :list_snapshots_detail - request :get_snapshot - request :create_snapshot - request :update_snapshot - request :delete_snapshot - - # security services - request :list_security_services - request :list_security_services_detail - request :get_security_service - request :create_security_service - request :update_security_service - request :delete_security_service - - # quota + limits - request :get_limits - request :get_quota - request :update_quota - - # availability zones - request :list_availability_zones - - # rubocop:disable Metrics/MethodLength - class Mock - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - shares: [ - { - "id" => "d94a8548-2079-4be0-b21c-0a887acd31ca", - "links" => [ - { - "href" => "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/shares/d94a8548-2079-4be0-b21c-0a887acd31ca", - "rel" => "self" - }, - { - "href" => "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/d94a8548-2079-4be0-b21c-0a887acd31ca", - "rel" => "bookmark" - } - ], - "name" => "My_share" - }, - { - "id" => "406ea93b-32e9-4907-a117-148b3945749f", - "links" => [ - { - "href" => "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/shares/406ea93b-32e9-4907-a117-148b3945749f", - "rel" => "self" - }, - { - "href" => "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/406ea93b-32e9-4907-a117-148b3945749f", - "rel" => "bookmark" - } - ], - "name" => "Share1" - } - ], - shares_detail: [ - { - "links" => [ - { - "href" => "http://172.18.198.54:8786/v2/16e1ab15c35a457e9c2b2aa189f544e1/shares/f45cc5b2-d1bb-4a3e-ba5b-5c4125613adc", - "rel" => "self" - }, - { - "href" => "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/shares/f45cc5b2-d1bb-4a3e-ba5b-5c4125613adc", - "rel" => "bookmark" - } - ], - "availability_zone" => "nova", - "share_network_id" => "f9b2e754-ac01-4466-86e1-5c569424754e", - "export_locations" => [], - "share_server_id" => "87d8943a-f5da-47a4-b2f2-ddfa6794aa82", - "snapshot_id" => '', - "id" => "f45cc5b2-d1bb-4a3e-ba5b-5c4125613adc", - "size" => 1, - "share_type" => "25747776-08e5-494f-ab40-a64b9d20d8f7", - "share_type_name" => "default", - "export_location" => '', - "consistency_group_id" => "9397c191-8427-4661-a2e8-b23820dc01d4", - "project_id" => "16e1ab15c35a457e9c2b2aa189f544e1", - "metadata" => {}, - "status" => "available", - "access_rules_status" => "active", - "description" => "There is a share description.", - "host" => "manila2@generic1#GENERIC1", - "task_state" => '', - "is_public" => 'true', - "snapshot_support" => 'true', - "name" => "my_share4", - "has_replicas" => 'false', - "replication_type" => '', - "created_at" => "2015-09-16T18:19:50.000000", - "share_proto" => "NFS", - "volume_type" => "default", - "source_cgsnapshot_member_id" => '' - } - ], - share_networks: [ - { - "id" => "32763294-e3d4-456a-998d-60047677c2fb", - "name" => "net_my1" - }, - { - "id" => "713df749-aac0-4a54-af52-10f6c991e80c", - "name" => "net_my" - } - ], - share_networks_detail: [ - { - "name" => "net_my1", - "segmentation_id" => '', - "created_at" => "2015-09-04T14:57:13.000000", - "neutron_subnet_id" => "53482b62-2c84-4a53-b6ab-30d9d9800d06", - "updated_at" => '', - "id" => "32763294-e3d4-456a-998d-60047677c2fb", - "neutron_net_id" => "998b42ee-2cee-4d36-8b95-67b5ca1f2109", - "ip_version" => '', - "nova_net_id" => '', - "cidr" => '', - "project_id" => "16e1ab15c35a457e9c2b2aa189f544e1", - "network_type" => '', - "description" => "descr" - } - ], - snapshots: [ - { - "id" => "086a1aa6-c425-4ecd-9612-391a3b1b9375", - "links" => [ - { - "href" => "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/086a1aa6-c425-4ecd-9612-391a3b1b9375", - "rel" => "self" - }, - { - "href" => "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/086a1aa6-c425-4ecd-9612-391a3b1b9375", - "rel" => "bookmark" - } - ], - "name" => "snapshot_My_share" - } - ], - security_services_detail: [ - { - "status" => "new", - "domain" => "", - "project_id" => "16e1ab15c35a457e9c2b2aa189f544e1", - "name" => "SecServ1", - "created_at" => "2015-09-07T12:19:10.000000", - "updated_at" => "", - "server" => "", - "dns_ip" => "10.0.0.0/24", - "user" => "demo", - "password" => "supersecret", - "type" => "kerberos", - "id" => "3c829734-0679-4c17-9637-801da48c0d5f", - "description" => "Creating my first Security Service" - } - ], - security_services: [ - { - "status" => "new", - "type" => "ldap", - "id" => "5a1d3a12-34a7-4087-8983-50e9ed03509a", - "name" => "SecServ2" - } - ], - availability_zones: [ - { - "name" => "nova", - "created_at" => "2015-09-18T09:50:55.000000", - "updated_at" => nil, - "id" => "388c983d-258e-4a0e-b1ba-10da37d766db" - } - ], - snapshots_detail: [ - { - "status" => "available", - "share_id" => "d94a8548-2079-4be0-b21c-0a887acd31ca", - "name" => "snapshot_My_share", - "links" => [ - { - "href" => "http://172.18.198.54:8786/v1/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/086a1aa6-c425-4ecd-9612-391a3b1b9375", - "rel" => "self" - }, - { - "href" => "http://172.18.198.54:8786/16e1ab15c35a457e9c2b2aa189f544e1/snapshots/086a1aa6-c425-4ecd-9612-391a3b1b9375", - "rel" => "bookmark" - } - ], - "created_at" => "2015-09-07T11:55:09.000000", - "description" => "Here is a snapshot of share My_share", - "share_proto" => "NFS", - "share_size" => 1, - "id" => "086a1aa6-c425-4ecd-9612-391a3b1b9375", - "size" => 1 - } - ], - export_locations: [ - { - "path" => "10.254.0.3:/shares/share-e1c2d35e-fe67-4028-ad7a-45f668732b1d", - "share_instance_id" => "e1c2d35e-fe67-4028-ad7a-45f668732b1d", - "is_admin_only" => false, - "id" => "b6bd76ce-12a2-42a9-a30a-8a43b503867d", - "preferred" => false - }, - { - "path" => "10.0.0.3:/shares/share-e1c2d35e-fe67-4028-ad7a-45f668732b1d", - "share_instance_id" => "e1c2d35e-fe67-4028-ad7a-45f668732b1d", - "is_admin_only" => true, - "id" => "6921e862-88bc-49a5-a2df-efeed9acd583", - "preferred" => false - } - ], - access_rules: [ - { - "share_id" => "406ea93b-32e9-4907-a117-148b3945749f", - "created_at" => "2015-09-07T09:14:48.000000", - "updated_at" => '', - "access_type" => "ip", - "access_to" => "0.0.0.0/0", - "access_level" => "rw", - "access_key" => '', - "id" => "a25b2df3-90bd-4add-afa6-5f0dbbd50452" - } - ], - quota: { - "gigabytes" => 1000, - "shares" => 50, - "snapshot_gigabytes" => 1000, - "snapshots" => 50, - "share_networks" => 10, - "id" => "16e1ab15c35a457e9c2b2aa189f544e1" - } - } - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 8786 - management_url.path = '/v2' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].detect { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_region: @openstack_region, - openstack_management_url: @openstack_management_url } - end - end - # rubocop:enable Metrics/MethodLength - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::SharedFileSystem::OpenStack::NotFound - end - - def initialize(options = {}) - @supported_versions = SUPPORTED_VERSIONS - @supported_microversion = SUPPORTED_MICROVERSION - @fixed_microversion = options[:openstack_shared_file_system_microversion] - @microversion_key = 'X-Openstack-Manila-Api-Version'.freeze - - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['sharev2'] - @openstack_service_name = options[:openstack_service_name] - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - set_microversion - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - unless @path.match(@supported_versions) - @path = Fog::OpenStack.get_supported_version_path(@supported_versions, - @openstack_management_uri, - @auth_token, - @connection_options) - end - end - - def action_prefix - microversion_newer_than?('2.6') ? '' : 'os-' - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/models/availability_zone.rb b/lib/fog/shared_file_system/openstack/models/availability_zone.rb deleted file mode 100644 index 73a5f5526..000000000 --- a/lib/fog/shared_file_system/openstack/models/availability_zone.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module SharedFileSystem - class OpenStack - class AvailabilityZone < Fog::OpenStack::Model - identity :id - - attribute :name - attribute :created_at - attribute :updated_at - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/models/availability_zones.rb b/lib/fog/shared_file_system/openstack/models/availability_zones.rb deleted file mode 100644 index d63442b8b..000000000 --- a/lib/fog/shared_file_system/openstack/models/availability_zones.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/shared_file_system/openstack/models/availability_zone' - -module Fog - module SharedFileSystem - class OpenStack - class AvailabilityZones < Fog::OpenStack::Collection - model Fog::SharedFileSystem::OpenStack::AvailabilityZone - - def all - load_response(service.list_availability_zones(), 'availability_zones') - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/models/network.rb b/lib/fog/shared_file_system/openstack/models/network.rb deleted file mode 100644 index 62d2a574a..000000000 --- a/lib/fog/shared_file_system/openstack/models/network.rb +++ /dev/null @@ -1,42 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module SharedFileSystem - class OpenStack - class Network < Fog::OpenStack::Model - identity :id - - attribute :name - attribute :description - attribute :neutron_net_id - attribute :neutron_subnet_id - attribute :nova_net_id - attribute :network_type - attribute :segmentation_id - attribute :cidr - attribute :ip_version - attribute :project_id - attribute :created_at - attribute :updated_at - - def save - raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? - merge_attributes(service.create_share_network(attributes).body['share_network']) - true - end - - def update(options = nil) - requires :id - merge_attributes(service.update_share_network(id, options || attributes).body['share_network']) - self - end - - def destroy - requires :id - service.delete_share_network(id) - true - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/models/networks.rb b/lib/fog/shared_file_system/openstack/models/networks.rb deleted file mode 100644 index bce63e1bd..000000000 --- a/lib/fog/shared_file_system/openstack/models/networks.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/shared_file_system/openstack/models/network' - -module Fog - module SharedFileSystem - class OpenStack - class Networks < Fog::OpenStack::Collection - model Fog::SharedFileSystem::OpenStack::Network - - def all(options = {}) - load_response(service.list_share_networks_detail(options), 'share_networks') - end - - def find_by_id(id) - net_hash = service.get_share_network(id).body['share_network'] - new(net_hash.merge(service: service)) - end - - alias get find_by_id - - def destroy(id) - net = find_by_id(id) - net.destroy - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/models/snapshot.rb b/lib/fog/shared_file_system/openstack/models/snapshot.rb deleted file mode 100644 index 8f831a75a..000000000 --- a/lib/fog/shared_file_system/openstack/models/snapshot.rb +++ /dev/null @@ -1,45 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module SharedFileSystem - class OpenStack - class Snapshot < Fog::OpenStack::Model - identity :id - - attribute :share_id - attribute :status - attribute :name - attribute :description - attribute :share_proto - attribute :share_size - attribute :size - attribute :provider_location - attribute :links - attribute :created_at - - def save - raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted? - requires :share_id - merge_attributes(service.create_snapshot(share_id, attributes).body['snapshot']) - true - end - - def update(options = nil) - requires :id - merge_attributes(service.update_snapshot(id, options || attributes).body['snapshot']) - self - end - - def destroy - requires :id - service.delete_snapshot(id) - true - end - - def ready? - status == 'available' - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/models/snapshots.rb b/lib/fog/shared_file_system/openstack/models/snapshots.rb deleted file mode 100644 index f2c6de5c9..000000000 --- a/lib/fog/shared_file_system/openstack/models/snapshots.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/shared_file_system/openstack/models/snapshot' - -module Fog - module SharedFileSystem - class OpenStack - class Snapshots < Fog::OpenStack::Collection - model Fog::SharedFileSystem::OpenStack::Snapshot - - def all(options = {}) - load_response(service.list_snapshots_detail(options), 'snapshots') - end - - def find_by_id(id) - snapshot_hash = service.get_snapshot(id).body['snapshot'] - new(snapshot_hash.merge(service: service)) - end - - alias get find_by_id - - def destroy(id) - snapshot = find_by_id(id) - snapshot.destroy - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/requests/create_snapshot.rb b/lib/fog/shared_file_system/openstack/requests/create_snapshot.rb deleted file mode 100644 index fe2c8c218..000000000 --- a/lib/fog/shared_file_system/openstack/requests/create_snapshot.rb +++ /dev/null @@ -1,46 +0,0 @@ -module Fog - module SharedFileSystem - class OpenStack - class Real - def create_snapshot(share_id, options = {}) - data = { - 'share_id' => share_id - } - - vanilla_options = [ - :name, :description, :display_name, :display_description, :force - ] - - vanilla_options.select { |o| options[o] }.each do |key| - data[key] = options[key] - end - - request( - body: Fog::JSON.encode('snapshot' => data), - expects: 202, - method: 'POST', - path: 'snapshots' - ) - end - end - - class Mock - def create_snapshot(share_id, options = {}) - # stringify keys - options = Hash[options.map { |k, v| [k.to_s, v] }] - - response = Excon::Response.new - response.status = 202 - - snapshot = data[:snapshots_detail].first.dup - - snapshot['share_id'] = share_id - snapshot['status'] = 'creating' - - response.body = { 'snapshot' => snapshot.merge(options) } - response - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/requests/delete_snapshot.rb b/lib/fog/shared_file_system/openstack/requests/delete_snapshot.rb deleted file mode 100644 index 82bfce635..000000000 --- a/lib/fog/shared_file_system/openstack/requests/delete_snapshot.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Fog - module SharedFileSystem - class OpenStack - class Real - def delete_snapshot(id) - request( - expects: 202, - method: 'DELETE', - path: "snapshots/#{id}" - ) - end - end - - class Mock - def delete_snapshot(id) - response = Excon::Response.new - response.status = 202 - - snapshot = data[:snapshot_updated] || data[:snapshots_detail].first.dup - snapshot['id'] = id - snapshot['status'] = 'deleting' - snapshot['links']['self'] = "https://127.0.0.1:8786/v2/snapshots/#{id}" - - response.body = { 'snapshot' => snapshot } - response - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/requests/get_limits.rb b/lib/fog/shared_file_system/openstack/requests/get_limits.rb deleted file mode 100644 index 9625937bd..000000000 --- a/lib/fog/shared_file_system/openstack/requests/get_limits.rb +++ /dev/null @@ -1,45 +0,0 @@ -module Fog - module SharedFileSystem - class OpenStack - class Real - def get_limits - request( - expects: 200, - method: 'GET', - path: 'limits' - ) - end - end - - class Mock - def get_limits - absolute_limits = { - # Max - 'maxTotalShareGigabytes' => 1000, - 'maxTotalShareNetworks' => 10, - 'maxTotalShares' => 50, - 'maxTotalSnapshotGigabytes' => 1000, - 'maxTotalShareSnapshots' => 50, - - # Used - 'totalShareNetworksUsed' => 0, - 'totalSharesUsed' => 0, - 'totalShareGigabytesUsed' => 0, - 'totalShareSnapshotsUsed' => 0, - 'totalSnapshotGigabytesUsed' => 0 - } - - Excon::Response.new( - status: 200, - body: { - 'limits' => { - 'rate' => [], - 'absolute' => absolute_limits - } - } - ) - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/requests/get_quota.rb b/lib/fog/shared_file_system/openstack/requests/get_quota.rb deleted file mode 100644 index c8bda150a..000000000 --- a/lib/fog/shared_file_system/openstack/requests/get_quota.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Fog - module SharedFileSystem - class OpenStack - class Real - def get_quota(project_id) - request( - expects: 200, - method: 'GET', - path: "#{action_prefix}quota-sets/#{project_id}" - ) - end - end - - class Mock - def get_quota(project_id) - response = Excon::Response.new - response.status = 200 - quota_data = data[:quota_updated] || data[:quota] - quota_data['id'] = project_id - response.body = { 'quota_set' => quota_data } - response - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/requests/list_availability_zones.rb b/lib/fog/shared_file_system/openstack/requests/list_availability_zones.rb deleted file mode 100644 index e930d7c42..000000000 --- a/lib/fog/shared_file_system/openstack/requests/list_availability_zones.rb +++ /dev/null @@ -1,24 +0,0 @@ -module Fog - module SharedFileSystem - class OpenStack - class Real - def list_availability_zones() - request( - expects: 200, - method: 'GET', - path: microversion_newer_than?('2.6') ? 'availability-zones' : 'os-availability-zone' - ) - end - end - - class Mock - def list_availability_zones() - response = Excon::Response.new - response.status = 200 - response.body = { 'availability_zones' => data[:availability_zones] } - response - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/requests/list_snapshots.rb b/lib/fog/shared_file_system/openstack/requests/list_snapshots.rb deleted file mode 100644 index 9c0f94bb7..000000000 --- a/lib/fog/shared_file_system/openstack/requests/list_snapshots.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Fog - module SharedFileSystem - class OpenStack - class Real - def list_snapshots(options = {}) - request( - expects: 200, - method: 'GET', - path: 'snapshots', - query: options - ) - end - end - - class Mock - def list_snapshots(_options = {}) - response = Excon::Response.new - response.status = 200 - response.body = { 'snapshots' => data[:snapshots] } - response - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/requests/list_snapshots_detail.rb b/lib/fog/shared_file_system/openstack/requests/list_snapshots_detail.rb deleted file mode 100644 index 504f7f202..000000000 --- a/lib/fog/shared_file_system/openstack/requests/list_snapshots_detail.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Fog - module SharedFileSystem - class OpenStack - class Real - def list_snapshots_detail(options = {}) - request( - expects: 200, - method: 'GET', - path: 'snapshots/detail', - query: options - ) - end - end - - class Mock - def list_snapshots_detail(_options = {}) - response = Excon::Response.new - response.status = 200 - response.body = { 'snapshots' => data[:snapshots_detail] } - response - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/requests/update_quota.rb b/lib/fog/shared_file_system/openstack/requests/update_quota.rb deleted file mode 100644 index 009f5889d..000000000 --- a/lib/fog/shared_file_system/openstack/requests/update_quota.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Fog - module SharedFileSystem - class OpenStack - class Real - def update_quota(project_id, options = {}) - request( - body: Fog::JSON.encode('quota_set' => options), - expects: 200, - method: 'PUT', - path: "#{action_prefix}quota-sets/#{project_id}" - ) - end - end - - class Mock - def update_quota(project_id, options = {}) - # stringify keys - options = Hash[options.map { |k, v| [k.to_s, v] }] - data[:quota_updated] = data[:quota].merge(options) - data[:quota_updated]['id'] = project_id - - response = Excon::Response.new - response.status = 200 - response.body = { 'quota_set' => data[:quota_updated] } - response - end - end - end - end -end diff --git a/lib/fog/shared_file_system/openstack/requests/update_snapshot.rb b/lib/fog/shared_file_system/openstack/requests/update_snapshot.rb deleted file mode 100644 index d92b451f5..000000000 --- a/lib/fog/shared_file_system/openstack/requests/update_snapshot.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Fog - module SharedFileSystem - class OpenStack - class Real - def update_snapshot(id, options = {}) - request( - body: Fog::JSON.encode('snapshot' => options), - expects: 200, - method: 'PUT', - path: "snapshots/#{id}" - ) - end - end - - class Mock - def update_snapshot(id, options = {}) - # stringify keys - options = Hash[options.map { |k, v| [k.to_s, v] }] - - data[:snapshot_updated] = data[:snapshots_detail].first.merge(options) - data[:snapshot_updated]['id'] = id - - response = Excon::Response.new - response.status = 200 - response.body = { 'snapshot' => data[:snapshot_updated] } - response - end - end - end - end -end diff --git a/lib/fog/storage/openstack.rb b/lib/fog/storage/openstack.rb deleted file mode 100644 index fefc4a708..000000000 --- a/lib/fog/storage/openstack.rb +++ /dev/null @@ -1,177 +0,0 @@ - - -module Fog - module Storage - class OpenStack < Fog::Service - requires :openstack_auth_url - recognizes :openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, :openstack_userid, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_auth_omit_default_port, - :openstack_project_name, :openstack_project_id, :openstack_cache_ttl, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix, :openstack_temp_url_key - - model_path 'fog/storage/openstack/models' - model :directory - collection :directories - model :file - collection :files - - request_path 'fog/storage/openstack/requests' - request :copy_object - request :delete_container - request :delete_object - request :delete_multiple_objects - request :delete_static_large_object - request :get_container - request :get_containers - request :get_object - request :get_object_http_url - request :get_object_https_url - request :head_container - request :head_containers - request :head_object - request :put_container - request :put_object - request :post_object - request :put_object_manifest - request :put_dynamic_obj_manifest - request :put_static_obj_manifest - request :post_set_meta_temp_url_key - request :public_url - - module Utils - def require_mime_types - # Use mime/types/columnar if available, for reduced memory usage - require 'mime/types/columnar' - rescue LoadError - begin - require 'mime/types' - rescue LoadError - Fog::Logger.warning("'mime-types' missing, please install and try again.") - exit(1) - end - end - end - - class Mock - include Utils - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = {} - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - require_mime_types - @openstack_api_key = options[:openstack_api_key] - @openstack_username = options[:openstack_username] - @openstack_management_url = options[:openstack_management_url] || 'http://example:8774/v2/AUTH_1234' - - @openstack_management_uri = URI.parse(@openstack_management_url) - - @host = @openstack_management_uri.host - @path = @openstack_management_uri.path - @path.sub!(%r{/$}, '') - @port = @openstack_management_uri.port - @scheme = @openstack_management_uri.scheme - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def change_account(account) - @original_path ||= @path - version_string = @original_path.split('/')[1] - @path = "/#{version_string}/#{account}" - end - - def reset_account_name - @path = @original_path - end - end - - class Real - include Utils - include Fog::OpenStack::Core - - def self.not_found_class - Fog::Storage::OpenStack::NotFound - end - - def initialize(options = {}) - require_mime_types - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['object-store'] - @openstack_service_name = options[:openstack_service_name] - - @connection_options = options[:connection_options] || {} - - authenticate - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - # Change the current account while re-using the auth token. - # - # This is usefull when you have an admin role and you're able - # to HEAD other user accounts, set quotas, list files, etc. - # - # For example: - # - # # List current user account details - # service = Fog::Storage[:openstack] - # service.request :method => 'HEAD' - # - # Would return something like: - # - # Account: AUTH_1234 - # Date: Tue, 05 Mar 2013 16:50:52 GMT - # X-Account-Bytes-Used: 0 (0.00 Bytes) - # X-Account-Container-Count: 0 - # X-Account-Object-Count: 0 - # - # Now let's change the account - # - # service.change_account('AUTH_3333') - # service.request :method => 'HEAD' - # - # Would return something like: - # - # Account: AUTH_3333 - # Date: Tue, 05 Mar 2013 16:51:53 GMT - # X-Account-Bytes-Used: 23423433 - # X-Account-Container-Count: 2 - # X-Account-Object-Count: 10 - # - # If we wan't to go back to our original admin account: - # - # service.reset_account_name - # - def change_account(account) - @original_path ||= @path - version_string = @path.split('/')[1] - @path = "/#{version_string}/#{account}" - end - - def reset_account_name - @path = @original_path - end - end - end - end -end diff --git a/lib/fog/storage/openstack/models/directories.rb b/lib/fog/storage/openstack/models/directories.rb deleted file mode 100644 index c31deb69f..000000000 --- a/lib/fog/storage/openstack/models/directories.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/storage/openstack/models/directory' - -module Fog - module Storage - class OpenStack - class Directories < Fog::OpenStack::Collection - model Fog::Storage::OpenStack::Directory - - def all(options = {}) - data = service.get_containers(options) - load_response(data) - end - - def get(key, options = {}) - data = service.get_container(key, options) - directory = new(key: key) - for key, value in data.headers - if ['X-Container-Bytes-Used', 'X-Container-Object-Count'].include?(key) - directory.merge_attributes(key => value) - end - end - directory.files.merge_attributes(options) - directory.files.instance_variable_set(:@loaded, true) - - data.body.each do |file| - directory.files << directory.files.new(file) - end - directory - rescue Fog::Storage::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/storage/openstack/models/directory.rb b/lib/fog/storage/openstack/models/directory.rb deleted file mode 100644 index d18edf3eb..000000000 --- a/lib/fog/storage/openstack/models/directory.rb +++ /dev/null @@ -1,50 +0,0 @@ -require 'fog/openstack/models/model' -require 'fog/storage/openstack/models/files' - -module Fog - module Storage - class OpenStack - class Directory < Fog::OpenStack::Model - identity :key, aliases: 'name' - - attribute :bytes, aliases: 'X-Container-Bytes-Used' - attribute :count, aliases: 'X-Container-Object-Count' - - attr_writer :public - - def destroy - requires :key - service.delete_container(key) - true - rescue Excon::Errors::NotFound - false - end - - def files - @files ||= begin - Fog::Storage::OpenStack::Files.new( - directory: self, - service: service - ) - end - end - - def public_url - requires :key - - @public_url ||= begin - service.public_url(key) - rescue Fog::Storage::OpenStack::NotFound => err - nil - end - end - - def save - requires :key - service.put_container(key, public: @public) - true - end - end - end - end -end diff --git a/lib/fog/storage/openstack/requests/delete_container.rb b/lib/fog/storage/openstack/requests/delete_container.rb deleted file mode 100644 index b407ba1e5..000000000 --- a/lib/fog/storage/openstack/requests/delete_container.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Fog - module Storage - class OpenStack - class Real - # Delete an existing container - # - # ==== Parameters - # * name<~String> - Name of container to delete - # - def delete_container(name) - request( - expects: 204, - method: 'DELETE', - path: Fog::OpenStack.escape(name) - ) - end - end - end - end -end diff --git a/lib/fog/storage/openstack/requests/get_container.rb b/lib/fog/storage/openstack/requests/get_container.rb deleted file mode 100644 index ab45bf676..000000000 --- a/lib/fog/storage/openstack/requests/get_container.rb +++ /dev/null @@ -1,42 +0,0 @@ -module Fog - module Storage - class OpenStack - class Real - # Get details for container and total bytes stored - # - # ==== Parameters - # * container<~String> - Name of container to retrieve info for - # * options<~String>: - # * 'limit'<~String> - Maximum number of objects to return - # * 'marker'<~String> - Only return objects whose name is greater than marker - # * 'prefix'<~String> - Limits results to those starting with prefix - # * 'path'<~String> - Return objects nested in the pseudo path - # - # ==== Returns - # * response<~Excon::Response>: - # * headers<~Hash>: - # * 'X-Account-Container-Count'<~String> - Count of containers - # * 'X-Account-Bytes-Used'<~String> - Bytes used - # * body<~Array>: - # * 'bytes'<~Integer> - Number of bytes used by container - # * 'count'<~Integer> - Number of items in container - # * 'name'<~String> - Name of container - # * item<~Hash>: - # * 'bytes'<~String> - Size of object - # * 'content_type'<~String> Content-Type of object - # * 'hash'<~String> - Hash of object (etag?) - # * 'last_modified'<~String> - Last modified timestamp - # * 'name'<~String> - Name of object - def get_container(container, options = {}) - options = options.reject { |_key, value| value.nil? } - request( - expects: 200, - method: 'GET', - path: Fog::OpenStack.escape(container), - query: { 'format' => 'json' }.merge!(options) - ) - end - end - end - end -end diff --git a/lib/fog/storage/openstack/requests/get_object_https_url.rb b/lib/fog/storage/openstack/requests/get_object_https_url.rb deleted file mode 100644 index 484630a3d..000000000 --- a/lib/fog/storage/openstack/requests/get_object_https_url.rb +++ /dev/null @@ -1,81 +0,0 @@ -module Fog - module Storage - class OpenStack - class Real - # Get an expiring object https url from Cloud Files - # - # ==== Parameters - # * container<~String> - Name of container containing object - # * object<~String> - Name of object to get expiring url for - # * expires<~Time> - An expiry time for this url - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~String> - url for object - def get_object_https_url(container, object, expires, options = {}) - create_temp_url(container, object, expires, "GET", { port: 443 }.merge(options).merge(scheme: "https")) - end - - # creates a temporary url - # - # ==== Parameters - # * container<~String> - Name of container containing object - # * object<~String> - Name of object to get expiring url for - # * expires<~Time> - An expiry time for this url - # * method<~String> - The method to use for accessing the object (GET, PUT, HEAD) - # * options<~Hash> - An optional options hash - # * 'scheme'<~String> - The scheme to use (http, https) - # * 'host'<~String> - The host to use - # * 'port'<~Integer> - The port to use - # - # ==== Returns - # * response<~Excon::Response>: - # * body<~String> - url for object - # - # ==== See Also - # http://docs.rackspace.com/files/api/v1/cf-devguide/content/Create_TempURL-d1a444.html - def create_temp_url(container, object, expires, method, options = {}) - raise ArgumentError, "Insufficient parameters specified." unless container && object && expires && method - raise ArgumentError, "Storage must be instantiated with the :openstack_temp_url_key option" if @openstack_temp_url_key.nil? - - scheme = options[:scheme] || @scheme - host = options[:host] || @host - port = options[:port] || @port - - # POST not allowed - allowed_methods = %w(GET PUT HEAD) - unless allowed_methods.include?(method) - raise ArgumentError, "Invalid method '#{method}' specified. Valid methods are: #{allowed_methods.join(', ')}" - end - - expires = expires.to_i - object_path_escaped = "#{@path}/#{Fog::OpenStack.escape(container)}/#{Fog::OpenStack.escape(object, "/")}" - object_path_unescaped = "#{@path}/#{Fog::OpenStack.escape(container)}/#{object}" - string_to_sign = "#{method}\n#{expires}\n#{object_path_unescaped}" - - hmac = Fog::HMAC.new('sha1', @openstack_temp_url_key.to_s) - sig = sig_to_hex(hmac.sign(string_to_sign)) - - temp_url_options = { - scheme: scheme, - host: host, - port: port, - path: object_path_escaped, - query: "temp_url_sig=#{sig}&temp_url_expires=#{expires}" - } - URI::Generic.build(temp_url_options).to_s - end - - private - - def sig_to_hex(str) - str.unpack("C*").map do |c| - c.to_s(16) - end.map do |h| - h.size == 1 ? "0#{h}" : h - end.join - end - end - end - end -end diff --git a/lib/fog/volume/openstack.rb b/lib/fog/volume/openstack.rb deleted file mode 100644 index 5b9c5b2c8..000000000 --- a/lib/fog/volume/openstack.rb +++ /dev/null @@ -1,33 +0,0 @@ - - -module Fog - module Volume - class OpenStack < Fog::Service - autoload :V1, File.expand_path('openstack/v1', __dir__) - autoload :V2, File.expand_path('openstack/v2', __dir__) - - @@recognizes = [:openstack_auth_token, :openstack_management_url, - :persistent, :openstack_service_type, :openstack_service_name, - :openstack_tenant, :openstack_tenant_id, - :openstack_api_key, :openstack_username, :openstack_identity_endpoint, - :current_user, :current_tenant, :openstack_region, - :openstack_endpoint_type, :openstack_cache_ttl, - :openstack_project_name, :openstack_project_id, - :openstack_project_domain, :openstack_user_domain, :openstack_domain_name, - :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id, - :openstack_identity_prefix] - - # Fog::Image::OpenStack.new() will return a Fog::Volume::OpenStack::V2 or a Fog::Volume::OpenStack::V1, - # choosing the V2 by default, as V1 is deprecated since OpenStack Juno - def self.new(args = {}) - @openstack_auth_uri = URI.parse(args[:openstack_auth_url]) if args[:openstack_auth_url] - service = if inspect == 'Fog::Volume::OpenStack' - Fog::Volume::OpenStack::V2.new(args) || Fog::Volume::OpenStack::V1.new(args) - else - super - end - service - end - end - end -end diff --git a/lib/fog/volume/openstack/models/availability_zone.rb b/lib/fog/volume/openstack/models/availability_zone.rb deleted file mode 100644 index e1b34cf14..000000000 --- a/lib/fog/volume/openstack/models/availability_zone.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Volume - class OpenStack - class AvailabilityZone < Fog::OpenStack::Model - end - end - end -end diff --git a/lib/fog/volume/openstack/models/availability_zones.rb b/lib/fog/volume/openstack/models/availability_zones.rb deleted file mode 100644 index 42563cee7..000000000 --- a/lib/fog/volume/openstack/models/availability_zones.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'fog/openstack/models/collection' - -module Fog - module Volume - class OpenStack - module AvailabilityZones - def all(options = {}) - data = service.list_zones(options) - load_response(data, 'availabilityZoneInfo') - end - end - end - end -end diff --git a/lib/fog/volume/openstack/models/backup.rb b/lib/fog/volume/openstack/models/backup.rb deleted file mode 100644 index f1f529f2c..000000000 --- a/lib/fog/volume/openstack/models/backup.rb +++ /dev/null @@ -1,46 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Volume - class OpenStack - class Backup < Fog::OpenStack::Model - attribute :availability_zone - attribute :container - attribute :created_at - attribute :description - attribute :fail_reason - attribute :name - attribute :object_count - attribute :size - attribute :status - attribute :volume_id - attribute :is_incremental - attribute :has_dependent_backups - - def create - requires :name, :volume_id - data = service.create_backup(attributes) - merge_attributes(data.body['backup']) - true - end - - def destroy - requires :id - service.delete_backup(id) - true - end - - def restore(volume_id) - requires :id - service.restore_backup(id, volume_id) - true - end - - def volume - requires :id - service.get_volume_details(volume_id).body['volume'] - end - end - end - end -end diff --git a/lib/fog/volume/openstack/models/backups.rb b/lib/fog/volume/openstack/models/backups.rb deleted file mode 100644 index a7e29aeb2..000000000 --- a/lib/fog/volume/openstack/models/backups.rb +++ /dev/null @@ -1,26 +0,0 @@ -require 'fog/openstack/models/collection' - -module Fog - module Volume - class OpenStack - module Backups - def all(options = {}) - load_response(service.list_backups_detailed(options), 'backups') - end - - def summary(options = {}) - load_response(service.list_backups(options), 'backups') - end - - def get(backup_id) - backup = service.get_backup_details(backup_id).body['backup'] - if backup - new(backup) - end - rescue Fog::Volume::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/volume/openstack/models/snapshot.rb b/lib/fog/volume/openstack/models/snapshot.rb deleted file mode 100644 index e4ee978f1..000000000 --- a/lib/fog/volume/openstack/models/snapshot.rb +++ /dev/null @@ -1,38 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Volume - class OpenStack - class Snapshot < Fog::OpenStack::Model - def update(data) - requires :id - - response = service.update_snapshot(id, data) - merge_attributes(response.body['snapshot']) - - self - end - - def destroy - requires :id - service.delete_snapshot(id) - true - end - - # Existing keys have values updated and new key-value pairs are created, but none are deleted - def update_metadata(metadata) - requires :id - service.update_snapshot_metadata(id, metadata) - true - end - - # Delete one specific key-value pair by specifying the key name - def delete_metadata(key_name) - requires :id - service.delete_snapshot_metadata(id, key_name) - true - end - end - end - end -end diff --git a/lib/fog/volume/openstack/models/snapshots.rb b/lib/fog/volume/openstack/models/snapshots.rb deleted file mode 100644 index 77d92a9e7..000000000 --- a/lib/fog/volume/openstack/models/snapshots.rb +++ /dev/null @@ -1,26 +0,0 @@ -require 'fog/openstack/models/collection' - -module Fog - module Volume - class OpenStack - module Snapshots - def all(options = {}) - load_response(service.list_snapshots_detailed(options), 'snapshots') - end - - def summary(options = {}) - load_response(service.list_snapshots(options), 'snapshots') - end - - def get(snapshots_id) - snapshot = service.get_snapshot_details(snapshots_id).body['snapshot'] - if snapshot - new(snapshot) - end - rescue Fog::Volume::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/volume/openstack/models/transfer.rb b/lib/fog/volume/openstack/models/transfer.rb deleted file mode 100644 index 054f24924..000000000 --- a/lib/fog/volume/openstack/models/transfer.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Volume - class OpenStack - class Transfer < Fog::OpenStack::Model - def save - requires :name, :volume_id - data = service.create_transfer(volume_id, name: name) - merge_attributes(data.body['transfer']) - true - end - - def destroy - requires :id - service.delete_transfer(id) - true - end - - def initialize(attributes) - # Old 'connection' is renamed as service and should be used instead - prepare_service_value(attributes) - super - end - end - end - end -end diff --git a/lib/fog/volume/openstack/models/transfers.rb b/lib/fog/volume/openstack/models/transfers.rb deleted file mode 100644 index 824c21cd7..000000000 --- a/lib/fog/volume/openstack/models/transfers.rb +++ /dev/null @@ -1,34 +0,0 @@ -require 'fog/openstack/models/collection' - -module Fog - module Volume - class OpenStack - module Transfers - def all(options = {}) - load_response(service.list_transfers_detailed(options), 'transfers') - end - - def summary(options = {}) - load_response(service.list_transfers(options), 'transfers') - end - - def get(transfer_id) - if transfer = service.get_transfer_details(transfer_id).body['transfer'] - new(transfer) - end - rescue Fog::Volume::OpenStack::NotFound - nil - end - - def accept(transfer_id, auth_key) - # NOTE: This is NOT a method on the Transfer object, since the - # receiver cannot see the transfer object in the get_transfer_details - # or list_transfers(_detailed) requests. - if transfer = service.accept_transfer(transfer_id, auth_key).body['transfer'] - new(transfer) - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/models/volume.rb b/lib/fog/volume/openstack/models/volume.rb deleted file mode 100644 index 32d8cba8f..000000000 --- a/lib/fog/volume/openstack/models/volume.rb +++ /dev/null @@ -1,66 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Volume - class OpenStack - class Volume < Fog::OpenStack::Model - attribute :metadata - attribute :status - attribute :size - attribute :volume_type, aliases: %w(volumeType type) - attribute :snapshot_id, aliases: 'snapshotId' - attribute :imageRef, aliases: 'image_id' - attribute :availability_zone, aliases: 'availabilityZone' - attribute :created_at, aliases: 'createdAt' - attribute :attachments - attribute :source_volid - - def destroy - requires :id - service.delete_volume(id) - true - end - - def extend(size) - requires :id - service.extend_volume(id, size) - true - end - - def ready? - status == 'available' - end - - def reset_status(status) - requires :id - service.action(id, 'os-reset_status' => { status: status }) - end - - def create_metadata(metadata) - replace_metadata(metadata) - end - - # Existing keys have values updated and new key-value pairs are created, but none are deleted - def update_metadata(metadata) - requires :id - service.update_metadata(id, metadata) - true - end - - # All existing key-value pairs are deleted and replaced with the key-value pairs specified here - def replace_metadata(metadata) - requires :id - service.replace_metadata(id, metadata) - true - end - - # Delete one specific key-value pair by specifying the key name - def delete_metadata(key_name) - requires :id - service.delete_metadata(id, key_name) - true - end - end - end - end -end diff --git a/lib/fog/volume/openstack/models/volume_type.rb b/lib/fog/volume/openstack/models/volume_type.rb deleted file mode 100644 index 843188950..000000000 --- a/lib/fog/volume/openstack/models/volume_type.rb +++ /dev/null @@ -1,35 +0,0 @@ -require 'fog/openstack/models/model' - -module Fog - module Volume - class OpenStack - class VolumeType < Fog::OpenStack::Model - attribute :extra_specs - - def create - requires :name - - response = service.create_volume_type(attributes) - merge_attributes(response.body['volume_type']) - - self - end - - def update - requires :id - - response = service.update_volume_type(id, attributes) - merge_attributes(response.body['volume_type']) - - self - end - - def destroy - requires :id - service.delete_volume_type(id) - true - end - end - end - end -end diff --git a/lib/fog/volume/openstack/models/volume_types.rb b/lib/fog/volume/openstack/models/volume_types.rb deleted file mode 100644 index 3e58e0a77..000000000 --- a/lib/fog/volume/openstack/models/volume_types.rb +++ /dev/null @@ -1,22 +0,0 @@ -require 'fog/openstack/models/collection' - -module Fog - module Volume - class OpenStack - module VolumeTypes - def all(options = {}) - response = service.list_volume_types(options) - load_response(response, 'volume_types') - end - - def get(volume_type_id) - if volume_type = service.get_volume_type_details(volume_type_id).body['volume_type'] - new(volume_type) - end - rescue Fog::Volume::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/volume/openstack/models/volumes.rb b/lib/fog/volume/openstack/models/volumes.rb deleted file mode 100644 index 03fbc8be1..000000000 --- a/lib/fog/volume/openstack/models/volumes.rb +++ /dev/null @@ -1,35 +0,0 @@ -require 'fog/openstack/models/collection' - -module Fog - module Volume - class OpenStack - module Volumes - def all(options = {}) - # the parameter has been "detailed = true" before. Make sure we are - # backwards compatible - detailed = options.kind_of?(Hash) ? options.delete(:detailed) : options - if detailed.nil? || detailed - # This method gives details by default, unless false or {:detailed => false} is passed - load_response(service.list_volumes_detailed(options), 'volumes') - else - Fog::Logger.deprecation('Calling OpenStack[:volume].volumes.all(false) or volumes.all(:detailed => false) '\ - ' is deprecated, call .volumes.summary instead') - load_response(service.list_volumes(options), 'volumes') - end - end - - def summary(options = {}) - load_response(service.list_volumes(options), 'volumes') - end - - def get(volume_id) - if volume = service.get_volume_details(volume_id).body['volume'] - new(volume) - end - rescue Fog::Volume::OpenStack::NotFound - nil - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/accept_transfer.rb b/lib/fog/volume/openstack/requests/accept_transfer.rb deleted file mode 100644 index f02dd7cb9..000000000 --- a/lib/fog/volume/openstack/requests/accept_transfer.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def accept_transfer(transfer_id, auth_key) - data = { - 'accept' => { - 'auth_key' => auth_key - } - } - - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'POST', - path: "os-volume-transfer/#{transfer_id}/accept" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/action.rb b/lib/fog/volume/openstack/requests/action.rb deleted file mode 100644 index 26c359145..000000000 --- a/lib/fog/volume/openstack/requests/action.rb +++ /dev/null @@ -1,16 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def action(id, data) - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'POST', - path: "volumes/#{id}/action" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/create_backup.rb b/lib/fog/volume/openstack/requests/create_backup.rb deleted file mode 100644 index 9ac24ca6c..000000000 --- a/lib/fog/volume/openstack/requests/create_backup.rb +++ /dev/null @@ -1,49 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def create_backup(attributes) - desired_options = [ - :container, - :name, - :description, - :volume_id, - :incremental, - :force - ] - - # Filter only allowed creation attributes - data = { - backup: attributes.select { |key, _value| desired_options.include?(key.to_sym) } - } - - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'POST', - path: 'backups' - ) - end - end - - module Mock - def create_backup(_options = {}) - response = Excon::Response.new - response.status = 202 - response.body = { - "backup" => { - "id" => "1", - "volume_id" => "2", - "name" => "backup 1", - "status" => "available", - "size" => 1, - "object_count" => 16, - "container" => "testcontainer" - } - } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/create_snapshot.rb b/lib/fog/volume/openstack/requests/create_snapshot.rb deleted file mode 100644 index 57744d4a1..000000000 --- a/lib/fog/volume/openstack/requests/create_snapshot.rb +++ /dev/null @@ -1,18 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - private - - def _create_snapshot(data) - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'POST', - path: "snapshots" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/create_transfer.rb b/lib/fog/volume/openstack/requests/create_transfer.rb deleted file mode 100644 index c82cd0ff9..000000000 --- a/lib/fog/volume/openstack/requests/create_transfer.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def create_transfer(volume_id, options = {}) - data = { - 'transfer' => { - 'volume_id' => volume_id - } - } - if options[:name] - data['transfer']['name'] = options[:name] - end - - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'POST', - path: 'os-volume-transfer' - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/create_volume.rb b/lib/fog/volume/openstack/requests/create_volume.rb deleted file mode 100644 index ff3c5d53a..000000000 --- a/lib/fog/volume/openstack/requests/create_volume.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - private - - def _create_volume(data, options = {}) - vanilla_options = [:snapshot_id, :imageRef, :volume_type, - :source_volid, :availability_zone, :metadata] - vanilla_options.select { |o| options[o] }.each do |key| - data['volume'][key] = options[key] - end - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'POST', - path: "volumes" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/create_volume_type.rb b/lib/fog/volume/openstack/requests/create_volume_type.rb deleted file mode 100644 index 5f2497a53..000000000 --- a/lib/fog/volume/openstack/requests/create_volume_type.rb +++ /dev/null @@ -1,41 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def create_volume_type(options = {}) - data = { - 'volume_type' => {} - } - - vanilla_options = [:name, :extra_specs] - vanilla_options.select { |o| options[o] }.each do |key| - data['volume_type'][key] = options[key] - end - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'POST', - path: "types" - ) - end - end - - module Mock - def create_volume_type(_options = {}) - response = Excon::Response.new - response.status = 202 - response.body = { - "volume_type" => { - "id" => "6685584b-1eac-4da6-b5c3-555430cf68ff", - "name" => "vol-type-001", - "extra_specs" => { - "capabilities" => "gpu" - } - } - } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/delete_backup.rb b/lib/fog/volume/openstack/requests/delete_backup.rb deleted file mode 100644 index b0ae99f70..000000000 --- a/lib/fog/volume/openstack/requests/delete_backup.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def delete_backup(backup_id) - request( - expects: 202, - method: 'DELETE', - path: "backups/#{backup_id}" - ) - end - end - - module Mock - def delete_backup(_backup_id) - response = Excon::Response.new - response.status = 204 - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/delete_metadata.rb b/lib/fog/volume/openstack/requests/delete_metadata.rb deleted file mode 100644 index f92df1814..000000000 --- a/lib/fog/volume/openstack/requests/delete_metadata.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def delete_metadata(volume_id, key_name) - request( - expects: [200], - method: 'DELETE', - path: "volumes/#{volume_id}/metadata/#{key_name}" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/delete_snapshot.rb b/lib/fog/volume/openstack/requests/delete_snapshot.rb deleted file mode 100644 index 3a6d5f975..000000000 --- a/lib/fog/volume/openstack/requests/delete_snapshot.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def delete_snapshot(snapshot_id) - request( - expects: 202, - method: 'DELETE', - path: "snapshots/#{snapshot_id}" - ) - end - end - - module Mock - def delete_snapshot(_snapshot_id) - response = Excon::Response.new - response.status = 202 - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/delete_snapshot_metadata.rb b/lib/fog/volume/openstack/requests/delete_snapshot_metadata.rb deleted file mode 100644 index 7fcb8f82b..000000000 --- a/lib/fog/volume/openstack/requests/delete_snapshot_metadata.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def delete_snapshot_metadata(snapshot_id, key_name) - request( - expects: [200], - method: 'DELETE', - path: "snapshots/#{snapshot_id}/metadata/#{key_name}" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/delete_transfer.rb b/lib/fog/volume/openstack/requests/delete_transfer.rb deleted file mode 100644 index 150ae3fb4..000000000 --- a/lib/fog/volume/openstack/requests/delete_transfer.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def delete_transfer(transfer_id) - request( - expects: 202, - method: 'DELETE', - path: "os-volume-transfer/#{transfer_id}" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/delete_volume.rb b/lib/fog/volume/openstack/requests/delete_volume.rb deleted file mode 100644 index 37a80334b..000000000 --- a/lib/fog/volume/openstack/requests/delete_volume.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def delete_volume(volume_id) - request( - expects: 202, - method: 'DELETE', - path: "volumes/#{volume_id}" - ) - end - end - - module Mock - def delete_volume(_volume_id) - response = Excon::Response.new - response.status = 204 - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/delete_volume_type.rb b/lib/fog/volume/openstack/requests/delete_volume_type.rb deleted file mode 100644 index d3a3c592e..000000000 --- a/lib/fog/volume/openstack/requests/delete_volume_type.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def delete_volume_type(volume_type_id) - request( - expects: 202, - method: 'DELETE', - path: "types/#{volume_type_id}" - ) - end - end - - module Mock - def delete_volume_type(_volume_type_id) - response = Excon::Response.new - response.status = 204 - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/extend_volume.rb b/lib/fog/volume/openstack/requests/extend_volume.rb deleted file mode 100644 index 74636eea0..000000000 --- a/lib/fog/volume/openstack/requests/extend_volume.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def extend_volume(volume_id, size) - body = { 'os-extend' => { 'new_size' => size } } - request( - expects: 202, - method: 'POST', - path: "volumes/#{volume_id}/action", - body: Fog::JSON.encode(body) - ) - end - end - - module Mock - def extend_volume(_volume_id, _size) - response = Excon::Response.new - response.status = 202 - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/get_backup_details.rb b/lib/fog/volume/openstack/requests/get_backup_details.rb deleted file mode 100644 index 5437e43df..000000000 --- a/lib/fog/volume/openstack/requests/get_backup_details.rb +++ /dev/null @@ -1,34 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def get_backup_details(backup_id) - request( - expects: 200, - method: 'GET', - path: "backups/#{backup_id}" - ) - end - end - - module Mock - def get_backup_details(_backup_id) - response = Excon::Response.new - response.status = 200 - response.body = { - "backup" => { - "id" => "1", - "volume_id" => "2", - "name" => "backup 1", - "status" => "available", - "size" => 1, - "object_count" => 16, - "container" => "testcontainer" - } - } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/get_quota.rb b/lib/fog/volume/openstack/requests/get_quota.rb deleted file mode 100644 index b5a9d6117..000000000 --- a/lib/fog/volume/openstack/requests/get_quota.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def get_quota(tenant_id) - request( - expects: 200, - method: 'GET', - path: "/os-quota-sets/#{tenant_id}" - ) - end - end - - module Mock - def get_quota(tenant_id) - response = Excon::Response.new - response.status = 200 - response.body = { - 'quota_set' => (data[:quota_updated] || data[:quota]).merge('id' => tenant_id) - } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/get_quota_defaults.rb b/lib/fog/volume/openstack/requests/get_quota_defaults.rb deleted file mode 100644 index db0372658..000000000 --- a/lib/fog/volume/openstack/requests/get_quota_defaults.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def get_quota_defaults(tenant_id) - request( - expects: 200, - method: 'GET', - path: "/os-quota-sets/#{tenant_id}/defaults" - ) - end - end - - module Mock - def get_quota_defaults(tenant_id) - response = Excon::Response.new - response.status = 200 - response.body = { - 'quota_set' => data[:quota].merge('id' => tenant_id) - } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/get_quota_usage.rb b/lib/fog/volume/openstack/requests/get_quota_usage.rb deleted file mode 100644 index c7b04f42d..000000000 --- a/lib/fog/volume/openstack/requests/get_quota_usage.rb +++ /dev/null @@ -1,43 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def get_quota_usage(tenant_id) - request( - expects: 200, - method: 'GET', - path: "/os-quota-sets/#{tenant_id}?usage=True" - ) - end - end - - module Mock - def get_quota_usage(tenant_id) - response = Excon::Response.new - response.status = 200 - response.body = { - 'quota_set' => { - 'gigabytes' => { - 'reserved' => 0, - 'limit' => -1, - 'in_use' => 160 - }, - 'snapshots' => { - 'reserved' => 0, - 'limit' => 50, - 'in_use' => 3 - }, - 'volumes' => { - 'reserved' => 0, - 'limit' => 50, - 'in_use' => 5 - }, - 'id' => tenant_id - } - } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/get_snapshot_details.rb b/lib/fog/volume/openstack/requests/get_snapshot_details.rb deleted file mode 100644 index 8111677e6..000000000 --- a/lib/fog/volume/openstack/requests/get_snapshot_details.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def get_snapshot_details(snapshot_id) - request( - expects: 200, - method: 'GET', - path: "snapshots/#{snapshot_id}" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/get_transfer_details.rb b/lib/fog/volume/openstack/requests/get_transfer_details.rb deleted file mode 100644 index def0dd119..000000000 --- a/lib/fog/volume/openstack/requests/get_transfer_details.rb +++ /dev/null @@ -1,17 +0,0 @@ -module Fog - module Volume - class OpenStack - # no Mock needed, test coverage in RSpec - - module Real - def get_transfer_details(transfer_id) - request( - expects: 200, - method: 'GET', - path: "os-volume-transfer/#{transfer_id}" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/get_volume_details.rb b/lib/fog/volume/openstack/requests/get_volume_details.rb deleted file mode 100644 index aea0036f5..000000000 --- a/lib/fog/volume/openstack/requests/get_volume_details.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def get_volume_details(volume_id) - request( - expects: 200, - method: 'GET', - path: "volumes/#{volume_id}" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/get_volume_type_details.rb b/lib/fog/volume/openstack/requests/get_volume_type_details.rb deleted file mode 100644 index 26b0ab2c8..000000000 --- a/lib/fog/volume/openstack/requests/get_volume_type_details.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def get_volume_type_details(volume_type_id) - request( - expects: 200, - method: 'GET', - path: "types/#{volume_type_id}" - ) - end - end - - module Mock - def get_volume_type_details(_volume_type_id) - response = Excon::Response.new - response.status = 200 - response.body = { - "volume_type" => { - "id" => "1", - "name" => "type 1", - "extra_specs" => { - "volume_backend_name" => "type 1 backend name" - } - } - } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/list_backups.rb b/lib/fog/volume/openstack/requests/list_backups.rb deleted file mode 100644 index 3def6306f..000000000 --- a/lib/fog/volume/openstack/requests/list_backups.rb +++ /dev/null @@ -1,16 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def list_backups(options = {}) - request( - expects: 200, - method: 'GET', - path: 'backups', - query: options - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/list_backups_detailed.rb b/lib/fog/volume/openstack/requests/list_backups_detailed.rb deleted file mode 100644 index 6177eafa3..000000000 --- a/lib/fog/volume/openstack/requests/list_backups_detailed.rb +++ /dev/null @@ -1,45 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def list_backups_detailed(options = {}) - request( - expects: 200, - method: 'GET', - path: 'backups/detail', - query: options - ) - end - end - - module Mock - def list_backups_detailed(_options = {}) - response = Excon::Response.new - response.status = 200 - data[:backups] ||= [ - { - "id" => "1", - "volume_id" => "2", - "name" => "backup 1", - "status" => "available", - "size" => 1, - "object_count" => 16, - "container" => "testcontainer" - }, - { - "id" => "2", - "volume_id" => "2", - "name" => "backup 2", - "status" => "available", - "size" => 1, - "object_count" => 16, - "container" => "testcontainer" - } - ] - response.body = { 'backups' => data[:backups] } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/list_snapshots.rb b/lib/fog/volume/openstack/requests/list_snapshots.rb deleted file mode 100644 index e4c85ff3c..000000000 --- a/lib/fog/volume/openstack/requests/list_snapshots.rb +++ /dev/null @@ -1,41 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def list_snapshots(options = true, options_deprecated = {}) - if options.kind_of?(Hash) - path = 'snapshots' - query = options - else - # Backwards compatibility layer, when 'detailed' boolean was sent as first param - if options - Fog::Logger.deprecation('Calling OpenStack[:volume].list_snapshots(true) is deprecated, use .list_snapshots_detailed instead') - else - Fog::Logger.deprecation('Calling OpenStack[:volume].list_snapshots(false) is deprecated, use .list_snapshots({}) instead') - end - path = options ? 'snapshots/detail' : 'snapshots' - query = options_deprecated - end - - request( - expects: 200, - method: 'GET', - path: path, - query: query - ) - end - end - - module Mock - def list_snapshots(_detailed = true, _options = {}) - response = Excon::Response.new - response.status = 200 - response.body = { - 'snapshots' => [get_snapshot_details.body["snapshot"]] - } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/list_snapshots_detailed.rb b/lib/fog/volume/openstack/requests/list_snapshots_detailed.rb deleted file mode 100644 index 7c4fca1f0..000000000 --- a/lib/fog/volume/openstack/requests/list_snapshots_detailed.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def list_snapshots_detailed(options = {}) - request( - expects: 200, - method: 'GET', - path: 'snapshots/detail', - query: options - ) - end - end - - module Mock - def list_snapshots_detailed(_options = {}) - response = Excon::Response.new - response.status = 200 - response.body = { - 'snapshots' => [get_snapshot_details.body["snapshot"]] - } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/list_transfers.rb b/lib/fog/volume/openstack/requests/list_transfers.rb deleted file mode 100644 index fc66b04e6..000000000 --- a/lib/fog/volume/openstack/requests/list_transfers.rb +++ /dev/null @@ -1,18 +0,0 @@ -module Fog - module Volume - class OpenStack - # no Mock needed, test coverage in RSpec - - module Real - def list_transfers(options = {}) - request( - expects: 200, - method: 'GET', - path: 'os-volume-transfer', - query: options - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/list_transfers_detailed.rb b/lib/fog/volume/openstack/requests/list_transfers_detailed.rb deleted file mode 100644 index fa467a2cc..000000000 --- a/lib/fog/volume/openstack/requests/list_transfers_detailed.rb +++ /dev/null @@ -1,18 +0,0 @@ -module Fog - module Volume - class OpenStack - # no Mock needed, test coverage in RSpec - - module Real - def list_transfers_detailed(options = {}) - request( - expects: 200, - method: 'GET', - path: 'os-volume-transfer/detail', - query: options - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/list_volume_types.rb b/lib/fog/volume/openstack/requests/list_volume_types.rb deleted file mode 100644 index cd7b141db..000000000 --- a/lib/fog/volume/openstack/requests/list_volume_types.rb +++ /dev/null @@ -1,41 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def list_volume_types(options = {}) - request( - expects: 200, - method: 'GET', - path: 'types', - query: options - ) - end - end - - module Mock - def list_volume_types(_options = {}) - response = Excon::Response.new - response.status = 200 - data[:volume_types] ||= [ - { - "id" => "1", - "name" => "type 1", - "extra_specs" => { - "volume_backend_name" => "type 1 backend name" - } - }, - { - "id" => "2", - "name" => "type 2", - "extra_specs" => { - "volume_backend_name" => "type 2 backend name" - } - } - ] - response.body = { 'volume_types' => data[:volume_types] } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/list_volumes.rb b/lib/fog/volume/openstack/requests/list_volumes.rb deleted file mode 100644 index d3287aebe..000000000 --- a/lib/fog/volume/openstack/requests/list_volumes.rb +++ /dev/null @@ -1,30 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def list_volumes(options = true, options_deprecated = {}) - if options.kind_of?(Hash) - path = 'volumes' - query = options - else - # Backwards compatibility layer, when 'detailed' boolean was sent as first param - if options - Fog::Logger.deprecation('Calling OpenStack[:volume].list_volumes(true) is deprecated, use .list_volumes_detailed instead') - else - Fog::Logger.deprecation('Calling OpenStack[:volume].list_volumes(false) is deprecated, use .list_volumes({}) instead') - end - path = options ? 'volumes/detail' : 'volumes' - query = options_deprecated - end - - request( - expects: 200, - method: 'GET', - path: path, - query: query - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/list_volumes_detailed.rb b/lib/fog/volume/openstack/requests/list_volumes_detailed.rb deleted file mode 100644 index 97db25a59..000000000 --- a/lib/fog/volume/openstack/requests/list_volumes_detailed.rb +++ /dev/null @@ -1,16 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def list_volumes_detailed(options = {}) - request( - expects: 200, - method: 'GET', - path: 'volumes/detail', - query: options - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/list_zones.rb b/lib/fog/volume/openstack/requests/list_zones.rb deleted file mode 100644 index c1cb4f24f..000000000 --- a/lib/fog/volume/openstack/requests/list_zones.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def list_zones(options = {}) - request( - expects: 200, - method: 'GET', - path: 'os-availability-zone.json', - query: options - ) - end - end - - module Mock - def list_zones(_options = {}) - Excon::Response.new( - body: { - "availabilityZoneInfo" => [ - { - "zoneState" => { "available" => true }, - "zoneName" => "nova" - } - ] - }, - status: 200 - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/replace_metadata.rb b/lib/fog/volume/openstack/requests/replace_metadata.rb deleted file mode 100644 index 060b97f50..000000000 --- a/lib/fog/volume/openstack/requests/replace_metadata.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def replace_metadata(volume_id, metadata = {}) - data = { - 'metadata' => metadata - } - - request( - body: Fog::JSON.encode(data), - expects: [200], - method: 'PUT', - path: "volumes/#{volume_id}/metadata" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/restore_backup.rb b/lib/fog/volume/openstack/requests/restore_backup.rb deleted file mode 100644 index 1157ef53c..000000000 --- a/lib/fog/volume/openstack/requests/restore_backup.rb +++ /dev/null @@ -1,17 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def restore_backup(backup_id, volume_id) - data = { 'restore' => { 'volume_id' => volume_id } } - request( - expects: 202, - method: 'POST', - path: "backups/#{backup_id}/restore", - body: Fog::JSON.encode(data) - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/set_tenant.rb b/lib/fog/volume/openstack/requests/set_tenant.rb deleted file mode 100644 index 6a04e8c45..000000000 --- a/lib/fog/volume/openstack/requests/set_tenant.rb +++ /dev/null @@ -1,19 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def set_tenant(tenant) - @openstack_must_reauthenticate = true - @openstack_tenant = tenant.to_s - authenticate - end - end - - module Mock - def set_tenant(_tenant) - true - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/snapshot_action.rb b/lib/fog/volume/openstack/requests/snapshot_action.rb deleted file mode 100644 index 648c390a6..000000000 --- a/lib/fog/volume/openstack/requests/snapshot_action.rb +++ /dev/null @@ -1,16 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def snapshot_action(id, data) - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'POST', - path: "snapshots/#{id}/action" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/update_metadata.rb b/lib/fog/volume/openstack/requests/update_metadata.rb deleted file mode 100644 index a4b68ac93..000000000 --- a/lib/fog/volume/openstack/requests/update_metadata.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def update_metadata(volume_id, metadata = {}) - data = { - 'metadata' => metadata - } - - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'POST', - path: "volumes/#{volume_id}/metadata" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/update_quota.rb b/lib/fog/volume/openstack/requests/update_quota.rb deleted file mode 100644 index 08fef6f85..000000000 --- a/lib/fog/volume/openstack/requests/update_quota.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def update_quota(tenant_id, options = {}) - request( - body: Fog::JSON.encode('quota_set' => options), - expects: 200, - method: 'PUT', - path: "/os-quota-sets/#{tenant_id}" - ) - end - end - - module Mock - def update_quota(_tenant_id, options = {}) - data[:quota_updated] = data[:quota].merge options - - response = Excon::Response.new - response.status = 200 - response.body = { 'quota_set' => data[:quota_updated] } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/update_snapshot.rb b/lib/fog/volume/openstack/requests/update_snapshot.rb deleted file mode 100644 index 92560215d..000000000 --- a/lib/fog/volume/openstack/requests/update_snapshot.rb +++ /dev/null @@ -1,37 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def update_snapshot(snapshot_id, data = {}) - request( - body: Fog::JSON.encode('snapshot' => data), - expects: 200, - method: 'PUT', - path: "snapshots/#{snapshot_id}" - ) - end - end - - module Mock - def update_snapshot(snapshot_id, options = {}) - unless snapshot_id - raise ArgumentError, 'snapshot_id is required' - end - response = Excon::Response.new - if snapshot = data[:snapshots][snapshot_id] - response.status = 200 - snapshot['display_name'] = options['display_name'] if options['display_name'] - snapshot['display_description'] = options['display_description'] if options['display_description'] - snapshot['name'] = options['name'] if options['name'] - snapshot['description'] = options['description'] if options['description'] - snapshot['metadata'] = options['metadata'] if options['metadata'] - response.body = { 'snapshot' => snapshot } - response - else - raise Fog::HP::BlockStorageV2::NotFound - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/update_snapshot_metadata.rb b/lib/fog/volume/openstack/requests/update_snapshot_metadata.rb deleted file mode 100644 index c25c447e6..000000000 --- a/lib/fog/volume/openstack/requests/update_snapshot_metadata.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def update_snapshot_metadata(snapshot_id, metadata = {}) - data = { - 'metadata' => metadata - } - - request( - body: Fog::JSON.encode(data), - expects: [200], - method: 'POST', - path: "snapshots/#{snapshot_id}/metadata" - ) - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/update_volume.rb b/lib/fog/volume/openstack/requests/update_volume.rb deleted file mode 100644 index 94e05ab32..000000000 --- a/lib/fog/volume/openstack/requests/update_volume.rb +++ /dev/null @@ -1,25 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def update_volume(volume_id, data = {}) - request( - body: Fog::JSON.encode('volume' => data), - expects: 200, - method: 'PUT', - path: "volumes/#{volume_id}" - ) - end - end - - module Mock - def update_volume(volume_id, data = {}) - response = Excon::Response.new - response.status = 200 - response.body = { 'volume' => data.merge('id' => volume_id) } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/requests/update_volume_type.rb b/lib/fog/volume/openstack/requests/update_volume_type.rb deleted file mode 100644 index a8e81ce32..000000000 --- a/lib/fog/volume/openstack/requests/update_volume_type.rb +++ /dev/null @@ -1,41 +0,0 @@ -module Fog - module Volume - class OpenStack - module Real - def update_volume_type(volume_type_id, options = {}) - data = { - 'volume_type' => {} - } - - vanilla_options = [:name, :extra_specs] - vanilla_options.select { |o| options[o] }.each do |key| - data['volume_type'][key] = options[key] - end - request( - body: Fog::JSON.encode(data), - expects: [200, 202], - method: 'PUT', - path: "types/#{volume_type_id}" - ) - end - end - - module Mock - def update_volume_type(_volume_type_id, _options = {}) - response = Excon::Response.new - response.status = 202 - response.body = { - "volume_type" => { - "id" => "6685584b-1eac-4da6-b5c3-555430cf68ff", - "name" => "vol-type-001", - "extra_specs" => { - "capabilities" => "gpu" - } - } - } - response - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1.rb b/lib/fog/volume/openstack/v1.rb deleted file mode 100644 index c06fbc42e..000000000 --- a/lib/fog/volume/openstack/v1.rb +++ /dev/null @@ -1,183 +0,0 @@ -require 'fog/openstack/core' -require 'fog/volume/openstack' - -module Fog - module Volume - class OpenStack - class V1 < Fog::Volume::OpenStack - SUPPORTED_VERSIONS = /v1(\.(0-9))*/ - - requires :openstack_auth_url - - recognizes *@@recognizes - - model_path 'fog/volume/openstack/v1/models' - - model :volume - collection :volumes - - model :availability_zone - collection :availability_zones - - model :volume_type - collection :volume_types - - model :snapshot - collection :snapshots - - model :transfer - collection :transfers - - model :backup - collection :backups - - request_path 'fog/volume/openstack/v1/requests' - - # Volume - request :list_volumes - request :list_volumes_detailed - request :create_volume - request :update_volume - request :get_volume_details - request :extend_volume - request :delete_volume - - request :list_zones - - request :list_volume_types - request :create_volume_type - request :delete_volume_type - request :get_volume_type_details - - request :create_snapshot - request :update_snapshot - request :list_snapshots - request :list_snapshots_detailed - request :get_snapshot_details - request :delete_snapshot - request :update_snapshot_metadata - request :delete_snapshot_metadata - - request :list_transfers - request :list_transfers_detailed - request :create_transfer - request :get_transfer_details - request :accept_transfer - request :delete_transfer - - request :list_backups - request :list_backups_detailed - request :create_backup - request :get_backup_details - request :restore_backup - request :delete_backup - - request :update_quota - request :get_quota - request :get_quota_defaults - request :get_quota_usage - - request :update_metadata - request :replace_metadata - request :delete_metadata - - request :set_tenant - request :action - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - users: {}, - tenants: {}, - quota: { - 'gigabytes' => 1000, - 'volumes' => 10, - 'snapshots' => 10 - } - } - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 8776 - management_url.path = '/v1' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].find { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_management_url: @openstack_management_url } - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::Volume::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['volume'] - @openstack_service_name = options[:openstack_service_name] - @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL' - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - unless @path.match(SUPPORTED_VERSIONS) - @path = Fog::OpenStack.get_supported_version_path(SUPPORTED_VERSIONS, - @openstack_management_uri, - @auth_token, - @connection_options) - end - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/models/availability_zone.rb b/lib/fog/volume/openstack/v1/models/availability_zone.rb deleted file mode 100644 index 35d6fdb2d..000000000 --- a/lib/fog/volume/openstack/v1/models/availability_zone.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'fog/volume/openstack/models/availability_zone' - -module Fog - module Volume - class OpenStack - class V1 - class AvailabilityZone < Fog::Volume::OpenStack::AvailabilityZone - identity :zoneName - - attribute :zoneState - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/models/availability_zones.rb b/lib/fog/volume/openstack/v1/models/availability_zones.rb deleted file mode 100644 index ab449952b..000000000 --- a/lib/fog/volume/openstack/v1/models/availability_zones.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/volume/openstack/v1/models/availability_zone' -require 'fog/volume/openstack/models/availability_zones' - -module Fog - module Volume - class OpenStack - class V1 - class AvailabilityZones < Fog::OpenStack::Collection - model Fog::Volume::OpenStack::V1::AvailabilityZone - include Fog::Volume::OpenStack::AvailabilityZones - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/models/backup.rb b/lib/fog/volume/openstack/v1/models/backup.rb deleted file mode 100644 index ff5a88382..000000000 --- a/lib/fog/volume/openstack/v1/models/backup.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'fog/volume/openstack/models/backup' - -module Fog - module Volume - class OpenStack - class V1 - class Backup < Fog::Volume::OpenStack::Backup - identity :id - - superclass.attributes.each { |attrib| attribute attrib } - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/models/backups.rb b/lib/fog/volume/openstack/v1/models/backups.rb deleted file mode 100644 index 383fad71d..000000000 --- a/lib/fog/volume/openstack/v1/models/backups.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/volume/openstack/v1/models/backup' -require 'fog/volume/openstack/models/backups' - -module Fog - module Volume - class OpenStack - class V1 - class Backups < Fog::OpenStack::Collection - model Fog::Volume::OpenStack::V1::Backup - include Fog::Volume::OpenStack::Backups - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/models/snapshot.rb b/lib/fog/volume/openstack/v1/models/snapshot.rb deleted file mode 100644 index 02f64f1de..000000000 --- a/lib/fog/volume/openstack/v1/models/snapshot.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'fog/volume/openstack/models/snapshot' - -module Fog - module Volume - class OpenStack - class V1 - class Snapshot < Fog::Volume::OpenStack::Snapshot - identity :id - - attribute :display_name - attribute :status - attribute :display_description - attribute :metadata - attribute :force - attribute :size - - def save - requires :display_name - data = if id.nil? - service.create_snapshot(attributes[:volume_id], display_name, display_description, force) - else - service.update_snapshot(id, attributes.reject { |k, _v| k == :id }) - end - merge_attributes(data.body['snapshot']) - true - end - - def create - requires :display_name - - # volume_id, name, description, force=false - response = service.create_snapshot(attributes[:volume_id], - attributes[:display_name], - attributes[:display_description], - attributes[:force]) - merge_attributes(response.body['snapshot']) - - self - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/models/snapshots.rb b/lib/fog/volume/openstack/v1/models/snapshots.rb deleted file mode 100644 index f12d1a85a..000000000 --- a/lib/fog/volume/openstack/v1/models/snapshots.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/volume/openstack/v1/models/snapshot' -require 'fog/volume/openstack/models/snapshots' - -module Fog - module Volume - class OpenStack - class V1 - class Snapshots < Fog::OpenStack::Collection - model Fog::Volume::OpenStack::V1::Snapshot - include Fog::Volume::OpenStack::Snapshots - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/models/transfer.rb b/lib/fog/volume/openstack/v1/models/transfer.rb deleted file mode 100644 index 24c1f4c2f..000000000 --- a/lib/fog/volume/openstack/v1/models/transfer.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'fog/volume/openstack/models/transfer' - -module Fog - module Volume - class OpenStack - class V1 - class Transfer < Fog::Volume::OpenStack::Transfer - identity :id - - attribute :auth_key, aliases: 'authKey' - attribute :created_at, aliases: 'createdAt' - attribute :name - attribute :volume_id, aliases: 'volumeId' - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/models/transfers.rb b/lib/fog/volume/openstack/v1/models/transfers.rb deleted file mode 100644 index c35a60914..000000000 --- a/lib/fog/volume/openstack/v1/models/transfers.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/volume/openstack/v1/models/transfer' -require 'fog/volume/openstack/models/transfers' - -module Fog - module Volume - class OpenStack - class V1 - class Transfers < Fog::OpenStack::Collection - model Fog::Volume::OpenStack::V1::Transfer - include Fog::Volume::OpenStack::Transfers - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/models/volume.rb b/lib/fog/volume/openstack/v1/models/volume.rb deleted file mode 100644 index e8e2cfee3..000000000 --- a/lib/fog/volume/openstack/v1/models/volume.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'fog/volume/openstack/models/volume' - -module Fog - module Volume - class OpenStack - class V1 - class Volume < Fog::Volume::OpenStack::Volume - identity :id - - superclass.attributes.each { |attrib| attribute attrib } - attribute :display_name, aliases: 'displayName' - attribute :display_description, aliases: 'displayDescription' - attribute :tenant_id, aliases: 'os-vol-tenant-attr:tenant_id' - - def save - requires :display_name, :size - data = if id.nil? - service.create_volume(display_name, display_description, size, attributes) - else - service.update_volume(id, attributes.reject { |k, _v| k == :id }) - end - merge_attributes(data.body['volume']) - true - end - - def update(attr = nil) - requires :id - merge_attributes( - service.update_volume(id, attr || attributes).body['volume'] - ) - self - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/models/volume_type.rb b/lib/fog/volume/openstack/v1/models/volume_type.rb deleted file mode 100644 index eb8c57c1a..000000000 --- a/lib/fog/volume/openstack/v1/models/volume_type.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/volume/openstack/models/volume_type' - -module Fog - module Volume - class OpenStack - class V1 - class VolumeType < Fog::Volume::OpenStack::VolumeType - identity :id - - attribute :name - attribute :volume_backend_name - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/models/volume_types.rb b/lib/fog/volume/openstack/v1/models/volume_types.rb deleted file mode 100644 index 803e0c14c..000000000 --- a/lib/fog/volume/openstack/v1/models/volume_types.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/volume/openstack/v1/models/volume_type' -require 'fog/volume/openstack/models/volume_types' - -module Fog - module Volume - class OpenStack - class V1 - class VolumeTypes < Fog::OpenStack::Collection - model Fog::Volume::OpenStack::V1::VolumeType - include Fog::Volume::OpenStack::VolumeTypes - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/models/volumes.rb b/lib/fog/volume/openstack/v1/models/volumes.rb deleted file mode 100644 index 11dbb4b16..000000000 --- a/lib/fog/volume/openstack/v1/models/volumes.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/volume/openstack/v1/models/volume' -require 'fog/volume/openstack/models/volumes' - -module Fog - module Volume - class OpenStack - class V1 - class Volumes < Fog::OpenStack::Collection - model Fog::Volume::OpenStack::V1::Volume - include Fog::Volume::OpenStack::Volumes - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/requests/accept_transfer.rb b/lib/fog/volume/openstack/v1/requests/accept_transfer.rb deleted file mode 100644 index 22fb2e28b..000000000 --- a/lib/fog/volume/openstack/v1/requests/accept_transfer.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/accept_transfer' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/action.rb b/lib/fog/volume/openstack/v1/requests/action.rb deleted file mode 100644 index 864515140..000000000 --- a/lib/fog/volume/openstack/v1/requests/action.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/action' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/create_backup.rb b/lib/fog/volume/openstack/v1/requests/create_backup.rb deleted file mode 100644 index 87aee6107..000000000 --- a/lib/fog/volume/openstack/v1/requests/create_backup.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/create_backup' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/create_snapshot.rb b/lib/fog/volume/openstack/v1/requests/create_snapshot.rb deleted file mode 100644 index 35cdc9e4e..000000000 --- a/lib/fog/volume/openstack/v1/requests/create_snapshot.rb +++ /dev/null @@ -1,45 +0,0 @@ -require 'fog/volume/openstack/requests/create_snapshot' - -module Fog - module Volume - class OpenStack - class V1 - class Real - include Fog::Volume::OpenStack::Real - - def create_snapshot(volume_id, name, description, force = false) - data = { - 'snapshot' => { - 'volume_id' => volume_id, - 'display_name' => name, - 'display_description' => description, - 'force' => force.nil? ? false : force - } - } - - _create_snapshot(data) - end - end - - class Mock - def create_snapshot(volume_id, name, description, _force = false) - response = Excon::Response.new - response.status = 202 - response.body = { - "snapshot" => { - "status" => "creating", - "display_name" => name, - "created_at" => Time.now, - "display_description" => description, - "volume_id" => volume_id, - "id" => "5", - "size" => 1 - } - } - response - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/requests/create_transfer.rb b/lib/fog/volume/openstack/v1/requests/create_transfer.rb deleted file mode 100644 index 589a96835..000000000 --- a/lib/fog/volume/openstack/v1/requests/create_transfer.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/create_transfer' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/create_volume.rb b/lib/fog/volume/openstack/v1/requests/create_volume.rb deleted file mode 100644 index 5c3587379..000000000 --- a/lib/fog/volume/openstack/v1/requests/create_volume.rb +++ /dev/null @@ -1,49 +0,0 @@ -require 'fog/volume/openstack/requests/create_volume' - -module Fog - module Volume - class OpenStack - class V1 - class Real - def create_volume(name, description, size, options = {}) - data = { - 'volume' => { - 'display_name' => name, - 'display_description' => description, - 'size' => size - } - } - - _create_volume(data, options) - end - - include Fog::Volume::OpenStack::Real - end - - class Mock - def create_volume(name, description, size, options = {}) - response = Excon::Response.new - response.status = 202 - response.body = { - 'volume' => { - 'id' => Fog::Mock.random_numbers(2), - 'display_name' => name, - 'display_description' => description, - 'metadata' => options['metadata'] || {}, - 'size' => size, - 'status' => 'creating', - 'snapshot_id' => options[:snapshot_id] || nil, - 'image_id' => options[:imageRef] || nil, - 'volume_type' => nil, - 'availability_zone' => 'nova', - 'created_at' => Time.now, - 'attachments' => [] - } - } - response - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/requests/create_volume_type.rb b/lib/fog/volume/openstack/v1/requests/create_volume_type.rb deleted file mode 100644 index 39fb7df50..000000000 --- a/lib/fog/volume/openstack/v1/requests/create_volume_type.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/create_volume_type' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/delete_backup.rb b/lib/fog/volume/openstack/v1/requests/delete_backup.rb deleted file mode 100644 index 0c931e879..000000000 --- a/lib/fog/volume/openstack/v1/requests/delete_backup.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_backup' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/delete_metadata.rb b/lib/fog/volume/openstack/v1/requests/delete_metadata.rb deleted file mode 100644 index cd60fa7bb..000000000 --- a/lib/fog/volume/openstack/v1/requests/delete_metadata.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_metadata' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/delete_snapshot.rb b/lib/fog/volume/openstack/v1/requests/delete_snapshot.rb deleted file mode 100644 index 735096720..000000000 --- a/lib/fog/volume/openstack/v1/requests/delete_snapshot.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_snapshot' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/delete_snapshot_metadata.rb b/lib/fog/volume/openstack/v1/requests/delete_snapshot_metadata.rb deleted file mode 100644 index 3399004e2..000000000 --- a/lib/fog/volume/openstack/v1/requests/delete_snapshot_metadata.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_snapshot_metadata' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/delete_transfer.rb b/lib/fog/volume/openstack/v1/requests/delete_transfer.rb deleted file mode 100644 index d10c4f8d2..000000000 --- a/lib/fog/volume/openstack/v1/requests/delete_transfer.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_transfer' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/delete_volume.rb b/lib/fog/volume/openstack/v1/requests/delete_volume.rb deleted file mode 100644 index 1b65c11b9..000000000 --- a/lib/fog/volume/openstack/v1/requests/delete_volume.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_volume' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/delete_volume_type.rb b/lib/fog/volume/openstack/v1/requests/delete_volume_type.rb deleted file mode 100644 index 87b41422d..000000000 --- a/lib/fog/volume/openstack/v1/requests/delete_volume_type.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_volume_type' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/extend_volume.rb b/lib/fog/volume/openstack/v1/requests/extend_volume.rb deleted file mode 100644 index 40b949a3d..000000000 --- a/lib/fog/volume/openstack/v1/requests/extend_volume.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/extend_volume' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/get_backup_details.rb b/lib/fog/volume/openstack/v1/requests/get_backup_details.rb deleted file mode 100644 index 42018a151..000000000 --- a/lib/fog/volume/openstack/v1/requests/get_backup_details.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/get_backup_details' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/get_quota.rb b/lib/fog/volume/openstack/v1/requests/get_quota.rb deleted file mode 100644 index fb32eb165..000000000 --- a/lib/fog/volume/openstack/v1/requests/get_quota.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/get_quota' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/get_quota_defaults.rb b/lib/fog/volume/openstack/v1/requests/get_quota_defaults.rb deleted file mode 100644 index a9b4f99b5..000000000 --- a/lib/fog/volume/openstack/v1/requests/get_quota_defaults.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/get_quota_defaults' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/get_quota_usage.rb b/lib/fog/volume/openstack/v1/requests/get_quota_usage.rb deleted file mode 100644 index dc6022759..000000000 --- a/lib/fog/volume/openstack/v1/requests/get_quota_usage.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/get_quota_usage' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/get_snapshot_details.rb b/lib/fog/volume/openstack/v1/requests/get_snapshot_details.rb deleted file mode 100644 index 6980212e7..000000000 --- a/lib/fog/volume/openstack/v1/requests/get_snapshot_details.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'fog/volume/openstack/requests/get_snapshot_details' - -module Fog - module Volume - class OpenStack - class V1 - class Real - include Fog::Volume::OpenStack::Real - end - - class Mock - def get_snapshot_details(_detailed = true) - response = Excon::Response.new - response.status = 200 - response.body = { - 'snapshot' => { - 'id' => '1', - 'display_name' => 'Snapshot1', - 'display_description' => 'Volume1 snapshot', - 'size' => 1, - 'volume_id' => '1', - 'status' => 'available', - 'created_at' => Time.now - } - } - response - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/requests/get_transfer_details.rb b/lib/fog/volume/openstack/v1/requests/get_transfer_details.rb deleted file mode 100644 index f5c6f0087..000000000 --- a/lib/fog/volume/openstack/v1/requests/get_transfer_details.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/get_transfer_details' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/get_volume_details.rb b/lib/fog/volume/openstack/v1/requests/get_volume_details.rb deleted file mode 100644 index 78729f963..000000000 --- a/lib/fog/volume/openstack/v1/requests/get_volume_details.rb +++ /dev/null @@ -1,35 +0,0 @@ -require 'fog/volume/openstack/requests/get_volume_details' - -module Fog - module Volume - class OpenStack - class V1 - class Real - include Fog::Volume::OpenStack::Real - end - - class Mock - def get_volume_details(_detailed = true) - response = Excon::Response.new - response.status = 200 - response.body = { - 'volume' => { - 'id' => '1', - 'display_name' => Fog::Mock.random_letters(rand(8) + 5), - 'display_description' => Fog::Mock.random_letters(rand(12) + 10), - 'size' => 3, - 'volume_type' => nil, - 'snapshot_id' => '4', - 'status' => 'online', - 'availability_zone' => 'nova', - 'created_at' => Time.now, - 'attachments' => [] - } - } - response - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/requests/get_volume_type_details.rb b/lib/fog/volume/openstack/v1/requests/get_volume_type_details.rb deleted file mode 100644 index 7551a0536..000000000 --- a/lib/fog/volume/openstack/v1/requests/get_volume_type_details.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/get_volume_type_details' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/list_backups.rb b/lib/fog/volume/openstack/v1/requests/list_backups.rb deleted file mode 100644 index 7b8730232..000000000 --- a/lib/fog/volume/openstack/v1/requests/list_backups.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_backups' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/list_backups_detailed.rb b/lib/fog/volume/openstack/v1/requests/list_backups_detailed.rb deleted file mode 100644 index b2af7b137..000000000 --- a/lib/fog/volume/openstack/v1/requests/list_backups_detailed.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_backups_detailed' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/list_snapshots.rb b/lib/fog/volume/openstack/v1/requests/list_snapshots.rb deleted file mode 100644 index 77a90414a..000000000 --- a/lib/fog/volume/openstack/v1/requests/list_snapshots.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_snapshots' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/list_snapshots_detailed.rb b/lib/fog/volume/openstack/v1/requests/list_snapshots_detailed.rb deleted file mode 100644 index 8538c572d..000000000 --- a/lib/fog/volume/openstack/v1/requests/list_snapshots_detailed.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_snapshots_detailed' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/list_transfers.rb b/lib/fog/volume/openstack/v1/requests/list_transfers.rb deleted file mode 100644 index ad3207161..000000000 --- a/lib/fog/volume/openstack/v1/requests/list_transfers.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_transfers' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/list_transfers_detailed.rb b/lib/fog/volume/openstack/v1/requests/list_transfers_detailed.rb deleted file mode 100644 index efa6efbe5..000000000 --- a/lib/fog/volume/openstack/v1/requests/list_transfers_detailed.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_transfers_detailed' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/list_volume_types.rb b/lib/fog/volume/openstack/v1/requests/list_volume_types.rb deleted file mode 100644 index 293a84e0a..000000000 --- a/lib/fog/volume/openstack/v1/requests/list_volume_types.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_volume_types' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/list_volumes.rb b/lib/fog/volume/openstack/v1/requests/list_volumes.rb deleted file mode 100644 index e04693288..000000000 --- a/lib/fog/volume/openstack/v1/requests/list_volumes.rb +++ /dev/null @@ -1,46 +0,0 @@ -require 'fog/volume/openstack/requests/list_volumes' - -module Fog - module Volume - class OpenStack - class V1 - class Real - include Fog::Volume::OpenStack::Real - end - - class Mock - def list_volumes(_options = true, _options_deprecated = {}) - response = Excon::Response.new - response.status = 200 - data[:volumes] ||= [ - { "status" => "available", - "display_description" => "test 1 desc", - "availability_zone" => "nova", - "display_name" => "Volume1", - "attachments" => [{}], - "volume_type" => nil, - "snapshot_id" => nil, - "size" => 1, - "id" => 1, - "created_at" => Time.now, - "metadata" => {} }, - { "status" => "available", - "display_description" => "test 2 desc", - "availability_zone" => "nova", - "display_name" => "Volume2", - "attachments" => [{}], - "volume_type" => nil, - "snapshot_id" => nil, - "size" => 1, - "id" => 2, - "created_at" => Time.now, - "metadata" => {} } - ] - response.body = { 'volumes' => data[:volumes] } - response - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/requests/list_volumes_detailed.rb b/lib/fog/volume/openstack/v1/requests/list_volumes_detailed.rb deleted file mode 100644 index 75a68bac8..000000000 --- a/lib/fog/volume/openstack/v1/requests/list_volumes_detailed.rb +++ /dev/null @@ -1,46 +0,0 @@ -require 'fog/volume/openstack/requests/list_volumes_detailed' - -module Fog - module Volume - class OpenStack - class V1 - class Real - include Fog::Volume::OpenStack::Real - end - - class Mock - def list_volumes_detailed(_options = {}) - response = Excon::Response.new - response.status = 200 - data[:volumes] ||= [ - { "status" => "available", - "display_description" => "test 1 desc", - "availability_zone" => "nova", - "display_name" => "Volume1", - "attachments" => [{}], - "volume_type" => nil, - "snapshot_id" => nil, - "size" => 1, - "id" => 1, - "created_at" => Time.now, - "metadata" => {} }, - { "status" => "available", - "display_description" => "test 2 desc", - "availability_zone" => "nova", - "display_name" => "Volume2", - "attachments" => [{}], - "volume_type" => nil, - "snapshot_id" => nil, - "size" => 1, - "id" => 2, - "created_at" => Time.now, - "metadata" => {} } - ] - response.body = { 'volumes' => data[:volumes] } - response - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/requests/list_zones.rb b/lib/fog/volume/openstack/v1/requests/list_zones.rb deleted file mode 100644 index c1140f633..000000000 --- a/lib/fog/volume/openstack/v1/requests/list_zones.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_zones' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/real.rb b/lib/fog/volume/openstack/v1/requests/real.rb deleted file mode 100644 index 2a37b535a..000000000 --- a/lib/fog/volume/openstack/v1/requests/real.rb +++ /dev/null @@ -1,11 +0,0 @@ -module Fog - module Volume - class OpenStack - class V1 - class Real - include Fog::Volume::OpenStack::Real - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/requests/real_mock.rb b/lib/fog/volume/openstack/v1/requests/real_mock.rb deleted file mode 100644 index e98f366ee..000000000 --- a/lib/fog/volume/openstack/v1/requests/real_mock.rb +++ /dev/null @@ -1,14 +0,0 @@ -module Fog - module Volume - class OpenStack - class V1 - class Real - include Fog::Volume::OpenStack::Real - end - class Mock - include Fog::Volume::OpenStack::Mock - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v1/requests/replace_metadata.rb b/lib/fog/volume/openstack/v1/requests/replace_metadata.rb deleted file mode 100644 index e9f99233d..000000000 --- a/lib/fog/volume/openstack/v1/requests/replace_metadata.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/replace_metadata' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/restore_backup.rb b/lib/fog/volume/openstack/v1/requests/restore_backup.rb deleted file mode 100644 index 9bf58ae73..000000000 --- a/lib/fog/volume/openstack/v1/requests/restore_backup.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/restore_backup' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/set_tenant.rb b/lib/fog/volume/openstack/v1/requests/set_tenant.rb deleted file mode 100644 index 542a550bb..000000000 --- a/lib/fog/volume/openstack/v1/requests/set_tenant.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/set_tenant' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/update_metadata.rb b/lib/fog/volume/openstack/v1/requests/update_metadata.rb deleted file mode 100644 index d1be8f383..000000000 --- a/lib/fog/volume/openstack/v1/requests/update_metadata.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/update_metadata' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/update_quota.rb b/lib/fog/volume/openstack/v1/requests/update_quota.rb deleted file mode 100644 index ea7bdc107..000000000 --- a/lib/fog/volume/openstack/v1/requests/update_quota.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/update_quota' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v1/requests/update_snapshot.rb b/lib/fog/volume/openstack/v1/requests/update_snapshot.rb deleted file mode 100644 index 8465042cf..000000000 --- a/lib/fog/volume/openstack/v1/requests/update_snapshot.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/update_snapshot' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/update_snapshot_metadata.rb b/lib/fog/volume/openstack/v1/requests/update_snapshot_metadata.rb deleted file mode 100644 index 8116b1dfa..000000000 --- a/lib/fog/volume/openstack/v1/requests/update_snapshot_metadata.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/update_snapshot_metadata' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v1/requests/update_volume.rb b/lib/fog/volume/openstack/v1/requests/update_volume.rb deleted file mode 100644 index 161bf1c9e..000000000 --- a/lib/fog/volume/openstack/v1/requests/update_volume.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/update_volume' -require 'fog/volume/openstack/v1/requests/real' diff --git a/lib/fog/volume/openstack/v2.rb b/lib/fog/volume/openstack/v2.rb deleted file mode 100644 index cb8f9276c..000000000 --- a/lib/fog/volume/openstack/v2.rb +++ /dev/null @@ -1,185 +0,0 @@ -require 'fog/openstack/core' -require 'fog/volume/openstack' - -module Fog - module Volume - class OpenStack - class V2 < Fog::Volume::OpenStack - SUPPORTED_VERSIONS = /v2(\.(0-9))*/ - - requires :openstack_auth_url - - recognizes *@@recognizes - - model_path 'fog/volume/openstack/v2/models' - - model :volume - collection :volumes - - model :availability_zone - collection :availability_zones - - model :volume_type - collection :volume_types - - model :snapshot - collection :snapshots - - model :transfer - collection :transfers - - model :backup - collection :backups - - request_path 'fog/volume/openstack/v2/requests' - - # Volume - request :list_volumes - request :list_volumes_detailed - request :create_volume - request :update_volume - request :get_volume_details - request :extend_volume - request :delete_volume - - request :list_zones - - request :list_volume_types - request :create_volume_type - request :update_volume_type - request :delete_volume_type - request :get_volume_type_details - - request :create_snapshot - request :update_snapshot - request :list_snapshots - request :list_snapshots_detailed - request :get_snapshot_details - request :delete_snapshot - request :update_snapshot_metadata - request :delete_snapshot_metadata - - request :list_transfers - request :list_transfers_detailed - request :create_transfer - request :get_transfer_details - request :accept_transfer - request :delete_transfer - - request :list_backups - request :list_backups_detailed - request :create_backup - request :get_backup_details - request :restore_backup - request :delete_backup - - request :update_quota - request :get_quota - request :get_quota_defaults - request :get_quota_usage - - request :update_metadata - request :replace_metadata - request :delete_metadata - - request :set_tenant - request :action - request :snapshot_action - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - users: {}, - tenants: {}, - quota: { - 'gigabytes' => 1000, - 'volumes' => 10, - 'snapshots' => 10 - } - } - end - end - - def self.reset - @data = nil - end - - def initialize(options = {}) - @openstack_username = options[:openstack_username] - @openstack_tenant = options[:openstack_tenant] - @openstack_auth_uri = URI.parse(options[:openstack_auth_url]) - - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86400).iso8601 - - management_url = URI.parse(options[:openstack_auth_url]) - management_url.port = 8776 - management_url.path = '/v1' - @openstack_management_url = management_url.to_s - - @data ||= { users: {} } - unless @data[:users].find { |u| u['name'] == options[:openstack_username] } - id = Fog::Mock.random_numbers(6).to_s - @data[:users][id] = { - 'id' => id, - 'name' => options[:openstack_username], - 'email' => "#{options[:openstack_username]}@mock.com", - 'tenantId' => Fog::Mock.random_numbers(6).to_s, - 'enabled' => true - } - end - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - - def credentials - { provider: 'openstack', - openstack_auth_url: @openstack_auth_uri.to_s, - openstack_auth_token: @auth_token, - openstack_management_url: @openstack_management_url } - end - end - - class Real - include Fog::OpenStack::Core - - def self.not_found_class - Fog::Volume::OpenStack::NotFound - end - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['volumev2'] - @openstack_service_name = options[:openstack_service_name] - @openstack_endpoint_type = options[:openstack_endpoint_type] || 'adminURL' - - @connection_options = options[:connection_options] || {} - - authenticate - set_api_path - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def set_api_path - unless @path.match(SUPPORTED_VERSIONS) - @path = Fog::OpenStack.get_supported_version_path(SUPPORTED_VERSIONS, - @openstack_management_uri, - @auth_token, - @connection_options) - end - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/models/availability_zone.rb b/lib/fog/volume/openstack/v2/models/availability_zone.rb deleted file mode 100644 index f7944c65d..000000000 --- a/lib/fog/volume/openstack/v2/models/availability_zone.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'fog/volume/openstack/models/availability_zone' - -module Fog - module Volume - class OpenStack - class V2 - class AvailabilityZone < Fog::Volume::OpenStack::AvailabilityZone - identity :zoneName - - attribute :zoneState - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/models/availability_zones.rb b/lib/fog/volume/openstack/v2/models/availability_zones.rb deleted file mode 100644 index c91554740..000000000 --- a/lib/fog/volume/openstack/v2/models/availability_zones.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/volume/openstack/v2/models/availability_zone' -require 'fog/volume/openstack/models/availability_zones' - -module Fog - module Volume - class OpenStack - class V2 - class AvailabilityZones < Fog::OpenStack::Collection - model Fog::Volume::OpenStack::V2::AvailabilityZone - include Fog::Volume::OpenStack::AvailabilityZones - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/models/backup.rb b/lib/fog/volume/openstack/v2/models/backup.rb deleted file mode 100644 index a3f1fe943..000000000 --- a/lib/fog/volume/openstack/v2/models/backup.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'fog/volume/openstack/models/backup' - -module Fog - module Volume - class OpenStack - class V2 - class Backup < Fog::Volume::OpenStack::Backup - identity :id - - superclass.attributes.each { |attrib| attribute attrib } - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/models/backups.rb b/lib/fog/volume/openstack/v2/models/backups.rb deleted file mode 100644 index 3c074ef16..000000000 --- a/lib/fog/volume/openstack/v2/models/backups.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/volume/openstack/v2/models/backup' -require 'fog/volume/openstack/models/backups' - -module Fog - module Volume - class OpenStack - class V2 - class Backups < Fog::OpenStack::Collection - model Fog::Volume::OpenStack::V2::Backup - include Fog::Volume::OpenStack::Backups - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/models/snapshot.rb b/lib/fog/volume/openstack/v2/models/snapshot.rb deleted file mode 100644 index 9ed9ff277..000000000 --- a/lib/fog/volume/openstack/v2/models/snapshot.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'fog/volume/openstack/models/snapshot' - -module Fog - module Volume - class OpenStack - class V2 - class Snapshot < Fog::Volume::OpenStack::Snapshot - identity :id - - attribute :name - attribute :status - attribute :description - attribute :metadata - attribute :force - attribute :size - - def save - requires :name - data = if id.nil? - service.create_snapshot(attributes[:volume_id], name, description, force) - else - service.update_snapshot(id, attributes.reject { |k, _v| k == :id }) - end - merge_attributes(data.body['snapshot']) - true - end - - def create - requires :name - - # volume_id, name, description, force=false - response = service.create_snapshot(attributes[:volume_id], - attributes[:name], - attributes[:description], - attributes[:force]) - merge_attributes(response.body['snapshot']) - - self - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/models/snapshots.rb b/lib/fog/volume/openstack/v2/models/snapshots.rb deleted file mode 100644 index f5eda7fa0..000000000 --- a/lib/fog/volume/openstack/v2/models/snapshots.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/volume/openstack/v2/models/snapshot' -require 'fog/volume/openstack/models/snapshots' - -module Fog - module Volume - class OpenStack - class V2 - class Snapshots < Fog::OpenStack::Collection - model Fog::Volume::OpenStack::V2::Snapshot - include Fog::Volume::OpenStack::Snapshots - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/models/transfer.rb b/lib/fog/volume/openstack/v2/models/transfer.rb deleted file mode 100644 index fb06fbe20..000000000 --- a/lib/fog/volume/openstack/v2/models/transfer.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'fog/volume/openstack/models/transfer' - -module Fog - module Volume - class OpenStack - class V2 - class Transfer < Fog::Volume::OpenStack::Transfer - identity :id - - attribute :auth_key, aliases: 'authKey' - attribute :created_at, aliases: 'createdAt' - attribute :name - attribute :volume_id, aliases: 'volumeId' - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/models/transfers.rb b/lib/fog/volume/openstack/v2/models/transfers.rb deleted file mode 100644 index d12bb6ab7..000000000 --- a/lib/fog/volume/openstack/v2/models/transfers.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/volume/openstack/v2/models/transfer' -require 'fog/volume/openstack/models/transfers' - -module Fog - module Volume - class OpenStack - class V2 - class Transfers < Fog::OpenStack::Collection - model Fog::Volume::OpenStack::V2::Transfer - include Fog::Volume::OpenStack::Transfers - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/models/volume.rb b/lib/fog/volume/openstack/v2/models/volume.rb deleted file mode 100644 index 1ed5337a0..000000000 --- a/lib/fog/volume/openstack/v2/models/volume.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'fog/volume/openstack/models/volume' - -module Fog - module Volume - class OpenStack - class V2 - class Volume < Fog::Volume::OpenStack::Volume - identity :id - - superclass.attributes.each { |attrib| attribute attrib } - attribute :name - attribute :description - attribute :tenant_id, aliases: 'os-vol-tenant-attr:tenant_id' - - def save - requires :name, :size - data = if id.nil? - service.create_volume(name, description, size, attributes) - else - service.update_volume(id, attributes.reject { |k, _v| k == :id }) - end - merge_attributes(data.body['volume']) - true - end - - def update(attr = nil) - requires :id - merge_attributes( - service.update_volume(id, attr || attributes).body['volume'] - ) - self - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/models/volume_type.rb b/lib/fog/volume/openstack/v2/models/volume_type.rb deleted file mode 100644 index 9df096a7c..000000000 --- a/lib/fog/volume/openstack/v2/models/volume_type.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/volume/openstack/models/volume_type' - -module Fog - module Volume - class OpenStack - class V2 - class VolumeType < Fog::Volume::OpenStack::VolumeType - identity :id - - attribute :name - attribute :volume_backend_name - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/models/volume_types.rb b/lib/fog/volume/openstack/v2/models/volume_types.rb deleted file mode 100644 index c9ff191d5..000000000 --- a/lib/fog/volume/openstack/v2/models/volume_types.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/volume/openstack/v2/models/volume_type' -require 'fog/volume/openstack/models/volume_types' - -module Fog - module Volume - class OpenStack - class V2 - class VolumeTypes < Fog::OpenStack::Collection - model Fog::Volume::OpenStack::V2::VolumeType - include Fog::Volume::OpenStack::VolumeTypes - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/models/volumes.rb b/lib/fog/volume/openstack/v2/models/volumes.rb deleted file mode 100644 index 6d732e1cd..000000000 --- a/lib/fog/volume/openstack/v2/models/volumes.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'fog/openstack/models/collection' -require 'fog/volume/openstack/v2/models/volume' -require 'fog/volume/openstack/models/volumes' - -module Fog - module Volume - class OpenStack - class V2 - class Volumes < Fog::OpenStack::Collection - model Fog::Volume::OpenStack::V2::Volume - include Fog::Volume::OpenStack::Volumes - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/requests/accept_transfer.rb b/lib/fog/volume/openstack/v2/requests/accept_transfer.rb deleted file mode 100644 index 90eeb4064..000000000 --- a/lib/fog/volume/openstack/v2/requests/accept_transfer.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/accept_transfer' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/action.rb b/lib/fog/volume/openstack/v2/requests/action.rb deleted file mode 100644 index 22ea9c995..000000000 --- a/lib/fog/volume/openstack/v2/requests/action.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/action' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/create_backup.rb b/lib/fog/volume/openstack/v2/requests/create_backup.rb deleted file mode 100644 index 85e520897..000000000 --- a/lib/fog/volume/openstack/v2/requests/create_backup.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/create_backup' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/create_snapshot.rb b/lib/fog/volume/openstack/v2/requests/create_snapshot.rb deleted file mode 100644 index 520990376..000000000 --- a/lib/fog/volume/openstack/v2/requests/create_snapshot.rb +++ /dev/null @@ -1,45 +0,0 @@ -require 'fog/volume/openstack/requests/create_snapshot' - -module Fog - module Volume - class OpenStack - class V2 - class Real - include Fog::Volume::OpenStack::Real - - def create_snapshot(volume_id, name, description, force = false) - data = { - 'snapshot' => { - 'volume_id' => volume_id, - 'name' => name, - 'description' => description, - 'force' => force.nil? ? false : force - } - } - - _create_snapshot(data) - end - end - - class Mock - def create_snapshot(volume_id, name, description, _force = false) - response = Excon::Response.new - response.status = 202 - response.body = { - "snapshot" => { - "status" => "creating", - "name" => name, - "created_at" => Time.now, - "description" => description, - "volume_id" => volume_id, - "id" => "5", - "size" => 1 - } - } - response - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/requests/create_transfer.rb b/lib/fog/volume/openstack/v2/requests/create_transfer.rb deleted file mode 100644 index 421b04770..000000000 --- a/lib/fog/volume/openstack/v2/requests/create_transfer.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/create_transfer' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/create_volume.rb b/lib/fog/volume/openstack/v2/requests/create_volume.rb deleted file mode 100644 index 0c0659558..000000000 --- a/lib/fog/volume/openstack/v2/requests/create_volume.rb +++ /dev/null @@ -1,49 +0,0 @@ -require 'fog/volume/openstack/requests/create_volume' - -module Fog - module Volume - class OpenStack - class V2 - class Real - def create_volume(name, description, size, options = {}) - data = { - 'volume' => { - 'name' => name, - 'description' => description, - 'size' => size - } - } - - _create_volume(data, options) - end - - include Fog::Volume::OpenStack::Real - end - - class Mock - def create_volume(name, description, size, options = {}) - response = Excon::Response.new - response.status = 202 - response.body = { - 'volume' => { - 'id' => Fog::Mock.random_numbers(2), - 'name' => name, - 'description' => description, - 'metadata' => options['metadata'] || {}, - 'size' => size, - 'status' => 'creating', - 'snapshot_id' => options[:snapshot_id] || nil, - 'image_id' => options[:imageRef] || nil, - 'volume_type' => nil, - 'availability_zone' => 'nova', - 'created_at' => Time.now, - 'attachments' => [] - } - } - response - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/requests/create_volume_type.rb b/lib/fog/volume/openstack/v2/requests/create_volume_type.rb deleted file mode 100644 index b0fed84ec..000000000 --- a/lib/fog/volume/openstack/v2/requests/create_volume_type.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/create_volume_type' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/delete_backup.rb b/lib/fog/volume/openstack/v2/requests/delete_backup.rb deleted file mode 100644 index c00284714..000000000 --- a/lib/fog/volume/openstack/v2/requests/delete_backup.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_backup' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/delete_metadata.rb b/lib/fog/volume/openstack/v2/requests/delete_metadata.rb deleted file mode 100644 index a8695156f..000000000 --- a/lib/fog/volume/openstack/v2/requests/delete_metadata.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_metadata' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/delete_snapshot.rb b/lib/fog/volume/openstack/v2/requests/delete_snapshot.rb deleted file mode 100644 index 2b1ec6b66..000000000 --- a/lib/fog/volume/openstack/v2/requests/delete_snapshot.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_snapshot' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/delete_snapshot_metadata.rb b/lib/fog/volume/openstack/v2/requests/delete_snapshot_metadata.rb deleted file mode 100644 index 80580e28b..000000000 --- a/lib/fog/volume/openstack/v2/requests/delete_snapshot_metadata.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_snapshot_metadata' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/delete_transfer.rb b/lib/fog/volume/openstack/v2/requests/delete_transfer.rb deleted file mode 100644 index b3f443cef..000000000 --- a/lib/fog/volume/openstack/v2/requests/delete_transfer.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_transfer' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/delete_volume.rb b/lib/fog/volume/openstack/v2/requests/delete_volume.rb deleted file mode 100644 index 237600d3d..000000000 --- a/lib/fog/volume/openstack/v2/requests/delete_volume.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_volume' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/delete_volume_type.rb b/lib/fog/volume/openstack/v2/requests/delete_volume_type.rb deleted file mode 100644 index 1cc6024ea..000000000 --- a/lib/fog/volume/openstack/v2/requests/delete_volume_type.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/delete_volume_type' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/extend_volume.rb b/lib/fog/volume/openstack/v2/requests/extend_volume.rb deleted file mode 100644 index 78b79fdc2..000000000 --- a/lib/fog/volume/openstack/v2/requests/extend_volume.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/extend_volume' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/get_backup_details.rb b/lib/fog/volume/openstack/v2/requests/get_backup_details.rb deleted file mode 100644 index 8cb7d5516..000000000 --- a/lib/fog/volume/openstack/v2/requests/get_backup_details.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/get_backup_details' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/get_quota.rb b/lib/fog/volume/openstack/v2/requests/get_quota.rb deleted file mode 100644 index 0dcacd264..000000000 --- a/lib/fog/volume/openstack/v2/requests/get_quota.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/get_quota' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/get_quota_defaults.rb b/lib/fog/volume/openstack/v2/requests/get_quota_defaults.rb deleted file mode 100644 index 546ebad52..000000000 --- a/lib/fog/volume/openstack/v2/requests/get_quota_defaults.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/get_quota_defaults' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/get_quota_usage.rb b/lib/fog/volume/openstack/v2/requests/get_quota_usage.rb deleted file mode 100644 index b8aaa7936..000000000 --- a/lib/fog/volume/openstack/v2/requests/get_quota_usage.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/get_quota_usage' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/get_snapshot_details.rb b/lib/fog/volume/openstack/v2/requests/get_snapshot_details.rb deleted file mode 100644 index c7c25303a..000000000 --- a/lib/fog/volume/openstack/v2/requests/get_snapshot_details.rb +++ /dev/null @@ -1,32 +0,0 @@ -require 'fog/volume/openstack/requests/get_snapshot_details' - -module Fog - module Volume - class OpenStack - class V2 - class Real - include Fog::Volume::OpenStack::Real - end - - class Mock - def get_snapshot_details(_detailed = true) - response = Excon::Response.new - response.status = 200 - response.body = { - 'snapshot' => { - 'id' => '1', - 'name' => 'Snapshot1', - 'description' => 'Volume1 snapshot', - 'size' => 1, - 'volume_id' => '1', - 'status' => 'available', - 'created_at' => Time.now - } - } - response - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/requests/get_transfer_details.rb b/lib/fog/volume/openstack/v2/requests/get_transfer_details.rb deleted file mode 100644 index be4f9f0e2..000000000 --- a/lib/fog/volume/openstack/v2/requests/get_transfer_details.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/get_transfer_details' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/get_volume_details.rb b/lib/fog/volume/openstack/v2/requests/get_volume_details.rb deleted file mode 100644 index f8ca41d7b..000000000 --- a/lib/fog/volume/openstack/v2/requests/get_volume_details.rb +++ /dev/null @@ -1,35 +0,0 @@ -require 'fog/volume/openstack/requests/get_volume_details' - -module Fog - module Volume - class OpenStack - class V2 - class Real - include Fog::Volume::OpenStack::Real - end - - class Mock - def get_volume_details(_detailed = true) - response = Excon::Response.new - response.status = 200 - response.body = { - 'volume' => { - 'id' => '1', - 'name' => Fog::Mock.random_letters(rand(8) + 5), - 'description' => Fog::Mock.random_letters(rand(12) + 10), - 'size' => 3, - 'volume_type' => nil, - 'snapshot_id' => '4', - 'status' => 'online', - 'availability_zone' => 'nova', - 'created_at' => Time.now, - 'attachments' => [] - } - } - response - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/requests/get_volume_type_details.rb b/lib/fog/volume/openstack/v2/requests/get_volume_type_details.rb deleted file mode 100644 index 53f5ac17b..000000000 --- a/lib/fog/volume/openstack/v2/requests/get_volume_type_details.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/get_volume_type_details' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/list_backups.rb b/lib/fog/volume/openstack/v2/requests/list_backups.rb deleted file mode 100644 index a6fec7b77..000000000 --- a/lib/fog/volume/openstack/v2/requests/list_backups.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_backups' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/list_backups_detailed.rb b/lib/fog/volume/openstack/v2/requests/list_backups_detailed.rb deleted file mode 100644 index 37bbea076..000000000 --- a/lib/fog/volume/openstack/v2/requests/list_backups_detailed.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_backups_detailed' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/list_snapshots.rb b/lib/fog/volume/openstack/v2/requests/list_snapshots.rb deleted file mode 100644 index d089a8cb6..000000000 --- a/lib/fog/volume/openstack/v2/requests/list_snapshots.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_snapshots' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/list_snapshots_detailed.rb b/lib/fog/volume/openstack/v2/requests/list_snapshots_detailed.rb deleted file mode 100644 index 22c43a746..000000000 --- a/lib/fog/volume/openstack/v2/requests/list_snapshots_detailed.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_snapshots_detailed' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/list_transfers.rb b/lib/fog/volume/openstack/v2/requests/list_transfers.rb deleted file mode 100644 index 1b76af131..000000000 --- a/lib/fog/volume/openstack/v2/requests/list_transfers.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_transfers' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/list_transfers_detailed.rb b/lib/fog/volume/openstack/v2/requests/list_transfers_detailed.rb deleted file mode 100644 index 0ee3cbae8..000000000 --- a/lib/fog/volume/openstack/v2/requests/list_transfers_detailed.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_transfers_detailed' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/list_volume_types.rb b/lib/fog/volume/openstack/v2/requests/list_volume_types.rb deleted file mode 100644 index ebb0daee8..000000000 --- a/lib/fog/volume/openstack/v2/requests/list_volume_types.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_volume_types' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/list_volumes.rb b/lib/fog/volume/openstack/v2/requests/list_volumes.rb deleted file mode 100644 index 5abfbe213..000000000 --- a/lib/fog/volume/openstack/v2/requests/list_volumes.rb +++ /dev/null @@ -1,46 +0,0 @@ -require 'fog/volume/openstack/requests/list_volumes' - -module Fog - module Volume - class OpenStack - class V2 - class Real - include Fog::Volume::OpenStack::Real - end - - class Mock - def list_volumes(_options = true, _options_deprecated = {}) - response = Excon::Response.new - response.status = 200 - data[:volumes] ||= [ - { "status" => "available", - "description" => "test 1 desc", - "availability_zone" => "nova", - "name" => "Volume1", - "attachments" => [{}], - "volume_type" => nil, - "snapshot_id" => nil, - "size" => 1, - "id" => 1, - "created_at" => Time.now, - "metadata" => {} }, - { "status" => "available", - "description" => "test 2 desc", - "availability_zone" => "nova", - "name" => "Volume2", - "attachments" => [{}], - "volume_type" => nil, - "snapshot_id" => nil, - "size" => 1, - "id" => 2, - "created_at" => Time.now, - "metadata" => {} } - ] - response.body = { 'volumes' => data[:volumes] } - response - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/requests/list_volumes_detailed.rb b/lib/fog/volume/openstack/v2/requests/list_volumes_detailed.rb deleted file mode 100644 index 7f52504d5..000000000 --- a/lib/fog/volume/openstack/v2/requests/list_volumes_detailed.rb +++ /dev/null @@ -1,46 +0,0 @@ -require 'fog/volume/openstack/requests/list_volumes_detailed' - -module Fog - module Volume - class OpenStack - class V2 - class Real - include Fog::Volume::OpenStack::Real - end - - class Mock - def list_volumes_detailed(_options = {}) - response = Excon::Response.new - response.status = 200 - data[:volumes] ||= [ - { "status" => "available", - "description" => "test 1 desc", - "availability_zone" => "nova", - "name" => "Volume1", - "attachments" => [{}], - "volume_type" => nil, - "snapshot_id" => nil, - "size" => 1, - "id" => 1, - "created_at" => Time.now, - "metadata" => {} }, - { "status" => "available", - "description" => "test 2 desc", - "availability_zone" => "nova", - "name" => "Volume2", - "attachments" => [{}], - "volume_type" => nil, - "snapshot_id" => nil, - "size" => 1, - "id" => 2, - "created_at" => Time.now, - "metadata" => {} } - ] - response.body = { 'volumes' => data[:volumes] } - response - end - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/requests/list_zones.rb b/lib/fog/volume/openstack/v2/requests/list_zones.rb deleted file mode 100644 index c45a1040d..000000000 --- a/lib/fog/volume/openstack/v2/requests/list_zones.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/list_zones' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/real.rb b/lib/fog/volume/openstack/v2/requests/real.rb deleted file mode 100644 index 174b38887..000000000 --- a/lib/fog/volume/openstack/v2/requests/real.rb +++ /dev/null @@ -1,11 +0,0 @@ -module Fog - module Volume - class OpenStack - class V2 - class Real - include Fog::Volume::OpenStack::Real - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/requests/real_mock.rb b/lib/fog/volume/openstack/v2/requests/real_mock.rb deleted file mode 100644 index 3a0a6e53b..000000000 --- a/lib/fog/volume/openstack/v2/requests/real_mock.rb +++ /dev/null @@ -1,14 +0,0 @@ -module Fog - module Volume - class OpenStack - class V2 - class Real - include Fog::Volume::OpenStack::Real - end - class Mock - include Fog::Volume::OpenStack::Mock - end - end - end - end -end diff --git a/lib/fog/volume/openstack/v2/requests/replace_metadata.rb b/lib/fog/volume/openstack/v2/requests/replace_metadata.rb deleted file mode 100644 index 7ea4e7678..000000000 --- a/lib/fog/volume/openstack/v2/requests/replace_metadata.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/replace_metadata' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/restore_backup.rb b/lib/fog/volume/openstack/v2/requests/restore_backup.rb deleted file mode 100644 index 6268f26c1..000000000 --- a/lib/fog/volume/openstack/v2/requests/restore_backup.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/restore_backup' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/set_tenant.rb b/lib/fog/volume/openstack/v2/requests/set_tenant.rb deleted file mode 100644 index c1d386370..000000000 --- a/lib/fog/volume/openstack/v2/requests/set_tenant.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/set_tenant' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/snapshot_action.rb b/lib/fog/volume/openstack/v2/requests/snapshot_action.rb deleted file mode 100644 index 12940e411..000000000 --- a/lib/fog/volume/openstack/v2/requests/snapshot_action.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/snapshot_action' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/update_metadata.rb b/lib/fog/volume/openstack/v2/requests/update_metadata.rb deleted file mode 100644 index ab49b90d5..000000000 --- a/lib/fog/volume/openstack/v2/requests/update_metadata.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/update_metadata' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/update_quota.rb b/lib/fog/volume/openstack/v2/requests/update_quota.rb deleted file mode 100644 index ea7bdc107..000000000 --- a/lib/fog/volume/openstack/v2/requests/update_quota.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/update_quota' -require 'fog/volume/openstack/v1/requests/real_mock' diff --git a/lib/fog/volume/openstack/v2/requests/update_snapshot.rb b/lib/fog/volume/openstack/v2/requests/update_snapshot.rb deleted file mode 100644 index fcece5db5..000000000 --- a/lib/fog/volume/openstack/v2/requests/update_snapshot.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/update_snapshot' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/update_snapshot_metadata.rb b/lib/fog/volume/openstack/v2/requests/update_snapshot_metadata.rb deleted file mode 100644 index 87f5f9f7a..000000000 --- a/lib/fog/volume/openstack/v2/requests/update_snapshot_metadata.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/update_snapshot_metadata' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/update_volume.rb b/lib/fog/volume/openstack/v2/requests/update_volume.rb deleted file mode 100644 index 52f5d0902..000000000 --- a/lib/fog/volume/openstack/v2/requests/update_volume.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/update_volume' -require 'fog/volume/openstack/v2/requests/real' diff --git a/lib/fog/volume/openstack/v2/requests/update_volume_type.rb b/lib/fog/volume/openstack/v2/requests/update_volume_type.rb deleted file mode 100644 index 8006cf220..000000000 --- a/lib/fog/volume/openstack/v2/requests/update_volume_type.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'fog/volume/openstack/requests/update_volume_type' -require 'fog/volume/openstack/v2/requests/real_mock' diff --git a/lib/fog/workflow/openstack.rb b/lib/fog/workflow/openstack.rb deleted file mode 100644 index e57ae8d1b..000000000 --- a/lib/fog/workflow/openstack.rb +++ /dev/null @@ -1,14 +0,0 @@ -module Fog - module Workflow - class OpenStack < Fog::Service - autoload :V2, File.expand_path('openstack/v2', __dir__) - - # Fog::Workflow::OpenStack.new() will return a Fog::Workflow::OpenStack::V2 - # Will choose the latest available once Mistral V3 is released. - def self.new(args = {}) - @openstack_auth_uri = URI.parse(args[:openstack_auth_url]) if args[:openstack_auth_url] - Fog::Workflow::OpenStack::V2.new(args) - end - end - end -end diff --git a/lib/fog/workflow/openstack/v2.rb b/lib/fog/workflow/openstack/v2.rb deleted file mode 100644 index b655069c3..000000000 --- a/lib/fog/workflow/openstack/v2.rb +++ /dev/null @@ -1,160 +0,0 @@ -require 'fog/workflow/openstack' - -module Fog - module Workflow - class OpenStack - class V2 < Fog::Service - SUPPORTED_VERSIONS = /v2/ - - requires :openstack_auth_url - recognizes :openstack_username, :openstack_api_key, - :openstack_project_name, :openstack_domain_id - - ## REQUESTS - # - request_path 'fog/workflow/openstack/v2/requests' - - # Workflow requests - request :create_execution - request :get_execution - request :list_executions - request :update_execution - request :delete_execution - - request :create_action_execution - request :get_action_execution - request :list_action_executions - request :update_action_execution - request :delete_action_execution - - request :create_workbook - request :get_workbook - request :list_workbooks - request :update_workbook - request :validate_workbook - request :delete_workbook - - request :create_workflow - request :get_workflow - request :list_workflows - request :update_workflow - request :validate_workflow - request :delete_workflow - - request :create_action - request :get_action - request :list_actions - request :update_action - request :validate_action - request :delete_action - - request :get_task - request :list_tasks - request :rerun_task - - request :create_cron_trigger - request :get_cron_trigger - request :list_cron_triggers - request :delete_cron_trigger - - request :create_environment - request :get_environment - request :list_environments - request :update_environment - request :delete_environment - - request :list_services - - class Mock - def self.data - @data ||= Hash.new do |hash, key| - hash[key] = { - workflows: {} - } - end - end - - def self.reset - @data = nil - end - - include Fog::OpenStack::Core - - def initialize(options = {}) - @auth_token = Fog::Mock.random_base64(64) - @auth_token_expiration = (Time.now.utc + 86_400).iso8601 - - initialize_identity options - end - - def data - self.class.data[@openstack_username] - end - - def reset_data - self.class.data.delete(@openstack_username) - end - end - - class Real - include Fog::OpenStack::Core - - def initialize(options = {}) - initialize_identity options - - @openstack_service_type = options[:openstack_service_type] || ['workflowv2'] - @openstack_service_name = options[:openstack_service_name] - - @connection_options = options[:connection_options] || {} - - authenticate - - unless @path.match(SUPPORTED_VERSIONS) - @path = "/" + Fog::OpenStack.get_supported_version( - SUPPORTED_VERSIONS, - @openstack_management_uri, - @auth_token, - @connection_options - ) - end - - @persistent = options[:persistent] || false - @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) - end - - def request(params) - response = @connection.request( - params.merge( - headers: { - 'Content-Type' => 'application/json', - 'X-Auth-Token' => @auth_token - }.merge!(params[:headers] || {}), - path: "#{@path}/#{params[:path]}" - ) - ) - rescue Excon::Errors::Unauthorized => error - if error.response.body != "Bad username or password" # token expiration - @openstack_must_reauthenticate = true - authenticate - retry - else # bad credentials - raise error - end - rescue Excon::Errors::HTTPStatusError => error - raise case error - when Excon::Errors::NotFound - Fog::Workflow::OpenStack::NotFound.slurp(error) - else - error - end - else - unless response.body.empty? - response.body = Fog::JSON.decode(response.body) - end - response - end - end - end - end - end -end diff --git a/lib/fog/workflow/openstack/v2/requests/list_services.rb b/lib/fog/workflow/openstack/v2/requests/list_services.rb deleted file mode 100644 index e1a5ed09e..000000000 --- a/lib/fog/workflow/openstack/v2/requests/list_services.rb +++ /dev/null @@ -1,28 +0,0 @@ -module Fog - module Workflow - class OpenStack - class V2 - class Real - def list_services - request( - expects: 200, - method: "GET", - path: "services" - ) - end - end - - class Mock - def list_services - response = Excon::Response.new - response.status = 200 - response.body = { "services" => - [{ "name" => "service1", "description" => "d1" }, - { "name" => "service2", "description" => "d2" }] } - response - end - end - end - end - end -end diff --git a/playbooks/.gitkeep b/playbooks/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/playbooks/fog-openstack-unittest-spec/run.yaml b/playbooks/fog-openstack-unittest-spec/run.yaml new file mode 100644 index 000000000..f0ce89dbe --- /dev/null +++ b/playbooks/fog-openstack-unittest-spec/run.yaml @@ -0,0 +1,56 @@ +- hosts: all + become: yes + tasks: + - name: Run unittest spec tests + shell: + cmd: | + set -e + set -o pipefail + set -x + apt-get install ruby ruby-dev -y + for key in 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB; do + gpg --keyserver keys.gnupg.net --keyserver-options timeout=5 --recv-keys "$key" || \ + gpg --keyserver pgp.mit.edu --keyserver-options timeout=5 --recv-keys "$key" || \ + gpg --keyserver keyserver.pgp.com --keyserver-options timeout=5 --recv-keys "$key" || \ + gpg --keyserver ha.pool.sks-keyservers.net --keyserver-options timeout=5 --recv-keys "$key" + done + curl -L https://get.rvm.io | bash -s stable + source /usr/local/rvm/scripts/rvm > /dev/null 2>&1 + for version in {{ rvm }}; do + if [ "$version" == "jruby-head" ]; then + continue + fi + rvm install ${version} --disable-binary > /dev/null 2>&1 + rvm use ${version} > /dev/null 2>&1 + echo "Running tests based on Ruby ${version}..." + ruby --version + gem install bundler --version '~> 1' + bundle install --jobs=3 --retry=3 + bundle exec rake spec TESTOPTS="--verbose" + done + executable: /bin/bash + chdir: '{{ zuul.project.src_dir }}' + environment: + JRUBY_OPTS: '--debug' + ANSIBLE_PYTHON_INTERPRETER: /usr/bin/python3 + + - name: Run unittest spec tests for jruby-head + shell: + cmd: | + set -e + set -o pipefail + set -x + rvm install jruby-head --disable-binary + rvm use jruby-head + echo "Running tests based on Ruby jruby-head... + ruby --version + gem install bundler + gem update bundler + bundle install --jobs=3 --retry=3 + bundle exec rake spec TESTOPTS="--verbose" + executable: /bin/bash + chdir: '{{ zuul.project.src_dir }}' + environment: + JRUBY_OPTS: '--debug' + ANSIBLE_PYTHON_INTERPRETER: /usr/bin/python3 + ignore_errors: true diff --git a/playbooks/fog-openstack-unittest-test/run.yaml b/playbooks/fog-openstack-unittest-test/run.yaml new file mode 100644 index 000000000..5c3b2594a --- /dev/null +++ b/playbooks/fog-openstack-unittest-test/run.yaml @@ -0,0 +1,56 @@ +- hosts: all + become: yes + tasks: + - name: Run unittest tests + shell: + cmd: | + set -e + set -o pipefail + set -x + apt-get install ruby ruby-dev -y + for key in 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB; do + gpg --keyserver keys.gnupg.net --keyserver-options timeout=5 --recv-keys "$key" || \ + gpg --keyserver pgp.mit.edu --keyserver-options timeout=5 --recv-keys "$key" || \ + gpg --keyserver keyserver.pgp.com --keyserver-options timeout=5 --recv-keys "$key" || \ + gpg --keyserver ha.pool.sks-keyservers.net --keyserver-options timeout=5 --recv-keys "$key" + done + curl -L https://get.rvm.io | bash -s stable + source /usr/local/rvm/scripts/rvm > /dev/null 2>&1 + for version in {{ rvm }}; do + if [ "$version" == "jruby-head" ]; then + continue + fi + rvm install ${version} --disable-binary > /dev/null 2>&1 + rvm use ${version} > /dev/null 2>&1 + echo "Running tests based on Ruby ${version}..." + ruby --version + gem install bundler --version '~> 1' + bundle install --jobs=3 --retry=3 + bundle exec rake test TESTOPTS="--verbose" + done + executable: /bin/bash + chdir: '{{ zuul.project.src_dir }}' + environment: + JRUBY_OPTS: '--debug' + ANSIBLE_PYTHON_INTERPRETER: /usr/bin/python3 + + - name: Run unittest tests for jruby-head + shell: + cmd: | + set -e + set -o pipefail + set -x + rvm install jruby-head --disable-binary + rvm use jruby-head + echo "Running tests based on Ruby jruby-head... + ruby --version + gem install bundler + gem update bundler + bundle install --jobs=3 --retry=3 + bundle exec rake test TESTOPTS="--verbose" + executable: /bin/bash + chdir: '{{ zuul.project.src_dir }}' + environment: + JRUBY_OPTS: '--debug' + ANSIBLE_PYTHON_INTERPRETER: /usr/bin/python3 + ignore_errors: true diff --git a/spec/dns_v2_spec.rb b/spec/dns_v2_spec.rb index e6ddcaa6c..a466250fa 100644 --- a/spec/dns_v2_spec.rb +++ b/spec/dns_v2_spec.rb @@ -1,14 +1,14 @@ require 'spec_helper' require_relative './shared_context' -describe Fog::DNS::OpenStack::V2 do +describe Fog::OpenStack::DNS::V2 do spec_data_folder = 'spec/fixtures/openstack/dns_v2' before :all do openstack_vcr = OpenStackVCR.new( vcr_directory: spec_data_folder, project_scoped: true, - service_class: Fog::DNS::OpenStack # Fog to choose latest available version + service_class: Fog::OpenStack::DNS # Fog to choose latest available version ) @service = openstack_vcr.service end diff --git a/spec/fixtures/openstack/dns_v2/common_setup.yml b/spec/fixtures/openstack/dns_v2/common_setup.yml index 9640756f2..23350e70e 100644 --- a/spec/fixtures/openstack/dns_v2/common_setup.yml +++ b/spec/fixtures/openstack/dns_v2/common_setup.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"admin"}}},"scope":{"project":{"name":"admin","domain":{"name":"Default"}}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"name":"Default"},"password":"password"}}},"scope":{"project":{"name":"admin","domain":{"name":"Default"}}}}}' headers: User-Agent: - fog-core/1.40.0 @@ -101,11 +101,10 @@ http_interactions: "f92bf0dad1e941d09d9a08cb50362510"}, {"url": "http://devstack.openstack.stack:8774/v2/c60a441e54cd435896a357026aa4050a", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "id": "da09586d8bb44903a53efcebe67841d9"}], "type": "compute", "id": "45b131798dc240c4b5d75e024dffc5b5", "name": "nova"}, - {"endpoints": [{"url": "https://devstack.openstack.stack:5000/v3", "interface": + {"endpoints": [{"url": "https://devstack.openstack.stack:5000", "interface": "public", "region": "RegionOne", "region_id": "RegionOne", "id": "7859f84c67d740b294c9a607d03c2991"}, - {"url": "http://devstack.openstack.stack:5000/v3", - "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", "id": - "a2cff5bcad944eb4a10c06e6c05140eb"}, {"url": "devstack.openstack.stack:5000/v3", + {"url": "http://devstack.openstack.stack:5000", "interface": "internal", "region": "RegionOne", "region_id": "RegionOne", + "id": "a2cff5bcad944eb4a10c06e6c05140eb"}, {"url": "devstack.openstack.stack:5000", "interface": "admin", "region": "RegionOne", "region_id": "RegionOne", "id": "5973c23918b8460886140c5ed6a5411b"}], "type": "identity", "id": "70c56d9a4833404e823ba1195a0f1a63", "name": "keystone"}, {"endpoints": [{"url": "https://devstack.openstack.stack:8786/v1/c60a441e54cd435896a357026aa4050a", diff --git a/spec/fixtures/openstack/identity_v3/authv3_a.yml b/spec/fixtures/openstack/identity_v3/authv3_a.yml index 67662998d..4ec3933fb 100644 --- a/spec/fixtures/openstack/identity_v3/authv3_a.yml +++ b/spec/fixtures/openstack/identity_v3/authv3_a.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","id":"205e0e39a2534743b517ed0aa2fbcda7"}}},"scope":{"domain":{"id":"default"}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"id":"205e0e39a2534743b517ed0aa2fbcda7","password":"password"}}},"scope":{"domain":{"id":"default"}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -87,6 +87,6 @@ http_interactions: "swift"}], "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["ySKiB4frRTSad2LVXZzW4A"], "issued_at": "2016-05-03T13:51:40.683240Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:40 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/identity_v3/authv3_b.yml b/spec/fixtures/openstack/identity_v3/authv3_b.yml index c52f78ff6..3c09e6375 100644 --- a/spec/fixtures/openstack/identity_v3/authv3_b.yml +++ b/spec/fixtures/openstack/identity_v3/authv3_b.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"id":"default"},"name":"admin"}}},"scope":{"domain":{"id":"default"}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"id":"default"},"password":"password"}}},"scope":{"domain":{"id":"default"}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -87,6 +87,6 @@ http_interactions: "swift"}], "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["PrGGifm4T2Kb19ArNesIYg"], "issued_at": "2016-05-03T13:51:40.963563Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:41 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/identity_v3/authv3_c.yml b/spec/fixtures/openstack/identity_v3/authv3_c.yml index 9887e38f8..b7667376a 100644 --- a/spec/fixtures/openstack/identity_v3/authv3_c.yml +++ b/spec/fixtures/openstack/identity_v3/authv3_c.yml @@ -36,7 +36,7 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["o6QhbDFHSDOh82Q15z0OMQ"], "issued_at": "2016-05-03T13:51:41.228725Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:41 GMT - request: method: get @@ -86,8 +86,97 @@ http_interactions: "", "links": {"self": "http://devstack.openstack.stack:5000/v3/projects/f17a4813648d4b0bb82124ca1f5f1fd0"}, "enabled": true, "id": "f17a4813648d4b0bb82124ca1f5f1fd0", "parent_id": null, "domain_id": "default", "name": "admin"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:41 GMT +- request: + method: post + uri: http://devstack.openstack.stack:5000/v3/auth/tokens + body: + encoding: UTF-8 + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"id":"default"},"password":"password"}}}}}' + headers: + User-Agent: + - fog-core/1.38.0 + Content-Type: + - application/json + response: + status: + code: 201 + message: '' + headers: + Date: + - Tue, 03 May 2016 13:51:40 GMT + Server: + - Apache/2.4.7 (Ubuntu) + X-Subject-Token: + - 7f72291092a647578b115b853d129693 + Vary: + - X-Auth-Token + X-Openstack-Request-Id: + - req-7fffa2b1-97bb-4605-80ac-623452cb6ee7 + Content-Length: + - '4597' + Content-Type: + - application/json + body: + encoding: UTF-8 + string: '{"token": {"domain": {"id": "default", "name": "Default"}, "methods": + ["password"], "roles": [{"id": "5929fb4077c3415c9850e66f2c2be16b", "name": + "admin"}], "expires_at": "2016-05-03T14:51:40.395145Z", "catalog": [{"endpoints": + [], "type": "volumev2", "id": "1766683b2f9f4ef2acf7f9e4e359fb9a", "name": + "cinderv2"}, {"endpoints": [], "type": "metering", "id": "18dbb2f0ddeb45b99d11ed0568f153ab", + "name": "ceilometer"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://mo-edbdf14f1.mo.sap.corp:8777/", + "region": "RegionOne", "interface": "admin", "id": "6f44eb5bf4e646f9a7afebb1f32501f1"}, + {"region_id": "RegionOne", "url": "http://mo-edbdf14f1.mo.sap.corp:8777/", + "region": "RegionOne", "interface": "public", "id": "9bb4f1c83833484e9d53ce2b57d6308b"}, + {"region_id": "RegionOne", "url": "http://mo-edbdf14f1.mo.sap.corp:8777/", + "region": "RegionOne", "interface": "internal", "id": "e62f1c8709554031ace717700c431635"}], + "type": "metering", "id": "261a2c1f467c4b148f38822ae9f179a3", "name": "ceilometer"}, + {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:35357/v3", + "region": "RegionOne", "interface": "admin", "id": "634d57ce5d534c808afb24127b7ac355"}, + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000/v3", "region": + "RegionOne", "interface": "public", "id": "8a7a2620740c4c2fb6fabf15746c101f"}, + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000/v3", "region": + "RegionOne", "interface": "internal", "id": "b53b60875b214e7f925f96d3a2a57464"}], + "type": "identity", "id": "311850187e5a47108ac9b43ec5346658", "name": "keystone"}, + {"endpoints": [], "type": "compute", "id": "3fd114ff2cff43be8bd3ecc5bc117ec8", + "name": "nova"}, {"endpoints": [], "type": "volume", "id": "4a6033d57e30494a9577358d90d08123", + "name": "cinder"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8773/", + "region": "RegionOne", "interface": "internal", "id": "54546c7c383a4d6abc2b93c94d75e2f7"}, + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8773/", "region": "RegionOne", + "interface": "admin", "id": "b253dd3d3f7d43d8ab35ad97c68440c3"}, {"region_id": + "RegionOne", "url": "http://devstack.openstack.stack:8773/", "region": "RegionOne", "interface": + "public", "id": "e7287110f01248d49cef8447d0f8d2cb"}], "type": "ec2", "id": + "5eff43878c134ae7a5f405cf0d191aff", "name": "ec2"}, {"endpoints": [{"region_id": + "RegionOne", "url": "http://i056593.dev.mo.sap.corp:8080/v2.0", "region": + "RegionOne", "interface": "internal", "id": "11d18be7930947f696db531c9bbdf245"}, + {"region_id": "RegionOne", "url": "http://i056593.dev.mo.sap.corp:8080/v2.0", + "region": "RegionOne", "interface": "admin", "id": "a603e6ffd0804c4f82a8770d71dede64"}, + {"region_id": "RegionOne", "url": "http://i056593.dev.mo.sap.corp:8080/v2.0", + "region": "RegionOne", "interface": "public", "id": "cf084db111ad4818a4f94080e0ed7819"}], + "type": "monitoring", "id": "73e3bfb0b1b944f0ace3a078baad1fcc", "name": "Monitoring"}, + {"endpoints": [], "type": "compute_legacy", "id": "92e80becd6d8462b8f51fb227eb11999", + "name": "nova_legacy"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:9292", + "region": "RegionOne", "interface": "admin", "id": "acebdcb3418045b9a62ed295349327c3"}, + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:9292", "region": "RegionOne", + "interface": "public", "id": "b3b24c2c4ef44ff48049caff79149091"}, {"region_id": + "RegionOne", "url": "http://devstack.openstack.stack:9292", "region": "RegionOne", "interface": + "internal", "id": "b9d30173e66148baa3ab2dc2df33cb5e"}], "type": "image", "id": + "b936e5bfd38e4a3b97fcb8d08840881f", "name": "glance"}, {"endpoints": [{"region_id": + "RegionOne", "url": "http://devstack.openstack.stack:9696/", "region": "RegionOne", "interface": + "admin", "id": "1a6718d75cd94e24993a27d275442a17"}, {"region_id": "RegionOne", + "url": "http://devstack.openstack.stack:9696/", "region": "RegionOne", "interface": "public", + "id": "5cfedecf28a54bd38031380dd0c255b1"}, {"region_id": "RegionOne", "url": + "http://devstack.openstack.stack:9696/", "region": "RegionOne", "interface": "internal", + "id": "e1be91e12d5646a8830c32146a3ed1aa"}], "type": "network", "id": "c626cfc79ed34e3699c2d96c58d105cd", + "name": "neutron"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8090", + "region": "RegionOne", "interface": "admin", "id": "b91bd1a6c34b4973b3d48f94516358bc"}], + "type": "object-store", "id": "e6a92b95728740ea9bda0c348a89f0f1", "name": + "swift"}], "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, + "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["lLjqZsXsSj-Qs4FlZPGp7A"], + "issued_at": "2016-05-03T13:51:40.395192Z"}}' + http_version: + recorded_at: Tue, 03 May 2016 13:51:40 GMT - request: method: post uri: http://devstack.openstack.stack:5000/v3/auth/tokens @@ -204,6 +293,6 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["PsB1SYm9TTGlMQtekTJgTQ", "o6QhbDFHSDOh82Q15z0OMQ"], "issued_at": "2016-05-03T13:51:41.793474Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:41 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/identity_v3/authv3_project.yml b/spec/fixtures/openstack/identity_v3/authv3_project.yml index 66b5b6916..05671fc74 100644 --- a/spec/fixtures/openstack/identity_v3/authv3_project.yml +++ b/spec/fixtures/openstack/identity_v3/authv3_project.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"admin"}}},"scope":{"project":{"name":"admin","domain":{"name":"Default"}}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"name":"Default"},"password":"password"}}},"scope":{"project":{"name":"admin","domain":{"name":"Default"}}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -119,4 +119,4 @@ http_interactions: "issued_at": "2016-05-03T13:51:44.110379Z"}}' http_version: recorded_at: Tue, 03 May 2016 13:51:44 GMT -recorded_with: VCR 3.0.1 \ No newline at end of file +recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/identity_v3/authv3_token.yml b/spec/fixtures/openstack/identity_v3/authv3_token.yml index 05968d8d1..c3799602a 100644 --- a/spec/fixtures/openstack/identity_v3/authv3_token.yml +++ b/spec/fixtures/openstack/identity_v3/authv3_token.yml @@ -47,7 +47,7 @@ http_interactions: string: '{"user": {"name": "foobar_385", "links": {"self": "http://devstack.openstack.stack:35357/v3/users/304d38f9e15c4603b70326120db88a7d"}, "domain_id": "default", "enabled": true, "email": "foobar_demo@example.com", "id": "304d38f9e15c4603b70326120db88a7d"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:54 GMT - request: method: post @@ -96,7 +96,7 @@ http_interactions: string: '{"role": {"id": "d121bd07dec845f29915ae2956249e34", "links": {"self": "http://devstack.openstack.stack:35357/v3/roles/d121bd07dec845f29915ae2956249e34"}, "name": "foobar_role390"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:54 GMT - request: method: put @@ -141,14 +141,14 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:54 GMT - request: method: post uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"s3cret!","domain":{"id":"default"},"name":"foobar_385"}}},"scope":{"domain":{"id":"default"}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"foobar_385","domain":{"id":"default"},"password":"s3cret!"}}},"scope":{"domain":{"id":"default"}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -230,7 +230,7 @@ http_interactions: "swift"}], "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "304d38f9e15c4603b70326120db88a7d", "name": "foobar_385"}, "audit_ids": ["oQ8CEopyS3mQECayU-uUow"], "issued_at": "2016-05-03T13:51:54.629230Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:54 GMT - request: method: post @@ -268,7 +268,7 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "304d38f9e15c4603b70326120db88a7d", "name": "foobar_385"}, "audit_ids": ["4ALKzx4mQtW74Rmu30d2AQ", "oQ8CEopyS3mQECayU-uUow"], "issued_at": "2016-05-03T13:51:54.844344Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:55 GMT - request: method: get @@ -306,7 +306,7 @@ http_interactions: encoding: UTF-8 string: '{"links": {"self": "http://devstack.openstack.stack:5000/v3/users/304d38f9e15c4603b70326120db88a7d/projects", "previous": null, "next": null}, "projects": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:55 GMT - request: method: post @@ -395,7 +395,7 @@ http_interactions: "swift"}], "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "304d38f9e15c4603b70326120db88a7d", "name": "foobar_385"}, "audit_ids": ["jxnOeLmfQgKVzWBXzZcadg", "oQ8CEopyS3mQECayU-uUow"], "issued_at": "2016-05-03T13:51:55.299668Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:55 GMT - request: method: post @@ -429,7 +429,7 @@ http_interactions: encoding: UTF-8 string: '{"error": {"message": "Could not find token: blahblahblah", "code": 404, "title": "Not Found"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:55 GMT - request: method: delete @@ -474,7 +474,7 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:55 GMT - request: method: delete @@ -519,6 +519,6 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:56 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/identity_v3/authv3_unscoped.yml b/spec/fixtures/openstack/identity_v3/authv3_unscoped.yml index 91ef13766..f377ec9ef 100644 --- a/spec/fixtures/openstack/identity_v3/authv3_unscoped.yml +++ b/spec/fixtures/openstack/identity_v3/authv3_unscoped.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","id":"205e0e39a2534743b517ed0aa2fbcda7"}}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"id":"205e0e39a2534743b517ed0aa2fbcda7","password":"password"}}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -36,7 +36,7 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["cwY5czMmQkibEsb8A0lv0A"], "issued_at": "2016-05-03T13:51:44.372950Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:44 GMT - request: method: get @@ -86,14 +86,14 @@ http_interactions: "", "links": {"self": "http://devstack.openstack.stack:5000/v3/projects/f17a4813648d4b0bb82124ca1f5f1fd0"}, "enabled": true, "id": "f17a4813648d4b0bb82124ca1f5f1fd0", "parent_id": null, "domain_id": "default", "name": "admin"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:44 GMT - request: method: post uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["token"],"token":{"id":"3b6732fff35e40fe9049353b0e74b232"}},"scope":{"project":{"id":"2ab82e30d7984631874def67813dffd8"}}}}' + string: '{"auth":{"identity":{"methods":["token"],"token":{"id":"3b6732fff35e40fe9049353b0e74b232"}},"scope":{"project":{"name":"admin","domain":{"name":"Default"}}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -204,7 +204,7 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["ZsheSCPqQDS8SU8craebdw", "cwY5czMmQkibEsb8A0lv0A"], "issued_at": "2016-05-03T13:51:44.919243Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:45 GMT - request: method: post @@ -323,11 +323,11 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["YAOBOIILR5utqw2fWLIAyg", "cwY5czMmQkibEsb8A0lv0A"], "issued_at": "2016-05-03T13:51:45.320480Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:45 GMT - request: method: get - uri: http://devstack.openstack.stack:35357/v3/auth/tokens + uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: US-ASCII string: '' @@ -460,11 +460,11 @@ http_interactions: "name": "swift"}], "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["YAOBOIILR5utqw2fWLIAyg", "cwY5czMmQkibEsb8A0lv0A"], "issued_at": "2016-05-03T13:51:45.320480Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:45 GMT - request: method: head - uri: http://devstack.openstack.stack:35357/v3/auth/tokens + uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: US-ASCII string: '' @@ -511,11 +511,11 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:45 GMT - request: method: head - uri: http://devstack.openstack.stack:35357/v3/auth/tokens + uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: US-ASCII string: '' @@ -560,6 +560,6 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:46 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/identity_v3/authv3_unscoped_reauth.yml b/spec/fixtures/openstack/identity_v3/authv3_unscoped_reauth.yml index 9e6b1467f..42f13a2a5 100644 --- a/spec/fixtures/openstack/identity_v3/authv3_unscoped_reauth.yml +++ b/spec/fixtures/openstack/identity_v3/authv3_unscoped_reauth.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","id":"205e0e39a2534743b517ed0aa2fbcda7"}}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"id":"205e0e39a2534743b517ed0aa2fbcda7","password":"password"}}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -36,7 +36,7 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["YxQtGxUZTQ-RgN0xxM0GgA"], "issued_at": "2016-05-03T13:51:42.252030Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:42 GMT - request: method: get @@ -86,14 +86,14 @@ http_interactions: "", "links": {"self": "http://devstack.openstack.stack:5000/v3/projects/f17a4813648d4b0bb82124ca1f5f1fd0"}, "enabled": true, "id": "f17a4813648d4b0bb82124ca1f5f1fd0", "parent_id": null, "domain_id": "default", "name": "admin"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:42 GMT - request: method: post uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["token"],"token":{"id":"1c3698c7eea04d6a9034fb943580226f"}},"scope":{"project":{"id":"2ab82e30d7984631874def67813dffd8"}}}}' + string: '{"auth":{"identity":{"methods":["token"],"token":{"id":"1c3698c7eea04d6a9034fb943580226f"}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -204,7 +204,7 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["msgDgd78Rlez9VGQ_4-xDg", "YxQtGxUZTQ-RgN0xxM0GgA"], "issued_at": "2016-05-03T13:51:42.862185Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:43 GMT - request: method: post @@ -242,7 +242,7 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["KFI6dlbEQn6wKAqgLCxp0w", "YxQtGxUZTQ-RgN0xxM0GgA"], "issued_at": "2016-05-03T13:51:43.146591Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:43 GMT - request: method: get @@ -292,7 +292,7 @@ http_interactions: "", "links": {"self": "http://devstack.openstack.stack:5000/v3/projects/f17a4813648d4b0bb82124ca1f5f1fd0"}, "enabled": true, "id": "f17a4813648d4b0bb82124ca1f5f1fd0", "parent_id": null, "domain_id": "default", "name": "admin"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:43 GMT - request: method: post @@ -410,6 +410,6 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["ANs3zM_qTTeQEzoWbLh_kQ", "YxQtGxUZTQ-RgN0xxM0GgA"], "issued_at": "2016-05-03T13:51:43.763668Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:43 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/identity_v3/common_setup.yml b/spec/fixtures/openstack/identity_v3/common_setup.yml index 33668750a..50241d687 100644 --- a/spec/fixtures/openstack/identity_v3/common_setup.yml +++ b/spec/fixtures/openstack/identity_v3/common_setup.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"admin"}}},"scope":{"domain":{"name":"Default"}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"name":"Default"},"password":"password"}}},"scope":{"domain":{"name":"Default"}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -44,11 +44,11 @@ http_interactions: {"region_id": "RegionOne", "url": "http://mo-edbdf14f1.mo.sap.corp:8777/", "region": "RegionOne", "interface": "internal", "id": "e62f1c8709554031ace717700c431635"}], "type": "metering", "id": "261a2c1f467c4b148f38822ae9f179a3", "name": "ceilometer"}, - {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:35357/v3", + {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:35357", "region": "RegionOne", "interface": "admin", "id": "634d57ce5d534c808afb24127b7ac355"}, - {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000/v3", "region": + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000", "region": "RegionOne", "interface": "public", "id": "8a7a2620740c4c2fb6fabf15746c101f"}, - {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000/v3", "region": + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000", "region": "RegionOne", "interface": "internal", "id": "b53b60875b214e7f925f96d3a2a57464"}], "type": "identity", "id": "311850187e5a47108ac9b43ec5346658", "name": "keystone"}, {"endpoints": [], "type": "compute", "id": "3fd114ff2cff43be8bd3ecc5bc117ec8", @@ -87,6 +87,6 @@ http_interactions: "swift"}], "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["lLjqZsXsSj-Qs4FlZPGp7A"], "issued_at": "2016-05-03T13:51:40.395192Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 13:51:40 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/image_v1/common_setup.yml b/spec/fixtures/openstack/image_v1/common_setup.yml index 928cb68ed..090ce6bd7 100644 --- a/spec/fixtures/openstack/image_v1/common_setup.yml +++ b/spec/fixtures/openstack/image_v1/common_setup.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"admin"}}},"scope":{"domain":{"name":"Default"}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"name":"Default"},"password":"password"}}},"scope":{"domain":{"name":"Default"}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -73,7 +73,7 @@ http_interactions: {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:9292", "region": "RegionOne", "interface": "public", "id": "b3b24c2c4ef44ff48049caff79149091"}, {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:9292", "region": "RegionOne", "interface": - "internal", "id": "b9d30173e66148baa3ab2dc2df33cb5e"}], "type": "image", "id": + "internal", "id": "b9d30173e66148baa3ab2dc2df33cb5e"}], "type": "imagev1", "id": "b936e5bfd38e4a3b97fcb8d08840881f", "name": "glance"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:9696/", "region": "RegionOne", "interface": "admin", "id": "1a6718d75cd94e24993a27d275442a17"}, {"region_id": "RegionOne", @@ -87,7 +87,7 @@ http_interactions: "swift"}], "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["Nvg8MsIeQjWU68Vg_3U_JA"], "issued_at": "2016-05-03T14:00:03.863306Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:00:04 GMT - request: method: get @@ -136,6 +136,6 @@ http_interactions: "id": "v1.1", "links": [{"href": "http://devstack.openstack.stack:9292/v1/", "rel": "self"}]}, {"status": "SUPPORTED", "id": "v1.0", "links": [{"href": "http://devstack.openstack.stack:9292/v1/", "rel": "self"}]}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:00:04 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/image_v2/common_setup.yml b/spec/fixtures/openstack/image_v2/common_setup.yml index a4b347b19..f230b1952 100644 --- a/spec/fixtures/openstack/image_v2/common_setup.yml +++ b/spec/fixtures/openstack/image_v2/common_setup.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"admin"}}},"scope":{"domain":{"name":"Default"}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"name":"Default"},"password":"password"}}},"scope":{"domain":{"name":"Default"}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -72,7 +72,7 @@ http_interactions: "name": "nova"}], "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "b5c55585b3fb43868ffe84ef2e197b3a", "name": "admin"}, "audit_ids": ["-a5pa574Ry27YoJJHhWdeA"], "issued_at": "2016-05-03T14:00:45.703534Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:00:45 GMT - request: method: get @@ -115,6 +115,6 @@ http_interactions: "id": "v1.1", "links": [{"href": "http://devstack.openstack.stack:9292/v1/", "rel": "self"}]}, {"status": "SUPPORTED", "id": "v1.0", "links": [{"href": "http://devstack.openstack.stack:9292/v1/", "rel": "self"}]}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:00:46 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/image_v2/image_v2_reload.yml b/spec/fixtures/openstack/image_v2/image_v2_reload.yml index 3acb967cd..d2ddef066 100644 --- a/spec/fixtures/openstack/image_v2/image_v2_reload.yml +++ b/spec/fixtures/openstack/image_v2/image_v2_reload.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:9292/v2/images body: encoding: UTF-8 - string: '{"name":"reloaded_image","reloadable_property":"original"}' + string: '{"name":"reloaded_image_original"}' headers: User-Agent: - fog-core/1.42.0 @@ -34,13 +34,13 @@ http_interactions: - close body: encoding: UTF-8 - string: '{"status": "queued", "name": "reloaded_image", "tags": [], "container_format": + string: '{"status": "queued", "name": "reloaded_image_original", "tags": [], "container_format": null, "created_at": "2016-08-25T17:09:06Z", "size": null, "disk_format": null, "locations": [], "visibility": "private", "updated_at": "2016-08-25T17:09:06Z", "self": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "owner": "7b7688e5eecd4d6aa5b5b2cb3e93a778", "protected": false, "min_ram": 0, "file": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886/file", "checksum": null, "id": "bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "min_disk": - 0, "virtual_size": null, "reloadable_property": "original", "schema": "/v2/schemas/image"}' + 0, "virtual_size": null, "schema": "/v2/schemas/image"}' http_version: recorded_at: Thu, 25 Aug 2016 17:09:06 GMT - request: @@ -75,13 +75,13 @@ http_interactions: - close body: encoding: UTF-8 - string: '{"status": "queued", "name": "reloaded_image", "tags": [], "container_format": + string: '{"status": "queued", "name": "reloaded_image_original", "tags": [], "container_format": null, "created_at": "2016-08-25T17:09:06Z", "size": null, "disk_format": null, "locations": [], "visibility": "private", "updated_at": "2016-08-25T17:09:06Z", "self": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "owner": "7b7688e5eecd4d6aa5b5b2cb3e93a778", "protected": false, "min_ram": 0, "file": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886/file", "checksum": null, "id": "bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "min_disk": - 0, "virtual_size": null, "reloadable_property": "original", "schema": "/v2/schemas/image"}' + 0, "virtual_size": null, "schema": "/v2/schemas/image"}' http_version: recorded_at: Thu, 25 Aug 2016 17:09:06 GMT - request: @@ -116,13 +116,13 @@ http_interactions: - close body: encoding: UTF-8 - string: '{"status": "queued", "name": "reloaded_image", "tags": [], "container_format": + string: '{"status": "queued", "name": "reloaded_image_original", "tags": [], "container_format": null, "created_at": "2016-08-25T17:09:06Z", "size": null, "disk_format": null, "locations": [], "visibility": "private", "updated_at": "2016-08-25T17:09:06Z", "self": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "owner": "7b7688e5eecd4d6aa5b5b2cb3e93a778", "protected": false, "min_ram": 0, "file": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886/file", "checksum": null, "id": "bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "min_disk": - 0, "virtual_size": null, "reloadable_property": "original", "schema": "/v2/schemas/image"}' + 0, "virtual_size": null, "schema": "/v2/schemas/image"}' http_version: recorded_at: Thu, 25 Aug 2016 17:09:06 GMT - request: @@ -130,7 +130,7 @@ http_interactions: uri: http://devstack.openstack.stack:9292/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886 body: encoding: UTF-8 - string: '[{"op":"replace","path":"/reloadable_property","value":"updated"}]' + string: '[{"op":"replace","path":"/name","value":"reloaded_image_updated"}]' headers: User-Agent: - fog-core/1.42.0 @@ -157,13 +157,13 @@ http_interactions: - close body: encoding: UTF-8 - string: '{"status": "queued", "name": "reloaded_image", "tags": [], "container_format": + string: '{"status": "queued", "name": "reloaded_image_updated", "tags": [], "container_format": null, "created_at": "2016-08-25T17:09:06Z", "size": null, "disk_format": null, "locations": [], "visibility": "private", "updated_at": "2016-08-25T17:09:07Z", "self": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "owner": "7b7688e5eecd4d6aa5b5b2cb3e93a778", "protected": false, "min_ram": 0, "file": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886/file", "checksum": null, "id": "bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "min_disk": - 0, "virtual_size": null, "reloadable_property": "updated", "schema": "/v2/schemas/image"}' + 0, "virtual_size": null, "schema": "/v2/schemas/image"}' http_version: recorded_at: Thu, 25 Aug 2016 17:09:07 GMT - request: @@ -198,13 +198,13 @@ http_interactions: - close body: encoding: UTF-8 - string: '{"status": "queued", "name": "reloaded_image", "tags": [], "container_format": + string: '{"status": "queued", "name": "reloaded_image_updated", "tags": [], "container_format": null, "created_at": "2016-08-25T17:09:06Z", "size": null, "disk_format": null, "locations": [], "visibility": "private", "updated_at": "2016-08-25T17:09:07Z", "self": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "owner": "7b7688e5eecd4d6aa5b5b2cb3e93a778", "protected": false, "min_ram": 0, "file": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886/file", "checksum": null, "id": "bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "min_disk": - 0, "virtual_size": null, "reloadable_property": "updated", "schema": "/v2/schemas/image"}' + 0, "virtual_size": null, "schema": "/v2/schemas/image"}' http_version: recorded_at: Thu, 25 Aug 2016 17:09:07 GMT - request: @@ -239,13 +239,13 @@ http_interactions: - close body: encoding: UTF-8 - string: '{"status": "queued", "name": "reloaded_image", "tags": [], "container_format": + string: '{"status": "queued", "name": "reloaded_image_updated", "tags": [], "container_format": null, "created_at": "2016-08-25T17:09:06Z", "size": null, "disk_format": null, "locations": [], "visibility": "private", "updated_at": "2016-08-25T17:09:07Z", "self": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "owner": "7b7688e5eecd4d6aa5b5b2cb3e93a778", "protected": false, "min_ram": 0, "file": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886/file", "checksum": null, "id": "bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "min_disk": - 0, "virtual_size": null, "reloadable_property": "updated", "schema": "/v2/schemas/image"}' + 0, "virtual_size": null, "schema": "/v2/schemas/image"}' http_version: recorded_at: Thu, 25 Aug 2016 17:09:07 GMT - request: @@ -253,7 +253,7 @@ http_interactions: uri: http://devstack.openstack.stack:9292/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886 body: encoding: UTF-8 - string: '[{"op":"replace","path":"/reloadable_property","value":"updated_again"}]' + string: '[{"op":"replace","path":"/name","value":"reloaded_image_updated_again"}]' headers: User-Agent: - fog-core/1.42.0 @@ -280,13 +280,13 @@ http_interactions: - close body: encoding: UTF-8 - string: '{"status": "queued", "name": "reloaded_image", "tags": [], "container_format": + string: '{"status": "queued", "name": "reloaded_image_updated_again", "tags": [], "container_format": null, "created_at": "2016-08-25T17:09:06Z", "size": null, "disk_format": null, "locations": [], "visibility": "private", "updated_at": "2016-08-25T17:09:08Z", "self": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "owner": "7b7688e5eecd4d6aa5b5b2cb3e93a778", "protected": false, "min_ram": 0, "file": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886/file", "checksum": null, "id": "bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "min_disk": - 0, "virtual_size": null, "reloadable_property": "updated_again", "schema": + 0, "virtual_size": null, "schema": "/v2/schemas/image"}' http_version: recorded_at: Thu, 25 Aug 2016 17:09:08 GMT @@ -322,13 +322,13 @@ http_interactions: - close body: encoding: UTF-8 - string: '{"status": "queued", "name": "reloaded_image", "tags": [], "container_format": + string: '{"status": "queued", "name": "reloaded_image_updated_again", "tags": [], "container_format": null, "created_at": "2016-08-25T17:09:06Z", "size": null, "disk_format": null, "locations": [], "visibility": "private", "updated_at": "2016-08-25T17:09:08Z", "self": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "owner": "7b7688e5eecd4d6aa5b5b2cb3e93a778", "protected": false, "min_ram": 0, "file": "/v2/images/bc3cfc5a-0c88-47b6-82c2-c6957c30d886/file", "checksum": null, "id": "bc3cfc5a-0c88-47b6-82c2-c6957c30d886", "min_disk": - 0, "virtual_size": null, "reloadable_property": "updated_again", "schema": + 0, "virtual_size": null, "schema": "/v2/schemas/image"}' http_version: recorded_at: Thu, 25 Aug 2016 17:09:08 GMT diff --git a/spec/fixtures/openstack/monitoring/common_setup.yml b/spec/fixtures/openstack/monitoring/common_setup.yml index d8ec175c3..fe222d19c 100644 --- a/spec/fixtures/openstack/monitoring/common_setup.yml +++ b/spec/fixtures/openstack/monitoring/common_setup.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"admin"}}},"scope":{"domain":{"name":"Default"}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"name":"Default"},"password":"password"}}},"scope":{"domain":{"name":"Default"}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -243,5 +243,5 @@ http_interactions: "issued_at": "2016-05-03T14:00:45.703534Z" } }' - http_version: + http_version: recorded_at: Fri, 20 May 2016 15:16:07 GMT diff --git a/spec/fixtures/openstack/network/common_setup.yml b/spec/fixtures/openstack/network/common_setup.yml index 8ad34995e..3ee0a5417 100644 --- a/spec/fixtures/openstack/network/common_setup.yml +++ b/spec/fixtures/openstack/network/common_setup.yml @@ -37,7 +37,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"admin"}}},"scope":{"domain":{"name":"Default"}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"name":"Default"},"password":"password"}}},"scope":{"domain":{"name":"Default"}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -82,11 +82,11 @@ http_interactions: "3383f3f70d5844fa929196ac42f740ee", "name": "neutron"}, {"endpoints": [], "type": "compute_legacy", "id": "43fc06691cf3403e9f52306dc155c44b", "name": "nova_legacy"}, {"endpoints": [], "type": "compute", "id": "82a87e6c324c41228b2387d701b56572", - "name": "nova"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000/v3", + "name": "nova"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000", "region": "RegionOne", "interface": "internal", "id": "2f46da49aa854fec81889bb74f53782a"}, - {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:35357/v3", "region": + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:35357", "region": "RegionOne", "interface": "admin", "id": "6c2384bcf3fb4460811caf75f06aacb9"}, - {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000/v3", "region": + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000", "region": "RegionOne", "interface": "public", "id": "e31e8a4680b047a6adc7eaeec5b2c2c8"}], "type": "identity", "id": "d30ec3e1840b4e5abbc91d29341ba4cd", "name": "keystone"}, {"endpoints": [], "type": "volumev2", "id": "dd17c542cd954c4da3563375c61b6ab5", @@ -101,7 +101,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"admin"}}},"scope":{"project":{"name":"admin","domain":{"name":"Default"}}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"name":"Default"},"password":"password"}}},"scope":{"project":{"name":"admin","domain":{"name":"Default"}}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -158,11 +158,11 @@ http_interactions: {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8774/v2.1/dc4b3b173ee8467e9e2ae99e5c321d0c", "region": "RegionOne", "interface": "public", "id": "fa1f5b65b32c4fb38cca2ce9e1fe09e3"}], "type": "compute", "id": "82a87e6c324c41228b2387d701b56572", "name": "nova"}, - {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000/v3", + {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000", "region": "RegionOne", "interface": "internal", "id": "2f46da49aa854fec81889bb74f53782a"}, - {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:35357/v3", "region": + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:35357", "region": "RegionOne", "interface": "admin", "id": "6c2384bcf3fb4460811caf75f06aacb9"}, - {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000/v3", "region": + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000", "region": "RegionOne", "interface": "public", "id": "e31e8a4680b047a6adc7eaeec5b2c2c8"}], "type": "identity", "id": "d30ec3e1840b4e5abbc91d29341ba4cd", "name": "keystone"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v2/dc4b3b173ee8467e9e2ae99e5c321d0c", @@ -247,11 +247,11 @@ http_interactions: {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8774/v2.1/dc4b3b173ee8467e9e2ae99e5c321d0c", "region": "RegionOne", "interface": "public", "id": "fa1f5b65b32c4fb38cca2ce9e1fe09e3"}], "type": "compute", "id": "82a87e6c324c41228b2387d701b56572", "name": "nova"}, - {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000/v3", + {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000", "region": "RegionOne", "interface": "internal", "id": "2f46da49aa854fec81889bb74f53782a"}, - {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:35357/v3", "region": + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:35357", "region": "RegionOne", "interface": "admin", "id": "6c2384bcf3fb4460811caf75f06aacb9"}, - {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000/v3", "region": + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:5000", "region": "RegionOne", "interface": "public", "id": "e31e8a4680b047a6adc7eaeec5b2c2c8"}], "type": "identity", "id": "d30ec3e1840b4e5abbc91d29341ba4cd", "name": "keystone"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v2/dc4b3b173ee8467e9e2ae99e5c321d0c", diff --git a/spec/fixtures/openstack/network/token_expiration.yml b/spec/fixtures/openstack/network/token_expiration.yml index 5da6cc637..c8a8cd5b2 100644 --- a/spec/fixtures/openstack/network/token_expiration.yml +++ b/spec/fixtures/openstack/network/token_expiration.yml @@ -221,7 +221,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"admin"}}},"scope":{"project":{"name":"admin","domain":{"name":"Default"}}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"name":"Default"},"password":"password"}}},"scope":{"project":{"name":"admin","domain":{"name":"Default"}}}}}' headers: User-Agent: - fog-core/1.40.0 diff --git a/spec/fixtures/openstack/shared_file_system/common_setup.yml b/spec/fixtures/openstack/shared_file_system/common_setup.yml index 2036009d2..f47337dec 100644 --- a/spec/fixtures/openstack/shared_file_system/common_setup.yml +++ b/spec/fixtures/openstack/shared_file_system/common_setup.yml @@ -51,7 +51,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"admin"}}},"scope":{"project":{"name":"admin","domain":{"name":"Default"}}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"name":"Default"},"password":"password"}}},"scope":{"project":{"name":"admin","domain":{"name":"Default"}}}}}' headers: User-Agent: - fog-core/1.40.0 diff --git a/spec/fixtures/openstack/volume/common_setup.yml b/spec/fixtures/openstack/volume/common_setup.yml index 913f86e49..4cbd8f798 100644 --- a/spec/fixtures/openstack/volume/common_setup.yml +++ b/spec/fixtures/openstack/volume/common_setup.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"admin"}}},"scope":{"domain":{"name":"Default"}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"name":"Default"},"password":"password"}}},"scope":{"domain":{"name":"Default"}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -35,8 +35,14 @@ http_interactions: string: '{"token": {"domain": {"id": "default", "name": "Default"}, "methods": ["password"], "roles": [{"id": "5929fb4077c3415c9850e66f2c2be16b", "name": "admin"}], "expires_at": "2016-05-03T15:15:26.798576Z", "catalog": [{"endpoints": - [], "type": "volumev2", "id": "1766683b2f9f4ef2acf7f9e4e359fb9a", "name": - "cinderv2"}, {"endpoints": [], "type": "metering", "id": "18dbb2f0ddeb45b99d11ed0568f153ab", + [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8", + "region": "RegionOne", "interface": "public", "id": "0e40a16fd8ad4045ae738b749818818e"}, + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8", + "region": "RegionOne", "interface": "internal", "id": "1ebe166449b34147ac4df07e492571d9"}, + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8", + "region": "RegionOne", "interface": "admin", "id": "b2ae2902e8104f05b5fd2def27a4537a"}], + "type": "volumev2", "id": "1766683b2f9f4ef2acf7f9e4e359fb9a", "name": "cinderv2"}, + {"endpoints": [], "type": "metering", "id": "18dbb2f0ddeb45b99d11ed0568f153ab", "name": "ceilometer"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://mo-edbdf14f1.mo.sap.corp:8777/", "region": "RegionOne", "interface": "admin", "id": "6f44eb5bf4e646f9a7afebb1f32501f1"}, {"region_id": "RegionOne", "url": "http://mo-edbdf14f1.mo.sap.corp:8777/", @@ -52,8 +58,14 @@ http_interactions: "RegionOne", "interface": "internal", "id": "b53b60875b214e7f925f96d3a2a57464"}], "type": "identity", "id": "311850187e5a47108ac9b43ec5346658", "name": "keystone"}, {"endpoints": [], "type": "compute", "id": "3fd114ff2cff43be8bd3ecc5bc117ec8", - "name": "nova"}, {"endpoints": [], "type": "volume", "id": "4a6033d57e30494a9577358d90d08123", - "name": "cinder"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8773/", + "name": "nova"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v1/2ab82e30d7984631874def67813dffd8", + "region": "RegionOne", "interface": "internal", "id": "bb95738666b94144802d02b313a3520d"}, + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v1/2ab82e30d7984631874def67813dffd8", + "region": "RegionOne", "interface": "admin", "id": "d7f48b18a887467ca02c943704dcbd91"}, + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v1/2ab82e30d7984631874def67813dffd8", + "region": "RegionOne", "interface": "public", "id": "e81eef3261494c4299a972a8c7bf669e"}], + "type": "volume", "id": "4a6033d57e30494a9577358d90d08123", "name": "cinder"}, + {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8773/", "region": "RegionOne", "interface": "internal", "id": "54546c7c383a4d6abc2b93c94d75e2f7"}, {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8773/", "region": "RegionOne", "interface": "admin", "id": "b253dd3d3f7d43d8ab35ad97c68440c3"}, {"region_id": @@ -87,7 +99,7 @@ http_interactions: "swift"}], "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["Q83qG8BnQoqBQOASiAEeOg"], "issued_at": "2016-05-03T14:15:26.798646Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:26 GMT - request: method: get @@ -137,7 +149,7 @@ http_interactions: "", "links": {"self": "http://devstack.openstack.stack:5000/v3/projects/f17a4813648d4b0bb82124ca1f5f1fd0"}, "enabled": true, "id": "f17a4813648d4b0bb82124ca1f5f1fd0", "parent_id": null, "domain_id": "default", "name": "admin"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:27 GMT - request: method: post @@ -255,6 +267,6 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["Jfdc6MavRUqhPNKeduIlIQ", "Q83qG8BnQoqBQOASiAEeOg"], "issued_at": "2016-05-03T14:15:27.329140Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:27 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/volume/volume_crud.yml b/spec/fixtures/openstack/volume/volume_crud.yml index 2f6131e31..5c70feb98 100644 --- a/spec/fixtures/openstack/volume/volume_crud.yml +++ b/spec/fixtures/openstack/volume/volume_crud.yml @@ -43,7 +43,7 @@ http_interactions: body: encoding: UTF-8 string: '{"volumes": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:27 GMT - request: method: post @@ -98,7 +98,7 @@ http_interactions: "replication_status": "disabled", "consistencygroup_id": null, "source_volid": null, "snapshot_id": null, "multiattach": false, "metadata": {}, "id": "97b01b22-1239-4295-84bc-8ba77cb203d6", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:28 GMT - request: method: get @@ -155,7 +155,7 @@ http_interactions: null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:27.000000", "volume_type": "lvmdriver-1"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:28 GMT - request: method: get @@ -212,7 +212,7 @@ http_interactions: null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:27.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:28 GMT - request: method: get @@ -269,7 +269,7 @@ http_interactions: null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:27.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:29 GMT - request: method: get @@ -326,7 +326,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:27.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:30 GMT - request: method: get @@ -383,7 +383,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:27.000000", "volume_type": "lvmdriver-1"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:30 GMT - request: method: put @@ -437,7 +437,7 @@ http_interactions: "replication_status": "disabled", "consistencygroup_id": null, "source_volid": null, "snapshot_id": null, "multiattach": false, "metadata": {}, "id": "97b01b22-1239-4295-84bc-8ba77cb203d6", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:31 GMT - request: method: get @@ -494,15 +494,14 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-updated-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:27.000000", "volume_type": "lvmdriver-1"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:31 GMT - request: method: put uri: http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8/volumes/97b01b22-1239-4295-84bc-8ba77cb203d6 body: encoding: UTF-8 - string: '{"volume":{"migration_status":null,"attachments":[],"links":[{"href":"http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8/volumes/97b01b22-1239-4295-84bc-8ba77cb203d6","rel":"self"},{"href":"http://devstack.openstack.stack:8776/2ab82e30d7984631874def67813dffd8/volumes/97b01b22-1239-4295-84bc-8ba77cb203d6","rel":"bookmark"}],"availability_zone":"nova","os-vol-host-attr:host":"mo-0e4c34476@lvmdriver-1#lvmdriver-1","encrypted":false,"os-volume-replication:extended_status":null,"replication_status":"disabled","snapshot_id":null,"size":1,"user_id":"205e0e39a2534743b517ed0aa2fbcda7","tenant_id":"2ab82e30d7984631874def67813dffd8","os-vol-mig-status-attr:migstat":null,"metadata":{},"status":"available","description":"This - is the updated volume description.","multiattach":false,"os-volume-replication:driver_data":null,"source_volid":null,"consistencygroup_id":null,"os-vol-mig-status-attr:name_id":null,"name":"fog-updated-testvolume-1","bootable":"false","created_at":"2016-05-03T14:15:27.000000","volume_type":"lvmdriver-1"}}' + string: '{"volume":{"metadata":{},"description":"This is the updated volume description.","name":"fog-updated-testvolume-1"}}' headers: User-Agent: - fog-core/1.38.0 @@ -549,7 +548,7 @@ http_interactions: "replication_status": "disabled", "consistencygroup_id": null, "source_volid": null, "snapshot_id": null, "multiattach": false, "metadata": {}, "id": "97b01b22-1239-4295-84bc-8ba77cb203d6", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:31 GMT - request: method: get @@ -606,7 +605,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-updated-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:27.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:32 GMT - request: method: get @@ -663,7 +662,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-updated-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:27.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:32 GMT - request: method: get @@ -720,7 +719,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-updated-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:27.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:33 GMT - request: method: delete @@ -763,7 +762,7 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:33 GMT - request: method: get @@ -820,7 +819,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-updated-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:27.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:33 GMT - request: method: get @@ -877,7 +876,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-updated-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:27.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:35 GMT - request: method: get @@ -934,7 +933,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-updated-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:27.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:37 GMT - request: method: get @@ -980,6 +979,6 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Volume 97b01b22-1239-4295-84bc-8ba77cb203d6 could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:41 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/volume/volume_transfer_and_accept.yml b/spec/fixtures/openstack/volume/volume_transfer_and_accept.yml index 0b1661bad..7767d9065 100644 --- a/spec/fixtures/openstack/volume/volume_transfer_and_accept.yml +++ b/spec/fixtures/openstack/volume/volume_transfer_and_accept.yml @@ -43,7 +43,7 @@ http_interactions: body: encoding: UTF-8 string: '{"volumes": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:56 GMT - request: method: post @@ -97,7 +97,7 @@ http_interactions: "consistencygroup_id": null, "source_volid": null, "snapshot_id": null, "multiattach": false, "metadata": {}, "id": "cbd02b79-0df4-4a30-9bd6-aa3eaa1baf10", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:57 GMT - request: method: get @@ -154,7 +154,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:56.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:57 GMT - request: method: get @@ -211,7 +211,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:56.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:58 GMT - request: method: get @@ -256,7 +256,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:58 GMT - request: method: post @@ -305,7 +305,7 @@ http_interactions: "rel": "bookmark"}], "created_at": "2016-05-03T14:15:59.154375", "volume_id": "cbd02b79-0df4-4a30-9bd6-aa3eaa1baf10", "id": "a21de056-6aa6-4848-94ee-8756ad2d7502", "name": "fog-testtransfer-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:59 GMT - request: method: get @@ -354,7 +354,7 @@ http_interactions: "links": [{"href": "http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8/os-volume-transfer/a21de056-6aa6-4848-94ee-8756ad2d7502", "rel": "self"}, {"href": "http://devstack.openstack.stack:8776/2ab82e30d7984631874def67813dffd8/os-volume-transfer/a21de056-6aa6-4848-94ee-8756ad2d7502", "rel": "bookmark"}], "name": "fog-testtransfer-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:59 GMT - request: method: get @@ -403,14 +403,14 @@ http_interactions: "links": [{"href": "http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8/os-volume-transfer/a21de056-6aa6-4848-94ee-8756ad2d7502", "rel": "self"}, {"href": "http://devstack.openstack.stack:8776/2ab82e30d7984631874def67813dffd8/os-volume-transfer/a21de056-6aa6-4848-94ee-8756ad2d7502", "rel": "bookmark"}], "name": "fog-testtransfer-1"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:59 GMT - request: method: post uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"demo"}}},"scope":{"project":{"name":"demo","domain":{"name":"Default"}}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"demo","domain":{"name":"Default"},"password":"password"}}},"scope":{"project":{"name":"demo","domain":{"name":"Default"}}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -521,7 +521,7 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "d66fbe28f45a405a87fd32bb30f7c42e", "name": "demo"}, "audit_ids": ["w0zAjAb7SdS8JqbsoPq1IQ"], "issued_at": "2016-05-03T14:15:59.714509Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:15:59 GMT - request: method: get @@ -567,7 +567,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Transfer a21de056-6aa6-4848-94ee-8756ad2d7502 could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:00 GMT - request: method: get @@ -612,7 +612,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:00 GMT - request: method: post @@ -658,7 +658,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "TransferNotFound: Transfer ec8ff7e8-81e2-4e12-b9fb-3e8890612c2d could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:00 GMT - request: method: post @@ -704,7 +704,7 @@ http_interactions: encoding: UTF-8 string: '{"badRequest": {"message": "Invalid auth key: Attempt to transfer a21de056-6aa6-4848-94ee-8756ad2d7502 with invalid auth key.", "code": 400}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:00 GMT - request: method: post @@ -752,7 +752,7 @@ http_interactions: "rel": "self"}, {"href": "http://devstack.openstack.stack:8776/a5db6ff5a6274dd589b6a05945d7f34d/os-volume-transfer/a21de056-6aa6-4848-94ee-8756ad2d7502", "rel": "bookmark"}], "id": "a21de056-6aa6-4848-94ee-8756ad2d7502", "name": "fog-testtransfer-1", "volume_id": "cbd02b79-0df4-4a30-9bd6-aa3eaa1baf10"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:01 GMT - request: method: get @@ -805,7 +805,7 @@ http_interactions: "description": null, "multiattach": false, "source_volid": null, "consistencygroup_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:56.000000", "os-volume-replication:driver_data": null, "replication_status": "disabled"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:01 GMT - request: method: get @@ -851,7 +851,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Transfer a21de056-6aa6-4848-94ee-8756ad2d7502 could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:01 GMT - request: method: get @@ -896,7 +896,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:01 GMT - request: method: get @@ -942,7 +942,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Transfer a21de056-6aa6-4848-94ee-8756ad2d7502 could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:01 GMT - request: method: get @@ -987,7 +987,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:02 GMT - request: method: get @@ -1040,7 +1040,7 @@ http_interactions: "description": null, "multiattach": false, "source_volid": null, "consistencygroup_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:56.000000", "os-volume-replication:driver_data": null, "replication_status": "disabled"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:02 GMT - request: method: get @@ -1093,7 +1093,7 @@ http_interactions: "description": null, "multiattach": false, "source_volid": null, "consistencygroup_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:56.000000", "os-volume-replication:driver_data": null, "replication_status": "disabled"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:02 GMT - request: method: delete @@ -1136,7 +1136,7 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:02 GMT - request: method: get @@ -1189,7 +1189,7 @@ http_interactions: "description": null, "multiattach": false, "source_volid": null, "consistencygroup_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:56.000000", "os-volume-replication:driver_data": null, "replication_status": "disabled"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:03 GMT - request: method: get @@ -1242,7 +1242,7 @@ http_interactions: "description": null, "multiattach": false, "source_volid": null, "consistencygroup_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:56.000000", "os-volume-replication:driver_data": null, "replication_status": "disabled"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:04 GMT - request: method: get @@ -1295,7 +1295,7 @@ http_interactions: "description": null, "multiattach": false, "source_volid": null, "consistencygroup_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:15:56.000000", "os-volume-replication:driver_data": null, "replication_status": "disabled"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:07 GMT - request: method: get @@ -1341,6 +1341,6 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Volume cbd02b79-0df4-4a30-9bd6-aa3eaa1baf10 could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:11 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/volume/volume_transfer_and_delete.yml b/spec/fixtures/openstack/volume/volume_transfer_and_delete.yml index b5eb68a31..afb70673e 100644 --- a/spec/fixtures/openstack/volume/volume_transfer_and_delete.yml +++ b/spec/fixtures/openstack/volume/volume_transfer_and_delete.yml @@ -43,7 +43,7 @@ http_interactions: body: encoding: UTF-8 string: '{"volumes": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:11 GMT - request: method: post @@ -97,7 +97,7 @@ http_interactions: "consistencygroup_id": null, "source_volid": null, "snapshot_id": null, "multiattach": false, "metadata": {}, "id": "8f3fd916-39c6-4ae1-8e43-683077b2a6af", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:11 GMT - request: method: get @@ -154,7 +154,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:16:11.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:12 GMT - request: method: get @@ -211,7 +211,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:16:11.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:13 GMT - request: method: get @@ -256,7 +256,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:13 GMT - request: method: post @@ -305,14 +305,14 @@ http_interactions: "rel": "bookmark"}], "created_at": "2016-05-03T14:16:13.969010", "volume_id": "8f3fd916-39c6-4ae1-8e43-683077b2a6af", "id": "e5ad5e93-1875-46eb-a55d-e45960b222e9", "name": "fog-testtransfer-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:14 GMT - request: method: post uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"demo"}}},"scope":{"project":{"name":"demo","domain":{"name":"Default"}}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"demo","domain":{"name":"Default"},"password":"password"}}},"scope":{"project":{"name":"demo","domain":{"name":"Default"}}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -423,7 +423,7 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "d66fbe28f45a405a87fd32bb30f7c42e", "name": "demo"}, "audit_ids": ["ZfdPzHNGQKONDTijEgoiMg"], "issued_at": "2016-05-03T14:16:14.377018Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:14 GMT - request: method: delete @@ -466,7 +466,7 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:15 GMT - request: method: post @@ -512,7 +512,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "TransferNotFound: Transfer e5ad5e93-1875-46eb-a55d-e45960b222e9 could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:15 GMT - request: method: get @@ -569,7 +569,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:16:11.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:15 GMT - request: method: get @@ -626,7 +626,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:16:11.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:15 GMT - request: method: delete @@ -669,7 +669,7 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:16 GMT - request: method: get @@ -726,7 +726,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:16:11.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:16 GMT - request: method: get @@ -783,7 +783,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:16:11.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:17 GMT - request: method: get @@ -840,7 +840,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:16:11.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:20 GMT - request: method: get @@ -886,6 +886,6 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Volume 8f3fd916-39c6-4ae1-8e43-683077b2a6af could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:16:24 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/volume_v1/common_setup.yml b/spec/fixtures/openstack/volume_v1/common_setup.yml index 588356a93..92d19ca7c 100644 --- a/spec/fixtures/openstack/volume_v1/common_setup.yml +++ b/spec/fixtures/openstack/volume_v1/common_setup.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"admin"}}},"scope":{"domain":{"name":"Default"}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"name":"Default"},"password":"password"}}},"scope":{"domain":{"name":"Default"}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -52,7 +52,12 @@ http_interactions: "RegionOne", "interface": "internal", "id": "b53b60875b214e7f925f96d3a2a57464"}], "type": "identity", "id": "311850187e5a47108ac9b43ec5346658", "name": "keystone"}, {"endpoints": [], "type": "compute", "id": "3fd114ff2cff43be8bd3ecc5bc117ec8", - "name": "nova"}, {"endpoints": [], "type": "volume", "id": "4a6033d57e30494a9577358d90d08123", + "name": "nova"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v1/2ab82e30d7984631874def67813dffd8", + "region": "RegionOne", "interface": "internal", "id": "bb95738666b94144802d02b313a3520d"}, + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v1/2ab82e30d7984631874def67813dffd8", + "region": "RegionOne", "interface": "admin", "id": "d7f48b18a887467ca02c943704dcbd91"}, + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v1/2ab82e30d7984631874def67813dffd8", + "region": "RegionOne", "interface": "public", "id": "e81eef3261494c4299a972a8c7bf669e"}], "type": "volume", "id": "4a6033d57e30494a9577358d90d08123", "name": "cinder"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8773/", "region": "RegionOne", "interface": "internal", "id": "54546c7c383a4d6abc2b93c94d75e2f7"}, {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8773/", "region": "RegionOne", @@ -87,7 +92,7 @@ http_interactions: "swift"}], "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["1umUxRY-SWuMC0EQT_ltlg"], "issued_at": "2016-05-03T14:17:50.468300Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:50 GMT - request: method: get @@ -137,7 +142,7 @@ http_interactions: "", "links": {"self": "http://devstack.openstack.stack:5000/v3/projects/f17a4813648d4b0bb82124ca1f5f1fd0"}, "enabled": true, "id": "f17a4813648d4b0bb82124ca1f5f1fd0", "parent_id": null, "domain_id": "default", "name": "admin"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:50 GMT - request: method: post @@ -255,6 +260,6 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["ScPTyF3ySNGmLX96vGdc9Q", "1umUxRY-SWuMC0EQT_ltlg"], "issued_at": "2016-05-03T14:17:50.971765Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:51 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/volume_v1/volume_crud.yml b/spec/fixtures/openstack/volume_v1/volume_crud.yml index bcfea4f52..d0811a075 100644 --- a/spec/fixtures/openstack/volume_v1/volume_crud.yml +++ b/spec/fixtures/openstack/volume_v1/volume_crud.yml @@ -43,7 +43,7 @@ http_interactions: body: encoding: UTF-8 string: '{"volumes": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:51 GMT - request: method: post @@ -94,7 +94,7 @@ http_interactions: "display_description": "This is the volume description.", "volume_type": "lvmdriver-1", "snapshot_id": null, "source_volid": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:51 GMT - request: method: get @@ -147,7 +147,7 @@ http_interactions: "lvmdriver-1", "snapshot_id": null, "source_volid": null, "os-vol-mig-status-attr:name_id": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "os-vol-mig-status-attr:migstat": null, "size": 1}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:51 GMT - request: method: get @@ -200,7 +200,7 @@ http_interactions: "lvmdriver-1", "snapshot_id": null, "source_volid": null, "os-vol-mig-status-attr:name_id": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "os-vol-mig-status-attr:migstat": null, "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:52 GMT - request: method: get @@ -253,7 +253,7 @@ http_interactions: "lvmdriver-1", "snapshot_id": null, "source_volid": null, "os-vol-mig-status-attr:name_id": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "os-vol-mig-status-attr:migstat": null, "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:52 GMT - request: method: get @@ -306,7 +306,7 @@ http_interactions: "lvmdriver-1", "snapshot_id": null, "source_volid": null, "os-vol-mig-status-attr:name_id": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "os-vol-mig-status-attr:migstat": null, "size": 1}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:52 GMT - request: method: put @@ -356,7 +356,7 @@ http_interactions: "display_description": "This is the volume description.", "volume_type": "lvmdriver-1", "snapshot_id": null, "source_volid": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:53 GMT - request: method: get @@ -409,15 +409,14 @@ http_interactions: "lvmdriver-1", "snapshot_id": null, "source_volid": null, "os-vol-mig-status-attr:name_id": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "os-vol-mig-status-attr:migstat": null, "size": 1}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:53 GMT - request: method: put uri: http://devstack.openstack.stack:8776/v1/2ab82e30d7984631874def67813dffd8/volumes/3b59e23e-d5b5-42be-b297-f4880c1bbb5f body: encoding: UTF-8 - string: '{"volume":{"status":"available","display_name":"fog-updated-testvolume-1","attachments":[],"availability_zone":"nova","bootable":"false","encrypted":false,"created_at":"2016-05-03T14:17:51.000000","multiattach":"false","tenant_id":"2ab82e30d7984631874def67813dffd8","os-volume-replication:driver_data":null,"display_description":"This - is the updated volume description.","os-volume-replication:extended_status":null,"os-vol-host-attr:host":"mo-0e4c34476@lvmdriver-1#lvmdriver-1","volume_type":"lvmdriver-1","snapshot_id":null,"source_volid":null,"os-vol-mig-status-attr:name_id":null,"metadata":{},"os-vol-mig-status-attr:migstat":null,"size":1}}' + string: '{"volume":{"display_name":"fog-updated-testvolume-1","display_description":"This is the updated volume description.","metadata":{}}}' headers: User-Agent: - fog-core/1.38.0 @@ -460,7 +459,7 @@ http_interactions: "display_description": "This is the updated volume description.", "volume_type": "lvmdriver-1", "snapshot_id": null, "source_volid": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:54 GMT - request: method: get @@ -513,7 +512,7 @@ http_interactions: "lvmdriver-1", "snapshot_id": null, "source_volid": null, "os-vol-mig-status-attr:name_id": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "os-vol-mig-status-attr:migstat": null, "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:54 GMT - request: method: get @@ -566,7 +565,7 @@ http_interactions: "lvmdriver-1", "snapshot_id": null, "source_volid": null, "os-vol-mig-status-attr:name_id": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "os-vol-mig-status-attr:migstat": null, "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:55 GMT - request: method: get @@ -619,7 +618,7 @@ http_interactions: "lvmdriver-1", "snapshot_id": null, "source_volid": null, "os-vol-mig-status-attr:name_id": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "os-vol-mig-status-attr:migstat": null, "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:55 GMT - request: method: delete @@ -662,7 +661,7 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:55 GMT - request: method: get @@ -715,7 +714,7 @@ http_interactions: "lvmdriver-1", "snapshot_id": null, "source_volid": null, "os-vol-mig-status-attr:name_id": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "os-vol-mig-status-attr:migstat": null, "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:56 GMT - request: method: get @@ -768,7 +767,7 @@ http_interactions: "lvmdriver-1", "snapshot_id": null, "source_volid": null, "os-vol-mig-status-attr:name_id": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "os-vol-mig-status-attr:migstat": null, "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:57 GMT - request: method: get @@ -821,7 +820,7 @@ http_interactions: "lvmdriver-1", "snapshot_id": null, "source_volid": null, "os-vol-mig-status-attr:name_id": null, "metadata": {}, "id": "3b59e23e-d5b5-42be-b297-f4880c1bbb5f", "os-vol-mig-status-attr:migstat": null, "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:17:59 GMT - request: method: get @@ -867,6 +866,6 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "The resource could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:04 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/volume_v1/volume_transfer_and_accept.yml b/spec/fixtures/openstack/volume_v1/volume_transfer_and_accept.yml index b54395c83..f0e40af2d 100644 --- a/spec/fixtures/openstack/volume_v1/volume_transfer_and_accept.yml +++ b/spec/fixtures/openstack/volume_v1/volume_transfer_and_accept.yml @@ -43,7 +43,7 @@ http_interactions: body: encoding: UTF-8 string: '{"volumes": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:27 GMT - request: method: post @@ -93,7 +93,7 @@ http_interactions: "display_description": null, "volume_type": "lvmdriver-1", "snapshot_id": null, "source_volid": null, "metadata": {}, "id": "42a23191-d56f-4235-8d95-3d3f69de3d67", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:28 GMT - request: method: get @@ -146,7 +146,7 @@ http_interactions: "lvmdriver-1", "snapshot_id": null, "source_volid": null, "os-vol-mig-status-attr:name_id": null, "metadata": {}, "id": "42a23191-d56f-4235-8d95-3d3f69de3d67", "os-vol-mig-status-attr:migstat": null, "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:28 GMT - request: method: get @@ -199,7 +199,7 @@ http_interactions: "lvmdriver-1", "snapshot_id": null, "source_volid": null, "os-vol-mig-status-attr:name_id": null, "metadata": {}, "id": "42a23191-d56f-4235-8d95-3d3f69de3d67", "os-vol-mig-status-attr:migstat": null, "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:30 GMT - request: method: get @@ -244,7 +244,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:30 GMT - request: method: post @@ -293,7 +293,7 @@ http_interactions: "rel": "bookmark"}], "created_at": "2016-05-03T14:18:30.668765", "volume_id": "42a23191-d56f-4235-8d95-3d3f69de3d67", "id": "6e60dc20-a85d-439a-80c8-fda70774c69a", "name": "fog-testtransfer-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:31 GMT - request: method: get @@ -342,7 +342,7 @@ http_interactions: "links": [{"href": "http://devstack.openstack.stack:8776/v1/2ab82e30d7984631874def67813dffd8/os-volume-transfer/6e60dc20-a85d-439a-80c8-fda70774c69a", "rel": "self"}, {"href": "http://devstack.openstack.stack:8776/2ab82e30d7984631874def67813dffd8/os-volume-transfer/6e60dc20-a85d-439a-80c8-fda70774c69a", "rel": "bookmark"}], "name": "fog-testtransfer-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:31 GMT - request: method: get @@ -391,14 +391,14 @@ http_interactions: "links": [{"href": "http://devstack.openstack.stack:8776/v1/2ab82e30d7984631874def67813dffd8/os-volume-transfer/6e60dc20-a85d-439a-80c8-fda70774c69a", "rel": "self"}, {"href": "http://devstack.openstack.stack:8776/2ab82e30d7984631874def67813dffd8/os-volume-transfer/6e60dc20-a85d-439a-80c8-fda70774c69a", "rel": "bookmark"}], "name": "fog-testtransfer-1"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:31 GMT - request: method: post uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"demo"}}},"scope":{"project":{"name":"demo","domain":{"name":"Default"}}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"demo","domain":{"name":"Default"},"password":"password"}}},"scope":{"project":{"name":"demo","domain":{"name":"Default"}}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -509,7 +509,7 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "d66fbe28f45a405a87fd32bb30f7c42e", "name": "demo"}, "audit_ids": ["DY2OJyj_SZ2pLhOEOyC_3w"], "issued_at": "2016-05-03T14:18:31.429160Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:31 GMT - request: method: get @@ -555,7 +555,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Transfer 6e60dc20-a85d-439a-80c8-fda70774c69a could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:31 GMT - request: method: get @@ -600,7 +600,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:31 GMT - request: method: post @@ -646,7 +646,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "TransferNotFound: Transfer ec8ff7e8-81e2-4e12-b9fb-3e8890612c2d could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:32 GMT - request: method: post @@ -692,7 +692,7 @@ http_interactions: encoding: UTF-8 string: '{"badRequest": {"message": "Invalid auth key: Attempt to transfer 6e60dc20-a85d-439a-80c8-fda70774c69a with invalid auth key.", "code": 400}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:32 GMT - request: method: post @@ -740,7 +740,7 @@ http_interactions: "rel": "self"}, {"href": "http://devstack.openstack.stack:8776/a5db6ff5a6274dd589b6a05945d7f34d/os-volume-transfer/6e60dc20-a85d-439a-80c8-fda70774c69a", "rel": "bookmark"}], "id": "6e60dc20-a85d-439a-80c8-fda70774c69a", "name": "fog-testtransfer-1", "volume_id": "42a23191-d56f-4235-8d95-3d3f69de3d67"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:33 GMT - request: method: get @@ -791,7 +791,7 @@ http_interactions: null, "display_description": null, "os-volume-replication:extended_status": null, "volume_type": "lvmdriver-1", "snapshot_id": null, "source_volid": null, "metadata": {}, "id": "42a23191-d56f-4235-8d95-3d3f69de3d67", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:33 GMT - request: method: get @@ -837,7 +837,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Transfer 6e60dc20-a85d-439a-80c8-fda70774c69a could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:33 GMT - request: method: get @@ -882,7 +882,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:33 GMT - request: method: get @@ -928,7 +928,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Transfer 6e60dc20-a85d-439a-80c8-fda70774c69a could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:33 GMT - request: method: get @@ -973,7 +973,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:33 GMT - request: method: get @@ -1024,7 +1024,7 @@ http_interactions: null, "display_description": null, "os-volume-replication:extended_status": null, "volume_type": "lvmdriver-1", "snapshot_id": null, "source_volid": null, "metadata": {}, "id": "42a23191-d56f-4235-8d95-3d3f69de3d67", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:34 GMT - request: method: get @@ -1075,7 +1075,7 @@ http_interactions: null, "display_description": null, "os-volume-replication:extended_status": null, "volume_type": "lvmdriver-1", "snapshot_id": null, "source_volid": null, "metadata": {}, "id": "42a23191-d56f-4235-8d95-3d3f69de3d67", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:34 GMT - request: method: delete @@ -1118,7 +1118,7 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:34 GMT - request: method: get @@ -1169,7 +1169,7 @@ http_interactions: null, "display_description": null, "os-volume-replication:extended_status": null, "volume_type": "lvmdriver-1", "snapshot_id": null, "source_volid": null, "metadata": {}, "id": "42a23191-d56f-4235-8d95-3d3f69de3d67", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:35 GMT - request: method: get @@ -1220,7 +1220,7 @@ http_interactions: null, "display_description": null, "os-volume-replication:extended_status": null, "volume_type": "lvmdriver-1", "snapshot_id": null, "source_volid": null, "metadata": {}, "id": "42a23191-d56f-4235-8d95-3d3f69de3d67", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:36 GMT - request: method: get @@ -1266,6 +1266,6 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "The resource could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:18:38 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/volume_v2/common_setup.yml b/spec/fixtures/openstack/volume_v2/common_setup.yml index b9c43bb80..c6f83a3a0 100644 --- a/spec/fixtures/openstack/volume_v2/common_setup.yml +++ b/spec/fixtures/openstack/volume_v2/common_setup.yml @@ -5,7 +5,7 @@ http_interactions: uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"admin"}}},"scope":{"domain":{"name":"Default"}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"admin","domain":{"name":"Default"},"password":"password"}}},"scope":{"domain":{"name":"Default"}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -34,10 +34,16 @@ http_interactions: encoding: UTF-8 string: '{"token": {"domain": {"id": "default", "name": "Default"}, "methods": ["password"], "roles": [{"id": "5929fb4077c3415c9850e66f2c2be16b", "name": - "admin"}], "expires_at": "2016-05-03T15:21:21.043888Z", "catalog": [{"endpoints": - [], "type": "volumev2", "id": "1766683b2f9f4ef2acf7f9e4e359fb9a", "name": - "cinderv2"}, {"endpoints": [], "type": "metering", "id": "18dbb2f0ddeb45b99d11ed0568f153ab", - "name": "ceilometer"}, {"endpoints": [{"region_id": "RegionOne", "url": "http://mo-edbdf14f1.mo.sap.corp:8777/", + "admin"}], "expires_at": "2016-05-03T15:21:21.043888Z", "catalog": [{"endpoints": [ + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8", + "region": "RegionOne", "interface": "public", "id": "0e40a16fd8ad4045ae738b749818818e"}, + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8", + "region": "RegionOne", "interface": "internal", "id": "1ebe166449b34147ac4df07e492571d9"}, + {"region_id": "RegionOne", "url": "http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8", + "region": "RegionOne", "interface": "admin", "id": "b2ae2902e8104f05b5fd2def27a4537a"}], + "type": "volumev2", "id": "1766683b2f9f4ef2acf7f9e4e359fb9a", "name": "cinderv2"},{"endpoints": [], + "type": "metering", "id": "18dbb2f0ddeb45b99d11ed0568f153ab", "name": "ceilometer"}, {"endpoints": [ + {"region_id": "RegionOne", "url": "http://mo-edbdf14f1.mo.sap.corp:8777/", "region": "RegionOne", "interface": "admin", "id": "6f44eb5bf4e646f9a7afebb1f32501f1"}, {"region_id": "RegionOne", "url": "http://mo-edbdf14f1.mo.sap.corp:8777/", "region": "RegionOne", "interface": "public", "id": "9bb4f1c83833484e9d53ce2b57d6308b"}, @@ -87,7 +93,7 @@ http_interactions: "swift"}], "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["MEijdNGQQxWAfU2QVIgrog"], "issued_at": "2016-05-03T14:21:21.043966Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:21 GMT - request: method: get @@ -137,7 +143,7 @@ http_interactions: "", "links": {"self": "http://devstack.openstack.stack:5000/v3/projects/f17a4813648d4b0bb82124ca1f5f1fd0"}, "enabled": true, "id": "f17a4813648d4b0bb82124ca1f5f1fd0", "parent_id": null, "domain_id": "default", "name": "admin"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:21 GMT - request: method: post @@ -255,6 +261,6 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "205e0e39a2534743b517ed0aa2fbcda7", "name": "admin"}, "audit_ids": ["6alLvao6R12RiK-Jqyf5Xw", "MEijdNGQQxWAfU2QVIgrog"], "issued_at": "2016-05-03T14:21:21.540436Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:21 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/volume_v2/volume_crud.yml b/spec/fixtures/openstack/volume_v2/volume_crud.yml index b678cf646..c046f46e4 100644 --- a/spec/fixtures/openstack/volume_v2/volume_crud.yml +++ b/spec/fixtures/openstack/volume_v2/volume_crud.yml @@ -43,7 +43,7 @@ http_interactions: body: encoding: UTF-8 string: '{"volumes": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:21 GMT - request: method: post @@ -98,7 +98,7 @@ http_interactions: "replication_status": "disabled", "consistencygroup_id": null, "source_volid": null, "snapshot_id": null, "multiattach": false, "metadata": {}, "id": "b1c8ab26-71c4-4ccc-a06c-99e94d6c7b11", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:22 GMT - request: method: get @@ -155,7 +155,7 @@ http_interactions: null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:22.000000", "volume_type": "lvmdriver-1"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:22 GMT - request: method: get @@ -212,7 +212,7 @@ http_interactions: null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:22.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:23 GMT - request: method: get @@ -269,7 +269,7 @@ http_interactions: null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:22.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:23 GMT - request: method: get @@ -326,7 +326,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:22.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:24 GMT - request: method: get @@ -383,7 +383,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:22.000000", "volume_type": "lvmdriver-1"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:24 GMT - request: method: put @@ -437,7 +437,7 @@ http_interactions: "replication_status": "disabled", "consistencygroup_id": null, "source_volid": null, "snapshot_id": null, "multiattach": false, "metadata": {}, "id": "b1c8ab26-71c4-4ccc-a06c-99e94d6c7b11", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:25 GMT - request: method: get @@ -494,15 +494,14 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-updated-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:22.000000", "volume_type": "lvmdriver-1"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:25 GMT - request: method: put uri: http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8/volumes/b1c8ab26-71c4-4ccc-a06c-99e94d6c7b11 body: encoding: UTF-8 - string: '{"volume":{"migration_status":null,"attachments":[],"links":[{"href":"http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8/volumes/b1c8ab26-71c4-4ccc-a06c-99e94d6c7b11","rel":"self"},{"href":"http://devstack.openstack.stack:8776/2ab82e30d7984631874def67813dffd8/volumes/b1c8ab26-71c4-4ccc-a06c-99e94d6c7b11","rel":"bookmark"}],"availability_zone":"nova","os-vol-host-attr:host":"mo-0e4c34476@lvmdriver-1#lvmdriver-1","encrypted":false,"os-volume-replication:extended_status":null,"replication_status":"disabled","snapshot_id":null,"size":1,"user_id":"205e0e39a2534743b517ed0aa2fbcda7","tenant_id":"2ab82e30d7984631874def67813dffd8","os-vol-mig-status-attr:migstat":null,"metadata":{},"status":"available","description":"This - is the updated volume description.","multiattach":false,"os-volume-replication:driver_data":null,"source_volid":null,"consistencygroup_id":null,"os-vol-mig-status-attr:name_id":null,"name":"fog-updated-testvolume-1","bootable":"false","created_at":"2016-05-03T14:21:22.000000","volume_type":"lvmdriver-1"}}' + string: '{"volume":{"metadata":{},"description":"This is the updated volume description.","name":"fog-updated-testvolume-1"}}' headers: User-Agent: - fog-core/1.38.0 @@ -549,7 +548,7 @@ http_interactions: "replication_status": "disabled", "consistencygroup_id": null, "source_volid": null, "snapshot_id": null, "multiattach": false, "metadata": {}, "id": "b1c8ab26-71c4-4ccc-a06c-99e94d6c7b11", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:26 GMT - request: method: get @@ -606,7 +605,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-updated-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:22.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:26 GMT - request: method: get @@ -663,7 +662,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-updated-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:22.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:27 GMT - request: method: get @@ -720,7 +719,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-updated-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:22.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:27 GMT - request: method: delete @@ -763,7 +762,7 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:27 GMT - request: method: get @@ -820,7 +819,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-updated-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:22.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:28 GMT - request: method: get @@ -877,7 +876,7 @@ http_interactions: null, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "fog-updated-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:22.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:29 GMT - request: method: get @@ -923,6 +922,6 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Volume b1c8ab26-71c4-4ccc-a06c-99e94d6c7b11 could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:32 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/volume_v2/volume_transfer_and_accept.yml b/spec/fixtures/openstack/volume_v2/volume_transfer_and_accept.yml index 352310a8f..c614b90b0 100644 --- a/spec/fixtures/openstack/volume_v2/volume_transfer_and_accept.yml +++ b/spec/fixtures/openstack/volume_v2/volume_transfer_and_accept.yml @@ -43,7 +43,7 @@ http_interactions: body: encoding: UTF-8 string: '{"volumes": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:47 GMT - request: method: post @@ -97,7 +97,7 @@ http_interactions: "consistencygroup_id": null, "source_volid": null, "snapshot_id": null, "multiattach": false, "metadata": {}, "id": "ba63f1f8-39b6-4207-a605-4d4cfcd7ae75", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:47 GMT - request: method: get @@ -154,7 +154,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:47.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:48 GMT - request: method: get @@ -211,7 +211,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:47.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:49 GMT - request: method: get @@ -256,7 +256,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:49 GMT - request: method: post @@ -305,7 +305,7 @@ http_interactions: "rel": "bookmark"}], "created_at": "2016-05-03T14:21:49.945270", "volume_id": "ba63f1f8-39b6-4207-a605-4d4cfcd7ae75", "id": "25ce8e00-36e5-447d-9a5c-93b778e855fe", "name": "fog-testtransfer-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:50 GMT - request: method: get @@ -354,7 +354,7 @@ http_interactions: "links": [{"href": "http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8/os-volume-transfer/25ce8e00-36e5-447d-9a5c-93b778e855fe", "rel": "self"}, {"href": "http://devstack.openstack.stack:8776/2ab82e30d7984631874def67813dffd8/os-volume-transfer/25ce8e00-36e5-447d-9a5c-93b778e855fe", "rel": "bookmark"}], "name": "fog-testtransfer-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:50 GMT - request: method: get @@ -403,14 +403,14 @@ http_interactions: "links": [{"href": "http://devstack.openstack.stack:8776/v2/2ab82e30d7984631874def67813dffd8/os-volume-transfer/25ce8e00-36e5-447d-9a5c-93b778e855fe", "rel": "self"}, {"href": "http://devstack.openstack.stack:8776/2ab82e30d7984631874def67813dffd8/os-volume-transfer/25ce8e00-36e5-447d-9a5c-93b778e855fe", "rel": "bookmark"}], "name": "fog-testtransfer-1"}]}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:50 GMT - request: method: post uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"demo"}}},"scope":{"project":{"name":"demo","domain":{"name":"Default"}}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"demo","domain":{"name":"Default"},"password":"password"}}},"scope":{"project":{"name":"demo","domain":{"name":"Default"}}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -521,7 +521,7 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "d66fbe28f45a405a87fd32bb30f7c42e", "name": "demo"}, "audit_ids": ["Iz4MtjrGSw2GGH3EFCEOsQ"], "issued_at": "2016-05-03T14:21:50.551942Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:50 GMT - request: method: get @@ -567,7 +567,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Transfer 25ce8e00-36e5-447d-9a5c-93b778e855fe could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:50 GMT - request: method: get @@ -612,7 +612,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:50 GMT - request: method: post @@ -658,7 +658,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "TransferNotFound: Transfer ec8ff7e8-81e2-4e12-b9fb-3e8890612c2d could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:51 GMT - request: method: post @@ -704,7 +704,7 @@ http_interactions: encoding: UTF-8 string: '{"badRequest": {"message": "Invalid auth key: Attempt to transfer 25ce8e00-36e5-447d-9a5c-93b778e855fe with invalid auth key.", "code": 400}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:51 GMT - request: method: post @@ -752,7 +752,7 @@ http_interactions: "rel": "self"}, {"href": "http://devstack.openstack.stack:8776/a5db6ff5a6274dd589b6a05945d7f34d/os-volume-transfer/25ce8e00-36e5-447d-9a5c-93b778e855fe", "rel": "bookmark"}], "id": "25ce8e00-36e5-447d-9a5c-93b778e855fe", "name": "fog-testtransfer-1", "volume_id": "ba63f1f8-39b6-4207-a605-4d4cfcd7ae75"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:51 GMT - request: method: get @@ -805,7 +805,7 @@ http_interactions: "description": null, "multiattach": false, "source_volid": null, "consistencygroup_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:47.000000", "os-volume-replication:driver_data": null, "replication_status": "disabled"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:52 GMT - request: method: get @@ -851,7 +851,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Transfer 25ce8e00-36e5-447d-9a5c-93b778e855fe could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:52 GMT - request: method: get @@ -896,7 +896,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:52 GMT - request: method: get @@ -942,7 +942,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Transfer 25ce8e00-36e5-447d-9a5c-93b778e855fe could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:52 GMT - request: method: get @@ -987,7 +987,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:52 GMT - request: method: get @@ -1040,7 +1040,7 @@ http_interactions: "description": null, "multiattach": false, "source_volid": null, "consistencygroup_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:47.000000", "os-volume-replication:driver_data": null, "replication_status": "disabled"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:53 GMT - request: method: get @@ -1093,7 +1093,7 @@ http_interactions: "description": null, "multiattach": false, "source_volid": null, "consistencygroup_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:47.000000", "os-volume-replication:driver_data": null, "replication_status": "disabled"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:53 GMT - request: method: delete @@ -1136,7 +1136,7 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:53 GMT - request: method: get @@ -1189,7 +1189,7 @@ http_interactions: "description": null, "multiattach": false, "source_volid": null, "consistencygroup_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:47.000000", "os-volume-replication:driver_data": null, "replication_status": "disabled"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:54 GMT - request: method: get @@ -1242,7 +1242,7 @@ http_interactions: "description": null, "multiattach": false, "source_volid": null, "consistencygroup_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:47.000000", "os-volume-replication:driver_data": null, "replication_status": "disabled"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:55 GMT - request: method: get @@ -1295,7 +1295,7 @@ http_interactions: "description": null, "multiattach": false, "source_volid": null, "consistencygroup_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:21:47.000000", "os-volume-replication:driver_data": null, "replication_status": "disabled"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:21:57 GMT - request: method: get @@ -1341,6 +1341,6 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Volume ba63f1f8-39b6-4207-a605-4d4cfcd7ae75 could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:01 GMT recorded_with: VCR 3.0.1 diff --git a/spec/fixtures/openstack/volume_v2/volume_transfer_and_delete.yml b/spec/fixtures/openstack/volume_v2/volume_transfer_and_delete.yml index 5fb06844e..f8fc36e99 100644 --- a/spec/fixtures/openstack/volume_v2/volume_transfer_and_delete.yml +++ b/spec/fixtures/openstack/volume_v2/volume_transfer_and_delete.yml @@ -43,7 +43,7 @@ http_interactions: body: encoding: UTF-8 string: '{"volumes": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:02 GMT - request: method: post @@ -97,7 +97,7 @@ http_interactions: "consistencygroup_id": null, "source_volid": null, "snapshot_id": null, "multiattach": false, "metadata": {}, "id": "ba81402e-55ff-42cd-ba12-3bce34c1dbcd", "size": 1}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:02 GMT - request: method: get @@ -154,7 +154,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:22:02.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:03 GMT - request: method: get @@ -211,7 +211,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:22:02.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:04 GMT - request: method: get @@ -256,7 +256,7 @@ http_interactions: body: encoding: UTF-8 string: '{"transfers": []}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:04 GMT - request: method: post @@ -305,14 +305,14 @@ http_interactions: "rel": "bookmark"}], "created_at": "2016-05-03T14:22:04.917297", "volume_id": "ba81402e-55ff-42cd-ba12-3bce34c1dbcd", "id": "6d55169a-e4dc-45d8-99c9-6a640105f7af", "name": "fog-testtransfer-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:05 GMT - request: method: post uri: http://devstack.openstack.stack:5000/v3/auth/tokens body: encoding: UTF-8 - string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"password":"password","domain":{"name":"Default"},"name":"demo"}}},"scope":{"project":{"name":"demo","domain":{"name":"Default"}}}}}' + string: '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"demo","domain":{"name":"Default"},"password":"password"}}},"scope":{"project":{"name":"demo","domain":{"name":"Default"}}}}}' headers: User-Agent: - fog-core/1.38.0 @@ -423,7 +423,7 @@ http_interactions: "extras": {}, "user": {"domain": {"id": "default", "name": "Default"}, "id": "d66fbe28f45a405a87fd32bb30f7c42e", "name": "demo"}, "audit_ids": ["ncT95PyFSCSW3DTap6lfBQ"], "issued_at": "2016-05-03T14:22:05.363375Z"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:05 GMT - request: method: delete @@ -466,7 +466,7 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:05 GMT - request: method: post @@ -512,7 +512,7 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "TransferNotFound: Transfer 6d55169a-e4dc-45d8-99c9-6a640105f7af could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:06 GMT - request: method: get @@ -569,7 +569,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:22:02.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:06 GMT - request: method: get @@ -626,7 +626,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:22:02.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:07 GMT - request: method: delete @@ -669,7 +669,7 @@ http_interactions: body: encoding: UTF-8 string: '' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:07 GMT - request: method: get @@ -726,7 +726,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:22:02.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:07 GMT - request: method: get @@ -783,7 +783,7 @@ http_interactions: null, "os-vol-mig-status-attr:name_id": null, "name": "fog-testvolume-1", "bootable": "false", "created_at": "2016-05-03T14:22:02.000000", "volume_type": "lvmdriver-1"}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:09 GMT - request: method: get @@ -829,6 +829,6 @@ http_interactions: encoding: UTF-8 string: '{"itemNotFound": {"message": "Volume ba81402e-55ff-42cd-ba12-3bce34c1dbcd could not be found.", "code": 404}}' - http_version: + http_version: recorded_at: Tue, 03 May 2016 14:22:11 GMT recorded_with: VCR 3.0.1 diff --git a/spec/identity_v3_spec.rb b/spec/identity_v3_spec.rb index 16d5201e2..a4d860468 100644 --- a/spec/identity_v3_spec.rb +++ b/spec/identity_v3_spec.rb @@ -1,11 +1,11 @@ require 'spec_helper' require_relative './shared_context' -describe Fog::Identity::OpenStack::V3 do +describe Fog::OpenStack::Identity::V3 do before :all do @openstack_vcr = OpenStackVCR.new( vcr_directory: 'spec/fixtures/openstack/identity_v3', - service_class: Fog::Identity::OpenStack::V3 + service_class: Fog::OpenStack::Identity::V3 ) @service = @openstack_vcr.service @os_auth_url = @openstack_vcr.os_auth_url @@ -13,36 +13,36 @@ it 'authenticates with password, userid and domain_id' do VCR.use_cassette('authv3_a') do - Fog::Identity::OpenStack::V3.new( + Fog::OpenStack::Identity::V3.new( openstack_domain_id: @openstack_vcr.domain_id, openstack_api_key: @openstack_vcr.password, openstack_userid: @openstack_vcr.user_id, openstack_region: @openstack_vcr.region, - openstack_auth_url: "#{@os_auth_url}/auth/tokens" + openstack_auth_url: @os_auth_url ) end end it 'authenticates with password, username and domain_id' do VCR.use_cassette('authv3_b') do - Fog::Identity::OpenStack::V3.new( + Fog::OpenStack::Identity::V3.new( openstack_domain_id: @openstack_vcr.domain_id, openstack_api_key: @openstack_vcr.password, openstack_username: @openstack_vcr.username, openstack_region: @openstack_vcr.region, - openstack_auth_url: "#{@os_auth_url}/auth/tokens" + openstack_auth_url: @os_auth_url ) end end it 'authenticates with password, username and domain_name' do VCR.use_cassette('authv3_c') do - Fog::Identity::OpenStack::V3.new( + Fog::OpenStack::Identity::V3.new( openstack_user_domain: @openstack_vcr.domain_name, openstack_api_key: @openstack_vcr.password, openstack_username: @openstack_vcr.username, openstack_region: @openstack_vcr.region, - openstack_auth_url: "#{@os_auth_url}/auth/tokens" + openstack_auth_url: @os_auth_url ) end end @@ -54,9 +54,9 @@ endpoints_in_region = @endpoints_all.select { |endpoint| endpoint.region == @openstack_vcr.region_other } VCR.use_cassette('idv3_other_region') do - @fog = Fog::Identity::OpenStack::V3.new( + @fog = Fog::OpenStack::Identity::V3.new( openstack_region: @openstack_vcr.region_other, - openstack_auth_url: "#{@os_auth_url}/auth/tokens", + openstack_auth_url: @os_auth_url, openstack_userid: @openstack_vcr.user_id, openstack_api_key: @openstack_vcr.password ) @@ -66,20 +66,20 @@ it 'get an unscoped token, then reauthenticate with it' do VCR.use_cassette('authv3_unscoped_reauth') do - id_v3 = Fog::Identity::OpenStack::V3.new( + id_v3 = Fog::OpenStack::Identity::V3.new( openstack_api_key: @openstack_vcr.password, openstack_userid: @openstack_vcr.user_id, openstack_region: @openstack_vcr.region, - openstack_auth_url: "#{@os_auth_url}/auth/tokens" + openstack_auth_url: @os_auth_url ) auth_params = { provider: "openstack", openstack_auth_token: id_v3.credentials[:openstack_auth_token], - openstack_auth_url: "#{@os_auth_url}/auth/tokens", + openstack_auth_url: @os_auth_url, openstack_region: @openstack_vcr.region } - @fog2 = Fog::Identity::OpenStack::V3.new(auth_params) + @fog2 = Fog::OpenStack::Identity::V3.new(auth_params) @fog2.wont_equal nil token = @fog2.credentials[:openstack_auth_token] @@ -89,13 +89,13 @@ it 'authenticates with project scope' do VCR.use_cassette('authv3_project') do - Fog::Identity::OpenStack::V3.new( + Fog::OpenStack::Identity::V3.new( openstack_project_name: @openstack_vcr.project_name, openstack_domain_name: @openstack_vcr.domain_name, openstack_api_key: @openstack_vcr.password, openstack_username: @openstack_vcr.username, openstack_region: @openstack_vcr.region, - openstack_auth_url: "#{@os_auth_url}/auth/tokens" + openstack_auth_url: @os_auth_url ) end end @@ -103,21 +103,20 @@ it 'get an unscoped token, then use it to get a scoped token' do VCR.use_cassette('authv3_unscoped') do skip 'get an unscoped token, then use it to get a scoped token to be fixed' - id_v3 = Fog::Identity::OpenStack::V3.new( + id_v3 = Fog::OpenStack::Identity::V3.new( openstack_api_key: @openstack_vcr.password, openstack_userid: @openstack_vcr.user_id, openstack_region: @openstack_vcr.region, - openstack_auth_url: "#{@os_auth_url}/auth/tokens" + openstack_auth_url: @os_auth_url ) # Exchange it for a project-scoped token auth = Fog::Identity::OpenStack::V3.new( openstack_project_name: @openstack_vcr.project_name, openstack_domain_name: @openstack_vcr.domain_name, - openstack_tenant: @openstack_vcr.username, openstack_auth_token: id_v3.credentials[:openstack_auth_token], openstack_region: @openstack_vcr.region, - openstack_auth_url: "#{@os_auth_url}/auth/tokens" + openstack_auth_url: @os_auth_url ) token = auth.credentials[:openstack_auth_token] @@ -127,13 +126,13 @@ validated_token.wont_equal nil id_v3.tokens.check(token) - proc { id_v3.tokens.check('random-token') }.must_raise Fog::Identity::OpenStack::NotFound + proc { id_v3.tokens.check('random-token') }.must_raise Fog::OpenStack::Identity::NotFound end end it "find specific user, lists users" do VCR.use_cassette('idv3_users') do - proc { nonexistent_user = @service.users.find_by_id 'u-random-blah' }.must_raise Fog::Identity::OpenStack::NotFound + proc { @service.users.find_by_id 'u-random-blah' }.must_raise Fog::OpenStack::Identity::NotFound admin_user = @service.users.find_by_name @openstack_vcr.username admin_user.length.must_equal 1 @@ -156,10 +155,12 @@ it 'CRUD users' do VCR.use_cassette('idv3_user_crud') do # Make sure there are no existing users called foobar or baz - ['foobar', 'baz'].each do |username| + %w[foobar baz].each do |username| user = @service.users.find_by_name(username).first - user.update(enabled: false) if user - user.destroy if user + if user + user.update(enabled: false) + user.destroy + end end @service.users.find_by_name('foobar').length.must_equal 0 @service.users.find_by_name('baz').length.must_equal 0 @@ -193,8 +194,8 @@ # Delete the user baz_user.destroy # Check that the deletion worked - proc { @service.users.find_by_id foobar_id }.must_raise Fog::Identity::OpenStack::NotFound - @service.users.all.select { |user| ['foobar', 'baz'].include? user.name }.length.must_equal 0 + proc { @service.users.find_by_id foobar_id }.must_raise Fog::OpenStack::Identity::NotFound + @service.users.all.select { |user| %w[foobar baz].include? user.name }.length.must_equal 0 @service.users.find_by_name('foobar').length.must_equal 0 @service.users.find_by_name('baz').length.must_equal 0 end @@ -203,8 +204,8 @@ it "CRUD & manipulate groups" do VCR.use_cassette('idv3_group_crud_mutation') do # Make sure there are no existing groups called foobar or baz - @service.groups.all.select { |group| %w(foobar baz).include? group.name }.each(&:destroy) - @service.groups.all.select { |group| %w(foobar baz).include? group.name }.length.must_equal 0 + @service.groups.all.select { |group| %w[foobar baz].include? group.name }.each(&:destroy) + @service.groups.all.select { |group| %w[foobar baz].include? group.name }.length.must_equal 0 # Create a group called foobar foobar_group = @service.groups.create(name: 'foobar', description: "Group of Foobar users") @@ -256,8 +257,8 @@ # Delete the group baz_group.destroy - proc { @service.groups.find_by_id foobar_id }.must_raise Fog::Identity::OpenStack::NotFound - @service.groups.all.select { |group| ['foobar', 'baz'].include? group.name }.length.must_equal 0 + proc { @service.groups.find_by_id foobar_id }.must_raise Fog::OpenStack::Identity::NotFound + @service.groups.all.select { |group| %w[foobar baz].include? group.name }.length.must_equal 0 end end @@ -294,14 +295,14 @@ @service.tokens.check(token.value) @service.tokens.revoke(token.value) - proc { @service.tokens.check(token.value) }.must_raise Fog::Identity::OpenStack::NotFound + proc { @service.tokens.check(token.value) }.must_raise Fog::OpenStack::Identity::NotFound end end it 'authenticates with a token' do VCR.use_cassette('authv3_token') do # Setup - get a non-admin token to check by using username/password authentication to start with - auth_url = "#{@os_auth_url}/auth/tokens" + auth_url = @os_auth_url begin foobar_user = @service.users.create( @@ -314,7 +315,7 @@ foobar_role = @service.roles.create(name: 'foobar_role390') foobar_user.grant_role(foobar_role.id) - nonadmin_v3 = Fog::Identity::OpenStack::V3.new( + nonadmin_v3 = Fog::OpenStack::Identity::V3.new( openstack_domain_id: foobar_user.domain_id, openstack_api_key: 's3cret!', openstack_username: 'foobar_385', @@ -323,7 +324,7 @@ ) # Test - check the token validity by using it to create a new Fog::Identity::OpenStack::V3 instance - token_check = Fog::Identity::OpenStack::V3.new( + token_check = Fog::OpenStack::Identity::V3.new( openstack_auth_token: nonadmin_v3.auth_token, openstack_region: @openstack_vcr.region, openstack_auth_url: auth_url @@ -332,7 +333,7 @@ token_check.wont_equal nil proc do - Fog::Identity::OpenStack::V3.new( + Fog::OpenStack::Identity::V3.new( openstack_auth_token: 'blahblahblah', openstack_region: @openstack_vcr.region, openstack_auth_url: auth_url @@ -340,9 +341,9 @@ end.must_raise Excon::Errors::NotFound ensure # Clean up - foobar_user = @service.users.find_by_name('foobar_385').first unless foobar_user + foobar_user ||= @service.users.find_by_name('foobar_385').first foobar_user.destroy if foobar_user - foobar_role = @service.roles.all.select { |role| role.name == 'foobar_role390' }.first unless foobar_role + foobar_role ||= @service.roles.all.select { |role| role.name == 'foobar_role390' }.first foobar_role.destroy if foobar_role end end @@ -361,7 +362,7 @@ default_domain = @service.domains.find_by_id @openstack_vcr.domain_id default_domain.wont_equal nil - proc { @service.domains.find_by_id 'atlantis' }.must_raise Fog::Identity::OpenStack::NotFound + proc { @service.domains.find_by_id 'atlantis' }.must_raise Fog::OpenStack::Identity::NotFound end end @@ -386,15 +387,19 @@ ensure # Delete the domains begin - baz_domain.update(enabled: false) if baz_domain - baz_domain.destroy if baz_domain - foobar_domain.update(enabled: false) if foobar_domain - foobar_domain.destroy if foobar_domain + if baz_domain + baz_domain.update(enabled: false) + baz_domain.destroy + end + if foobar_domain + foobar_domain.update(enabled: false) + foobar_domain.destroy + end rescue end # Check that the deletion worked - proc { @service.domains.find_by_id foobar_id }.must_raise Fog::Identity::OpenStack::NotFound if foobar_id - ['foobar', 'baz'].each do |domain_name| + proc { @service.domains.find_by_id foobar_id }.must_raise Fog::OpenStack::Identity::NotFound if foobar_id + %w[foobar baz].each do |domain_name| @service.domains.all(name: domain_name).length.must_equal 0 end end @@ -435,49 +440,49 @@ foobar_user.revoke_role(foobar_role.id) foobar_user.check_role(foobar_role.id).must_equal false ensure - foobar_user = @service.users.find_by_name('foobar_role_user').first unless foobar_user + foobar_user ||= @service.users.find_by_name('foobar_role_user').first foobar_user.destroy if foobar_user - foobar_role = @service.roles.all.select { |role| role.name == 'foobar_role' }.first unless foobar_role + foobar_role ||= @service.roles.all.select { |role| role.name == 'foobar_role' }.first foobar_role.destroy if foobar_role end end end + it "Manipulates roles on domain groups" do VCR.use_cassette('idv3_domain_group_roles_mutation') do skip "Manipulates roles on domain groups to be fixed" -=begin begin # Create a domain called foobar - foobar_domain = @service.domains.create(:name => 'd-foobar') + foobar_domain = @service.domains.create(name: 'd-foobar') # Create a group in this domain - foobar_group = @service.groups.create(:name => 'g-foobar', - :description => "Group of Foobar users", - :domain_id => foobar_domain.id) + foobar_group = @service.groups.create(name: 'g-foobar', + description: "Group of Foobar users", + domain_id: foobar_domain.id) # Create a user in the domain - foobar_user = @service.users.create(:name => 'u-foobar_foobar', - :email => 'foobar@example.com', - :password => 's3cret!', - :domain_id => foobar_domain.id) + foobar_user = @service.users.create(name: 'u-foobar_foobar', + email: 'foobar@example.com', + password: 's3cret!', + domain_id: foobar_domain.id) # User has no roles initially foobar_user.roles.length.must_equal 0 - # Create a role and add it to the domain group foobar_role = @service.roles.all.select { |role| role.name == 'foobar_role' }.first foobar_role.destroy if foobar_role - foobar_role = @service.roles.create(:name => 'foobar_role') + foobar_role = @service.roles.create(name: 'foobar_role') foobar_group.grant_role foobar_role.id foobar_group.roles.length.must_equal 1 # Add user to the group and check that it inherits the role foobar_user.check_role foobar_role.id.wont_equal nil - @service.role_assignments.all(:user_id => foobar_user.id, :effective => true).length.must_equal 0 + @service.role_assignments.all(user_id: foobar_user.id, effective: true).length.must_equal 0 foobar_group.add_user foobar_user.id foobar_user.check_role(foobar_role.id).must_equal false # Still false in absolute assignment terms - assignments = @service.role_assignments.all(:user_id => foobar_user.id, :effective => true) + assignments = @service.role_assignments.all(user_id: foobar_user.id, effective: true) + assignments.length.must_equal 1 assignments.first.role['id'].must_equal foobar_role.id assignments.first.user['id'].must_equal foobar_user.id @@ -485,7 +490,7 @@ assignments.first.links['assignment'].must_match %r{/v3/domains/#{foobar_domain.id}/groups/#{foobar_group.id}/roles/#{foobar_role.id}} assignments.first.links['membership'].must_match %r{/v3/groups/#{foobar_group.id}/users/#{foobar_user.id}} - group_assignments = @service.role_assignments.all(:group_id => foobar_group.id) + group_assignments = @service.role_assignments.all(group_id: foobar_group.id) group_assignments.length.must_equal 1 group_assignments.first.role['id'].must_equal foobar_role.id group_assignments.first.group['id'].must_equal foobar_group.id @@ -494,20 +499,21 @@ # Revoke the role from the group and check the user no longer has it foobar_group.revoke_role foobar_role.id - @service.role_assignments.all(:user_id => foobar_user.id, :effective => true).length.must_equal 0 + @service.role_assignments.all(user_id: foobar_user.id, effective: true).length.must_equal 0 ensure # Clean up - foobar_user = @service.users.find_by_name('u-foobar_foobar').first unless foobar_user + foobar_user ||= @service.users.find_by_name('u-foobar_foobar').first foobar_user.destroy if foobar_user - foobar_group = @service.groups.all.select { |group| group.name == 'g-foobar' }.first unless foobar_group + foobar_group ||= @service.groups.all.select { |group| group.name == 'g-foobar' }.first foobar_group.destroy if foobar_group - foobar_role = @service.roles.all.select { |role| role.name == 'foobar_role' }.first unless foobar_role - foobar_role.destroy if foobar_role - foobar_domain = @service.domains.all.select { |domain| domain.name == 'd-foobar' }.first unless foobar_domain - foobar_domain.update(:enabled => false) if foobar_domain - foobar_domain.destroy if foobar_domain + foobar_role ||= @service.roles.all.select { |role| role.name == 'foobar_role' }.first + foobar_role.destroyif foobar_role + foobar_domain ||= @service.domains.all.select { |domain| domain.name == 'd-foobar' }.first + if foobar_domain + foobar_domain.update(enabled: false) + foobar_domain.destroy + end end -=end end end @@ -524,7 +530,7 @@ role_by_id = @service.roles.find_by_id roles_all.first.id role_by_id.wont_equal nil - proc { @service.roles.find_by_id 'atlantis' }.must_raise Fog::Identity::OpenStack::NotFound + proc { @service.roles.find_by_id 'atlantis' }.must_raise Fog::OpenStack::Identity::NotFound end end @@ -548,8 +554,8 @@ baz_role.destroy baz_role = nil # Check that the deletion worked - proc { @service.roles.find_by_id foobar_id }.must_raise Fog::Identity::OpenStack::NotFound if foobar_id - ['foobar23', 'baz23'].each do |role_name| + proc { @service.roles.find_by_id foobar_id }.must_raise Fog::OpenStack::Identity::NotFound if foobar_id + %w[foobar23 baz23].each do |role_name| @service.roles.all(name: role_name).length.must_equal 0 end ensure @@ -575,7 +581,7 @@ project_byid = @service.projects.find_by_id projects_all.first.id project_byid.wont_equal nil - proc { @service.projects.find_by_id 'atlantis' }.must_raise Fog::Identity::OpenStack::NotFound + proc { @service.projects.find_by_id 'atlantis' }.must_raise Fog::OpenStack::Identity::NotFound end end @@ -605,7 +611,7 @@ baz_project.destroy # Check that the deletion worked - proc { @service.projects.find_by_id foobar_id }.must_raise Fog::Identity::OpenStack::NotFound + proc { @service.projects.find_by_id foobar_id }.must_raise Fog::OpenStack::Identity::NotFound ['p-foobar46', 'p-baz46'].each do |project_name| @service.projects.all(name: project_name).length.must_equal 0 end @@ -676,7 +682,7 @@ booboo_parents[booboo_parent_id].length.must_equal 1 booboo_grandparent_id = booboo_parents[booboo_parent_id].keys.first booboo_grandparent_id.must_equal foobar_id - booboo_parents[booboo_parent_id][booboo_grandparent_id].must_equal nil + assert_nil booboo_parents[booboo_parent_id][booboo_grandparent_id] # Get the parents of booboo, as a list of objects booboo_parents = @service.projects.find_by_id(booboo_id, :parents_as_list).parents @@ -689,10 +695,10 @@ boo_project.destroy if boo_project baz_project.destroy if baz_project foobar_project.destroy if foobar_project - prj_role = @service.roles.all(name: 'r-project67').first unless prj_role + prj_role ||= @service.roles.all(name: 'r-project67').first prj_role.destroy if prj_role # Check that the deletion worked - proc { @service.projects.find_by_id foobar_id }.must_raise Fog::Identity::OpenStack::NotFound if foobar_id + proc { @service.projects.find_by_id foobar_id }.must_raise Fog::OpenStack::Identity::NotFound if foobar_id ['p-booboo67', 'p-fooboo67', 'p-boo67', 'p-baz67', 'p-foobar67'].each do |project_name| prj = @service.projects.all(name: project_name).first prj.destroy if prj @@ -784,8 +790,10 @@ foobar_user.destroy if foobar_user foobar_group.destroy if foobar_group baz_role.destroy if baz_role - foobar_project.update(enabled: false) if foobar_project - foobar_project.destroy if foobar_project + if foobar_project + foobar_project.update(enabled: false) + foobar_project.destroy + end end end end @@ -803,13 +811,13 @@ some_service = @service.services.find_by_id services_all.first.id some_service.wont_equal nil - proc { @service.services.find_by_id 'atlantis' }.must_raise Fog::Identity::OpenStack::NotFound + proc { @service.services.find_by_id 'atlantis' }.must_raise Fog::OpenStack::Identity::NotFound end end it "CRUD services" do VCR.use_cassette('idv3_services_crud') do - all_services = @service.services.all + @service.services.all begin # Create a service called foobar @@ -832,8 +840,8 @@ baz_service.destroy if baz_service # Check that the deletion worked - proc { @service.services.find_by_id foobar_id }.must_raise Fog::Identity::OpenStack::NotFound if foobar_id - @service.services.all.select { |service| ['foobar', 'baz'].include? service.name }.length.must_equal 0 + proc { @service.services.find_by_id foobar_id }.must_raise Fog::OpenStack::Identity::NotFound if foobar_id + @service.services.all.select { |service| %w[foobar baz].include? service.name }.length.must_equal 0 end end end @@ -851,14 +859,14 @@ some_endpoint = @service.endpoints.find_by_id endpoints_all.first.id some_endpoint.wont_equal nil - proc { @service.endpoints.find_by_id 'atlantis' }.must_raise Fog::Identity::OpenStack::NotFound + proc { @service.endpoints.find_by_id 'atlantis' }.must_raise Fog::OpenStack::Identity::NotFound end end it "CRUD endpoints" do VCR.use_cassette('idv3_endpoints_crud') do service = @service.services.all.first - all_endpoints = @service.endpoints.all + @service.endpoints.all begin # Create a endpoint called foobar @@ -868,7 +876,9 @@ url: 'http://example.com/foobar', enabled: false) foobar_id = foobar_endpoint.id - @service.endpoints.all(interface: 'internal').select { |endpoint| endpoint.name == 'foobar' }.length.must_equal 1 + @service.endpoints.all(interface: 'internal').select do |endpoint| + endpoint.name == 'foobar' + end.length.must_equal 1 # Rename it to baz foobar_endpoint.update(name: 'baz', url: 'http://example.com/baz') @@ -876,7 +886,9 @@ foobar_endpoint.url.must_equal 'http://example.com/baz' # Read the endpoint freshly and check the name - @service.endpoints.all(interface: 'internal').select { |endpoint| endpoint.name == 'baz' }.length.must_equal 1 + @service.endpoints.all(interface: 'internal').select do |endpoint| + endpoint.name == 'baz' + end.length.must_equal 1 baz_endpoint = @service.endpoints.find_by_id foobar_id baz_endpoint.wont_equal nil baz_endpoint.name.must_equal 'baz' @@ -887,8 +899,8 @@ baz_endpoint.destroy # Check that the deletion worked - proc { @service.endpoints.find_by_id foobar_id }.must_raise Fog::Identity::OpenStack::NotFound - @service.endpoints.all.select { |endpoint| ['foobar', 'baz'].include? endpoint.name }.length.must_equal 0 + proc { @service.endpoints.find_by_id foobar_id }.must_raise Fog::OpenStack::Identity::NotFound + @service.endpoints.all.select { |endpoint| %w[foobar baz].include? endpoint.name }.length.must_equal 0 end end end @@ -901,7 +913,7 @@ credentials_all = @service.os_credentials.all credentials_all.wont_equal nil - proc { @service.os_credentials.find_by_id 'atlantis' }.must_raise Fog::Identity::OpenStack::NotFound + proc { @service.os_credentials.find_by_id 'atlantis' }.must_raise Fog::OpenStack::Identity::NotFound end end @@ -951,7 +963,7 @@ updated_credential.type.must_equal 'ec2' JSON.parse(updated_credential.blob)['secret'].must_equal new_secret_key ensure - foobar_user = @service.users.find_by_name('u-foobar_cred').first unless foobar_user + foobar_user ||= @service.users.find_by_name('u-foobar_cred').first foobar_user.destroy if foobar_user # Delete the credential begin @@ -962,7 +974,9 @@ end # Check that the deletion worked - proc { @service.os_credentials.find_by_id credential_id }.must_raise Fog::Identity::OpenStack::NotFound if credential_id + if credential_id + proc { @service.os_credentials.find_by_id credential_id }.must_raise Fog::OpenStack::Identity::NotFound + end @service.os_credentials.all.select { |credential| credential.type == 'ec2' }.length.must_equal 0 end end @@ -978,7 +992,7 @@ policies_all.wont_equal nil policies_all.length.must_equal 0 - proc { @service.policies.find_by_id 'atlantis' }.must_raise Fog::Identity::OpenStack::NotFound + proc { @service.policies.find_by_id 'atlantis' }.must_raise Fog::OpenStack::Identity::NotFound end end @@ -1011,7 +1025,7 @@ updated_policy.destroy # Check that the deletion worked - proc { @service.policies.find_by_id policy_id }.must_raise Fog::Identity::OpenStack::NotFound + proc { @service.policies.find_by_id policy_id }.must_raise Fog::OpenStack::Identity::NotFound @service.policies.all.select { |policy| policy.type == 'application/json' }.length.must_equal 0 end end diff --git a/spec/image_v1_spec.rb b/spec/image_v1_spec.rb index 6bde2c3a4..18c1b46c9 100644 --- a/spec/image_v1_spec.rb +++ b/spec/image_v1_spec.rb @@ -1,11 +1,11 @@ require 'spec_helper' require_relative './shared_context' -describe Fog::Image::OpenStack do +describe Fog::OpenStack::Image do before :all do openstack_vcr = OpenStackVCR.new( vcr_directory: 'spec/fixtures/openstack/image_v1', - service_class: Fog::Image::OpenStack::V1 + service_class: Fog::OpenStack::Image::V1 ) @service = openstack_vcr.service end diff --git a/spec/image_v2_spec.rb b/spec/image_v2_spec.rb index f73486d37..4363a8c06 100644 --- a/spec/image_v2_spec.rb +++ b/spec/image_v2_spec.rb @@ -1,13 +1,13 @@ require 'spec_helper' require_relative './shared_context' -describe Fog::Image::OpenStack do +describe Fog::OpenStack::Image do spec_data_folder = 'spec/fixtures/openstack/image_v2' before :all do openstack_vcr = OpenStackVCR.new( vcr_directory: spec_data_folder, - service_class: Fog::Image::OpenStack # Fog to choose latest available version + service_class: Fog::OpenStack::Image # Fog to choose latest available version ) @service = openstack_vcr.service end @@ -15,7 +15,13 @@ def cleanup_image(image, image_name = nil, image_id = nil) # Delete the image image.destroy if image - image_by_id = @service.images.find_by_id(image_id) rescue false if image_id + if image_id + begin + image_by_id = @service.images.find_by_id(image_id) + rescue StandardError + false + end + end image_by_id.destroy if image_by_id if image_name @service.images.all(name: image_name).each(&:destroy) @@ -89,7 +95,7 @@ def cleanup_image(image, image_name = nil, image_id = nil) identifier = "11111111-2222-3333-aaaa-bbbbbbcccce2" begin # Create an image with a specified ID - foobar_image = Fog::Image::OpenStack::V2::Image.new( + foobar_image = Fog::OpenStack::Image::V2::Image.new( name: 'original_name', id: identifier, service: @service, @@ -124,29 +130,28 @@ def cleanup_image(image, image_name = nil, image_id = nil) image_name = 'reloaded_image' begin created_image = @service.images.create( - name: image_name, - service: @service, - reloadable_property: 'original' + name: image_name + '_original', + service: @service ) identifier = created_image.id found_image = @service.images.find_by_id(identifier) # verify an image provided by `create` can be reloaded - found_image.reloadable_property = 'updated' + found_image.name = image_name + '_updated' found_image.save - created_image.reloadable_property.must_equal 'original' - created_image.reload - created_image.reloadable_property.must_equal 'updated' + created_image.name.must_equal image_name + '_original', + created_image.reload + created_image.name.must_equal image_name + '_updated' # verify an image provided by `find_by_id` can be reloaded - created_image.reloadable_property = 'updated_again' + created_image.name = image_name + '_updated_again' created_image.save - found_image.reloadable_property.must_equal 'updated' + found_image.name.must_equal image_name + '_updated' found_image.reload - found_image.reloadable_property.must_equal 'updated_again' + found_image.name.must_equal image_name + '_updated_again' ensure cleanup_image nil, image_name end @@ -239,13 +244,13 @@ def cleanup_image(image, image_name = nil, image_id = nil) foobar_image.add_tag 'tag1' @service.images.find_by_id(foobar_id).tags.must_include 'tag1' - foobar_image.add_tags %w(tag2 tag3 tag4) - @service.images.find_by_id(foobar_id).tags.must_equal %w(tag4 tag1 tag2 tag3) + foobar_image.add_tags %w[tag2 tag3 tag4] + @service.images.find_by_id(foobar_id).tags.must_equal %w[tag4 tag1 tag2 tag3] foobar_image.remove_tag 'tag2' - @service.images.find_by_id(foobar_id).tags.must_equal %w(tag4 tag1 tag3) + @service.images.find_by_id(foobar_id).tags.must_equal %w[tag4 tag1 tag3] - foobar_image.remove_tags %w(tag1 tag3) + foobar_image.remove_tags %w[tag1 tag3] @service.images.find_by_id(foobar_id).tags.must_include 'tag4' ensure cleanup_image foobar_image, image_name diff --git a/spec/image_v2_upload_spec.rb b/spec/image_v2_upload_spec.rb index 39baee86d..8ed420792 100644 --- a/spec/image_v2_upload_spec.rb +++ b/spec/image_v2_upload_spec.rb @@ -1,8 +1,10 @@ require 'spec_helper' -describe Fog::Image::OpenStack do +describe Fog::OpenStack::Image do it "Upload/download image data using chunked IO" do - if ENV['OS_AUTH_URL'] # We only run this against a live system, because VCR's use of Webmock stops Excon :response_block from working correctly + # We only run this against a live system, + # because VCR's use of Webmock stops Excon :response_block from working correctly + if ENV['OS_AUTH_URL'] @os_auth_url = ENV['OS_AUTH_URL'] @@ -10,14 +12,14 @@ Excon.defaults[:ssl_verify_peer] = false if ENV['SSL_VERIFY_PEER'] == 'false' # setup the service object - @service = Fog::Image::OpenStack.new( + @service ||= Fog::OpenStack::Image.new( openstack_auth_url: "#{@os_auth_url}/auth/tokens", openstack_project_name: ENV.fetch('OS_PROJECT_NAME'), openstack_username: ENV.fetch('OS_USERNAME'), openstack_api_key: ENV.fetch('OS_PASSWORD'), openstack_region: ENV['OS_REGION_NAME'] || 'RegionOne', openstack_domain_name: ENV['OS_USER_DOMAIN_NAME'] || 'Default' - ) unless @service + ) spec_data_folder = 'spec/fixtures/openstack/image_v2' @@ -25,7 +27,8 @@ #### ## Upload & download data using request/response blocks so we can stream data effectively #### - image_path = "#{spec_data_folder}/minimal.ova" # "no-op" virtual machine image, 80kB .ova file containing 64Mb dynamic disk + # "no-op" virtual machine image, 80kB .ova file containing 64Mb dynamic disk + image_path = "#{spec_data_folder}/minimal.ova" foobar_image = @service.images.create(name: 'foobar_up2', container_format: 'ovf', @@ -59,7 +62,11 @@ @service.images.all(name: 'foobar_up2').each(&:destroy) # Check that the deletion worked - proc { @service.images.find_by_id foobar_id }.must_raise Fog::Image::OpenStack::NotFound if foobar_id + if foobar_id + proc do + @service.images.find_by_id foobar_id + end.must_raise Fog::OpenStack::Image::NotFound + end @service.images.all(name: 'foobar_up2').length.must_equal 0 end end diff --git a/spec/monitoring_spec.rb b/spec/monitoring_spec.rb index 7a368aa05..820b9c48c 100644 --- a/spec/monitoring_spec.rb +++ b/spec/monitoring_spec.rb @@ -1,15 +1,15 @@ require 'spec_helper' require_relative './shared_context' -require 'fog/monitoring/openstack/models/metric' +require 'fog/openstack/monitoring/models/metric' require 'time' -describe Fog::Monitoring::OpenStack do +describe Fog::OpenStack::Monitoring do spec_data_folder = 'spec/fixtures/openstack/monitoring' before :all do openstack_vcr = OpenStackVCR.new( vcr_directory: spec_data_folder, - service_class: Fog::Monitoring::OpenStack + service_class: Fog::OpenStack::Monitoring ) @service = openstack_vcr.service @timestamp = 146_375_736_714_3 @@ -28,13 +28,13 @@ # create multiple metrics - metric_1 = Fog::Monitoring::OpenStack::Metric.new(name: 'sample_metric_1', + metric_1 = Fog::OpenStack::Monitoring::Metric.new(name: 'sample_metric_1', timestamp: @timestamp, dimensions: { "key1" => "value1" }, value: 42, value_meta: { "meta_key1" => "meta_value1" }) - metric_2 = Fog::Monitoring::OpenStack::Metric.new(name: 'sample_metric_2', + metric_2 = Fog::OpenStack::Monitoring::Metric.new(name: 'sample_metric_2', timestamp: @timestamp, dimensions: { "key1" => "value1" }, value: 42, @@ -71,10 +71,13 @@ metrics_name_list.wont_be_empty # failure cases - proc { @service.metrics.create(name: "this won't be created due to insufficient args") } - .must_raise Fog::Monitoring::OpenStack::ArgumentError - proc { @service.metrics.create(name: "this wont't be created due to invalid timestamp", timestamp: 1234) } - .must_raise Fog::Monitoring::OpenStack::ArgumentError + proc do + @service.metrics.create(name: "this won't be created due to insufficient args") + end.must_raise ArgumentError + + proc do + @service.metrics.create(name: "this wont't be created due to invalid timestamp", timestamp: 1234) + end.must_raise ArgumentError end end @@ -142,9 +145,13 @@ notification_method = nil # failure cases - proc { @service.notification_methods.create(name: "this won't be created due to insufficient args") } - .must_raise Fog::Monitoring::OpenStack::ArgumentError - proc { @service.notification_methods.find_by_id('bogus_id') }.must_raise Fog::Monitoring::OpenStack::NotFound + proc do + @service.notification_methods.create(name: "this won't be created due to insufficient args") + end.must_raise ArgumentError + + proc do + @service.notification_methods.find_by_id('bogus_id') + end.must_raise Fog::OpenStack::Monitoring::NotFound ensure notification_method.destroy if notification_method end @@ -217,8 +224,9 @@ notification_method = nil # failure cases - proc { @service.alarm_definitions.create(name: "this won't be created due to insufficient args") } - .must_raise Fog::Monitoring::OpenStack::ArgumentError + proc do + @service.alarm_definitions.create(name: "this won't be created due to insufficient args") + end.must_raise ArgumentError ensure alarm_definition.destroy if alarm_definition notification_method.destroy if notification_method diff --git a/spec/network_spec.rb b/spec/network_spec.rb index 0a66eaeac..f0b0cb778 100644 --- a/spec/network_spec.rb +++ b/spec/network_spec.rb @@ -1,11 +1,11 @@ require 'spec_helper' require_relative './shared_context' -describe Fog::Network::OpenStack do +describe Fog::OpenStack::Network do before :all do openstack_vcr = OpenStackVCR.new( vcr_directory: 'spec/fixtures/openstack/network', - service_class: Fog::Network::OpenStack, + service_class: Fog::OpenStack::Network, project_scoped: true ) @service = openstack_vcr.service @@ -13,7 +13,7 @@ openstack_vcr = OpenStackVCR.new( vcr_directory: 'spec/fixtures/openstack/network', - service_class: Fog::Identity::OpenStack::V3 + service_class: Fog::OpenStack::Identity::V3 ) @identity_service = openstack_vcr.service end @@ -41,7 +41,7 @@ VCR.use_cassette('rbacs_crud') do begin own_project = @identity_service.projects.select { |p| p.name == @current_project }.first - other_project = @identity_service.projects.select { |p| p.name != @current_project }.first + other_project = @identity_service.projects.reject { |p| p.name == @current_project }.first foonet = @service.networks.create(name: 'foo-net23', tenant_id: own_project.id) # create share access for other project @@ -81,7 +81,7 @@ @auth_token = @identity_service.credentials[:openstack_auth_token] openstack_vcr = OpenStackVCR.new( vcr_directory: 'spec/fixtures/openstack/network', - service_class: Fog::Network::OpenStack, + service_class: Fog::OpenStack::Network, project_scoped: true, token_auth: true, token: @auth_token diff --git a/spec/shared_context.rb b/spec/shared_context.rb index 7269f78cd..e195bd91d 100644 --- a/spec/shared_context.rb +++ b/spec/shared_context.rb @@ -33,13 +33,17 @@ class OpenStackVCR # This method should be called in a "before :all" call to set everything up. # A properly configured instance of the service class (e.g. - # Fog::Volume::OpenStack) is then made available in @service. + # Fog::OpenStack::Volume) is then made available in @service. def initialize(options) # read arguments # must_be_kind_of String @vcr_directory = options[:vcr_directory] # must_be_kind_of Class @service_class = options[:service_class] + + # v3 by default (nil) + @identity_version = options[:identity] == 'v2' ? 'v2' : 'v3' + # will be used as condition @with_project_scope = options[:project_scoped] # will be used as condition @@ -51,20 +55,7 @@ def initialize(options) Fog.interval = 0 # use an auth URL that matches our VCR recordings (IdentityV2 for most # services, but IdentityV3 test obviously needs IdentityV3 auth URL) - @os_auth_url = if [Fog::Identity::OpenStack::V3, - Fog::Volume::OpenStack, - Fog::Volume::OpenStack::V1, - Fog::Volume::OpenStack::V2, - Fog::Image::OpenStack, - Fog::Image::OpenStack::V1, - Fog::Network::OpenStack, - Fog::DNS::OpenStack, - Fog::SharedFileSystem::OpenStack, - Fog::Monitoring::OpenStack].include? @service_class - 'http://devstack.openstack.stack:5000/v3' - else - 'http://devstack.openstack.stack:5000/v2.0' - end + @os_auth_url = 'http://devstack.openstack.stack:5000' else # when an auth URL is given, we talk to a real OpenStack @os_auth_url = ENV['OS_AUTH_URL'] @@ -78,11 +69,26 @@ def initialize(options) if use_recorded config.cassette_library_dir = ENV['SPEC_PATH'] || @vcr_directory config.default_cassette_options = { record: :none } - config.default_cassette_options.merge! match_requests_on: [:method, :uri, :body] + config.default_cassette_options[:match_requests_on] = [:method, :uri, :body] else config.cassette_library_dir = "spec/debug" config.default_cassette_options = { record: :all } end + + config.before_playback do |interaction| + # shift issued_at and expires_at to Time.now and Time.now + 1.day in json cassette body + next unless interaction.response.headers["Content-Type"] == ["application/json"] + + interaction.response.body.scan(/"(issued_at|expires_at)": "(.*?)"/m).each do |match| + time_to = + case match[0] + when 'issued_at' then Time.now + when 'expires_at' then Time.now + 86400 + end + + interaction.response.body.gsub!("\"#{match[0]}\": \"#{match[1]}\"", "\"#{match[0]}\": \"#{time_to}\"") + end + end end # allow us to ignore dev certificates on servers @@ -99,7 +105,7 @@ def initialize(options) @username = 'admin' # keep in sync with the token obtained in the "common_setup.yml" @token = '5c28403cf669414d8ee179f1e7f205ee' - @interface = 'adminURL' + @interface = 'admin' @domain_id = 'default' @domain_name = 'Default' @project_name = 'admin' @@ -117,9 +123,11 @@ def initialize(options) @project_name = ENV['OS_PROJECT_NAME'] || options[:project_name] || @project_name end - if @service_class == Fog::Identity::OpenStack::V3 || @os_auth_url.end_with?('/v3') + # TODO: remove + # if @service_class == Fog::OpenStack::Identity::V3 || @os_auth_url.end_with?('/v3') + if @identity_version == 'v3' connection_options = { - openstack_auth_url: "#{@os_auth_url}/auth/tokens", + openstack_auth_url: @os_auth_url, openstack_region: @region, openstack_domain_name: @domain_name, openstack_endpoint_type: @interface, @@ -129,7 +137,7 @@ def initialize(options) connection_options[:openstack_service_type] = [ENV['OS_AUTH_SERVICE']] if ENV['OS_AUTH_SERVICE'] else connection_options = { - openstack_auth_url: "#{@os_auth_url}/tokens", + openstack_auth_url: @os_auth_url, openstack_region: @region, openstack_tenant: @project_name, openstack_cache_ttl: 0 diff --git a/spec/shared_file_system_spec.rb b/spec/shared_file_system_spec.rb index 0c7f4392c..89e4ceb6c 100644 --- a/spec/shared_file_system_spec.rb +++ b/spec/shared_file_system_spec.rb @@ -1,21 +1,21 @@ require 'spec_helper' require_relative './shared_context' -describe Fog::SharedFileSystem::OpenStack do +describe Fog::OpenStack::SharedFileSystem do spec_data_folder = 'spec/fixtures/openstack/shared_file_system' before :all do openstack_vcr = OpenStackVCR.new( vcr_directory: spec_data_folder, project_scoped: true, - service_class: Fog::SharedFileSystem::OpenStack + service_class: Fog::OpenStack::SharedFileSystem ) @service = openstack_vcr.service net_openstack_vcr = OpenStackVCR.new( vcr_directory: spec_data_folder, project_scoped: true, - service_class: Fog::Network::OpenStack + service_class: Fog::OpenStack::Network ) @network_service = net_openstack_vcr.service end diff --git a/spec/volume_spec.rb b/spec/volume_spec.rb index a9b477f19..47ff35513 100644 --- a/spec/volume_spec.rb +++ b/spec/volume_spec.rb @@ -2,15 +2,15 @@ require_relative './shared_context' [ - Fog::Volume::OpenStack, - Fog::Volume::OpenStack::V1, - Fog::Volume::OpenStack::V2 + Fog::OpenStack::Volume, + Fog::OpenStack::Volume::V1, + Fog::OpenStack::Volume::V2 ].delete_if { |the_class| ENV['TEST_CLASS'] && ENV['TEST_CLASS'] != the_class.name }.each do |service_class| describe service_class do before :all do - vcr_directory = 'spec/fixtures/openstack/volume' if service_class == Fog::Volume::OpenStack - vcr_directory = 'spec/fixtures/openstack/volume_v1' if service_class == Fog::Volume::OpenStack::V1 - vcr_directory = 'spec/fixtures/openstack/volume_v2' if service_class == Fog::Volume::OpenStack::V2 + vcr_directory = 'spec/fixtures/openstack/volume' if service_class == Fog::OpenStack::Volume + vcr_directory = 'spec/fixtures/openstack/volume_v1' if service_class == Fog::OpenStack::Volume::V1 + vcr_directory = 'spec/fixtures/openstack/volume_v2' if service_class == Fog::OpenStack::Volume::V2 openstack_vcr = OpenStackVCR.new( vcr_directory: vcr_directory, @@ -28,7 +28,7 @@ end def v2? - @service.kind_of? Fog::Volume::OpenStack::V2::Real + @service.kind_of? Fog::OpenStack::Volume::V2::Real end def setup_test_object(options) @@ -72,7 +72,7 @@ def cleanup_test_object(collection, id) begin object = collection.get(id) puts "Current status: #{object ? object.status : 'deleted'}" if ENV['DEBUG_VERBOSE'] - object.nil? || (%w(available error).include? object.status.downcase) + object.nil? || (%w[available error].include? object.status.downcase) end end @@ -105,10 +105,10 @@ def cleanup_test_object(collection, id) volume_size = 1 # in GB # create volume - volume_id = setup_test_object(:type => :volume, - @name_param => volume_name, + volume_id = setup_test_object(:type => :volume, + @name_param => volume_name, @description_param => volume_description, - :size => volume_size).id + :size => volume_size).id @service.volumes.all(@name_param => volume_name).length.must_equal 1 @@ -116,7 +116,7 @@ def cleanup_test_object(collection, id) puts "Retrieving volume by ID..." if ENV['DEBUG_VERBOSE'] volume = @service.volumes.get(volume_id) - volume.must_be_kind_of Fog::Volume::OpenStack::Volume + volume.must_be_kind_of Fog::OpenStack::Volume::Volume volume.id.must_equal volume_id volume.display_name.must_equal volume_name unless v2? @@ -134,7 +134,7 @@ def cleanup_test_object(collection, id) volumes = @service.volumes.all(@name_param => volume_name) volumes.length.must_equal 1 volume = volumes[0] - volume.must_be_kind_of Fog::Volume::OpenStack::Volume + volume.must_be_kind_of Fog::OpenStack::Volume::Volume volume.id.must_equal volume_id volume.display_name.must_equal volume_name unless v2? @@ -148,7 +148,7 @@ def cleanup_test_object(collection, id) volumes = @service.volumes.all(@name_param => volume_new_name) volume = volumes.first - volume.must_be_kind_of Fog::Volume::OpenStack::Volume + volume.must_be_kind_of Fog::OpenStack::Volume::Volume volume.display_name.must_equal volume_new_name unless v2? volume.name.must_equal volume_new_name if v2? @@ -185,7 +185,7 @@ def cleanup_test_object(collection, id) puts "Retrieving volume type by ID..." if ENV['DEBUG_VERBOSE'] type = @service.volume_types.get(type_id) - type.must_be_kind_of Fog::Volume::OpenStack::VolumeType + type.must_be_kind_of Fog::OpenStack::Volume::VolumeType type.id.must_equal type_id type.name.must_equal type_name @@ -193,7 +193,7 @@ def cleanup_test_object(collection, id) puts "Retrieving volume type by name..." if ENV['DEBUG_VERBOSE'] type = @service.volume_types.all(type_name).first - type.must_be_kind_of Fog::Volume::OpenStack::VolumeType + type.must_be_kind_of Fog::OpenStack::Volume::VolumeType type.id.must_equal type_id type.name.must_equal type_name end @@ -205,9 +205,9 @@ def cleanup_test_object(collection, id) volume_size_small = 1 # in GB volume_size_large = 2 # in GB - volume = setup_test_object(:type => :volume, + volume = setup_test_object(:type => :volume, @name_param => 'fog-testvolume-1', - :size => volume_size_small) + :size => volume_size_small) volume.wait_for { ready? && size == volume_size_small } # extend volume @@ -230,7 +230,7 @@ def cleanup_test_object(collection, id) # check that extending a non-existing volume fails puts "Extending deleted volume should fail..." if ENV['DEBUG_VERBOSE'] - proc { @service.extend_volume(volume.id, volume_size_small) }.must_raise Fog::Volume::OpenStack::NotFound + proc { @service.extend_volume(volume.id, volume_size_small) }.must_raise Fog::OpenStack::Volume::NotFound end end end @@ -241,9 +241,9 @@ def cleanup_test_object(collection, id) transfer_name = 'fog-testtransfer-1' # create volume object - volume = setup_test_object(:type => :volume, + volume = setup_test_object(:type => :volume, @name_param => 'fog-testvolume-1', - :size => 1) + :size => 1) volume.wait_for { ready? } # create transfer object @@ -259,7 +259,7 @@ def cleanup_test_object(collection, id) puts 'Retrieving transfer by ID...' if ENV['DEBUG_VERBOSE'] transfer = @service.transfers.get(transfer_id) - transfer.must_be_kind_of Fog::Volume::OpenStack::Transfer + transfer.must_be_kind_of Fog::OpenStack::Volume::Transfer transfer.id.must_equal transfer_id transfer.name.must_equal transfer_name @@ -271,16 +271,15 @@ def cleanup_test_object(collection, id) transfers = @service.transfers.all(name: transfer_name) transfers.length.must_equal 1 transfer = transfers[0] - transfer.must_be_kind_of Fog::Volume::OpenStack::Transfer + transfer.must_be_kind_of Fog::OpenStack::Volume::Transfer transfer.id.must_equal transfer_id transfer.name.must_equal transfer_name transfer.volume_id.must_equal volume.id - # to accept the transfer, we need a second connection to a different project puts 'Checking object visibility from different projects...' if ENV['DEBUG_VERBOSE'] other_service = service_class.new( - openstack_auth_url: "#{@os_auth_url}/auth/tokens", + openstack_auth_url: @os_auth_url, openstack_region: ENV['OS_REGION_NAME'] || 'RegionOne', openstack_api_key: ENV['OS_PASSWORD_OTHER'] || 'password', openstack_username: ENV['OS_USERNAME_OTHER'] || 'demo', @@ -289,11 +288,11 @@ def cleanup_test_object(collection, id) ) # check that recipient cannot see the transfer object - other_service.transfers.get(transfer.id).must_equal nil + other_service.transfers.get(transfer.id).must_be_nil other_service.transfers.all(name: transfer_name).length.must_equal 0 # # check that recipient cannot see the volume before transfer - # proc { other_service.volumes.get(volume.id) }.must_raise Fog::Compute::OpenStack::NotFound + # proc { other_service.volumes.get(volume.id) }.must_raise Fog::OpenStack::Compute::NotFound # other_service.volumes.all(@name_param => volume_name).length.must_equal 0 # The recipient can inexplicably see the volume even before the @@ -303,23 +302,23 @@ def cleanup_test_object(collection, id) # check that accept_transfer fails without valid transfer ID and auth key bogus_uuid = 'ec8ff7e8-81e2-4e12-b9fb-3e8890612c2d' # from Fog::UUID.uuid, but fixed to play nice with VCR - proc { other_service.transfers.accept(bogus_uuid, auth_key) }.must_raise Fog::Volume::OpenStack::NotFound + proc { other_service.transfers.accept(bogus_uuid, auth_key) }.must_raise Fog::OpenStack::Volume::NotFound proc { other_service.transfers.accept(transfer_id, 'invalidauthkey') }.must_raise Excon::Errors::BadRequest # accept transfer puts 'Accepting transfer...' if ENV['DEBUG_VERBOSE'] transfer = other_service.transfers.accept(transfer.id, auth_key) - transfer.must_be_kind_of Fog::Volume::OpenStack::Transfer + transfer.must_be_kind_of Fog::OpenStack::Volume::Transfer transfer.id.must_equal transfer_id transfer.name.must_equal transfer_name # check that recipient can see the volume volume = other_service.volumes.get(volume.id) - volume.must_be_kind_of Fog::Volume::OpenStack::Volume + volume.must_be_kind_of Fog::OpenStack::Volume::Volume # # check that sender cannot see the volume anymore - # proc { @service.volumes.get(volume.id) }.must_raise Fog::Compute::OpenStack::NotFound + # proc { @service.volumes.get(volume.id) }.must_raise Fog::OpenStack::Compute::NotFound # @service.volumes.all(@name_param => volume_name).length.must_equal 0 # As noted above, both users seem to be able to see the volume at all times. @@ -329,7 +328,7 @@ def cleanup_test_object(collection, id) # check that the transfer object is gone on both sides [@service, other_service].each do |service| - service.transfers.get(transfer.id).must_equal nil + service.transfers.get(transfer.id).must_be_nil service.transfers.all(name: transfer_name).length.must_equal 0 end ensure @@ -345,9 +344,9 @@ def cleanup_test_object(collection, id) VCR.use_cassette('volume_transfer_and_delete') do begin # create volume object - volume = setup_test_object(:type => :volume, + volume = setup_test_object(:type => :volume, @name_param => 'fog-testvolume-1', - :size => 1) + :size => 1) volume.wait_for { ready? } # create transfer object @@ -361,7 +360,7 @@ def cleanup_test_object(collection, id) # to try to accept the transfer, we need a second connection to a different project other_service = service_class.new( - openstack_auth_url: "#{@os_auth_url}/auth/tokens", + openstack_auth_url: @os_auth_url, openstack_region: ENV['OS_REGION_NAME'] || 'RegionOne', openstack_api_key: ENV['OS_PASSWORD_OTHER'] || 'password', openstack_username: ENV['OS_USERNAME_OTHER'] || 'demo', @@ -374,7 +373,7 @@ def cleanup_test_object(collection, id) # check that transfer cannot be accepted when it has been deleted puts 'Checking that accepting a deleted transfer fails...' if ENV['DEBUG_VERBOSE'] - proc { other_service.transfers.accept(transfer_id, auth_key) }.must_raise Fog::Volume::OpenStack::NotFound + proc { other_service.transfers.accept(transfer_id, auth_key) }.must_raise Fog::OpenStack::Volume::NotFound ensure # cleanup volume cleanup_test_object(@service.volumes, volume.id) if volume @@ -387,16 +386,16 @@ def cleanup_test_object(collection, id) VCR.use_cassette('volume_snapshot_and_delete') do begin # create volume object - volume = setup_test_object(:type => :volume, + volume = setup_test_object(:type => :volume, @name_param => 'fog-testvolume-1', - :size => 1) + :size => 1) volume.wait_for { ready? } # create snapshot object - snapshot = setup_test_object(:type => :snapshot, - @name_param => 'fog-testsnapshot-1', + snapshot = setup_test_object(:type => :snapshot, + @name_param => 'fog-testsnapshot-1', @description_param => 'Test snapshot', - :volume_id => volume.id) + :volume_id => volume.id) snapshot_id = snapshot.id # wait for the snapshot to be available @@ -405,7 +404,7 @@ def cleanup_test_object(collection, id) object = @service.snapshots.get(snapshot.id) object.wont_be_nil puts "Current status: #{object ? object.status : 'deleted'}" if ENV['DEBUG_VERBOSE'] - object.nil? || (%w(available error).include? object.status.downcase) + object.nil? || (%w[available error].include? object.status.downcase) end end @@ -430,7 +429,7 @@ def cleanup_test_object(collection, id) # cleanup volume begin snapshot.destroy if snapshot - rescue Fog::Volume::OpenStack::NotFound + rescue Fog::OpenStack::Volume::NotFound # Don't care if it doesn't exist end @@ -443,11 +442,11 @@ def cleanup_test_object(collection, id) VCR.use_cassette('volume_metadata_crud') do begin # create volume object with metadata - volume = setup_test_object(:type => :volume, + volume = setup_test_object(:type => :volume, @name_param => 'fog-testvolume-1', - :size => 1, - :metadata => { 'some_metadata' => 'this is meta', - 'more_metadata' => 'even more meta' }) + :size => 1, + :metadata => { 'some_metadata' => 'this is meta', + 'more_metadata' => 'even more meta' }) volume.wait_for { ready? } updated_volume = @service.volumes.get(volume.id) @@ -458,7 +457,7 @@ def cleanup_test_object(collection, id) # update metadata volume.update_metadata('some_metadata' => 'this is updated', - 'new_metadata' => 'this is new') + 'new_metadata' => 'this is new') updated_volume = @service.volumes.get(volume.id) check_metadata = updated_volume.metadata @@ -468,7 +467,7 @@ def cleanup_test_object(collection, id) check_metadata['new_metadata'].must_equal 'this is new' # replace metadata - volume.replace_metadata('some_metadata' => 'this is updated again', + volume.replace_metadata('some_metadata' => 'this is updated again', 'newer_metadata' => 'this is newer') updated_volume = @service.volumes.get(volume.id) @@ -495,18 +494,18 @@ def cleanup_test_object(collection, id) VCR.use_cassette('volume_snapshot_metadata_crud') do begin # create volume object with metadata - volume = setup_test_object(:type => :volume, + volume = setup_test_object(:type => :volume, @name_param => 'fog-testvolume-1', - :size => 1, - :metadata => { 'some_metadata' => 'this is meta', - 'more_metadata' => 'even more meta' }) + :size => 1, + :metadata => { 'some_metadata' => 'this is meta', + 'more_metadata' => 'even more meta' }) volume.wait_for { ready? } # create snapshot object - snapshot = setup_test_object(:type => :snapshot, - @name_param => 'fog-testsnapshot-1', + snapshot = setup_test_object(:type => :snapshot, + @name_param => 'fog-testsnapshot-1', @description_param => 'Test snapshot', - :volume_id => volume.id) + :volume_id => volume.id) snapshot_id = snapshot.id # wait for the snapshot to be available @@ -515,7 +514,7 @@ def cleanup_test_object(collection, id) object = @service.snapshots.get(snapshot_id) object.wont_be_nil puts "Current status: #{object ? object.status : 'deleted'}" if ENV['DEBUG_VERBOSE'] - object.nil? || (%w(available error).include? object.status.downcase) + object.nil? || (%w[available error].include? object.status.downcase) end end @@ -525,7 +524,7 @@ def cleanup_test_object(collection, id) # update metadata snapshot.update_metadata('some_snapshot_metadata' => 'this is data', - 'new_snapshot_metadata' => 'this is new') + 'new_snapshot_metadata' => 'this is new') updated_snapshot = @service.snapshots.get(snapshot_id) check_metadata = updated_snapshot.metadata diff --git a/test/authenticate_tests.rb b/test/authenticate_tests.rb index c3447bd73..4ee7ba294 100644 --- a/test/authenticate_tests.rb +++ b/test/authenticate_tests.rb @@ -14,49 +14,49 @@ "access" => { "token" => { "expires" => @expires.iso8601, - "id" => @token, - "tenant" => { - "enabled" => true, + "id" => @token, + "tenant" => { + "enabled" => true, "description" => nil, - "name" => "admin", - "id" => @tenant_token + "name" => "admin", + "id" => @tenant_token } }, "serviceCatalog" => [ { "endpoints" => [ { - "adminURL" => "http://example:8774/v2/#{@tenant_token}", - "region" => "RegionOne", + "adminURL" => "http://example:8774/v2/#{@tenant_token}", + "region" => "RegionOne", "internalURL" => "http://example:8774/v2/#{@tenant_token}", - "id" => Fog::Mock.random_numbers(8).to_s, - "publicURL" => "http://example:8774/v2/#{@tenant_token}" + "id" => Fog::Mock.random_numbers(8).to_s, + "publicURL" => "http://example:8774/v2/#{@tenant_token}" } ], "endpoints_links" => [], - "type" => "compute", - "name" => "nova" + "type" => "compute", + "name" => "nova" }, { - "endpoints" => [ + "endpoints" => [ { - "adminURL" => "http://example:9292", - "region" => "RegionOne", + "adminURL" => "http://example:9292", + "region" => "RegionOne", "internalURL" => "http://example:9292", - "id" => Fog::Mock.random_numbers(8).to_s, - "publicURL" => "http://example:9292" + "id" => Fog::Mock.random_numbers(8).to_s, + "publicURL" => "http://example:9292" } ], "endpoints_links" => [], - "type" => "image", - "name" => "glance" + "type" => "image", + "name" => "glance" } ], "user" => { - "username" => "admin", + "username" => "admin", "roles_links" => [], - "id" => Fog::Mock.random_numbers(8).to_s, - "roles" => [ + "id" => Fog::Mock.random_numbers(8).to_s, + "roles" => [ { "name" => "admin" }, { "name" => "KeystoneAdmin" }, { "name" => "KeystoneServiceAdmin" } @@ -65,7 +65,7 @@ }, "metadata" => { "is_admin" => 0, - "roles" => [ + "roles" => [ Fog::Mock.random_numbers(8).to_s, Fog::Mock.random_numbers(8).to_s, Fog::Mock.random_numbers(8).to_s @@ -84,9 +84,7 @@ expected = { user: @body['access']['user'], tenant: @body['access']['token']['tenant'], - identity_public_endpoint: nil, - server_management_url: @body['access']['serviceCatalog'] - .first['endpoints'].first['publicURL'], + server_management_url: @body['access']['serviceCatalog'].first['endpoints'].first['publicURL'], token: @token, expires: @expires.iso8601, current_user_id: @body['access']['user']['id'], @@ -95,7 +93,7 @@ assert(expected) do Fog::OpenStack.authenticate_v2( - openstack_auth_uri: URI('http://example/v2.0/tokens'), + openstack_auth_uri: URI('http://example'), openstack_tenant: 'admin', openstack_service_type: %w[compute] ) @@ -103,36 +101,44 @@ end it "validates token" do - old_credentials = Fog.credentials - Fog.credentials = { openstack_auth_url: 'http://openstack:35357/v2.0/tokens' } - identity = Fog::Identity[:openstack] + creds = { + openstack_auth_url: 'http://openstack:35357', + openstack_identity_api_version: 'v2.0' + } + identity = Fog::OpenStack::Identity.new(creds) identity.validate_token(@token, @tenant_token) identity.validate_token(@token) - Fog.credentials = old_credentials end it "checks token" do - old_credentials = Fog.credentials - Fog.credentials = { openstack_auth_url: 'http://openstack:35357/v2.0/tokens' } - identity = Fog::Identity[:openstack] + creds = { + openstack_auth_url: 'http://openstack:35357', + openstack_identity_api_version: 'v2.0' + } + identity = Fog::OpenStack::Identity.new(creds) identity.check_token(@token, @tenant_token) identity.check_token(@token) - Fog.credentials = old_credentials end it "v2 missing service" do Excon.stub( - { method: 'POST', path: "/v2.0/tokens" }, + { method: 'POST', path: '/v2.0/tokens' }, status: 200, body: Fog::JSON.encode(@body) ) + service = Object.new + service.extend(Fog::OpenStack::Core) + service.send( + :setup, + openstack_auth_url: 'http://example', + openstack_tenant: 'admin', + openstack_service_type: %w[network], + openstack_api_key: 'secret', + openstack_username: 'user' + ) proc do - Fog::OpenStack.authenticate_v2( - openstack_auth_uri: URI('http://example/v2.0/tokens'), - openstack_tenant: 'admin', - openstack_service_type: %w[network] - ) - end.must_raise Fog::Errors::NotFound, 'Could not find service network. Have compute, image' + service.send(:authenticate) + end.must_raise Fog::OpenStack::Auth::Catalog::ServiceTypeError end it "v2 missing storage service" do @@ -141,21 +147,20 @@ status: 200, body: Fog::JSON.encode(@body) ) - proc do - Fog::OpenStack.authenticate_v2( - openstack_auth_uri: URI('http://example/v2.0/tokens'), - openstack_tenant: 'admin', - openstack_service_type: 'object-store' - ) - end.must_raise NoMethodError, "undefined method `join' for \"object-store\":String" + service = Object.new + service.extend(Fog::OpenStack::Core) + service.send( + :setup, + openstack_auth_url: 'http://example', + openstack_tenant: 'admin', + openstack_api_key: 'secret', + openstack_username: 'user', + openstack_service_type: 'object-store' + ) proc do - Fog::OpenStack.authenticate_v2( - openstack_auth_uri: URI('http://example/v2.0/tokens'), - openstack_tenant: 'admin', - openstack_service_type: %w[object-store] - ) - end.must_raise Fog::Errors::NotFound, "Could not find service object-store. Have compute, image" + service.send(:authenticate) + end.must_raise Fog::OpenStack::Auth::Catalog::ServiceTypeError end it "v2 auth with two compute services" do @@ -164,16 +169,16 @@ { "endpoints" => [ { - "adminURL" => "http://example2:8774/v2/#{@tenant_token}", - "region" => "RegionOne", + "adminURL" => "http://example2:8774/v2/#{@tenant_token}", + "region" => "RegionOne", "internalURL" => "http://example2:8774/v2/#{@tenant_token}", - "id" => Fog::Mock.random_numbers(8).to_s, - "publicURL" => "http://example2:8774/v2/#{@tenant_token}" + "id" => Fog::Mock.random_numbers(8).to_s, + "publicURL" => "http://example2:8774/v2/#{@tenant_token}" } ], "endpoints_links" => [], - "type" => "compute", - "name" => "nova2" + "type" => "compute", + "name" => "nova2" } Excon.stub( @@ -181,38 +186,20 @@ status: 200, body: Fog::JSON.encode(body_clone) ) - assert("http://example2:8774/v2/#{@tenant_token}") do - Fog::OpenStack.authenticate_v2( - openstack_auth_uri: URI('http://example/v2.0/tokens'), - openstack_tenant: 'admin', - openstack_service_type: %w[compute], - openstack_service_name: 'nova2' - )[:server_management_url] - end - end - - it "legacy v1 auth" do - headers = { - "X-Storage-Url" => "https://swift.myhost.com/v1/AUTH_tenant", - "X-Auth-Token" => "AUTH_yui193bdc00c1c46c5858788yuio0e1e2p", - "X-Trans-Id" => "iu99nm9999f9b999c9b999dad9cd999e99", - "Content-Length" => "0", - "Date" => "Wed, 07 Aug 2013 11:11:11 GMT" - } - - Excon.stub( - { method: 'GET', path: "/auth/v1.0" }, - status: 200, body: "", headers: headers + service = Object.new + service.extend(Fog::OpenStack::Core) + service.send( + :setup, + openstack_auth_url: 'http://example', + openstack_tenant: 'admin', + openstack_api_key: 'secret', + openstack_username: 'user', + openstack_service_type: 'compute' ) - assert("https://swift.myhost.com/v1/AUTH_tenant") do - Fog::OpenStack.authenticate_v1( - openstack_auth_uri: URI('https://swift.myhost.com/auth/v1.0'), - openstack_username: 'tenant:dev', - openstack_api_key: 'secret_key', - openstack_service_type: %w[storage] - )[:server_management_url] - end + proc do + service.send(:authenticate) + end.must_raise Fog::OpenStack::Auth::Catalog::EndpointError, 'Multiple endpoints found' end after do diff --git a/test/helpers/collection_helper.rb b/test/helpers/collection_helper.rb index 1886c3e2e..cacc0bf9e 100644 --- a/test/helpers/collection_helper.rb +++ b/test/helpers/collection_helper.rb @@ -9,28 +9,32 @@ def collection_tests(collection, params = {}) end it "#new(#{params.inspect})" do - skip if Fog.mocking? - collection.new(params).must_equal 200 + unless Fog.mocking? + collection.new(params).must_equal 200 + end end it "#create(#{params.inspect})" do - skip if Fog.mocking? - @instance.must_be_kind_of Fog::Network::OpenStack::SecurityGroup + unless Fog.mocking? + @instance.must_be_kind_of Fog::OpenStack::Network::SecurityGroup + end end - # FIXME: work around for timing issue on AWS describe_instances mocks + # FIXME: work around for timing issue on AWS describe_instances mocks if Fog.mocking? && @instance.respond_to?(:ready?) @instance.wait_for { ready? } end it "#all" do - skip if Fog.mocking? - collection.all.must_be_kind_of Fog::Network::OpenStack::SecurityGroups + unless Fog.mocking? + collection.all.must_be_kind_of Fog::OpenStack::Network::SecurityGroups + end end it "#get(#{@identity})" do - skip if Fog.mocking? - collection.get(@identity).must_be_kind_of Fog::Network::OpenStack::SecurityGroup + unless Fog.mocking? + collection.get(@identity).must_be_kind_of Fog::OpenStack::Network::SecurityGroup + end end unless Fog.mocking? @@ -90,8 +94,9 @@ def collection_tests(collection, params = {}) end it "#get(@identity" do - skip if Fog.mocking? - collection.get(@identity).must_equal nil + unless Fog.mocking? + collection.get(@identity).must_equal nil + end end end end diff --git a/test/helpers/container_infra_helper.rb b/test/helpers/container_infra_helper.rb index d0e19b9bb..69f34717a 100644 --- a/test/helpers/container_infra_helper.rb +++ b/test/helpers/container_infra_helper.rb @@ -4,7 +4,7 @@ def self.container_infra class_variable_get(:@@container_infra) end - class_variable_set(:@@container_infra, Fog::ContainerInfra::OpenStack.new) + class_variable_set(:@@container_infra, Fog::OpenStack::ContainerInfra.new) end end diff --git a/test/helpers/dns_v2_helper.rb b/test/helpers/dns_v2_helper.rb index 2d3c7d664..3ccb8e72b 100644 --- a/test/helpers/dns_v2_helper.rb +++ b/test/helpers/dns_v2_helper.rb @@ -1,5 +1,5 @@ def set_dns_data - @dns = Fog::DNS::OpenStack::V2.new + @dns = Fog::OpenStack::DNS::V2.new @zone = @dns.create_zone('example.org', 'hostmaster@example.org') @zone_id = @zone.body['id'] diff --git a/test/helpers/model_helper.rb b/test/helpers/model_helper.rb index c9dad9eb9..35cf25a56 100644 --- a/test/helpers/model_helper.rb +++ b/test/helpers/model_helper.rb @@ -9,13 +9,15 @@ def model_tests(collection, params = {}) end it "#save" do - skip if Fog.mocking? - @instance.save.must_equal true + unless Fog.mocking? + @instance.save.must_equal true + end end it "#destroy" do - skip if Fog.mocking? - @instance.destroy.must_equal 200 + unless Fog.mocking? + @instance.destroy.must_equal 200 + end end end end diff --git a/test/helpers/network_helper.rb b/test/helpers/network_helper.rb index 7d8f40e53..a15cf4eab 100644 --- a/test/helpers/network_helper.rb +++ b/test/helpers/network_helper.rb @@ -4,7 +4,7 @@ def self.network class_variable_get(:@@network) end - class_variable_set(:@@network, Fog::Network[:openstack]) + class_variable_set(:@@network, Fog::OpenStack::Network.new) end end diff --git a/test/helpers/nfv_helper.rb b/test/helpers/nfv_helper.rb index bc0e9aab4..18c460132 100644 --- a/test/helpers/nfv_helper.rb +++ b/test/helpers/nfv_helper.rb @@ -1,5 +1,5 @@ def set_nfv_data - @nfv = Fog::NFV::OpenStack.new + @nfv = Fog::OpenStack::NFV.new @vnfd_data = { attributes: { @@ -18,7 +18,7 @@ def set_nfv_data } @auth = { - "tenantName" => "admin", + "tenantName" => "admin", "passwordCredentials" => { "username" => "admin", "password" => "password" diff --git a/test/identity_version_tests.rb b/test/identity_version_tests.rb index 3eefff97c..c81411dfb 100644 --- a/test/identity_version_tests.rb +++ b/test/identity_version_tests.rb @@ -7,17 +7,17 @@ end it "v2" do - Fog.credentials = { openstack_auth_url: 'http://openstack:35357/v2.0/tokens' } + Fog.credentials = { openstack_auth_url: 'http://openstack:35357' } - assert(Fog::Identity::OpenStack::V2::Mock) do + assert(Fog::OpenStack::Identity::V2::Real) do Fog::Identity[:openstack].class end end it "v3" do - Fog.credentials = { openstack_auth_url: 'http://openstack:35357/v3/auth/tokens' } + Fog.credentials = { openstack_auth_url: 'http://openstack:35357' } - assert(Fog::Identity::OpenStack::V3::Mock) do + assert(Fog::OpenStack::Identity::V3::Real) do Fog::Identity[:openstack].class end end diff --git a/test/microversion_test.rb b/test/microversion_test.rb index a4025ea63..8cc4d00dd 100644 --- a/test/microversion_test.rb +++ b/test/microversion_test.rb @@ -2,12 +2,13 @@ describe "when microversion" do before do - @microversion_tester = TestMicroVersion.new + @microversion_tester = Object.new + @microversion_tester = extend(Fog::OpenStack::Core) end describe "is nil" do it "should not appear in headers" do - merged_headers = @microversion_tester.headers({}) + merged_headers = @microversion_tester.send(:headers, {}) merged_headers.key?("X-Test-Header").must_equal false end end @@ -16,7 +17,7 @@ it "should appear in headers with proper value" do @microversion_tester.instance_variable_set(:@microversion, "2.15") @microversion_tester.instance_variable_set(:@microversion_key, "X-Test-Header") - merged_headers = @microversion_tester.headers({}) + merged_headers = @microversion_tester.send(:headers, {}) merged_headers.key?("X-Test-Header").must_equal true merged_headers["X-Test-Header"].must_equal "2.15" end @@ -26,13 +27,8 @@ it "should not appear in headers" do @microversion_tester.instance_variable_set(:@microversion, "") @microversion_tester.instance_variable_set(:@microversion_key, "X-Test-Header") - merged_headers = @microversion_tester.headers({}) + merged_headers = @microversion_tester.send(:headers, {}) merged_headers.key?("X-Test-Header").must_equal false end end - - class TestMicroVersion - include Fog::OpenStack::Core - public :headers - end end diff --git a/test/models/compute/images_tests.rb b/test/models/compute/images_tests.rb index 58131faa0..81e599882 100644 --- a/test/models/compute/images_tests.rb +++ b/test/models/compute/images_tests.rb @@ -1,9 +1,9 @@ require "test_helper" -describe "Fog::Compute[:openstack] | images collection" do +describe "Fog::OpenStack::Compute | images collection" do describe "success" do describe "#all" do - let (:fog) { Fog::Compute[:openstack] } + let (:fog) { Fog::OpenStack::Compute.new } it "must be an Array" do fog.images.all.must_be_kind_of Array diff --git a/test/models/compute/security_group_tests.rb b/test/models/compute/security_group_tests.rb index 8c82c438c..de38e6a95 100644 --- a/test/models/compute/security_group_tests.rb +++ b/test/models/compute/security_group_tests.rb @@ -1,8 +1,8 @@ require "test_helper" -describe "Fog::Compute[:openstack] | security_group" do +describe "Fog::OpenStack::Compute | security_group" do describe "success" do - let(:fog) { Fog::Compute[:openstack] } + let(:fog) { Fog::OpenStack::Compute.new } let(:security_group) do fog.security_groups.create( name: 'my_group', diff --git a/test/models/compute/server_group_tests.rb b/test/models/compute/server_group_tests.rb index d5a13333b..91fbdeb2d 100644 --- a/test/models/compute/server_group_tests.rb +++ b/test/models/compute/server_group_tests.rb @@ -1,16 +1,16 @@ require "test_helper" -describe "Fog::Compute::OpenStack::ServerGroup" do +describe "Fog::OpenStack::Compute::ServerGroup" do describe "validate_server_group_policy" do it "contains only allowed policies" do ['affinity', 'anti-affinity', 'soft-affinity', 'soft-anti-affinity'].each do |policy| - Fog::Compute::OpenStack::ServerGroup.validate_server_group_policy(policy).must_equal true + Fog::OpenStack::Compute::ServerGroup.validate_server_group_policy(policy).must_equal true end end it "raises an error" do assert_raises ArgumentError do - Fog::Compute::OpenStack::ServerGroup.validate_server_group_policy('invalid-policy') + Fog::OpenStack::Compute::ServerGroup.validate_server_group_policy('invalid-policy') end end end diff --git a/test/models/compute/server_tests.rb b/test/models/compute/server_tests.rb index d0fd070e8..b9108d8d0 100644 --- a/test/models/compute/server_tests.rb +++ b/test/models/compute/server_tests.rb @@ -1,7 +1,7 @@ require "test_helper" -describe "Fog::Compute[:openstack] | server" do - let (:compute) { Fog::Compute[:openstack] } +describe "Fog::OpenStack::Compute | server" do + let (:compute) { Fog::OpenStack::Compute.new } describe "success" do it "#floating_ips" do @@ -14,7 +14,7 @@ ) server.save - ip1 = Fog::Network[:openstack].floating_ips.create( + ip1 = Fog::OpenStack::Network.new.floating_ips.create( floating_network_id: 'f0000000-0000-0000-0000-000000000000', fixed_ip_address: '192.168.11.3' ) diff --git a/test/models/compute/service_tests.rb b/test/models/compute/service_tests.rb index ec75e1254..d692bdadc 100644 --- a/test/models/compute/service_tests.rb +++ b/test/models/compute/service_tests.rb @@ -1,9 +1,9 @@ require "test_helper" -describe "Fog::Compute[:openstack] | services" do +describe "Fog::OpenStack::Compute | services" do describe "success" do before do - services = Fog::Compute[:openstack].services.all + services = Fog::OpenStack::Compute.new.services.all @service = services.first end @@ -12,7 +12,7 @@ end it "#get" do - service = Fog::Compute[:openstack].services.get(@service.id) + service = Fog::OpenStack::Compute.new.services.get(@service.id) %w(id binary host).all? do |attr| attr1 = service.send(attr.to_sym) attr2 = @service.send(attr.to_sym) diff --git a/test/models/container_infra/bay_model_tests.rb b/test/models/container_infra/bay_model_tests.rb index 198e84256..2b056a2da 100644 --- a/test/models/container_infra/bay_model_tests.rb +++ b/test/models/container_infra/bay_model_tests.rb @@ -1,7 +1,7 @@ require "test_helper" require 'helpers/container_infra_helper' -describe "Fog::ContainerInfra[:openstack] | bay model" do +describe "Fog::OpenStack::ContainerInfra | bay model" do describe "success" do before do @instance = container_infra.bay_models.create( diff --git a/test/models/container_infra/bay_tests.rb b/test/models/container_infra/bay_tests.rb index b89f2ad7c..9596fb8c8 100644 --- a/test/models/container_infra/bay_tests.rb +++ b/test/models/container_infra/bay_tests.rb @@ -1,7 +1,7 @@ require "test_helper" require 'helpers/container_infra_helper' -describe "Fog::ContainerInfra[:openstack] | bay" do +describe "Fog::OpenStack::ContainerInfra | bay" do describe "success" do before do @instance = container_infra.bays.create( diff --git a/test/models/container_infra/certificate_tests.rb b/test/models/container_infra/certificate_tests.rb index 605d7375d..976c450fc 100644 --- a/test/models/container_infra/certificate_tests.rb +++ b/test/models/container_infra/certificate_tests.rb @@ -1,7 +1,7 @@ require "test_helper" require 'helpers/container_infra_helper' -describe "Fog::ContainerInfra[:openstack] | certificate" do +describe "Fog::OpenStack::ContainerInfra | certificate" do describe "success" do before do @instance = container_infra.certificates.create( diff --git a/test/models/container_infra/cluster_template_tests.rb b/test/models/container_infra/cluster_template_tests.rb index d9e676ec5..fcf024e33 100644 --- a/test/models/container_infra/cluster_template_tests.rb +++ b/test/models/container_infra/cluster_template_tests.rb @@ -1,7 +1,7 @@ require "test_helper" require 'helpers/container_infra_helper' -describe "Fog::ContainerInfra[:openstack] | cluster template" do +describe "Fog::OpenStack::ContainerInfra | cluster template" do describe "success" do before do @instance = container_infra.cluster_templates.create( diff --git a/test/models/container_infra/cluster_tests.rb b/test/models/container_infra/cluster_tests.rb index cdf5f22ac..83806aecd 100644 --- a/test/models/container_infra/cluster_tests.rb +++ b/test/models/container_infra/cluster_tests.rb @@ -1,7 +1,7 @@ require "test_helper" require 'helpers/container_infra_helper' -describe "Fog::ContainerInfra[:openstack] | cluster" do +describe "Fog::OpenStack::ContainerInfra | cluster" do describe "success" do before do @instance = container_infra.clusters.create( diff --git a/test/models/identity/ec2_credential_tests.rb b/test/models/identity/ec2_credential_tests.rb index 5a7a0b794..b87d89bba 100644 --- a/test/models/identity/ec2_credential_tests.rb +++ b/test/models/identity/ec2_credential_tests.rb @@ -2,7 +2,7 @@ describe "Fog::Identity[:openstack] | ec2_credential" do before do - identity = Fog::Identity[:openstack] + identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') tenant_id = identity.list_tenants.body['tenants'].first['id'] @user = identity.users.find { |user| user.name == 'foobar' } diff --git a/test/models/identity/ec2_credentials_tests.rb b/test/models/identity/ec2_credentials_tests.rb index 5aafc58b0..3efe4dcbb 100644 --- a/test/models/identity/ec2_credentials_tests.rb +++ b/test/models/identity/ec2_credentials_tests.rb @@ -2,7 +2,7 @@ describe "Fog::Identity[:openstack] | ec2_credentials" do before do - identity = Fog::Identity[:openstack] + identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') tenant_id = identity.list_tenants.body['tenants'].first['id'] @user = identity.users.find { |user| user.name == 'foobar' } @@ -44,17 +44,19 @@ describe "fails" do it "#find_by_access_key" do - skip if Fog.mocking? - proc do - @user.ec2_credentials.find_by_access_key('fake') - end.must_raise(Fog::Identity::OpenStack::NotFound) + unless Fog.mocking? + proc do + @user.ec2_credentials.find_by_access_key('fake') + end.must_raise(Fog::OpenStack::Identity::NotFound) + end end it "#destroy" do - skip if Fog.mocking? - proc do - @user.ec2_credentials.destroy('fake') - end.must_raise(Fog::Identity::OpenStack::NotFound) + unless Fog.mocking? + proc do + @user.ec2_credentials.destroy('fake') + end.must_raise(Fog::OpenStack::Identity::NotFound) + end end end end diff --git a/test/models/identity/role_tests.rb b/test/models/identity/role_tests.rb index bbdf37321..7153e6de4 100644 --- a/test/models/identity/role_tests.rb +++ b/test/models/identity/role_tests.rb @@ -2,7 +2,7 @@ describe "Fog::Identity[:openstack] | role" do before do - @identity = Fog::Identity[:openstack] + @identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') @instance = @identity.roles.new( name: 'Role Name', user_id: 1, diff --git a/test/models/identity/roles_tests.rb b/test/models/identity/roles_tests.rb index 0e33fdbc0..3f23d9dc0 100644 --- a/test/models/identity/roles_tests.rb +++ b/test/models/identity/roles_tests.rb @@ -2,8 +2,7 @@ describe "Fog::Identity[:openstack] | roles" do before do - @identity = Fog::Identity[:openstack] - + @identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') @tenant = @identity.tenants.create(name: 'test_user') @user = @identity.users.create(name: 'test_user', tenant_id: @tenant.id, password: 'spoof') @role = @identity.roles(user: @user, tenant: @tenant).create(name: 'test_role') @@ -18,7 +17,7 @@ describe "success" do it "#all" do - @roles.all.must_be_kind_of Fog::Identity::OpenStack::V2::Roles + @roles.all.must_be_kind_of Fog::OpenStack::Identity::V2::Roles end it "#get" do diff --git a/test/models/identity/tenant_tests.rb b/test/models/identity/tenant_tests.rb index 87fb02eca..877bf3bf3 100644 --- a/test/models/identity/tenant_tests.rb +++ b/test/models/identity/tenant_tests.rb @@ -2,7 +2,7 @@ describe "Fog::Identity[:openstack] | tenant" do before do - @identity = Fog::Identity[:openstack] + @identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') end describe "success" do diff --git a/test/models/identity/tenants_tests.rb b/test/models/identity/tenants_tests.rb index 3e20e0343..fa6e3f939 100644 --- a/test/models/identity/tenants_tests.rb +++ b/test/models/identity/tenants_tests.rb @@ -1,8 +1,8 @@ require "test_helper" -describe "Fog::Compute[:openstack] | tenants" do +describe "Fog::OpenStack::Compute | tenants" do before do - @identity = Fog::Identity[:openstack] + @identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') @instance = @identity.tenants.create(name: 'test') end @@ -19,19 +19,19 @@ describe "failure" do it "#find_by_id" do - skip if Fog.mocking? - - proc do - @identity.tenants.find_by_id('fake') - end.must_raise(Fog::Identity::OpenStack::NotFound) + unless Fog.mocking? + proc do + @identity.tenants.find_by_id('fake') + end.must_raise(Fog::OpenStack::Identity::NotFound) + end end it "#destroy" do - skip if Fog.mocking? - - proc do - @identity.tenants.destroy('fake') - end.must_raise(Fog::Identity::OpenStack::NotFound) + unless Fog.mocking? + proc do + @identity.tenants.destroy('fake') + end.must_raise(Fog::OpenStack::Identity::NotFound) + end end end end diff --git a/test/models/identity/user_tests.rb b/test/models/identity/user_tests.rb index 1a92bca13..a3f81c4cc 100644 --- a/test/models/identity/user_tests.rb +++ b/test/models/identity/user_tests.rb @@ -2,7 +2,7 @@ describe "Fog::Identity[:openstack] | user" do before do - @identity = Fog::Identity[:openstack] + @identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') @tenant_id = @identity.list_tenants.body['tenants'].first['id'] @instance = @identity.users.new( name: 'User Name', diff --git a/test/models/identity/users_tests.rb b/test/models/identity/users_tests.rb index 048a232a3..43126a432 100644 --- a/test/models/identity/users_tests.rb +++ b/test/models/identity/users_tests.rb @@ -2,7 +2,7 @@ describe "Fog::Identity[:openstack] | users" do before do - @identity = Fog::Identity[:openstack] + @identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') tenant_id = @identity.list_tenants.body['tenants'].first['id'] @instance = @identity.users.create( name: 'foobar', @@ -31,24 +31,27 @@ describe "fails" do it "#find_by_id" do - skip if Fog.mocking? - proc do - Fog::Identity[:openstack].users.find_by_id('fake') - end.must_raise(Fog::Identity::OpenStack::NotFound) + unless Fog.mocking? + proc do + Fog::Identity[:openstack].users.find_by_id('fake') + end.must_raise(Fog::OpenStack::Identity::NotFound) + end end it "#find_by_name" do - skip if Fog.mocking? - proc do - Fog::Identity[:openstack].users.find_by_name('fake') - end.must_raise(Fog::Identity::OpenStack::NotFound) + unless Fog.mocking? + proc do + Fog::Identity[:openstack].users.find_by_name('fake') + end.must_raise(Fog::OpenStack::Identity::NotFound) + end end it "#destroy" do - skip if Fog.mocking? - proc do - Fog::Identity[:openstack].users.destroy('fake') - end.must_raise(Fog::Identity::OpenStack::NotFound) + unless Fog.mocking? + proc do + Fog::Identity[:openstack].users.destroy('fake') + end.must_raise(Fog::OpenStack::Identity::NotFound) + end end end end diff --git a/test/models/image/image_tests.rb b/test/models/image/image_tests.rb index 06a289aa3..6622cb080 100644 --- a/test/models/image/image_tests.rb +++ b/test/models/image/image_tests.rb @@ -1,9 +1,9 @@ require "test_helper" -describe "Fog::Image[:openstack] | image" do +describe "Fog::OpenStack::Image | image" do describe "success" do before do - @instance = Fog::Image[:openstack].images.create(name: 'test image') + @instance = Fog::OpenStack::Image.new.images.create(name: 'test image') end it "#create" do diff --git a/test/models/image/images_tests.rb b/test/models/image/images_tests.rb index 4cfb8b3a3..5130d4415 100644 --- a/test/models/image/images_tests.rb +++ b/test/models/image/images_tests.rb @@ -1,22 +1,22 @@ require "test_helper" -describe "Fog::Image[:openstack] | images" do +describe "Fog::OpenStack::Image | images" do before do - @instance = Fog::Image[:openstack].create_image(name: "model test image").body + @instance = Fog::OpenStack::Image.new.create_image(name: "model test image").body end describe "success" do it "#find_by_id" do - image = Fog::Image[:openstack].images.find_by_id(@instance['image']['id']) + image = Fog::OpenStack::Image.new.images.find_by_id(@instance['image']['id']) image.id.must_equal @instance['image']['id'] end it "#get" do - image = Fog::Image[:openstack].images.get(@instance['image']['id']) + image = Fog::OpenStack::Image.new.images.get(@instance['image']['id']) image.id.must_equal @instance['image']['id'] end it "#destroy" do - Fog::Image[:openstack].images.destroy(@instance['image']['id']).must_equal true + Fog::OpenStack::Image.new.images.destroy(@instance['image']['id']).must_equal true end end end diff --git a/test/models/network/floating_ip_tests.rb b/test/models/network/floating_ip_tests.rb index c79858188..f89350dc0 100644 --- a/test/models/network/floating_ip_tests.rb +++ b/test/models/network/floating_ip_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | floating_ip" do +describe "Fog::OpenStack::Network | floating_ip" do describe "success" do let (:instance) do network.floating_ips.create( @@ -40,11 +41,11 @@ let(:disassociate) { instance.disassociate(fixed_ip_address) } it "resets port_id" do - disassociate.port_id.must_equal nil + disassociate.port_id.must_be_nil end it "resets fixed_ip_address" do - disassociate.fixed_ip_address.must_equal nil + disassociate.fixed_ip_address.must_be_nil end end diff --git a/test/models/network/floating_ips_tests.rb b/test/models/network/floating_ips_tests.rb index 7f4e1ba65..662b288a7 100644 --- a/test/models/network/floating_ips_tests.rb +++ b/test/models/network/floating_ips_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | floating_ips" do +describe "Fog::OpenStack::Network | floating_ips" do before do @floating_ip = network.floating_ips.create( floating_network_id: 'f0000000-0000-0000-0000-000000000000' diff --git a/test/models/network/ike_policies_tests.rb b/test/models/network/ike_policies_tests.rb index f5d11d207..cfda065df 100644 --- a/test/models/network/ike_policies_tests.rb +++ b/test/models/network/ike_policies_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | ike_policies" do +describe "Fog::OpenStack::Network | ike_policies" do before do @ike_policy = network.ike_policies.create( name: 'test-ike-policy', diff --git a/test/models/network/ike_policy_tests.rb b/test/models/network/ike_policy_tests.rb index 44186665f..a24ff9d7e 100644 --- a/test/models/network/ike_policy_tests.rb +++ b/test/models/network/ike_policy_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | ike_policy" do +describe "Fog::OpenStack::Network | ike_policy" do describe "success" do before do @instance = network.ike_policies.create( diff --git a/test/models/network/ipsec_policies_tests.rb b/test/models/network/ipsec_policies_tests.rb index a0cb69732..4133f88df 100644 --- a/test/models/network/ipsec_policies_tests.rb +++ b/test/models/network/ipsec_policies_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | ipsec_policies" do +describe "Fog::OpenStack::Network | ipsec_policies" do before do params = { name: 'test-ipsec-policy', diff --git a/test/models/network/ipsec_policy_tests.rb b/test/models/network/ipsec_policy_tests.rb index 323069f69..335a3f3a0 100644 --- a/test/models/network/ipsec_policy_tests.rb +++ b/test/models/network/ipsec_policy_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | ipsec_policy" do +describe "Fog::OpenStack::Network | ipsec_policy" do describe "success" do before do @instance = network.ipsec_policies.create( diff --git a/test/models/network/ipsec_site_connection_tests.rb b/test/models/network/ipsec_site_connection_tests.rb index e4645f590..13d04ed67 100644 --- a/test/models/network/ipsec_site_connection_tests.rb +++ b/test/models/network/ipsec_site_connection_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | ipsec_site_connection" do +describe "Fog::OpenStack::Network | ipsec_site_connection" do describe "success" do before do params = { @@ -16,9 +17,9 @@ psk: "secret", mtu: 1500, dpd: { - "action" => "hold", + "action" => "hold", "interval" => 30, - "timeout" => 120 + "timeout" => 120 }, initiator: "bi-directional", admin_state_up: true @@ -42,9 +43,9 @@ @instance.initiator = "bi-directional" @instance.admin_state_up = false @instance.dpd = { - "action" => "hold", + "action" => "hold", "interval" => 50, - "timeout" => 120 + "timeout" => 120 } @instance.update.name.must_equal "rename-test-ipsec-site-connection" diff --git a/test/models/network/ipsec_site_connections_tests.rb b/test/models/network/ipsec_site_connections_tests.rb index a2173098f..8da24ccc5 100644 --- a/test/models/network/ipsec_site_connections_tests.rb +++ b/test/models/network/ipsec_site_connections_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | ipsec_site_connections" do +describe "Fog::OpenStack::Network | ipsec_site_connections" do before do params = { name: 'test-ipsec-site-connection', diff --git a/test/models/network/lb_health_monitor_tests.rb b/test/models/network/lb_health_monitor_tests.rb index cb49caa91..5015ddda4 100644 --- a/test/models/network/lb_health_monitor_tests.rb +++ b/test/models/network/lb_health_monitor_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | lb_health_monitor" do +describe "Fog::OpenStack::Network | lb_health_monitor" do describe "success" do before do @lb_pool = network.lb_pools.create( diff --git a/test/models/network/lb_health_monitors_tests.rb b/test/models/network/lb_health_monitors_tests.rb index f71549506..f6da127c8 100644 --- a/test/models/network/lb_health_monitors_tests.rb +++ b/test/models/network/lb_health_monitors_tests.rb @@ -1,5 +1,7 @@ require "test_helper" -describe "Fog::Network[:openstack] | lb_health_monitors" do +require "helpers/network_helper" + +describe "Fog::OpenStack::Network | lb_health_monitors" do before do @lb_health_monitor = network.lb_health_monitors.create( type: 'PING', diff --git a/test/models/network/lb_member_tests.rb b/test/models/network/lb_member_tests.rb index c94ab742b..1e768e621 100644 --- a/test/models/network/lb_member_tests.rb +++ b/test/models/network/lb_member_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | lb_member" do +describe "Fog::OpenStack::Network | lb_member" do describe "success" do before do @instance = network.lb_members.create( diff --git a/test/models/network/lb_members_tests.rb b/test/models/network/lb_members_tests.rb index 2f3f164b1..1d2e0a23d 100644 --- a/test/models/network/lb_members_tests.rb +++ b/test/models/network/lb_members_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | lb_members" do +describe "Fog::OpenStack::Network | lb_members" do before do @lb_member = network.lb_members.create( pool_id: 'pool_id', diff --git a/test/models/network/lb_pool_tests.rb b/test/models/network/lb_pool_tests.rb index b49e0256d..5a4450d0c 100644 --- a/test/models/network/lb_pool_tests.rb +++ b/test/models/network/lb_pool_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | lb_pool" do +describe "Fog::OpenStack::Network | lb_pool" do describe "success" do before do @lb_health_monitor = network.lb_health_monitors.create( diff --git a/test/models/network/lb_pools_tests.rb b/test/models/network/lb_pools_tests.rb index b231f9f7b..8825245b2 100644 --- a/test/models/network/lb_pools_tests.rb +++ b/test/models/network/lb_pools_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | lb_pools" do +describe "Fog::OpenStack::Network | lb_pools" do before do @lb_pool = network.lb_pools.create( subnet_id: 'subnet_id', diff --git a/test/models/network/lb_vip_tests.rb b/test/models/network/lb_vip_tests.rb index ad17f9c07..f376c363c 100644 --- a/test/models/network/lb_vip_tests.rb +++ b/test/models/network/lb_vip_tests.rb @@ -1,5 +1,7 @@ require "test_helper" -describe "Fog::Network[:openstack] | lb_vip" do +require "helpers/network_helper" + +describe "Fog::OpenStack::Network | lb_vip" do describe "success" do before do attributes = { @@ -12,7 +14,7 @@ address: '10.0.0.1', session_persistence: { "cookie_name" => "COOKIE_NAME", - "type" => "APP_COOKIE" + "type" => "APP_COOKIE" }, connection_limit: 10, admin_state_up: true, diff --git a/test/models/network/lb_vips_tests.rb b/test/models/network/lb_vips_tests.rb index 3cb69f36a..20088de19 100644 --- a/test/models/network/lb_vips_tests.rb +++ b/test/models/network/lb_vips_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | lb_vips" do +describe "Fog::OpenStack::Network | lb_vips" do before do @lb_vip = network.lb_vips.create( subnet_id: 'subnet_id', diff --git a/test/models/network/network_tests.rb b/test/models/network/network_tests.rb index 39bda05b4..04efea2cc 100644 --- a/test/models/network/network_tests.rb +++ b/test/models/network/network_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | network" do +describe "Fog::OpenStack::Network | network" do describe "success" do before do @instance = network.networks.create( diff --git a/test/models/network/networks_tests.rb b/test/models/network/networks_tests.rb index aaaeef35f..0b90b2ffb 100644 --- a/test/models/network/networks_tests.rb +++ b/test/models/network/networks_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | networks" do +describe "Fog::OpenStack::Network | networks" do before do @network = network.networks.create( name: 'net_name', diff --git a/test/models/network/port_tests.rb b/test/models/network/port_tests.rb index a0b8ea4b1..0ec2821d3 100644 --- a/test/models/network/port_tests.rb +++ b/test/models/network/port_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | port" do +describe "Fog::OpenStack::Network | port" do describe "success" do before do @instance = network.ports.create( diff --git a/test/models/network/ports_tests.rb b/test/models/network/ports_tests.rb index 8dd11971f..c8b0e7263 100644 --- a/test/models/network/ports_tests.rb +++ b/test/models/network/ports_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | ports" do +describe "Fog::OpenStack::Network | ports" do before do @port = network.ports.create( name: 'port_name', diff --git a/test/models/network/router_tests.rb b/test/models/network/router_tests.rb index dece427c2..6b4616a84 100644 --- a/test/models/network/router_tests.rb +++ b/test/models/network/router_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | router" do +describe "Fog::OpenStack::Network | router" do describe "success" do before do @instance = network.routers.create( diff --git a/test/models/network/routers_tests.rb b/test/models/network/routers_tests.rb index d90f49d74..55d5e43bd 100644 --- a/test/models/network/routers_tests.rb +++ b/test/models/network/routers_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | routers" do +describe "Fog::OpenStack::Network | routers" do before do @router = network.routers.create( name: 'router_name', diff --git a/test/models/network/security_group_rule_tests.rb b/test/models/network/security_group_rule_tests.rb index 2757aef01..d8cc81fac 100644 --- a/test/models/network/security_group_rule_tests.rb +++ b/test/models/network/security_group_rule_tests.rb @@ -1,8 +1,8 @@ require "test_helper" - +require "helpers/network_helper" require "helpers/model_helper" -describe "Fog::Network[:openstack] | security_group_rule model" do +describe "Fog::OpenStack::Network | security_group_rule model" do @secgroup = network.security_groups.create(name: "fogsecgroup") attributes = { security_group_id: @secgroup.id, direction: "ingress" } model_tests(network.security_group_rules, attributes) diff --git a/test/models/network/security_group_rules_tests.rb b/test/models/network/security_group_rules_tests.rb index a8c2be90b..4684c1cb9 100644 --- a/test/models/network/security_group_rules_tests.rb +++ b/test/models/network/security_group_rules_tests.rb @@ -1,8 +1,8 @@ require "test_helper" - +require "helpers/network_helper" require "helpers/collection_helper" -describe "Fog::Network[:openstack] | security_group_rules collection" do +describe "Fog::OpenStack::Network | security_group_rules collection" do @secgroup = network.security_groups.create(name: "my_secgroup") attributes = { security_group_id: @secgroup.id, direction: "ingress" } collection_tests(network.security_group_rules, attributes) diff --git a/test/models/network/security_group_tests.rb b/test/models/network/security_group_tests.rb index 3bbc9c468..e18b04b39 100644 --- a/test/models/network/security_group_tests.rb +++ b/test/models/network/security_group_tests.rb @@ -1,8 +1,8 @@ require "test_helper" - +require "helpers/network_helper" require "helpers/model_helper" -describe "Fog::Network[:openstack] | security_group model" do +describe "Fog::OpenStack::Network | security_group model" do model_tests(network.security_groups, name: "fogsecgroup") describe "success" do diff --git a/test/models/network/security_groups_tests.rb b/test/models/network/security_groups_tests.rb index 9fab56cf6..552efd20e 100644 --- a/test/models/network/security_groups_tests.rb +++ b/test/models/network/security_groups_tests.rb @@ -1,8 +1,8 @@ require "test_helper" - +require "helpers/network_helper" require "helpers/collection_helper" -describe "Fog::Network[:openstack] | security_groups collection" do +describe "Fog::OpenStack::Network | security_groups collection" do @attributes = { name: "my_secgroup", description: "my sec group desc" diff --git a/test/models/network/subnet_pools_tests.rb b/test/models/network/subnet_pools_tests.rb index f07dd24d8..a003af4da 100644 --- a/test/models/network/subnet_pools_tests.rb +++ b/test/models/network/subnet_pools_tests.rb @@ -1,6 +1,7 @@ require 'test_helper' +require "helpers/network_helper" -describe 'Fog::Network[:openstack] | subnet_pools' do +describe 'Fog::OpenStack::Network | subnet_pools' do describe 'success' do before do @subnet_pool = network.subnet_pools.create( diff --git a/test/models/network/subnet_tests.rb b/test/models/network/subnet_tests.rb index 7d6ab7249..d824285cf 100644 --- a/test/models/network/subnet_tests.rb +++ b/test/models/network/subnet_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | subnet" do +describe "Fog::OpenStack::Network | subnet" do describe "success" do before do @instance = network.subnets.create( diff --git a/test/models/network/subnets_tests.rb b/test/models/network/subnets_tests.rb index 704473656..94fb03e0a 100644 --- a/test/models/network/subnets_tests.rb +++ b/test/models/network/subnets_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | subnets" do +describe "Fog::OpenStack::Network | subnets" do describe "success" do before do @subnet = network.subnets.create( diff --git a/test/models/network/vpn_service_tests.rb b/test/models/network/vpn_service_tests.rb index 2ca872ac9..857855e84 100644 --- a/test/models/network/vpn_service_tests.rb +++ b/test/models/network/vpn_service_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | vpn_service" do +describe "Fog::OpenStack::Network | vpn_service" do describe "success" do before do @instance = network.vpn_services.create( diff --git a/test/models/network/vpn_services_tests.rb b/test/models/network/vpn_services_tests.rb index 4b3201b45..9a3d1e9ec 100644 --- a/test/models/network/vpn_services_tests.rb +++ b/test/models/network/vpn_services_tests.rb @@ -1,6 +1,7 @@ require "test_helper" +require "helpers/network_helper" -describe "Fog::Network[:openstack] | vpn_services" do +describe "Fog::OpenStack::Network | vpn_services" do before do @vpn_service = network.vpn_services.create( subnet_id: 'foo', diff --git a/test/models/planning/plan_tests.rb b/test/models/planning/plan_tests.rb index 11d1aa7e0..21ed22d5a 100644 --- a/test/models/planning/plan_tests.rb +++ b/test/models/planning/plan_tests.rb @@ -1,9 +1,9 @@ require "test_helper" -describe "Fog::OpenStack[:planning] | plan" do +describe "Fog::OpenStack::Planning | plan" do describe "success" do before do - @planning = Fog::OpenStack[:planning] + @planning = Fog::OpenStack::Planning.new @instance = @planning.plans.first @role = @planning.list_roles.body.first end @@ -33,7 +33,7 @@ @instance.patch( parameters: [ { - "name" => parameter['name'], + "name" => parameter['name'], "value" => 'new_value' } ] diff --git a/test/models/planning/plans_tests.rb b/test/models/planning/plans_tests.rb index c87d8f7d9..dba84e72b 100644 --- a/test/models/planning/plans_tests.rb +++ b/test/models/planning/plans_tests.rb @@ -1,9 +1,9 @@ require "test_helper" -describe "Fog::OpenStack[:planning] | plans" do +describe "Fog::OpenStack::Planning | plans" do describe "success" do before do - @planning = Fog::OpenStack[:planning] + @planning = Fog::OpenStack::Planning.new @instance = @planning.plans.all.first end diff --git a/test/models/planning/role_tests.rb b/test/models/planning/role_tests.rb index 8ed226937..1ee5d2600 100644 --- a/test/models/planning/role_tests.rb +++ b/test/models/planning/role_tests.rb @@ -1,10 +1,10 @@ require "test_helper" -describe "Fog::OpenStack[:planning] | plan" do +describe "Fog::OpenStack::Planning | plan" do describe "success" do before do - @instance = Fog::OpenStack[:planning].roles.first - @plan = Fog::OpenStack[:planning].list_plans.body.first + @instance = Fog::OpenStack::Planning.new.roles.first + @plan = Fog::OpenStack::Planning.new.list_plans.body.first end it "#add_role" do diff --git a/test/models/storage/file_tests.rb b/test/models/storage/file_tests.rb index 104b50fd0..05a293e10 100644 --- a/test/models/storage/file_tests.rb +++ b/test/models/storage/file_tests.rb @@ -29,7 +29,7 @@ def clear_metadata key: "fogfilestests-#{rand(65536)}" } - @directory = Fog::Storage[:openstack].directories.create(directory_attributes) + @directory = Fog::OpenStack::Storage.new.directories.create(directory_attributes) describe "Fog::OpenStack::Storage | file" do after do @@ -74,6 +74,25 @@ def clear_metadata end end + describe "#cache_control" do + before do + @instance = @directory.files.create( + key: 'meta-test', + body: lorem_file, + cache_control: 'public, max-age=31536000' + ) + end + + after do + clear_metadata + @instance.save + end + + it "sets Cache-Control on create" do + object_attributes(@instance)["Cache-Control"].must_equal "public, max-age=31536000" + end + end + describe "#content_disposition" do before do @instance = @directory.files.create( diff --git a/test/requests/baremetal/chassis_tests.rb b/test/requests/baremetal/chassis_tests.rb index f1de52c37..afa121277 100644 --- a/test/requests/baremetal/chassis_tests.rb +++ b/test/requests/baremetal/chassis_tests.rb @@ -1,24 +1,24 @@ require "test_helper" -describe "Fog::Baremetal[:openstack] | Baremetal chassis requests" do +describe "Fog::OpenStack::Baremetal | Baremetal chassis requests" do describe "success" do before do - @baremetal = Fog::Baremetal[:openstack] + @baremetal = Fog::OpenStack::Baremetal.new @chassis_format = { 'description' => String, - 'uuid' => String, - 'links' => Array + 'uuid' => String, + 'links' => Array } @detailed_chassis_format = { 'description' => String, - 'uuid' => String, - 'created_at' => String, - 'updated_at' => Fog::Nullable::String, - 'extra' => Hash, - 'nodes' => Array, - 'links' => Array + 'uuid' => String, + 'created_at' => String, + 'updated_at' => Fog::Nullable::String, + 'extra' => Hash, + 'nodes' => Array, + 'links' => Array } chassis_attributes = { description: 'description' } diff --git a/test/requests/baremetal/driver_tests.rb b/test/requests/baremetal/driver_tests.rb index 79bf89a79..ae3179bb8 100644 --- a/test/requests/baremetal/driver_tests.rb +++ b/test/requests/baremetal/driver_tests.rb @@ -1,28 +1,28 @@ require "test_helper" -describe "Fog::Baremetal[:openstack] | Baremetal driver requests" do +describe "Fog::OpenStack::Baremetal | Baremetal driver requests" do before do - @baremetal = Fog::Baremetal[:openstack] + @baremetal = Fog::OpenStack::Baremetal.new @driver_format = { 'hosts' => Array, - 'name' => String + 'name' => String } @driver_properties_format = { - "pxe_deploy_ramdisk" => String, + "pxe_deploy_ramdisk" => String, "ipmi_transit_address" => String, - "ipmi_terminal_port" => String, - "ipmi_target_channel" => String, + "ipmi_terminal_port" => String, + "ipmi_target_channel" => String, "ipmi_transit_channel" => String, - "ipmi_local_address" => String, - "ipmi_username" => String, - "ipmi_address" => String, - "ipmi_target_address" => String, - "ipmi_password" => String, - "pxe_deploy_kernel" => String, - "ipmi_priv_level" => String, - "ipmi_bridging" => String + "ipmi_local_address" => String, + "ipmi_username" => String, + "ipmi_address" => String, + "ipmi_target_address" => String, + "ipmi_password" => String, + "pxe_deploy_kernel" => String, + "ipmi_priv_level" => String, + "ipmi_bridging" => String } @instances = @baremetal.list_drivers.body diff --git a/test/requests/baremetal/node_tests.rb b/test/requests/baremetal/node_tests.rb index ded78e23a..a640deaed 100644 --- a/test/requests/baremetal/node_tests.rb +++ b/test/requests/baremetal/node_tests.rb @@ -1,39 +1,39 @@ require "test_helper" -describe "Fog::Baremetal[:openstack] | Baremetal node requests" do +describe "Fog::OpenStack::Baremetal | Baremetal node requests" do before do - @baremetal = Fog::Baremetal[:openstack] + @baremetal = Fog::OpenStack::Baremetal.new @node_format = { - 'instance_uuid' => Fog::Nullable::String, - 'maintenance' => Fog::Boolean, - 'power_state' => Fog::Nullable::String, + 'instance_uuid' => Fog::Nullable::String, + 'maintenance' => Fog::Boolean, + 'power_state' => Fog::Nullable::String, 'provision_state' => Fog::Nullable::String, - 'uuid' => String, - 'links' => Array + 'uuid' => String, + 'links' => Array } @detailed_node_format = { - 'instance_uuid' => Fog::Nullable::String, - 'maintenance' => Fog::Boolean, - 'power_state' => Fog::Nullable::String, - 'provision_state' => Fog::Nullable::String, - 'uuid' => String, - 'created_at' => String, - 'updated_at' => Fog::Nullable::String, - 'chassis_uuid' => Fog::Nullable::String, - 'console_enabled' => Fog::Boolean, - 'driver' => String, - 'driver_info' => Hash, - 'extra' => Hash, - 'instance_info' => Hash, - 'last_error' => Fog::Nullable::String, - 'maintenance_reason' => Fog::Nullable::String, - 'properties' => Hash, - 'provision_updated_at' => Fog::Nullable::String, - 'reservation' => Fog::Nullable::String, - 'target_power_state' => Fog::Nullable::String, + 'instance_uuid' => Fog::Nullable::String, + 'maintenance' => Fog::Boolean, + 'power_state' => Fog::Nullable::String, + 'provision_state' => Fog::Nullable::String, + 'uuid' => String, + 'created_at' => String, + 'updated_at' => Fog::Nullable::String, + 'chassis_uuid' => Fog::Nullable::String, + 'console_enabled' => Fog::Boolean, + 'driver' => String, + 'driver_info' => Hash, + 'extra' => Hash, + 'instance_info' => Hash, + 'last_error' => Fog::Nullable::String, + 'maintenance_reason' => Fog::Nullable::String, + 'properties' => Hash, + 'provision_updated_at' => Fog::Nullable::String, + 'reservation' => Fog::Nullable::String, + 'target_power_state' => Fog::Nullable::String, 'target_provision_state' => Fog::Nullable::String, - 'links' => Array + 'links' => Array } end diff --git a/test/requests/baremetal/port_tests.rb b/test/requests/baremetal/port_tests.rb index 04d772b4e..fa4a9111d 100644 --- a/test/requests/baremetal/port_tests.rb +++ b/test/requests/baremetal/port_tests.rb @@ -1,22 +1,22 @@ require "test_helper" -describe "Fog::Baremetal[:openstack] | Baremetal port requests" do +describe "Fog::OpenStack::Baremetal | Baremetal port requests" do before do - @baremetal = Fog::Baremetal[:openstack] + @baremetal = Fog::OpenStack::Baremetal.new @port_format = { 'address' => String, - 'uuid' => String + 'uuid' => String } @detailed_port_format = { - 'address' => String, - 'uuid' => String, + 'address' => String, + 'uuid' => String, 'created_at' => String, 'updated_at' => Fog::Nullable::String, - 'extra' => Hash, - 'node_uuid' => String, - 'links' => Array + 'extra' => Hash, + 'node_uuid' => String, + 'links' => Array } end @@ -31,13 +31,13 @@ before do node_attributes = { driver: 'pxe_ipmitool' } - @instance = Fog::Baremetal[:openstack].create_node(node_attributes).body + @instance = Fog::OpenStack::Baremetal.new.create_node(node_attributes).body port_attributes = { address: '00:c2:08:85:de:ca', node_uuid: @instance['uuid'] } - @port = Fog::Baremetal[:openstack].create_port(port_attributes).body + @port = Fog::OpenStack::Baremetal.new.create_port(port_attributes).body end it "#create_port" do diff --git a/test/requests/compute/address_tests.rb b/test/requests/compute/address_tests.rb index 7c5e52012..1a12707d4 100644 --- a/test/requests/compute/address_tests.rb +++ b/test/requests/compute/address_tests.rb @@ -7,7 +7,7 @@ # such as "warning: class variable access from toplevel" which pollute the tests # output. The latter has been avoided using class_variable_set/get and class # methods to wrap them. -describe "Fog::Compute[:openstack] | address requests" do +describe "Fog::OpenStack::Compute | address requests" do def self.compute class_variable_get(:@@compute) end @@ -20,7 +20,7 @@ def self.data class_variable_get(:@@data) end - class_variable_set(:@@compute, Fog::Compute[:openstack]) + class_variable_set(:@@compute, Fog::OpenStack::Compute.new) class_variable_set(:@@server_id, compute.create_server("test_server", get_image_ref, @@ -49,10 +49,10 @@ def address_ip def address_format { "instance_id" => NilClass, - "ip" => String, - "fixed_ip" => NilClass, - "id" => Integer, - "pool" => String + "ip" => String, + "fixed_ip" => NilClass, + "id" => Integer, + "pool" => String } end diff --git a/test/requests/compute/aggregate_tests.rb b/test/requests/compute/aggregate_tests.rb index e4ff883dd..e069ff31c 100644 --- a/test/requests/compute/aggregate_tests.rb +++ b/test/requests/compute/aggregate_tests.rb @@ -1,20 +1,20 @@ require "test_helper" -describe "Fog::Compute[:openstack] | Compute aggregate requests" do +describe "Fog::OpenStack::Compute | Compute aggregate requests" do before do @aggregate_format = { "availability_zone" => Fog::Nullable::String, - "created_at" => String, - "deleted" => Fog::Boolean, - "deleted_at" => Fog::Nullable::String, - "id" => Integer, - "name" => String, - "updated_at" => Fog::Nullable::String + "created_at" => String, + "deleted" => Fog::Boolean, + "deleted_at" => Fog::Nullable::String, + "id" => Integer, + "name" => String, + "updated_at" => Fog::Nullable::String } @detailed_aggregate_format = @aggregate_format.merge('hosts' => Array) @metadata_aggregate_format = @aggregate_format.merge("metadata" => Hash) - @compute = Fog::Compute[:openstack] + @compute = Fog::OpenStack::Compute.new @aggregate_body = @compute.create_aggregate('test_aggregate').body @aggregate = @aggregate_body['aggregate'] diff --git a/test/requests/compute/availability_zone_tests.rb b/test/requests/compute/availability_zone_tests.rb index cb6f44902..cd5cddf02 100644 --- a/test/requests/compute/availability_zone_tests.rb +++ b/test/requests/compute/availability_zone_tests.rb @@ -1,23 +1,23 @@ require "test_helper" -describe "Fog::Compute[:openstack] | availability zone requests" do +describe "Fog::OpenStack::Compute | availability zone requests" do before do @flavor_format = { - 'zoneName' => String, - 'hosts' => Fog::Nullable::Hash, + 'zoneName' => String, + 'hosts' => Fog::Nullable::Hash, 'zoneState' => Hash } end describe "success" do it "#list_zones" do - Fog::Compute[:openstack].list_zones.body - .must_match_schema('availabilityZoneInfo' => [@flavor_format]) + Fog::OpenStack::Compute.new.list_zones.body + .must_match_schema('availabilityZoneInfo' => [@flavor_format]) end it "#list_zones_detailed" do - Fog::Compute[:openstack].list_zones_detailed.body - .must_match_schema('availabilityZoneInfo' => [@flavor_format]) + Fog::OpenStack::Compute.new.list_zones_detailed.body + .must_match_schema('availabilityZoneInfo' => [@flavor_format]) end end end diff --git a/test/requests/compute/flavor_tests.rb b/test/requests/compute/flavor_tests.rb index 599dccf68..b364f06dc 100644 --- a/test/requests/compute/flavor_tests.rb +++ b/test/requests/compute/flavor_tests.rb @@ -2,23 +2,23 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'helper')) -describe "Fog::Compute[:openstack] | flavor requests" do +describe "Fog::OpenStack::Compute | flavor requests" do before do @flavor_format = { - 'id' => String, - 'name' => String, - 'disk' => Integer, - 'ram' => Integer, - 'links' => Array, - 'swap' => Fog::Nullable::String, - 'rxtx_factor' => Fog::Nullable::Float, - 'OS-FLV-EXT-DATA:ephemeral' => Integer, + 'id' => String, + 'name' => String, + 'disk' => Integer, + 'ram' => Integer, + 'links' => Array, + 'swap' => Fog::Nullable::String, + 'rxtx_factor' => Fog::Nullable::Float, + 'OS-FLV-EXT-DATA:ephemeral' => Integer, 'os-flavor-access:is_public' => Fog::Nullable::Boolean, - 'OS-FLV-DISABLED:disabled' => Fog::Nullable::Boolean, - 'vcpus' => Integer + 'OS-FLV-DISABLED:disabled' => Fog::Nullable::Boolean, + 'vcpus' => Integer } - @compute = Fog::Compute[:openstack] + @compute = Fog::OpenStack::Compute.new end describe "success" do @@ -89,43 +89,48 @@ it "#get_flavor_details(0)" do proc do @compute.get_flavor_details("0") - end.must_raise Fog::Compute::OpenStack::NotFound + end.must_raise Fog::OpenStack::Compute::NotFound end it "add_flavor_access(1234, 1)" do - skip if Fog.mocking? - proc do - @compute.add_flavor_access(1234, 1).body - end.must_raise Fog::Compute::OpenStack::NotFound + unless Fog.mocking? + proc do + @compute.add_flavor_access(1234, 1).body + end.must_raise Fog::OpenStack::Compute::NotFound + end end it "remove_flavor_access(1234, 1)" do - skip if Fog.mocking? - proc do - @compute.remove_flavor_access(1234, 1).body - end.must_raise Fog::Compute::OpenStack::NotFound + unless Fog.mocking? + proc do + @compute.remove_flavor_access(1234, 1).body + end.must_raise Fog::OpenStack::Compute::NotFound + end end it "list_tenants_with_flavor_access(1234)" do - skip if Fog.mocking? - proc do - @compute.list_tenants_with_flavor_access(1234) - end.must_raise Fog::Compute::OpenStack::NotFound + unless Fog.mocking? + proc do + @compute.list_tenants_with_flavor_access(1234) + end.must_raise Fog::OpenStack::Compute::NotFound + end end it "get_flavor_metadata(flavor_ref)" do - skip if Fog.mocking? - proc do - @compute.get_flavor_metadata("1234").body - end.must_raise Fog::Compute::OpenStack::NotFound + unless Fog.mocking? + proc do + @compute.get_flavor_metadata("1234").body + end.must_raise Fog::OpenStack::Compute::NotFound + end end it "create_flavor_metadata(flavor_ref)" do - skip if Fog.mocking? - proc do - metadata = { cpu_arch: 'x86_64' } - @compute.create_flavor_metadata("1234", metadata).body - end.must_raise Fog::Compute::OpenStack::NotFound + unless Fog.mocking? + proc do + metadata = { cpu_arch: 'x86_64' } + @compute.create_flavor_metadata("1234", metadata).body + end.must_raise Fog::OpenStack::Compute::NotFound + end end end end diff --git a/test/requests/compute/helper.rb b/test/requests/compute/helper.rb index e2319ca42..36c8fad12 100644 --- a/test/requests/compute/helper.rb +++ b/test/requests/compute/helper.rb @@ -2,8 +2,8 @@ class OpenStack module Compute module Formats SUMMARY = { - 'id' => String, - 'name' => String, + 'id' => String, + 'name' => String, 'links' => Array } end @@ -11,15 +11,15 @@ module Formats end def get_flavor_ref - ENV['OPENSTACK_FLAVOR_REF'] || Fog::Compute[:openstack].list_flavors.body['flavors'].first['id'] + ENV['OPENSTACK_FLAVOR_REF'] || Fog::OpenStack::Compute.new.list_flavors.body['flavors'].first['id'] end def get_image_ref - ENV['OPENSTACK_IMAGE_REF'] || Fog::Compute[:openstack].list_images.body['images'].first['id'] + ENV['OPENSTACK_IMAGE_REF'] || Fog::OpenStack::Compute.new.list_images.body['images'].first['id'] end def get_volume_ref - ENV['OPENSTACK_VOLUME_REF'] || Fog::Compute[:openstack].list_volumes.body['volumes'].first['id'] + ENV['OPENSTACK_VOLUME_REF'] || Fog::OpenStack::Compute.new.list_volumes.body['volumes'].first['id'] end def get_flavor_ref_resize @@ -34,5 +34,5 @@ def set_password_enabled def get_security_group_ref ENV['OPENSTACK_SECURITY_GROUP_REF'] || - Fog::Compute[:openstack].list_security_groups.body['security_groups'].first['name'] + Fog::OpenStack::Compute.new.list_security_groups.body['security_groups'].first['name'] end diff --git a/test/requests/compute/image_tests.rb b/test/requests/compute/image_tests.rb index d48e72e8d..0a9ec0e7c 100644 --- a/test/requests/compute/image_tests.rb +++ b/test/requests/compute/image_tests.rb @@ -2,28 +2,28 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'helper')) -describe "Fog::Compute[:openstack] | image requests" do +describe "Fog::OpenStack::Compute | image requests" do before do @image_format = { - 'created' => Fog::Nullable::String, - 'id' => String, - 'name' => String, + 'created' => Fog::Nullable::String, + 'id' => String, + 'name' => String, 'progress' => Fog::Nullable::Integer, - 'status' => String, - 'updated' => String, - 'minRam' => Integer, - 'minDisk' => Integer, - 'server' => Fog::Nullable::Hash, + 'status' => String, + 'updated' => String, + 'minRam' => Integer, + 'minDisk' => Integer, + 'server' => Fog::Nullable::Hash, 'metadata' => Hash, - 'links' => Array + 'links' => Array } - @compute = Fog::Compute[:openstack] + @compute = Fog::OpenStack::Compute.new end describe "success" do before do - @image_id = Fog::Compute[:openstack].images[0].id + @image_id = Fog::OpenStack::Compute.new.images[0].id unless Fog.mocking? @compute.images.get(@image_id).wait_for { ready? } end @@ -54,17 +54,19 @@ describe "failure" do it "#delete_image(0)" do - skip if Fog.mocking? - proc do - @compute.delete_image(0) - end.must_raise Fog::Compute::OpenStack::NotFound + unless Fog.mocking? + proc do + @compute.delete_image(0) + end.must_raise Fog::OpenStack::Compute::NotFound + end end it "#get_image_details(0)" do - skip if Fog.mocking? - proc do - @compute.get_image_details(0) - end.must_raise Fog::Compute::OpenStack::NotFound + unless Fog.mocking? + proc do + @compute.get_image_details(0) + end.must_raise Fog::OpenStack::Compute::NotFound + end end end end diff --git a/test/requests/compute/keypair_tests.rb b/test/requests/compute/keypair_tests.rb index b7d6a94f0..c938bf074 100644 --- a/test/requests/compute/keypair_tests.rb +++ b/test/requests/compute/keypair_tests.rb @@ -1,35 +1,35 @@ require "test_helper" -describe "Fog::Compute[:openstack] | keypair requests" do +describe "Fog::OpenStack::Compute | keypair requests" do before do @keypair_format = { - "public_key" => String, + "public_key" => String, "private_key" => String, - "user_id" => String, - "name" => String, + "user_id" => String, + "name" => String, "fingerprint" => String } @keypair_list_format = { - "public_key" => String, - "name" => String, + "public_key" => String, + "name" => String, "fingerprint" => String } end describe "success" do it "#create_key_pair((key_name, public_key = nil))" do - Fog::Compute[:openstack].create_key_pair('from_shindo_test').body - .must_match_schema("keypair" => @keypair_format) + Fog::OpenStack::Compute.new.create_key_pair('from_shindo_test').body + .must_match_schema("keypair" => @keypair_format) end it "#list_key_pairs" do - Fog::Compute[:openstack].list_key_pairs.body - .must_match_schema("keypairs" => [{ "keypair" => @keypair_list_format }]) + Fog::OpenStack::Compute.new.list_key_pairs.body + .must_match_schema("keypairs" => [{ "keypair" => @keypair_list_format }]) end it "#delete_key_pair(key_name)" do - Fog::Compute[:openstack].delete_key_pair('from_shindo_test').status.must_equal 202 + Fog::OpenStack::Compute.new.delete_key_pair('from_shindo_test').status.must_equal 202 end end end diff --git a/test/requests/compute/limit_tests.rb b/test/requests/compute/limit_tests.rb index 9631dd47f..dc698fc4a 100644 --- a/test/requests/compute/limit_tests.rb +++ b/test/requests/compute/limit_tests.rb @@ -1,42 +1,42 @@ require "test_helper" -describe "Fog::Compute[:openstack] | limits requests" do +describe "Fog::OpenStack::Compute | limits requests" do before do @rate_limit_format = { 'regex' => String, - 'uri' => String, + 'uri' => String, 'limit' => Array } @rate_limit_usage_format = { 'next-available' => String, - 'unit' => String, - 'verb' => String, - 'remaining' => Integer, - 'value' => Integer + 'unit' => String, + 'verb' => String, + 'remaining' => Integer, + 'value' => Integer } @absolute_limits_format = { - 'maxServerMeta' => Integer, - 'maxTotalInstances' => Integer, - 'maxPersonality' => Integer, - 'maxImageMeta' => Integer, - 'maxPersonalitySize' => Integer, - 'maxSecurityGroupRules' => Integer, - 'maxTotalKeypairs' => Integer, - 'maxSecurityGroups' => Integer, - 'maxTotalCores' => Integer, - 'maxTotalFloatingIps' => Integer, - 'maxTotalRAMSize' => Integer, - 'totalCoresUsed' => Integer, - 'totalRAMUsed' => Integer, - 'totalInstancesUsed' => Integer, + 'maxServerMeta' => Integer, + 'maxTotalInstances' => Integer, + 'maxPersonality' => Integer, + 'maxImageMeta' => Integer, + 'maxPersonalitySize' => Integer, + 'maxSecurityGroupRules' => Integer, + 'maxTotalKeypairs' => Integer, + 'maxSecurityGroups' => Integer, + 'maxTotalCores' => Integer, + 'maxTotalFloatingIps' => Integer, + 'maxTotalRAMSize' => Integer, + 'totalCoresUsed' => Integer, + 'totalRAMUsed' => Integer, + 'totalInstancesUsed' => Integer, 'totalSecurityGroupsUsed' => Integer, - 'totalFloatingIpsUsed' => Integer + 'totalFloatingIpsUsed' => Integer } @limits_format = { - 'rate' => Array, + 'rate' => Array, 'absolute' => Hash } end @@ -44,23 +44,23 @@ describe "success" do describe "#get_limits" do it "format" do - Fog::Compute[:openstack].get_limits.body['limits'] - .must_match_schema(@limits_format) + Fog::OpenStack::Compute.new.get_limits.body['limits'] + .must_match_schema(@limits_format) end it "rate limit format" do - Fog::Compute[:openstack].get_limits.body['limits']['rate'] - .first.must_match_schema(@rate_limit_format) + Fog::OpenStack::Compute.new.get_limits.body['limits']['rate'] + .first.must_match_schema(@rate_limit_format) end it "rate limit usage format" do - Fog::Compute[:openstack].get_limits.body['limits']['rate'] - .first['limit'].first.must_match_schema(@rate_limit_usage_format) + Fog::OpenStack::Compute.new.get_limits.body['limits']['rate'] + .first['limit'].first.must_match_schema(@rate_limit_usage_format) end it "absolute limits format" do - Fog::Compute[:openstack].get_limits.body['limits']['absolute'] - .must_match_schema(@absolute_limits_format) + Fog::OpenStack::Compute.new.get_limits.body['limits']['absolute'] + .must_match_schema(@absolute_limits_format) end end end diff --git a/test/requests/compute/quota_tests.rb b/test/requests/compute/quota_tests.rb index 1a7446759..605615662 100644 --- a/test/requests/compute/quota_tests.rb +++ b/test/requests/compute/quota_tests.rb @@ -1,26 +1,27 @@ require "test_helper" -describe "Fog::Compute[:openstack] | quota requests" do +describe "Fog::OpenStack::Compute | quota requests" do before do - @tenant_id = Fog::Compute[:openstack].list_tenants.body['tenants'].first['id'] + identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') + @tenant_id = identity.list_tenants.body['tenants'].first['id'] @quota_set_format = { - 'key_pairs' => Integer, - 'metadata_items' => Integer, + 'key_pairs' => Integer, + 'metadata_items' => Integer, 'injected_file_content_bytes' => Integer, - 'injected_file_path_bytes' => Integer, - 'injected_files' => Integer, - 'ram' => Integer, - 'floating_ips' => Integer, - 'instances' => Integer, - 'cores' => Integer, - 'security_groups' => Fog::Nullable::Integer, - 'security_group_rules' => Fog::Nullable::Integer, - 'volumes' => Fog::Nullable::Integer, - 'gigabytes' => Fog::Nullable::Integer, - 'id' => String + 'injected_file_path_bytes' => Integer, + 'injected_files' => Integer, + 'ram' => Integer, + 'floating_ips' => Integer, + 'instances' => Integer, + 'cores' => Integer, + 'security_groups' => Fog::Nullable::Integer, + 'security_group_rules' => Fog::Nullable::Integer, + 'volumes' => Fog::Nullable::Integer, + 'gigabytes' => Fog::Nullable::Integer, + 'id' => String } - @compute = Fog::Compute[:openstack] + @compute = Fog::OpenStack::Compute.new @quota = @compute.get_quota(@tenant_id).body['quota_set'] end @@ -37,7 +38,7 @@ it "#update_quota" do new_values = @quota.merge( 'floating_ips' => @quota['floating_ips'] / 2, - 'cores' => @quota['cores'] / 2 + 'cores' => @quota['cores'] / 2 ) @compute.update_quota(@tenant_id, new_values.clone).status.must_equal 200 diff --git a/test/requests/compute/security_group_tests.rb b/test/requests/compute/security_group_tests.rb index c8143da63..c64a98c23 100644 --- a/test/requests/compute/security_group_tests.rb +++ b/test/requests/compute/security_group_tests.rb @@ -5,24 +5,24 @@ @security_group = {} @security_group_rule = {} @security_group_format = { - "id" => Integer, - "rules" => Array, - "tenant_id" => String, - "name" => String, + "id" => Integer, + "rules" => Array, + "tenant_id" => String, + "name" => String, "description" => String } @security_group_rule_format = { - "id" => Integer, - "from_port" => Integer, - "to_port" => Integer, - "ip_protocol" => String, - "group" => Hash, - "ip_range" => Hash, + "id" => Integer, + "from_port" => Integer, + "to_port" => Integer, + "ip_protocol" => String, + "group" => Hash, + "ip_range" => Hash, "parent_group_id" => Integer } - @compute = Fog::Compute[:openstack] + @compute = Fog::OpenStack::Compute.new @security_group = @compute.create_security_group('from_shindo_test', 'this is from the shindo test').body @security_group_id = @security_group['security_group']['id'] diff --git a/test/requests/compute/server_tests.rb b/test/requests/compute/server_tests.rb index 65ee313f0..8785a31a9 100644 --- a/test/requests/compute/server_tests.rb +++ b/test/requests/compute/server_tests.rb @@ -2,12 +2,12 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'helper')) -describe "Fog::Compute[:openstack] | server requests" do +describe "Fog::OpenStack::Compute | server requests" do def self.compute class_variable_get(:@@compute) end - class_variable_set(:@@compute, Fog::Compute[:openstack]) + class_variable_set(:@@compute, Fog::OpenStack::Compute.new) def compute self.class.compute @@ -16,27 +16,27 @@ def compute describe "success" do before do @create_format = { - 'adminPass' => String, - 'id' => String, - 'links' => Array, + 'adminPass' => String, + 'id' => String, + 'links' => Array, 'security_groups' => Fog::Nullable::Array } @base_server_format = { - 'id' => String, - 'addresses' => Hash, - 'flavor' => Hash, - 'hostId' => String, - 'metadata' => Hash, - 'name' => String, - 'progress' => Integer, - 'status' => String, - 'accessIPv4' => Fog::Nullable::String, - 'accessIPv6' => Fog::Nullable::String, - 'links' => Array, - 'created' => String, - 'updated' => String, - 'user_id' => String, + 'id' => String, + 'addresses' => Hash, + 'flavor' => Hash, + 'hostId' => String, + 'metadata' => Hash, + 'name' => String, + 'progress' => Integer, + 'status' => String, + 'accessIPv4' => Fog::Nullable::String, + 'accessIPv6' => Fog::Nullable::String, + 'links' => Array, + 'created' => String, + 'updated' => String, + 'user_id' => String, 'config_drive' => String } @@ -45,17 +45,17 @@ def compute @server_from_image_format = @base_server_format.merge('image' => Hash) @image_format = { - 'created' => Fog::Nullable::String, - 'id' => String, - 'name' => String, + 'created' => Fog::Nullable::String, + 'id' => String, + 'name' => String, 'progress' => Fog::Nullable::Integer, - 'status' => String, - 'updated' => String, - 'minRam' => Integer, - 'minDisk' => Integer, - 'server' => Hash, + 'status' => String, + 'updated' => String, + 'minRam' => Integer, + 'minDisk' => Integer, + 'server' => Hash, 'metadata' => Hash, - 'links' => Array + 'links' => Array } @image_id = get_image_ref @@ -152,7 +152,7 @@ def compute @data = compute.create_server("test", @image_id, @flavor_id).body['server'] @server_id = @data['id'] compute.servers.get(@server_id).wait_for { ready? } unless Fog.mocking? - # Fog::Compute[:openstack].servers.get(@server_id).wait_for { ready? } + # Fog::OpenStack::Compute.new.servers.get(@server_id).wait_for { ready? } end it "#create_server('test', #{@image_id}, 19)" do @@ -330,7 +330,7 @@ def compute # DELETE IMAGE it "#delete_image(#{@snapshot_id})" do - Fog::Compute[:openstack].servers.get(@server_id).wait_for { ready? } + Fog::OpenStack::Compute.new.servers.get(@server_id).wait_for { ready? } assert(compute.delete_image(@snapshot_id)) end end @@ -340,40 +340,43 @@ def compute it "#delete_server(0)" do proc do self.class.compute.delete_server(0) - end.must_raise Fog::Compute::OpenStack::NotFound + end.must_raise Fog::OpenStack::Compute::NotFound end it "#get_server_details(0)" do proc do self.class.compute.get_server_details(0) - end.must_raise Fog::Compute::OpenStack::NotFound + end.must_raise Fog::OpenStack::Compute::NotFound end it "#update_server(0, :name => 'fogupdatedserver', :adminPass => 'fogupdatedserver')" do proc do self.class.compute.update_server(0, name: 'fogupdatedserver', adminPass: 'fogupdatedserver') - end.must_raise Fog::Compute::OpenStack::NotFound + end.must_raise Fog::OpenStack::Compute::NotFound end it "#reboot_server(0)" do - skip if Fog.mocking? - proc do - self.class.compute.reboot_server(0) - end.must_raise Fog::Compute::OpenStack::NotFound + unless Fog.mocking? + proc do + self.class.compute.reboot_server(0) + end.must_raise Fog::OpenStack::Compute::NotFound + end end it "#start_server(0)" do - skip if Fog.mocking? - proc do - self.class.compute.start_server(0) - end.must_raise Fog::Compute::OpenStack::NotFound + unless Fog.mocking? + proc do + self.class.compute.start_server(0) + end.must_raise Fog::OpenStack::Compute::NotFound + end end it "#stop_server(0)" do - skip if Fog.mocking? - proc do - self.class.compute.stop_server(0) - end.must_raise Fog::Compute::OpenStack::NotFound + unless Fog.mocking? + proc do + self.class.compute.stop_server(0) + end.must_raise Fog::OpenStack::Compute::NotFound + end end end end diff --git a/test/requests/compute/service_tests.rb b/test/requests/compute/service_tests.rb index 5107caa6c..f38b8f8e6 100644 --- a/test/requests/compute/service_tests.rb +++ b/test/requests/compute/service_tests.rb @@ -1,18 +1,18 @@ require "test_helper" -describe "Shindo.tests('Fog::Compute[:openstack] | service requests" do +describe "Shindo.tests('Fog::OpenStack::Compute.new | service requests" do before do @service_format = { - "id" => Integer, - "binary" => String, - "host" => String, - "state" => String, - "status" => String, - "updated_at" => String, - "zone" => String, + "id" => Integer, + "binary" => String, + "host" => String, + "state" => String, + "status" => String, + "updated_at" => String, + "zone" => String, 'disabled_reason' => Fog::Nullable::String } - @services = Fog::Compute[:openstack].list_services.body + @services = Fog::OpenStack::Compute.new.list_services.body @service = @services['services'].last end @@ -22,13 +22,13 @@ end it "#disable_service" do - Fog::Compute[:openstack].disable_service( + Fog::OpenStack::Compute.new.disable_service( @service['host'], @service['binary'] ).body["service"]["status"].must_equal "disabled" end it "#disable_service_log_reason" do - disabled_service = Fog::Compute[:openstack].disable_service_log_reason( + disabled_service = Fog::OpenStack::Compute.new.disable_service_log_reason( @service['host'], @service['binary'], 'reason' ).body disabled_service["service"]["status"].must_equal "disabled" @@ -36,7 +36,7 @@ end it "#enable_service" do - Fog::Compute[:openstack].enable_service( + Fog::OpenStack::Compute.new.enable_service( @service['host'], @service['binary'] ).body["service"]["status"].must_equal "enabled" end diff --git a/test/requests/compute/tenant_tests.rb b/test/requests/compute/tenant_tests.rb index a18d9cc81..6c49a7405 100644 --- a/test/requests/compute/tenant_tests.rb +++ b/test/requests/compute/tenant_tests.rb @@ -1,23 +1,24 @@ require "test_helper" -describe "Fog::Compute[:openstack] | tenant requests" do +describe "Fog::OpenStack::Compute | tenant requests" do before do @tenant_format = { - 'id' => String, - 'name' => String, - 'enabled' => Fog::Boolean, + 'id' => String, + 'name' => String, + 'enabled' => Fog::Boolean, 'description' => Fog::Nullable::String } end describe "success" do it "#list_tenants" do - Fog::Compute[:openstack].list_tenants.body - .must_match_schema('tenants_links' => Array, 'tenants' => [@tenant_format]) + identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') + identity.list_tenants.body + .must_match_schema('tenants_links' => Array, 'tenants' => [@tenant_format]) end it "#set_tenant admin" do - Fog::Compute[:openstack].set_tenant("admin").must_equal true + Fog::OpenStack::Compute.new.set_tenant("admin").must_equal true end end end diff --git a/test/requests/compute/volume_tests.rb b/test/requests/compute/volume_tests.rb index 3e15f1a61..44b17ff98 100644 --- a/test/requests/compute/volume_tests.rb +++ b/test/requests/compute/volume_tests.rb @@ -1,22 +1,22 @@ require "test_helper" -describe "Fog::Compute[:openstack] | volume requests" do +describe "Fog::OpenStack::Compute | volume requests" do before do @volume_format = { - 'id' => String, - 'displayName' => String, - 'size' => Integer, + 'id' => String, + 'displayName' => String, + 'size' => Integer, 'displayDescription' => String, - 'status' => String, - 'snapshotId' => Fog::Nullable::String, - 'availabilityZone' => String, - 'attachments' => Array, - 'volumeType' => Fog::Nullable::String, - 'createdAt' => String, - 'metadata' => Hash + 'status' => String, + 'snapshotId' => Fog::Nullable::String, + 'availabilityZone' => String, + 'attachments' => Array, + 'volumeType' => Fog::Nullable::String, + 'createdAt' => String, + 'metadata' => Hash } - @compute = Fog::Compute[:openstack] + @compute = Fog::OpenStack::Compute.new @volume = @compute.create_volume('loud', 'this is a loud volume', 3).body end diff --git a/test/requests/container_infra/bay_model_tests.rb b/test/requests/container_infra/bay_model_tests.rb index bf35293b5..3186032be 100644 --- a/test/requests/container_infra/bay_model_tests.rb +++ b/test/requests/container_infra/bay_model_tests.rb @@ -1,39 +1,39 @@ require 'test_helper' require 'helpers/container_infra_helper' -describe "Fog::ContainerInfra[:openstack] | bay model requests" do +describe "Fog::OpenStack::ContainerInfra | bay model requests" do before do @bay_model_format = { - "insecure_registry" => Fog::Nullable::String, - "http_proxy" => Fog::Nullable::String, - "updated_at" => Fog::Nullable::String, - "floating_ip_enabled" => Fog::Nullable::Boolean, - "fixed_subnet" => Fog::Nullable::String, - "master_flavor_id" => Fog::Nullable::String, - "uuid" => Fog::Nullable::String, - "no_proxy" => Fog::Nullable::String, - "https_proxy" => Fog::Nullable::String, - "tls_disabled" => Fog::Nullable::Boolean, - "keypair_id" => String, - "public" => Fog::Nullable::Boolean, - "labels" => Fog::Nullable::Hash, - "docker_volume_size" => Fog::Nullable::Integer, - "server_type" => Fog::Nullable::String, - "external_network_id" => Fog::Nullable::String, - "cluster_distro" => Fog::Nullable::String, - "image_id" => Fog::Nullable::String, - "volume_driver" => Fog::Nullable::String, - "registry_enabled" => Fog::Nullable::Boolean, + "insecure_registry" => Fog::Nullable::String, + "http_proxy" => Fog::Nullable::String, + "updated_at" => Fog::Nullable::String, + "floating_ip_enabled" => Fog::Nullable::Boolean, + "fixed_subnet" => Fog::Nullable::String, + "master_flavor_id" => Fog::Nullable::String, + "uuid" => Fog::Nullable::String, + "no_proxy" => Fog::Nullable::String, + "https_proxy" => Fog::Nullable::String, + "tls_disabled" => Fog::Nullable::Boolean, + "keypair_id" => String, + "public" => Fog::Nullable::Boolean, + "labels" => Fog::Nullable::Hash, + "docker_volume_size" => Fog::Nullable::Integer, + "server_type" => Fog::Nullable::String, + "external_network_id" => Fog::Nullable::String, + "cluster_distro" => Fog::Nullable::String, + "image_id" => Fog::Nullable::String, + "volume_driver" => Fog::Nullable::String, + "registry_enabled" => Fog::Nullable::Boolean, "docker_storage_driver" => Fog::Nullable::String, - "apiserver_port" => Fog::Nullable::Integer, - "name" => String, - "created_at" => Fog::Nullable::String, - "network_driver" => Fog::Nullable::String, - "fixed_network" => Fog::Nullable::String, - "coe" => Fog::Nullable::String, - "flavor_id" => Fog::Nullable::String, - "master_lb_enabled" => Fog::Nullable::Boolean, - "dns_nameserver" => Fog::Nullable::String + "apiserver_port" => Fog::Nullable::Integer, + "name" => String, + "created_at" => Fog::Nullable::String, + "network_driver" => Fog::Nullable::String, + "fixed_network" => Fog::Nullable::String, + "coe" => Fog::Nullable::String, + "flavor_id" => Fog::Nullable::String, + "master_lb_enabled" => Fog::Nullable::Boolean, + "dns_nameserver" => Fog::Nullable::String } end @@ -71,14 +71,14 @@ bay_model_uuid = container_infra.bay_models.all.first.uuid attributes = [ { - "path" => "/master_lb_enabled", + "path" => "/master_lb_enabled", "value" => "True", - "op" => "replace" + "op" => "replace" }, { - "path" => "/registry_enabled", + "path" => "/registry_enabled", "value" => "True", - "op" => "replace" + "op" => "replace" } ] diff --git a/test/requests/container_infra/bay_tests.rb b/test/requests/container_infra/bay_tests.rb index 82c072885..9c51df1ad 100644 --- a/test/requests/container_infra/bay_tests.rb +++ b/test/requests/container_infra/bay_tests.rb @@ -1,25 +1,25 @@ require 'test_helper' require 'helpers/container_infra_helper' -describe "Fog::ContainerInfra[:openstack] | bay requests" do +describe "Fog::OpenStack::ContainerInfra | bay requests" do before do @bay_format = { - "status" => String, - "uuid" => String, - "stack_id" => Fog::Nullable::String, - "created_at" => Fog::Nullable::String, - "api_address" => Fog::Nullable::String, - "discovery_url" => Fog::Nullable::String, - "updated_at" => Fog::Nullable::String, - "master_count" => Fog::Nullable::Integer, - "coe_version" => Fog::Nullable::String, - "baymodel_id" => String, - "master_addresses" => Fog::Nullable::Array, - "node_count" => Fog::Nullable::Integer, - "node_addresses" => Fog::Nullable::Array, - "status_reason" => Fog::Nullable::String, - "create_timeout" => Fog::Nullable::Integer, - "name" => String + "status" => String, + "uuid" => String, + "stack_id" => Fog::Nullable::String, + "created_at" => Fog::Nullable::String, + "api_address" => Fog::Nullable::String, + "discovery_url" => Fog::Nullable::String, + "updated_at" => Fog::Nullable::String, + "master_count" => Fog::Nullable::Integer, + "coe_version" => Fog::Nullable::String, + "baymodel_id" => String, + "master_addresses" => Fog::Nullable::Array, + "node_count" => Fog::Nullable::Integer, + "node_addresses" => Fog::Nullable::Array, + "status_reason" => Fog::Nullable::String, + "create_timeout" => Fog::Nullable::Integer, + "name" => String } end @@ -63,9 +63,9 @@ bay_uuid = container_infra.bays.all.first.uuid attributes = [ { - "path" => "/node_count", + "path" => "/node_count", "value" => 2, - "op" => "replace" + "op" => "replace" } ] diff --git a/test/requests/container_infra/certificate_tests.rb b/test/requests/container_infra/certificate_tests.rb index dc0949752..ef2120d01 100644 --- a/test/requests/container_infra/certificate_tests.rb +++ b/test/requests/container_infra/certificate_tests.rb @@ -1,13 +1,13 @@ require 'test_helper' require 'helpers/container_infra_helper' -describe "Fog::ContainerInfra[:openstack] | certificate requests" do +describe "Fog::OpenStack::ContainerInfra | certificate requests" do before do @certificate_format = { - "pem" => String, - "bay_uuid" => Fog::Nullable::String, + "pem" => String, + "bay_uuid" => Fog::Nullable::String, "cluster_uuid" => Fog::Nullable::String, - "csr" => Fog::Nullable::String + "csr" => Fog::Nullable::String } end diff --git a/test/requests/container_infra/cluster_template_tests.rb b/test/requests/container_infra/cluster_template_tests.rb index c35330217..876cb5bb2 100644 --- a/test/requests/container_infra/cluster_template_tests.rb +++ b/test/requests/container_infra/cluster_template_tests.rb @@ -3,39 +3,39 @@ @cluster_templates = [] -describe "Fog::ContainerInfra[:openstack] | cluster template requests" do +describe "Fog::OpenStack::ContainerInfra | cluster template requests" do before do @cluster_template_format = { - "insecure_registry" => Fog::Nullable::String, - "http_proxy" => Fog::Nullable::String, - "updated_at" => Fog::Nullable::String, - "floating_ip_enabled" => Fog::Boolean, - "fixed_subnet" => Fog::Nullable::String, - "master_flavor_id" => Fog::Nullable::String, - "uuid" => Fog::Nullable::String, - "no_proxy" => Fog::Nullable::String, - "https_proxy" => Fog::Nullable::String, - "tls_disabled" => Fog::Boolean, - "keypair_id" => String, - "public" => Fog::Boolean, - "labels" => Fog::Nullable::Hash, - "docker_volume_size" => Integer, - "server_type" => String, - "external_network_id" => String, - "cluster_distro" => String, - "image_id" => String, - "volume_driver" => String, - "registry_enabled" => Fog::Nullable::Boolean, + "insecure_registry" => Fog::Nullable::String, + "http_proxy" => Fog::Nullable::String, + "updated_at" => Fog::Nullable::String, + "floating_ip_enabled" => Fog::Boolean, + "fixed_subnet" => Fog::Nullable::String, + "master_flavor_id" => Fog::Nullable::String, + "uuid" => Fog::Nullable::String, + "no_proxy" => Fog::Nullable::String, + "https_proxy" => Fog::Nullable::String, + "tls_disabled" => Fog::Boolean, + "keypair_id" => String, + "public" => Fog::Boolean, + "labels" => Fog::Nullable::Hash, + "docker_volume_size" => Integer, + "server_type" => String, + "external_network_id" => String, + "cluster_distro" => String, + "image_id" => String, + "volume_driver" => String, + "registry_enabled" => Fog::Nullable::Boolean, "docker_storage_driver" => String, - "apiserver_port" => Fog::Nullable::Integer, - "name" => String, - "created_at" => Fog::Nullable::String, - "network_driver" => String, - "fixed_network" => Fog::Nullable::String, - "coe" => String, - "flavor_id" => String, - "master_lb_enabled" => Fog::Boolean, - "dns_nameserver" => String + "apiserver_port" => Fog::Nullable::Integer, + "name" => String, + "created_at" => Fog::Nullable::String, + "network_driver" => String, + "fixed_network" => Fog::Nullable::String, + "coe" => String, + "flavor_id" => String, + "master_lb_enabled" => Fog::Boolean, + "dns_nameserver" => String } end @@ -72,14 +72,14 @@ cluster_template_uuid = container_infra.cluster_templates.all.first.uuid attributes = [ { - "path" => "/master_lb_enabled", + "path" => "/master_lb_enabled", "value" => "True", - "op" => "replace" + "op" => "replace" }, { - "path" => "/registry_enabled", + "path" => "/registry_enabled", "value" => "True", - "op" => "replace" + "op" => "replace" } ] diff --git a/test/requests/container_infra/cluster_tests.rb b/test/requests/container_infra/cluster_tests.rb index 11c5e408c..f1a06e67f 100644 --- a/test/requests/container_infra/cluster_tests.rb +++ b/test/requests/container_infra/cluster_tests.rb @@ -1,25 +1,25 @@ require 'test_helper' require 'helpers/container_infra_helper' -describe "Fog::ContainerInfra[:openstack] | cluster requests" do +describe "Fog::OpenStack::ContainerInfra | cluster requests" do before do @cluster_format = { - "status" => String, - "uuid" => String, - "stack_id" => Fog::Nullable::String, - "created_at" => Fog::Nullable::String, - "api_address" => Fog::Nullable::String, - "discovery_url" => Fog::Nullable::String, - "updated_at" => Fog::Nullable::String, - "master_count" => Fog::Nullable::Integer, - "coe_version" => Fog::Nullable::String, + "status" => String, + "uuid" => String, + "stack_id" => Fog::Nullable::String, + "created_at" => Fog::Nullable::String, + "api_address" => Fog::Nullable::String, + "discovery_url" => Fog::Nullable::String, + "updated_at" => Fog::Nullable::String, + "master_count" => Fog::Nullable::Integer, + "coe_version" => Fog::Nullable::String, "cluster_template_id" => String, - "master_addresses" => Fog::Nullable::Array, - "node_count" => Fog::Nullable::Integer, - "node_addresses" => Fog::Nullable::Array, - "status_reason" => Fog::Nullable::String, - "create_timeout" => Fog::Nullable::Integer, - "name" => String + "master_addresses" => Fog::Nullable::Array, + "node_count" => Fog::Nullable::Integer, + "node_addresses" => Fog::Nullable::Array, + "status_reason" => Fog::Nullable::String, + "create_timeout" => Fog::Nullable::Integer, + "name" => String } end @@ -63,9 +63,9 @@ cluster_uuid = container_infra.clusters.all.first.uuid attributes = [ { - "path" => "/node_count", + "path" => "/node_count", "value" => 2, - "op" => "replace" + "op" => "replace" } ] diff --git a/test/requests/dns_v1/domain_tests.rb b/test/requests/dns_v1/domain_tests.rb index d714d7ae6..d8441cc20 100644 --- a/test/requests/dns_v1/domain_tests.rb +++ b/test/requests/dns_v1/domain_tests.rb @@ -1,18 +1,18 @@ require "test_helper" -describe "Fog::DNS::OpenStack::V1 | domain requests" do +describe "Fog::OpenStack::DNS::V1 | domain requests" do before do - @dns = Fog::DNS::OpenStack::V1.new + @dns = Fog::OpenStack::DNS::V1.new @domain_format = { - "id" => String, - "name" => String, - "email" => String, - "ttl" => Integer, - "serial" => Integer, + "id" => String, + "name" => String, + "email" => String, + "ttl" => Integer, + "serial" => Integer, "description" => String, - "created_at" => String, - "updated_at" => String + "created_at" => String, + "updated_at" => String } end diff --git a/test/requests/dns_v1/quota_tests.rb b/test/requests/dns_v1/quota_tests.rb index 674b08323..0bdd570a5 100644 --- a/test/requests/dns_v1/quota_tests.rb +++ b/test/requests/dns_v1/quota_tests.rb @@ -1,17 +1,17 @@ require "test_helper" -describe "Fog::DNS::OpenStack::V1 | quota requests" do +describe "Fog::OpenStack::DNS::V1 | quota requests" do before do - @dns = Fog::DNS::OpenStack::V1.new + @dns = Fog::OpenStack::DNS::V1.new @project_id = Fog::Mock.random_numbers(6).to_s @quota_format = { - "api_export_size" => Integer, + "api_export_size" => Integer, "recordset_records" => Integer, - "domain_records" => Integer, + "domain_records" => Integer, "domain_recordsets" => Integer, - "domains" => Integer + "domains" => Integer } @quota = @dns.get_quota(@project_id).body @@ -25,7 +25,7 @@ it "#update_quota" do new_values = @quota.merge( 'recordset_records' => @quota['recordset_records'] + 1, - 'domains' => @quota['domains'] + 2 + 'domains' => @quota['domains'] + 2 ) @dns.update_quota(@project_id, new_values.clone).status.must_equal 200 diff --git a/test/requests/dns_v2/pool_tests.rb b/test/requests/dns_v2/pool_tests.rb index 8714f1252..f888fcd70 100644 --- a/test/requests/dns_v2/pool_tests.rb +++ b/test/requests/dns_v2/pool_tests.rb @@ -1,20 +1,20 @@ require "test_helper" require "helpers/dns_v2_helper" -describe "Fog::DNS::OpenStack::V2 | pool requests" do +describe "Fog::OpenStack::DNS::V2 | pool requests" do before do @dns, = set_dns_data @pool_format = { "description" => String, - "id" => String, - "project_id" => String, - "created_at" => String, - "attributes" => String, - "ns_records" => Array, - "links" => Hash, - "name" => String, - "updated_at" => String + "id" => String, + "project_id" => String, + "created_at" => String, + "attributes" => String, + "ns_records" => Array, + "links" => Hash, + "name" => String, + "updated_at" => String } @pool_id = @dns.list_pools.body['pools'].first['id'] diff --git a/test/requests/dns_v2/quota_tests.rb b/test/requests/dns_v2/quota_tests.rb index 959983d31..5230e9069 100644 --- a/test/requests/dns_v2/quota_tests.rb +++ b/test/requests/dns_v2/quota_tests.rb @@ -1,17 +1,17 @@ require "test_helper" -describe "Fog::DNS::OpenStack::V2 | quota requests" do +describe "Fog::OpenStack::DNS::V2 | quota requests" do before do - @dns = Fog::DNS::OpenStack::V2.new + @dns = Fog::OpenStack::DNS::V2.new @project_id = @dns.respond_to?(:current_tenant) ? @dns.current_tenant['id'] : Fog::Mock.random_numbers(6).to_s @quota_format = { - "api_export_size" => Integer, + "api_export_size" => Integer, "recordset_records" => Integer, - "zone_records" => Integer, - "zone_recordsets" => Integer, - "zones" => Integer + "zone_records" => Integer, + "zone_recordsets" => Integer, + "zones" => Integer } @quota = @dns.get_quota(@project_id).body end @@ -24,7 +24,7 @@ it "#update_quota" do new_values = @quota.merge( 'recordset_records' => @quota['recordset_records'] + 1, - 'zones' => @quota['zones'] + 2 + 'zones' => @quota['zones'] + 2 ) @dns.update_quota(@project_id, new_values.clone).status.must_equal 200 diff --git a/test/requests/dns_v2/recordset_tests.rb b/test/requests/dns_v2/recordset_tests.rb index 902e403ea..776bb8e02 100644 --- a/test/requests/dns_v2/recordset_tests.rb +++ b/test/requests/dns_v2/recordset_tests.rb @@ -1,7 +1,7 @@ require "test_helper" require "helpers/dns_v2_helper" -describe "Fog::DNS::OpenStack::V2 | recordset requests" do +describe "Fog::OpenStack::DNS::V2 | recordset requests" do before do @dns, @zone, @zone_id = set_dns_data @@ -9,20 +9,20 @@ @recordset_format = { "description" => String, - "links" => Hash, - "updated_at" => String, - "records" => Array, - "ttl" => Integer, - "id" => String, - "name" => String, - "project_id" => String, - "zone_id" => String, - "zone_name" => String, - "created_at" => String, - "version" => Integer, - "type" => String, - "status" => String, - "action" => String + "links" => Hash, + "updated_at" => String, + "records" => Array, + "ttl" => Integer, + "id" => String, + "name" => String, + "project_id" => String, + "zone_id" => String, + "zone_name" => String, + "created_at" => String, + "version" => Integer, + "type" => String, + "status" => String, + "action" => String } recordset_links_format = { @@ -36,8 +36,8 @@ @recordset_list_format = { "recordsets" => [@recordset_format], - "links" => recordset_links_format, - "metadata" => recordset_metadata_format + "links" => recordset_links_format, + "metadata" => recordset_metadata_format } end diff --git a/test/requests/dns_v2/zone_tests.rb b/test/requests/dns_v2/zone_tests.rb index 53acbff4e..b6bd3b8b8 100644 --- a/test/requests/dns_v2/zone_tests.rb +++ b/test/requests/dns_v2/zone_tests.rb @@ -1,28 +1,28 @@ require "test_helper" require "helpers/dns_v2_helper" -describe "Fog::DNS::OpenStack::V2 | zone requests" do +describe "Fog::OpenStack::DNS::V2 | zone requests" do before do @dns, @zone, @zone_id = set_dns_data @zone_format = { - "id" => String, - "pool_id" => String, - "project_id" => String, - "name" => String, - "email" => String, - "ttl" => Integer, - "serial" => Integer, - "status" => String, - "action" => String, - "description" => String, - "masters" => Array, - "type" => String, + "id" => String, + "pool_id" => String, + "project_id" => String, + "name" => String, + "email" => String, + "ttl" => Integer, + "serial" => Integer, + "status" => String, + "action" => String, + "description" => String, + "masters" => Array, + "type" => String, "transferred_at" => String, - "version" => Integer, - "created_at" => String, - "updated_at" => String, - "links" => Hash + "version" => Integer, + "created_at" => String, + "updated_at" => String, + "links" => Hash } end diff --git a/test/requests/event/event_tests.rb b/test/requests/event/event_tests.rb index e9f2dda40..2e3cb1264 100644 --- a/test/requests/event/event_tests.rb +++ b/test/requests/event/event_tests.rb @@ -1,8 +1,8 @@ require "test_helper" -describe "Fog::Event[:openstack] | event requests" do +describe "Fog::OpenStack::Event | event requests" do before do - @metering = Fog::Event::OpenStack.new + @metering = Fog::OpenStack::Event.new @event_format = { 'message_id' => String, 'event_type' => String diff --git a/test/requests/identity/ec2_credentials_tests.rb b/test/requests/identity/ec2_credentials_tests.rb index dc2982f55..171dc4a4c 100644 --- a/test/requests/identity/ec2_credentials_tests.rb +++ b/test/requests/identity/ec2_credentials_tests.rb @@ -4,13 +4,13 @@ describe "Fog::Identity[:openstack] | EC2 credential requests" do before do - @identity = Fog::Identity[:openstack] + @identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') @credential_format = { - 'access' => String, + 'access' => String, 'tenant_id' => String, - 'secret' => String, - 'user_id' => String + 'secret' => String, + 'user_id' => String } @user_id = OpenStack::Identity.get_user_id(@identity) diff --git a/test/requests/identity/role_tests.rb b/test/requests/identity/role_tests.rb index fbcc76a3d..4d5f971cf 100644 --- a/test/requests/identity/role_tests.rb +++ b/test/requests/identity/role_tests.rb @@ -2,10 +2,10 @@ describe "Fog::Identity[:openstack] | role requests" do before do - @identity = Fog::Identity[:openstack] + @identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') @role_format = { - 'id' => String, + 'id' => String, 'name' => String } diff --git a/test/requests/identity/tenant_tests.rb b/test/requests/identity/tenant_tests.rb index 6d54c1066..1814e0aa8 100644 --- a/test/requests/identity/tenant_tests.rb +++ b/test/requests/identity/tenant_tests.rb @@ -4,17 +4,17 @@ describe "Fog::Identity[:openstack] | tenant requests" do before do - @identity = Fog::Identity[:openstack] + @identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') @tenant_format = { - 'id' => String, - 'name' => String, - 'enabled' => Fog::Nullable::Boolean, + 'id' => String, + 'name' => String, + 'enabled' => Fog::Nullable::Boolean, 'description' => Fog::Nullable::String } @role_format = { - 'id' => String, + 'id' => String, 'name' => String } diff --git a/test/requests/identity/user_tests.rb b/test/requests/identity/user_tests.rb index 449a3eb03..abad09649 100644 --- a/test/requests/identity/user_tests.rb +++ b/test/requests/identity/user_tests.rb @@ -4,13 +4,13 @@ describe "Fog::Identity[:openstack] | user requests" do before do - @identity = Fog::Identity[:openstack] + @identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') @user_format = { - 'id' => String, - 'name' => String, - 'enabled' => Fog::Boolean, - 'email' => String, + 'id' => String, + 'name' => String, + 'enabled' => Fog::Boolean, + 'email' => String, 'tenantId' => Fog::Nullable::String } diff --git a/test/requests/image/image_tests.rb b/test/requests/image/image_tests.rb index f12d5eb15..b8a43cc5c 100644 --- a/test/requests/image/image_tests.rb +++ b/test/requests/image/image_tests.rb @@ -1,8 +1,8 @@ require "test_helper" -describe "Fog::Image[:openstack] | image requests" do +describe "Fog::OpenStack::Image | image requests" do before(:all) do - openstack = Fog::Identity[:openstack] + openstack = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') @image_attributes = { name: 'new image', @@ -18,57 +18,57 @@ } @image_format = { - 'name' => String, + 'name' => String, 'container_format' => String, - 'disk_format' => String, - 'checksum' => String, - 'id' => String, - 'size' => Integer + 'disk_format' => String, + 'checksum' => String, + 'id' => String, + 'size' => Integer } @detailed_image_format = { - 'id' => String, - 'name' => String, - 'size' => Integer, - 'disk_format' => String, + 'id' => String, + 'name' => String, + 'size' => Integer, + 'disk_format' => String, 'container_format' => String, - 'checksum' => String, - 'min_disk' => Integer, - 'created_at' => String, - 'deleted_at' => Fog::Nullable::String, - 'updated_at' => String, - 'deleted' => Fog::Boolean, - 'protected' => Fog::Boolean, - 'is_public' => Fog::Boolean, - 'status' => String, - 'min_ram' => Integer, - 'owner' => Fog::Nullable::String, - 'properties' => Hash + 'checksum' => String, + 'min_disk' => Integer, + 'created_at' => String, + 'deleted_at' => Fog::Nullable::String, + 'updated_at' => String, + 'deleted' => Fog::Boolean, + 'protected' => Fog::Boolean, + 'is_public' => Fog::Boolean, + 'status' => String, + 'min_ram' => Integer, + 'owner' => Fog::Nullable::String, + 'properties' => Hash } @image_meta_format = { - 'X-Image-Meta-Is_public' => String, - 'X-Image-Meta-Min_disk' => Fog::Nullable::String, + 'X-Image-Meta-Is_public' => String, + 'X-Image-Meta-Min_disk' => Fog::Nullable::String, 'X-Image-Meta-Property-Ramdisk_id' => Fog::Nullable::String, - 'X-Image-Meta-Disk_format' => Fog::Nullable::String, - 'X-Image-Meta-Created_at' => String, - 'X-Image-Meta-Container_format' => Fog::Nullable::String, - 'Etag' => String, - 'Location' => String, - 'X-Image-Meta-Protected' => String, - 'Date' => String, - 'X-Image-Meta-Name' => String, - 'X-Image-Meta-Min_ram' => String, - 'Content-Type' => String, - 'X-Image-Meta-Updated_at' => String, - 'X-Image-Meta-Property-Kernel_id' => Fog::Nullable::String, - 'X-Image-Meta-Size' => String, - 'X-Image-Meta-Checksum' => Fog::Nullable::String, - 'X-Image-Meta-Deleted' => String, - 'Content-Length' => String, - 'X-Image-Meta-Status' => String, - 'X-Image-Meta-Owner' => String, - 'X-Image-Meta-Id' => String + 'X-Image-Meta-Disk_format' => Fog::Nullable::String, + 'X-Image-Meta-Created_at' => String, + 'X-Image-Meta-Container_format' => Fog::Nullable::String, + 'Etag' => String, + 'Location' => String, + 'X-Image-Meta-Protected' => String, + 'Date' => String, + 'X-Image-Meta-Name' => String, + 'X-Image-Meta-Min_ram' => String, + 'Content-Type' => String, + 'X-Image-Meta-Updated_at' => String, + 'X-Image-Meta-Property-Kernel_id' => Fog::Nullable::String, + 'X-Image-Meta-Size' => String, + 'X-Image-Meta-Checksum' => Fog::Nullable::String, + 'X-Image-Meta-Deleted' => String, + 'Content-Length' => String, + 'X-Image-Meta-Status' => String, + 'X-Image-Meta-Owner' => String, + 'X-Image-Meta-Id' => String } @image_members_format = [ @@ -90,7 +90,7 @@ image_attributes[:location] = @test_iso.path end - @instance = Fog::Image[:openstack].create_image(image_attributes).body + @instance = Fog::OpenStack::Image.new.create_image(image_attributes).body end after do @@ -99,12 +99,12 @@ describe "success" do it "#list_public_images" do - Fog::Image[:openstack].list_public_images.body.must_match_schema('images' => [@image_format]) + Fog::OpenStack::Image.new.list_public_images.body.must_match_schema('images' => [@image_format]) end it "#list_public_images_detailed" do - Fog::Image[:openstack].list_public_images_detailed.body - .must_match_schema('images' => [@detailed_image_format]) + Fog::OpenStack::Image.new.list_public_images_detailed.body + .must_match_schema('images' => [@detailed_image_format]) end it "#create_image" do @@ -112,12 +112,12 @@ end it "#get_image" do - Fog::Image[:openstack].get_image(@instance['image']['id']).headers - .must_match_schema(@image_meta_format) + Fog::OpenStack::Image.new.get_image(@instance['image']['id']).headers + .must_match_schema(@image_meta_format) end it "#update_image" do - Fog::Image[:openstack].update_image( + Fog::OpenStack::Image.new.update_image( id: @instance['image']['id'], name: 'edit image' ).body['image'].must_match_schema(@detailed_image_format) @@ -125,30 +125,30 @@ it "#add_member_to_image" do [200, 204].must_include( - Fog::Image[:openstack].add_member_to_image( + Fog::OpenStack::Image.new.add_member_to_image( @instance['image']['id'], @instance['image']['owner'] ).status ) end it "#get_image_members" do - [200, 204].must_include(Fog::Image[:openstack].get_image_members(@instance['image']['id']).status) + [200, 204].must_include(Fog::OpenStack::Image.new.get_image_members(@instance['image']['id']).status) end it "#get_shared_images" do - [200, 204].must_include(Fog::Image[:openstack].get_shared_images(@instance['image']['owner']).status) + [200, 204].must_include(Fog::OpenStack::Image.new.get_shared_images(@instance['image']['owner']).status) end it "#remove_member_from_image" do [200, 204].must_include( - Fog::Image[:openstack].remove_member_from_image( + Fog::OpenStack::Image.new.remove_member_from_image( @instance['image']['id'], @instance['image']['owner'] ).status ) end it "#delete_image" do - Fog::Image[:openstack].delete_image(@instance['image']['id']).status.must_equal 200 + Fog::OpenStack::Image.new.delete_image(@instance['image']['id']).status.must_equal 200 end end end diff --git a/test/requests/introspection/introspection_tests.rb b/test/requests/introspection/introspection_tests.rb index 39c1c71bd..d0d7ac38a 100644 --- a/test/requests/introspection/introspection_tests.rb +++ b/test/requests/introspection/introspection_tests.rb @@ -1,163 +1,163 @@ require "test_helper" -describe "Fog::Introspection::OpenStack | Introspection requests" do +describe "Fog::OpenStack::Introspection | Introspection requests" do before do - @inspector = Fog::Introspection::OpenStack.new + @inspector = Fog::OpenStack::Introspection.new @node_uuid = Fog::UUID.uuid @introspection_finished = { - "error" => "null", + "error" => "null", "finished" => "true" } @introspection_data = { - "cpu_arch" => String, - "macs" => Array, - "root_disk" => { - "rotational" => Fog::Boolean, - "vendor" => String, - "name" => String, + "cpu_arch" => String, + "macs" => Array, + "root_disk" => { + "rotational" => Fog::Boolean, + "vendor" => String, + "name" => String, "wwn_vendor_extension" => Fog::Nullable::String, - "wwn_with_extension" => Fog::Nullable::String, - "model" => Fog::Nullable::String, - "wwn" => Fog::Nullable::String, - "serial" => Fog::Nullable::String, - "size" => Integer + "wwn_with_extension" => Fog::Nullable::String, + "model" => Fog::Nullable::String, + "wwn" => Fog::Nullable::String, + "serial" => Fog::Nullable::String, + "size" => Integer }, "extra" => { "network" => { "eth0" => { - "vlan-challenged" => String, - "tx-udp_tnl-segmentation" => String, - "ipv4-network" => String, - "rx-vlan-stag-filter" => String, - "highdma" => String, - "tx-nocache-copy" => String, - "tx-gso-robust" => String, - "fcoe-mtu" => String, - "netns-local" => String, - "udp-fragmentation-offload" => String, - "serial" => String, - "latency" => Integer, - "tx-checksumming/tx-checksum-ipv6" => String, - "tx-checksumming/tx-checksum-ipv4" => String, - "ipv4-netmask" => String, - "tcp-segmentation-offload/tx-tcp-segmentation" => String, - "tx-ipip-segmentation" => String, - "rx-vlan-offload" => String, - "tx-gre-segmentation" => String, - "tx-checksumming/tx-checksum-ip-generic" => String, + "vlan-challenged" => String, + "tx-udp_tnl-segmentation" => String, + "ipv4-network" => String, + "rx-vlan-stag-filter" => String, + "highdma" => String, + "tx-nocache-copy" => String, + "tx-gso-robust" => String, + "fcoe-mtu" => String, + "netns-local" => String, + "udp-fragmentation-offload" => String, + "serial" => String, + "latency" => Integer, + "tx-checksumming/tx-checksum-ipv6" => String, + "tx-checksumming/tx-checksum-ipv4" => String, + "ipv4-netmask" => String, + "tcp-segmentation-offload/tx-tcp-segmentation" => String, + "tx-ipip-segmentation" => String, + "rx-vlan-offload" => String, + "tx-gre-segmentation" => String, + "tx-checksumming/tx-checksum-ip-generic" => String, "tcp-segmentation-offload/tx-tcp-ecn-segmentation" => String, - "tx-checksumming/tx-checksum-fcoe-crc" => String, - "ipv4" => String, - "businfo" => String, - "rx-vlan-stag-hw-parse" => String, - "tx-vlan-offload" => String, - "product" => String, - "vendor" => String, - "tx-checksumming/tx-checksum-sctp" => String, - "driver" => String, - "tx-sit-segmentation" => String, - "busy-poll" => String, - "tx-vlan-stag-hw-insert" => String, - "scatter-gather/tx-scatter-gather" => String, - "link" => String, - "ntuple-filters" => String, - "rx-all" => String, - "tcp-segmentation-offload" => String, - "tcp-segmentation-offload/tx-tcp6-segmentation" => String, - "rx-checksumming" => String, - "rx-fcs" => String, - "tx-lockless" => String, - "generic-segmentation-offload" => String, - "tx-fcoe-segmentation" => String, - "tx-checksumming" => String, - "ipv4-cidr" => Integer, - "large-receive-offload" => String, - "rx-vlan-filter" => String, - "receive-hashing" => String, - "scatter-gather/tx-scatter-gather-fraglist" => String, - "generic-receive-offload" => String, - "loopback" => String, - "scatter-gather" => String, - "tx-mpls-segmentation" => String + "tx-checksumming/tx-checksum-fcoe-crc" => String, + "ipv4" => String, + "businfo" => String, + "rx-vlan-stag-hw-parse" => String, + "tx-vlan-offload" => String, + "product" => String, + "vendor" => String, + "tx-checksumming/tx-checksum-sctp" => String, + "driver" => String, + "tx-sit-segmentation" => String, + "busy-poll" => String, + "tx-vlan-stag-hw-insert" => String, + "scatter-gather/tx-scatter-gather" => String, + "link" => String, + "ntuple-filters" => String, + "rx-all" => String, + "tcp-segmentation-offload" => String, + "tcp-segmentation-offload/tx-tcp6-segmentation" => String, + "rx-checksumming" => String, + "rx-fcs" => String, + "tx-lockless" => String, + "generic-segmentation-offload" => String, + "tx-fcoe-segmentation" => String, + "tx-checksumming" => String, + "ipv4-cidr" => Integer, + "large-receive-offload" => String, + "rx-vlan-filter" => String, + "receive-hashing" => String, + "scatter-gather/tx-scatter-gather-fraglist" => String, + "generic-receive-offload" => String, + "loopback" => String, + "scatter-gather" => String, + "tx-mpls-segmentation" => String }, "eth1" => { - "vlan-challenged" => String, - "tx-udp_tnl-segmentation" => String, - "tx-vlan-stag-hw-insert" => String, - "rx-vlan-stag-filter" => String, - "highdma" => String, - "tx-nocache-copy" => String, - "tx-gso-robust" => String, - "fcoe-mtu" => String, - "netns-local" => String, - "udp-fragmentation-offload" => String, - "serial" => String, - "latency" => Integer, - "tx-checksumming/tx-checksum-ipv6" => String, - "tx-checksumming/tx-checksum-ipv4" => String, - "tx-fcoe-segmentation" => String, - "tcp-segmentation-offload/tx-tcp-segmentation" => String, - "tx-ipip-segmentation" => String, - "rx-vlan-offload" => String, - "tx-gre-segmentation" => String, - "tx-checksumming/tx-checksum-ip-generic" => String, + "vlan-challenged" => String, + "tx-udp_tnl-segmentation" => String, + "tx-vlan-stag-hw-insert" => String, + "rx-vlan-stag-filter" => String, + "highdma" => String, + "tx-nocache-copy" => String, + "tx-gso-robust" => String, + "fcoe-mtu" => String, + "netns-local" => String, + "udp-fragmentation-offload" => String, + "serial" => String, + "latency" => Integer, + "tx-checksumming/tx-checksum-ipv6" => String, + "tx-checksumming/tx-checksum-ipv4" => String, + "tx-fcoe-segmentation" => String, + "tcp-segmentation-offload/tx-tcp-segmentation" => String, + "tx-ipip-segmentation" => String, + "rx-vlan-offload" => String, + "tx-gre-segmentation" => String, + "tx-checksumming/tx-checksum-ip-generic" => String, "tcp-segmentation-offload/tx-tcp-ecn-segmentation" => String, - "tx-checksumming/tx-checksum-fcoe-crc" => String, - "rx-vlan-stag-hw-parse" => String, - "businfo" => String, - "tx-vlan-offload" => String, - "product" => String, - "vendor" => String, - "tx-checksumming/tx-checksum-sctp" => String, - "driver" => String, - "tx-sit-segmentation" => String, - "busy-poll" => String, - "scatter-gather/tx-scatter-gather" => String, - "link" => String, - "ntuple-filters" => String, - "rx-all" => String, - "tcp-segmentation-offload" => String, - "tcp-segmentation-offload/tx-tcp6-segmentation" => String, - "rx-checksumming" => String, - "tx-lockless" => String, - "generic-segmentation-offload" => String, - "loopback" => String, - "tx-checksumming" => String, - "large-receive-offload" => String, - "rx-vlan-filter" => String, - "receive-hashing" => String, - "scatter-gather/tx-scatter-gather-fraglist" => String, - "generic-receive-offload" => String, - "rx-fcs" => String, - "scatter-gather" => String, - "tx-mpls-segmentation" => String + "tx-checksumming/tx-checksum-fcoe-crc" => String, + "rx-vlan-stag-hw-parse" => String, + "businfo" => String, + "tx-vlan-offload" => String, + "product" => String, + "vendor" => String, + "tx-checksumming/tx-checksum-sctp" => String, + "driver" => String, + "tx-sit-segmentation" => String, + "busy-poll" => String, + "scatter-gather/tx-scatter-gather" => String, + "link" => String, + "ntuple-filters" => String, + "rx-all" => String, + "tcp-segmentation-offload" => String, + "tcp-segmentation-offload/tx-tcp6-segmentation" => String, + "rx-checksumming" => String, + "tx-lockless" => String, + "generic-segmentation-offload" => String, + "loopback" => String, + "tx-checksumming" => String, + "large-receive-offload" => String, + "rx-vlan-filter" => String, + "receive-hashing" => String, + "scatter-gather/tx-scatter-gather-fraglist" => String, + "generic-receive-offload" => String, + "rx-fcs" => String, + "scatter-gather" => String, + "tx-mpls-segmentation" => String } }, "firmware" => { "bios" => { - "date" => String, + "date" => String, "version" => String, - "vendor" => String + "vendor" => String } }, "system" => { "kernel" => { "cmdline" => String, "version" => String, - "arch" => String + "arch" => String }, "product" => { "version" => String, - "vendor" => String, - "name" => String, - "uuid" => String + "vendor" => String, + "name" => String, + "uuid" => String }, "os" => { "version" => String, - "vendor" => String + "vendor" => String } }, "memory" => { @@ -167,113 +167,113 @@ }, "disk" => { "vda" => { - "optimal_io_size" => Integer, + "optimal_io_size" => Integer, "physical_block_size" => Integer, - "rotational" => Integer, - "vendor" => String, - "size" => Integer + "rotational" => Integer, + "vendor" => String, + "size" => Integer }, "logical" => { "count" => Integer } }, "cpu" => { - "logical" => { "number" => Integer }, + "logical" => { "number" => Integer }, "physical_0" => { - "physid" => Integer, - "product" => String, + "physid" => Integer, + "product" => String, "frequency" => Integer, - "vendor" => String, - "flags" => String + "vendor" => String, + "flags" => String }, "physical_1" => { - "physid" => Integer, - "product" => String, + "physid" => Integer, + "product" => String, "frequency" => Integer, - "vendor" => String, - "flags" => String + "vendor" => String, + "flags" => String }, "physical_2" => { - "physid" => Integer, - "product" => String, + "physid" => Integer, + "product" => String, "frequency" => Integer, - "vendor" => String, - "flags" => String + "vendor" => String, + "flags" => String }, "physical_3" => { - "physid" => Integer, - "product" => String, + "physid" => Integer, + "product" => String, "frequency" => Integer, - "vendor" => String, - "flags" => String + "vendor" => String, + "flags" => String }, "physical" => { "number" => Integer } } }, "interfaces" => { "eth0" => { - "ip" => String, + "ip" => String, "mac" => String } }, - "cpus" => 4, + "cpus" => 4, "boot_interface" => String, - "memory_mb" => Integer, - "ipmi_address" => String, - "inventory" => { - "bmc_address" => String, - "interfaces" => [ + "memory_mb" => Integer, + "ipmi_address" => String, + "inventory" => { + "bmc_address" => String, + "interfaces" => [ { - "ipv4_address" => Fog::Nullable::String, - "switch_port_descr" => Fog::Nullable::String, + "ipv4_address" => Fog::Nullable::String, + "switch_port_descr" => Fog::Nullable::String, "switch_chassis_descr" => Fog::Nullable::String, - "name" => String, - "mac_address" => String + "name" => String, + "mac_address" => String }, { - "ipv4_address" => Fog::Nullable::String, - "switch_port_descr" => Fog::Nullable::String, + "ipv4_address" => Fog::Nullable::String, + "switch_port_descr" => Fog::Nullable::String, "switch_chassis_descr" => Fog::Nullable::String, - "name" => String, - "mac_address" => String + "name" => String, + "mac_address" => String } ], "disks" => [ { - "rotational" => Fog::Boolean, - "vendor" => String, - "name" => String, + "rotational" => Fog::Boolean, + "vendor" => String, + "name" => String, "wwn_vendor_extension" => Fog::Nullable::String, - "wwn_with_extension" => Fog::Nullable::String, - "model" => Fog::Nullable::String, - "wwn" => Fog::Nullable::String, - "serial" => Fog::Nullable::String, - "size" => Integer + "wwn_with_extension" => Fog::Nullable::String, + "model" => Fog::Nullable::String, + "wwn" => Fog::Nullable::String, + "serial" => Fog::Nullable::String, + "size" => Integer } ], "system_vendor" => { "serial_number" => String, - "product_name" => String, - "manufacturer" => String + "product_name" => String, + "manufacturer" => String }, - "memory" => { + "memory" => { "physical_mb" => Integer, - "total" => Integer + "total" => Integer }, "cpu" => { - "count" => Integer, - "frequency" => String, - "model_name" => String, + "count" => Integer, + "frequency" => String, + "model_name" => String, "architecture" => String } }, - "error" => Fog::Nullable::String, - "local_gb" => Integer, + "error" => Fog::Nullable::String, + "local_gb" => Integer, "all_interfaces" => { "eth0" => { - "ip" => Fog::Nullable::String, + "ip" => Fog::Nullable::String, "mac" => String }, "eth1" => { - "ip" => Fog::Nullable::String, + "ip" => Fog::Nullable::String, "mac" => String } }, diff --git a/test/requests/introspection/rules_tests.rb b/test/requests/introspection/rules_tests.rb index c93b2779b..1a0083719 100644 --- a/test/requests/introspection/rules_tests.rb +++ b/test/requests/introspection/rules_tests.rb @@ -2,13 +2,13 @@ describe "@inspector | Introspection rules requests" do before do - @inspector = Fog::Introspection::OpenStack.new + @inspector = Fog::OpenStack::Introspection.new @rules_id = Fog::UUID.uuid @rules = { 'description' => Fog::Nullable::String, - 'actions' => Array, - 'conditions' => Array, - 'uuid' => Fog::Nullable::String + 'actions' => Array, + 'conditions' => Array, + 'uuid' => Fog::Nullable::String } end @@ -21,16 +21,16 @@ attributes = { "actions" => { "action" => "set-attribute", - "path" => "/driver_info/ipmi_address", - "value" => "{data[inventory][bmc_address]}" + "path" => "/driver_info/ipmi_address", + "value" => "{data[inventory][bmc_address]}" }, "conditions" => { "field" => "node://property.path", - "op" => "eq", + "op" => "eq", "value" => "val" }, "description" => "", - "uuid" => "" + "uuid" => "" } @inspector.create_rules(attributes).body.must_match_schema('rules' => @rules) end diff --git a/test/requests/metering/event_tests.rb b/test/requests/metering/event_tests.rb index 60f4f605f..9d984debe 100644 --- a/test/requests/metering/event_tests.rb +++ b/test/requests/metering/event_tests.rb @@ -1,8 +1,8 @@ require "test_helper" -describe "Fog::Metering[:openstack] | event requests" do +describe "Fog::OpenStack::Metering | event requests" do before do - @metering = Fog::Metering[:openstack] + @metering = Fog::OpenStack::Metering.new @event_format = { 'message_id' => String, 'event_type' => String diff --git a/test/requests/metering/meter_tests.rb b/test/requests/metering/meter_tests.rb index 890121dd5..55a98fc5f 100644 --- a/test/requests/metering/meter_tests.rb +++ b/test/requests/metering/meter_tests.rb @@ -1,44 +1,44 @@ require "test_helper" -describe "Fog::Metering[:openstack] | meter requests" do +describe "Fog::OpenStack::Metering | meter requests" do before do - @metering = Fog::Metering[:openstack] + @metering = Fog::OpenStack::Metering.new @sample_format = { - 'counter_name' => String, - 'user_id' => String, - 'resource_id' => String, - 'timestamp' => String, + 'counter_name' => String, + 'user_id' => String, + 'resource_id' => String, + 'timestamp' => String, 'resource_metadata' => Hash, - 'source' => String, - 'counter_unit' => String, - 'counter_volume' => Float, - 'project_id' => String, - 'message_id' => String, - 'counter_type' => String + 'source' => String, + 'counter_unit' => String, + 'counter_volume' => Float, + 'project_id' => String, + 'message_id' => String, + 'counter_type' => String } @meter_format = { - 'user_id' => String, - 'name' => String, + 'user_id' => String, + 'name' => String, 'resource_id' => String, - 'project_id' => String, - 'type' => String, - 'unit' => String + 'project_id' => String, + 'type' => String, + 'unit' => String } @statistics_format = { - 'count' => Integer, + 'count' => Integer, 'duration_start' => String, - 'min' => Float, - 'max' => Float, - 'duration_end' => String, - 'period' => Integer, - 'period_end' => String, - 'duration' => Float, - 'period_start' => String, - 'avg' => Float, - 'sum' => Float + 'min' => Float, + 'max' => Float, + 'duration_end' => String, + 'period' => Integer, + 'period_end' => String, + 'duration' => Float, + 'period_start' => String, + 'avg' => Float, + 'sum' => Float } end diff --git a/test/requests/metering/resource_tests.rb b/test/requests/metering/resource_tests.rb index 0ac533eb8..9fe1d8395 100644 --- a/test/requests/metering/resource_tests.rb +++ b/test/requests/metering/resource_tests.rb @@ -1,14 +1,14 @@ require "test_helper" -describe "Fog::Metering[:openstack] | resource requests" do +describe "Fog::OpenStack::Metering | resource requests" do before do - @metering = Fog::Metering[:openstack] + @metering = Fog::OpenStack::Metering.new @resource_format = { 'resource_id' => String, - 'project_id' => String, - 'user_id' => String, - 'metadata' => Hash + 'project_id' => String, + 'user_id' => String, + 'metadata' => Hash } end diff --git a/test/requests/metric/metric_test.rb b/test/requests/metric/metric_test.rb index a914a8f94..4918afdd6 100644 --- a/test/requests/metric/metric_test.rb +++ b/test/requests/metric/metric_test.rb @@ -1,8 +1,8 @@ require "test_helper" -describe "Fog::Metric::OpenStack | metric requests" do +describe "Fog::OpenStack::Metric | metric requests" do before do - @metric = Fog::Metric::OpenStack.new + @metric = Fog::OpenStack::Metric.new end describe "success" do diff --git a/test/requests/metric/resource_test.rb b/test/requests/metric/resource_test.rb index 2a0cb9bf1..d6b34f723 100644 --- a/test/requests/metric/resource_test.rb +++ b/test/requests/metric/resource_test.rb @@ -1,8 +1,8 @@ require "test_helper" -describe "Fog::Metric::OpenStack | metric requests" do +describe "Fog::OpenStack::Metric | metric requests" do before do - @metric = Fog::Metric::OpenStack.new + @metric = Fog::OpenStack::Metric.new end describe "success" do diff --git a/test/requests/network/extension_tests.rb b/test/requests/network/extension_tests.rb index ad615dbf8..f064eb60a 100644 --- a/test/requests/network/extension_tests.rb +++ b/test/requests/network/extension_tests.rb @@ -1,13 +1,13 @@ require 'test_helper' -describe "Fog::Network[:openstack] | extension requests" do +describe "Fog::OpenStack::Network | extension requests" do before do @extension_format = { - 'id' => String, - 'alias' => String, + 'id' => String, + 'alias' => String, 'description' => String, - 'links' => Array, - 'name' => String + 'links' => Array, + 'name' => String } end @@ -28,7 +28,7 @@ it "#get_extension" do proc do network.get_extension(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/ike_policy_tests.rb b/test/requests/network/ike_policy_tests.rb index ebcd2adbb..9aa376dd1 100644 --- a/test/requests/network/ike_policy_tests.rb +++ b/test/requests/network/ike_policy_tests.rb @@ -1,19 +1,19 @@ require 'test_helper' -describe "Fog::Network[:openstack] | ike_policy requests" do +describe "Fog::OpenStack::Network | ike_policy requests" do describe "success" do before do @ike_policy_format = { - 'id' => String, - 'name' => String, - 'description' => String, - 'tenant_id' => String, - 'auth_algorithm' => String, - 'encryption_algorithm' => String, - 'pfs' => String, + 'id' => String, + 'name' => String, + 'description' => String, + 'tenant_id' => String, + 'auth_algorithm' => String, + 'encryption_algorithm' => String, + 'pfs' => String, 'phase1_negotiation_mode' => String, - 'lifetime' => Hash, - 'ike_version' => String + 'lifetime' => Hash, + 'ike_version' => String } attributes = { @@ -74,19 +74,19 @@ it "#get_ike_policy" do proc do network.get_ike_policy(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#update_ike_policy" do proc do network.update_ike_policy(0, {}) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_ike_policy" do proc do network.delete_ike_policy(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/ipsec_policy_tests.rb b/test/requests/network/ipsec_policy_tests.rb index 2ffb100d1..960afc6a3 100644 --- a/test/requests/network/ipsec_policy_tests.rb +++ b/test/requests/network/ipsec_policy_tests.rb @@ -1,17 +1,17 @@ require "test_helper" -describe "Fog::Network[:openstack] | ipsec_policy requests" do +describe "Fog::OpenStack::Network | ipsec_policy requests" do before do @ipsec_policy_format = { - 'id' => String, - 'name' => String, - 'description' => String, - 'tenant_id' => String, - 'lifetime' => Hash, - 'pfs' => String, - 'transform_protocol' => String, - 'auth_algorithm' => String, - 'encapsulation_mode' => String, + 'id' => String, + 'name' => String, + 'description' => String, + 'tenant_id' => String, + 'lifetime' => Hash, + 'pfs' => String, + 'transform_protocol' => String, + 'auth_algorithm' => String, + 'encapsulation_mode' => String, 'encryption_algorithm' => String } end @@ -76,19 +76,19 @@ it "#get_ipsec_policy" do proc do network.get_ipsec_policy(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#update_ipsec_policy" do proc do network.update_ipsec_policy(0, {}) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_ipsec_policy" do proc do network.delete_ipsec_policy(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/ipsec_site_connection_tests.rb b/test/requests/network/ipsec_site_connection_tests.rb index 7fe5627ea..2754954fc 100644 --- a/test/requests/network/ipsec_site_connection_tests.rb +++ b/test/requests/network/ipsec_site_connection_tests.rb @@ -1,28 +1,28 @@ require 'test_helper' -describe "Fog::Network[:openstack] | ipsec_site_connection requests" do +describe "Fog::OpenStack::Network | ipsec_site_connection requests" do before do @ipsec_site_connection_format = { - 'id' => String, - 'name' => String, - 'description' => String, - 'status' => String, - 'tenant_id' => String, - 'admin_state_up' => Fog::Boolean, - 'psk' => String, - 'initiator' => String, - 'auth_mode' => String, - 'peer_cidrs' => Array, - 'mtu' => Integer, - 'peer_ep_group_id' => String, - 'ikepolicy_id' => String, - 'vpnservice_id' => String, - 'dpd' => Hash, - 'route_mode' => String, - 'ipsecpolicy_id' => String, + 'id' => String, + 'name' => String, + 'description' => String, + 'status' => String, + 'tenant_id' => String, + 'admin_state_up' => Fog::Boolean, + 'psk' => String, + 'initiator' => String, + 'auth_mode' => String, + 'peer_cidrs' => Array, + 'mtu' => Integer, + 'peer_ep_group_id' => String, + 'ikepolicy_id' => String, + 'vpnservice_id' => String, + 'dpd' => Hash, + 'route_mode' => String, + 'ipsecpolicy_id' => String, 'local_ep_group_id' => String, - 'peer_address' => String, - 'peer_id' => String + 'peer_address' => String, + 'peer_id' => String } end @@ -100,19 +100,19 @@ it "#get_ipsec_site_connection" do proc do network.get_ipsec_site_connection(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#update_ipsec_site_connection" do proc do network.update_ipsec_site_connection(0, {}) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_ipsec_site_connection" do proc do network.delete_ipsec_site_connection(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/lb_health_monitor_tests.rb b/test/requests/network/lb_health_monitor_tests.rb index 18d9eb86e..f587cb2a2 100644 --- a/test/requests/network/lb_health_monitor_tests.rb +++ b/test/requests/network/lb_health_monitor_tests.rb @@ -1,19 +1,19 @@ require 'test_helper' -describe "Fog::Network[:openstack] | lb_health_monitor requests" do +describe "Fog::OpenStack::Network | lb_health_monitor requests" do before do @lb_health_monitor_format = { - 'id' => String, - 'type' => String, - 'delay' => Integer, - 'timeout' => Integer, - 'max_retries' => Integer, - 'http_method' => String, - 'url_path' => String, + 'id' => String, + 'type' => String, + 'delay' => Integer, + 'timeout' => Integer, + 'max_retries' => Integer, + 'http_method' => String, + 'url_path' => String, 'expected_codes' => String, - 'status' => String, + 'status' => String, 'admin_state_up' => Fog::Boolean, - 'tenant_id' => String + 'tenant_id' => String } end @@ -98,31 +98,31 @@ it "#get_lb_health_monitor" do proc do network.get_lb_health_monitor(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#update_lb_health_monitor" do proc do network.update_lb_health_monitor(0, {}) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#associate_lb_health_monitor" do proc do network.associate_lb_health_monitor(0, 0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#disassociate_lb_health_monitor" do proc do network.disassociate_lb_health_monitor(0, 0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_lb_health_monitor" do proc do network.delete_lb_health_monitor(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/lb_member_tests.rb b/test/requests/network/lb_member_tests.rb index 1ccf4f172..7ae8a5788 100644 --- a/test/requests/network/lb_member_tests.rb +++ b/test/requests/network/lb_member_tests.rb @@ -1,17 +1,17 @@ require 'test_helper' -describe "Fog::Network[:openstack] | lb_member requests" do +describe "Fog::OpenStack::Network | lb_member requests" do describe "success" do before do @lb_member_format = { - 'id' => String, - 'pool_id' => String, - 'address' => String, - 'protocol_port' => Integer, - 'weight' => Integer, - 'status' => String, + 'id' => String, + 'pool_id' => String, + 'address' => String, + 'protocol_port' => Integer, + 'weight' => Integer, + 'status' => String, 'admin_state_up' => Fog::Boolean, - 'tenant_id' => String + 'tenant_id' => String } pool_id = "pool_id" @@ -63,19 +63,19 @@ it "#get_lb_member" do proc do network.get_lb_member(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#update_lb_member" do proc do network.update_lb_member(0, {}) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_lb_member" do proc do network.delete_lb_member(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/lb_pool_tests.rb b/test/requests/network/lb_pool_tests.rb index 1bbc69f26..94114336b 100644 --- a/test/requests/network/lb_pool_tests.rb +++ b/test/requests/network/lb_pool_tests.rb @@ -1,31 +1,31 @@ require 'test_helper' -describe "Fog::Network[:openstack] | lb_pool requests" do +describe "Fog::OpenStack::Network | lb_pool requests" do before do @lb_pool_format = { - 'id' => String, - 'subnet_id' => String, - 'protocol' => String, - 'lb_method' => String, - 'name' => String, - 'description' => String, - 'health_monitors' => Array, - 'members' => Array, - 'status' => String, - 'admin_state_up' => Fog::Boolean, - 'vip_id' => Fog::Nullable::String, - 'tenant_id' => String, + 'id' => String, + 'subnet_id' => String, + 'protocol' => String, + 'lb_method' => String, + 'name' => String, + 'description' => String, + 'health_monitors' => Array, + 'members' => Array, + 'status' => String, + 'admin_state_up' => Fog::Boolean, + 'vip_id' => Fog::Nullable::String, + 'tenant_id' => String, 'active_connections' => Fog::Nullable::Integer, - 'bytes_in' => Fog::Nullable::Integer, - 'bytes_out' => Fog::Nullable::Integer, - 'total_connections' => Fog::Nullable::Integer + 'bytes_in' => Fog::Nullable::Integer, + 'bytes_out' => Fog::Nullable::Integer, + 'total_connections' => Fog::Nullable::Integer } @lb_pool_stats_format = { 'active_connections' => Integer, - 'bytes_in' => Integer, - 'bytes_out' => Integer, - 'total_connections' => Integer + 'bytes_in' => Integer, + 'bytes_out' => Integer, + 'total_connections' => Integer } end @@ -86,19 +86,19 @@ it "#get_lb_pool" do proc do network.get_lb_pool(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#update_lb_pool" do proc do network.update_lb_pool(0, {}) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_lb_pool" do proc do network.delete_lb_pool(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/lb_vip_tests.rb b/test/requests/network/lb_vip_tests.rb index aca7221d9..b0a1ad081 100644 --- a/test/requests/network/lb_vip_tests.rb +++ b/test/requests/network/lb_vip_tests.rb @@ -1,23 +1,23 @@ require 'test_helper' -describe "Fog::Network[:openstack] | lb_vip requests" do +describe "Fog::OpenStack::Network | lb_vip requests" do describe "success" do before do @lb_vip_format = { - 'id' => String, - 'subnet_id' => String, - 'pool_id' => String, - 'protocol' => String, - 'protocol_port' => Integer, - 'name' => String, - 'description' => String, - 'address' => String, - 'port_id' => String, + 'id' => String, + 'subnet_id' => String, + 'pool_id' => String, + 'protocol' => String, + 'protocol_port' => Integer, + 'name' => String, + 'description' => String, + 'address' => String, + 'port_id' => String, 'session_persistence' => Hash, - 'connection_limit' => Integer, - 'status' => String, - 'admin_state_up' => Fog::Boolean, - 'tenant_id' => String + 'connection_limit' => Integer, + 'status' => String, + 'admin_state_up' => Fog::Boolean, + 'tenant_id' => String } subnet_id = "subnet_id" pool_id = "pool_id" @@ -74,19 +74,19 @@ it "#get_lb_vip" do proc do network.get_lb_vip(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#update_lb_vip" do proc do network.update_lb_vip(0, {}) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_lb_vip" do proc do network.delete_lb_vip(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/network_tests.rb b/test/requests/network/network_tests.rb index 3ba87e80f..5e2e18c04 100644 --- a/test/requests/network/network_tests.rb +++ b/test/requests/network/network_tests.rb @@ -1,28 +1,28 @@ require 'test_helper' require 'helpers/network_helper.rb' -describe "Fog::Network[:openstack] | network requests" do +describe "Fog::OpenStack::Network | network requests" do describe "success" do let(:network_format) do { - "id" => String, - "subnets" => Array, - "status" => String, - "name" => String, - "shared" => Fog::Boolean, - "admin_state_up" => Fog::Boolean, - "qos_policy_id" => Fog::Nullable::String, + "id" => String, + "subnets" => Array, + "status" => String, + "name" => String, + "shared" => Fog::Boolean, + "admin_state_up" => Fog::Boolean, + "qos_policy_id" => Fog::Nullable::String, "port_security_enabled" => Fog::Boolean, - "tenant_id" => String + "tenant_id" => String } end let(:network_extentions_format) do { - "router:external" => Fog::Boolean, - "provider:network_type" => String, + "router:external" => Fog::Boolean, + "provider:network_type" => String, "provider:physical_network" => Fog::Nullable::String, - "provider:segmentation_id" => Integer + "provider:segmentation_id" => Integer } end @@ -123,19 +123,19 @@ it "#get_network" do proc do network.get_network(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#update_network" do proc do network.update_network(0, {}) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_network" do proc do network.delete_network(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end diff --git a/test/requests/network/port_tests.rb b/test/requests/network/port_tests.rb index 66cb59f7d..dea2edbb4 100644 --- a/test/requests/network/port_tests.rb +++ b/test/requests/network/port_tests.rb @@ -1,19 +1,19 @@ require 'test_helper' -describe "Fog::Network[:openstack] | port requests" do +describe "Fog::OpenStack::Network | port requests" do before do @port_format = { - 'id' => String, - 'name' => String, - 'network_id' => String, - 'fixed_ips' => Array, - 'mac_address' => String, - 'status' => String, - 'admin_state_up' => Fog::Boolean, - 'device_owner' => String, - 'device_id' => String, - 'tenant_id' => String, - 'security_groups' => Array, + 'id' => String, + 'name' => String, + 'network_id' => String, + 'fixed_ips' => Array, + 'mac_address' => String, + 'status' => String, + 'admin_state_up' => Fog::Boolean, + 'device_owner' => String, + 'device_id' => String, + 'tenant_id' => String, + 'security_groups' => Array, 'allowed_address_pairs' => Array } end @@ -75,19 +75,19 @@ it "#get_port" do proc do network.get_port(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#update_port" do proc do network.update_port(0, {}) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_port" do proc do network.delete_port(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/quota_tests.rb b/test/requests/network/quota_tests.rb index c0c796919..ac96504fc 100644 --- a/test/requests/network/quota_tests.rb +++ b/test/requests/network/quota_tests.rb @@ -1,24 +1,25 @@ require 'test_helper' -describe "Fog::Network[:openstack] | quota requests" do +describe "Fog::OpenStack::Network | quota requests" do before do - @tenant_id = Fog::Compute[:openstack].list_tenants.body['tenants'].first['id'] + identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') + @tenant_id = identity.list_tenants.body['tenants'].first['id'] @quota_format = { - 'subnet' => Fog::Nullable::Integer, - 'router' => Fog::Nullable::Integer, - 'port' => Fog::Nullable::Integer, - 'network' => Fog::Nullable::Integer, + 'subnet' => Fog::Nullable::Integer, + 'router' => Fog::Nullable::Integer, + 'port' => Fog::Nullable::Integer, + 'network' => Fog::Nullable::Integer, 'floatingip' => Fog::Nullable::Integer } @quotas_format = [ { - 'subnet' => Fog::Nullable::Integer, - 'router' => Fog::Nullable::Integer, - 'port' => Fog::Nullable::Integer, - 'network' => Fog::Nullable::Integer, + 'subnet' => Fog::Nullable::Integer, + 'router' => Fog::Nullable::Integer, + 'port' => Fog::Nullable::Integer, + 'network' => Fog::Nullable::Integer, 'floatingip' => Fog::Nullable::Integer, - 'tenant_id' => Fog::Nullable::String + 'tenant_id' => Fog::Nullable::String } ] @@ -36,7 +37,7 @@ it "#update_quota" do new_values = @quota.merge( - 'volumes' => @quota['subnet'] / 2, + 'volumes' => @quota['subnet'] / 2, 'snapshots' => @quota['router'] / 2 ) diff --git a/test/requests/network/router_tests.rb b/test/requests/network/router_tests.rb index b09882be7..d0295d527 100644 --- a/test/requests/network/router_tests.rb +++ b/test/requests/network/router_tests.rb @@ -1,6 +1,6 @@ require 'test_helper' -describe "Fog::Network[:openstack] | router requests" do +describe "Fog::OpenStack::Network | router requests" do before do @router_format = { id: String, @@ -69,19 +69,19 @@ it "#get_router" do proc do network.get_router(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#update_router" do proc do network.update_router(0, {}) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_router" do proc do network.delete_router(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/security_group_rule_tests.rb b/test/requests/network/security_group_rule_tests.rb index c160055f3..bc60625d1 100644 --- a/test/requests/network/security_group_rule_tests.rb +++ b/test/requests/network/security_group_rule_tests.rb @@ -1,18 +1,18 @@ require 'test_helper' -describe "Fog::Network[:openstack] | security_grouprule requests" do +describe "Fog::OpenStack::Network | security_grouprule requests" do before do @security_group_rule_format = { - "id" => String, - "remote_group_id" => Fog::Nullable::String, - "direction" => String, - "remote_ip_prefix" => Fog::Nullable::String, - "protocol" => Fog::Nullable::String, - "ethertype" => String, - "port_range_max" => Fog::Nullable::Integer, - "port_range_min" => Fog::Nullable::Integer, + "id" => String, + "remote_group_id" => Fog::Nullable::String, + "direction" => String, + "remote_ip_prefix" => Fog::Nullable::String, + "protocol" => Fog::Nullable::String, + "ethertype" => String, + "port_range_max" => Fog::Nullable::Integer, + "port_range_min" => Fog::Nullable::Integer, "security_group_id" => String, - "tenant_id" => String + "tenant_id" => String } end @@ -59,13 +59,13 @@ it "#get_security_group_rule(0)" do proc do network.get_security_group_rule(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_security_group_rule(0)" do proc do network.delete_security_group_rule(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/security_group_tests.rb b/test/requests/network/security_group_tests.rb index df5c448f5..481b19a96 100644 --- a/test/requests/network/security_group_tests.rb +++ b/test/requests/network/security_group_tests.rb @@ -1,13 +1,13 @@ require 'test_helper' require 'helpers/network_helper' -describe "Fog::Network[:openstack] | security_group requests" do +describe "Fog::OpenStack::Network | security_group requests" do before do @security_group_format = { - "id" => String, - "name" => String, - "description" => String, - "tenant_id" => String, + "id" => String, + "name" => String, + "description" => String, + "tenant_id" => String, "security_group_rules" => [Hash] } end @@ -54,13 +54,13 @@ it "#get_security_group(0)" do proc do network.get_security_group(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_security_group(0)" do proc do network.delete_security_group(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/subnet_pool_tests.rb b/test/requests/network/subnet_pool_tests.rb index d439c1f0e..b1efca25b 100644 --- a/test/requests/network/subnet_pool_tests.rb +++ b/test/requests/network/subnet_pool_tests.rb @@ -1,23 +1,23 @@ require 'test_helper' -describe "Fog::Network[:openstack] | subnet_pool requests" do +describe "Fog::OpenStack::Network | subnet_pool requests" do before do @subnet_pool_format = { - 'id' => String, - 'name' => String, - 'prefixes' => Array, - 'description' => Fog::Nullable::String, - 'address_scope_id' => Fog::Nullable::String, - 'shared' => Fog::Boolean, - 'ip_version' => Integer, - 'min_prefixlen' => Integer, - 'max_prefixlen' => Integer, + 'id' => String, + 'name' => String, + 'prefixes' => Array, + 'description' => Fog::Nullable::String, + 'address_scope_id' => Fog::Nullable::String, + 'shared' => Fog::Boolean, + 'ip_version' => Integer, + 'min_prefixlen' => Integer, + 'max_prefixlen' => Integer, 'default_prefixlen' => Integer, - 'is_default' => Fog::Boolean, - 'default_quota' => Fog::Nullable::String, - 'created_at' => String, - 'updated_at' => String, - 'tenant_id' => String + 'is_default' => Fog::Boolean, + 'default_quota' => Fog::Nullable::String, + 'created_at' => String, + 'updated_at' => String, + 'tenant_id' => String } end @@ -59,19 +59,19 @@ it "#get_subnet_pool" do proc do network.get_subnet_pool(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#update_subnet_pool" do proc do network.update_subnet_pool(0, {}) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_subnet_pool" do proc do network.delete_subnet_pool(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/subnet_tests.rb b/test/requests/network/subnet_tests.rb index 35c8ecb20..354447331 100644 --- a/test/requests/network/subnet_tests.rb +++ b/test/requests/network/subnet_tests.rb @@ -1,19 +1,19 @@ require 'test_helper' -describe "Fog::Network[:openstack] | subnet requests" do +describe "Fog::OpenStack::Network | subnet requests" do before do @subnet_format = { - 'id' => String, - 'name' => String, - 'network_id' => String, - 'cidr' => String, - 'ip_version' => Integer, - 'gateway_ip' => String, + 'id' => String, + 'name' => String, + 'network_id' => String, + 'cidr' => String, + 'ip_version' => Integer, + 'gateway_ip' => String, 'allocation_pools' => Array, - 'dns_nameservers' => Array, - 'host_routes' => Array, - 'enable_dhcp' => Fog::Boolean, - 'tenant_id' => String + 'dns_nameservers' => Array, + 'host_routes' => Array, + 'enable_dhcp' => Fog::Boolean, + 'tenant_id' => String } end @@ -70,19 +70,19 @@ it "#get_subnet" do proc do network.get_subnet(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#update_subnet" do proc do network.update_subnet(0, {}) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_subnet" do proc do network.delete_subnet(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/network/vpn_service_tests.rb b/test/requests/network/vpn_service_tests.rb index 3767869c8..014b97bdd 100644 --- a/test/requests/network/vpn_service_tests.rb +++ b/test/requests/network/vpn_service_tests.rb @@ -1,16 +1,16 @@ require 'test_helper' -describe "Fog::Network[:openstack] | vpn_service requests" do +describe "Fog::OpenStack::Network | vpn_service requests" do before do @vpn_service_format = { - 'id' => String, - 'subnet_id' => String, - 'router_id' => String, - 'name' => String, - 'description' => String, - 'status' => String, + 'id' => String, + 'subnet_id' => String, + 'router_id' => String, + 'name' => String, + 'description' => String, + 'status' => String, 'admin_state_up' => Fog::Boolean, - 'tenant_id' => String, + 'tenant_id' => String, 'external_v4_ip' => String, 'external_v6_ip' => String } @@ -68,19 +68,19 @@ it "#get_vpn_service" do proc do network.get_vpn_service(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#update_lb_pool" do proc do network.update_lb_pool(0, {}) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end it "#delete_vpn_service" do proc do network.delete_vpn_service(0) - end.must_raise Fog::Network::OpenStack::NotFound + end.must_raise Fog::OpenStack::Network::NotFound end end end diff --git a/test/requests/nfv/vnf_tests.rb b/test/requests/nfv/vnf_tests.rb index 216971039..6eac5c4a7 100644 --- a/test/requests/nfv/vnf_tests.rb +++ b/test/requests/nfv/vnf_tests.rb @@ -4,26 +4,26 @@ describe "@vnf | NFV vnfs requests" do before do @vnfs_create = { - "status" => String, + "status" => String, "description" => String, - "tenant_id" => String, - "name" => String, + "tenant_id" => String, + "name" => String, "instance_id" => String, - "mgmt_url" => Fog::Nullable::String, - "attributes" => Hash, - "id" => String, - "vnfd_id" => String + "mgmt_url" => Fog::Nullable::String, + "attributes" => Hash, + "id" => String, + "vnfd_id" => String } @vnfs = { - "status" => String, + "status" => String, "description" => String, - "tenant_id" => String, - "name" => String, + "tenant_id" => String, + "name" => String, "instance_id" => String, - "mgmt_url" => Fog::Nullable::String, - "attributes" => Hash, - "id" => String + "mgmt_url" => Fog::Nullable::String, + "attributes" => Hash, + "id" => String } @nfv, @vnf_data, @auth = set_nfv_data diff --git a/test/requests/nfv/vnfd_tests.rb b/test/requests/nfv/vnfd_tests.rb index a0a72afdc..97f7c1e8a 100644 --- a/test/requests/nfv/vnfd_tests.rb +++ b/test/requests/nfv/vnfd_tests.rb @@ -5,13 +5,13 @@ before do @vnfds = { "service_types" => Array, - "description" => String, - "tenant_id" => String, - "mgmt_driver" => String, - "infra_driver" => String, - "attributes" => Hash, - "id" => String, - "name" => String + "description" => String, + "tenant_id" => String, + "mgmt_driver" => String, + "infra_driver" => String, + "attributes" => Hash, + "id" => String, + "name" => String } @nfv, @vnf_data, @auth = set_nfv_data @vnfd_body = @nfv.create_vnfd(vnfd: @vnfd_data, auth: @auth).body diff --git a/test/requests/orchestration/stack_files_util_helper_tests.rb b/test/requests/orchestration/stack_files_util_helper_tests.rb index 94edd434a..2440718fb 100644 --- a/test/requests/orchestration/stack_files_util_helper_tests.rb +++ b/test/requests/orchestration/stack_files_util_helper_tests.rb @@ -2,9 +2,9 @@ require "yaml" require "open-uri" -describe "Fog::Orchestration[:openstack] | stack requests" do +describe "Fog::OpenStack::Orchestration | stack requests" do @create_format_files = { - 'id' => String, + 'id' => String, 'links' => Array, 'files' => Hash } @@ -15,8 +15,8 @@ @data = YAML.load_file("stack_files_util_tests.yaml") @template_yaml = YAML.load_file("template.yaml") @local_yaml = YAML.load_file("local.yaml") - @orchestration = Fog::Orchestration[:openstack] - @file_resolver = Fog::Orchestration::Util::RecursiveHotFileLoader.new({}) + @orchestration = Fog::OpenStack::Orchestration.new + @file_resolver = Fog::OpenStack::OrchestrationUtil::RecursiveHotFileLoader.new({}) end after do Dir.chdir(@oldcwd) @@ -36,15 +36,17 @@ end it "#read_uri_remote" do - skip if Fog.mocking? - content = @file_resolver.send(:read_uri, "https://www.google.com/robots.txt") - assert_includes(content, "Disallow:") + unless Fog.mocking? + content = @file_resolver.send(:read_uri, "https://www.google.com/robots.txt") + assert_includes(content, "Disallow:") + end end it "#read_uri_404" do - skip if Fog.mocking? - assert_raises OpenURI::HTTPError do - @file_resolver.send(:read_uri, "https://www.google.com/NOOP") + unless Fog.mocking? + assert_raises OpenURI::HTTPError do + @file_resolver.send(:read_uri, "https://www.google.com/NOOP") + end end end diff --git a/test/requests/orchestration/stack_files_util_tests.rb b/test/requests/orchestration/stack_files_util_tests.rb index be79289a1..096152ec3 100644 --- a/test/requests/orchestration/stack_files_util_tests.rb +++ b/test/requests/orchestration/stack_files_util_tests.rb @@ -6,9 +6,9 @@ def travis? File.exist?('/home/travis/build/fog/fog-openstack') end -describe "Fog::Orchestration[:openstack] | stack requests" do +describe "Fog::OpenStack::Orchestration | stack requests" do @create_format_files = { - 'id' => String, + 'id' => String, 'links' => Array, 'files' => Hash } @@ -19,8 +19,8 @@ def travis? @data = YAML.load_file("stack_files_util_tests.yaml") @template_yaml = YAML.load_file("template.yaml") @local_yaml = YAML.load_file("local.yaml") - @orchestration = Fog::Orchestration[:openstack] - @file_resolver = Fog::Orchestration::Util::RecursiveHotFileLoader.new({}) + @orchestration = Fog::OpenStack::Orchestration.new + @file_resolver = Fog::OpenStack::OrchestrationUtil::RecursiveHotFileLoader.new({}) end after do Dir.chdir(@oldcwd) @@ -36,7 +36,7 @@ def travis? [{ "get_file" => "foo.sh", "b" => "values" }, { 'foo.sh' => '# Just a mock' }] ] test_cases.each do |data, expected| - file_resolver = Fog::Orchestration::Util::RecursiveHotFileLoader.new({}) + file_resolver = Fog::OpenStack::OrchestrationUtil::RecursiveHotFileLoader.new({}) file_resolver.send(:get_file_contents, data, nil) assert_equal(file_resolver.files, expected) end @@ -53,7 +53,7 @@ def travis? test_cases.each do |data, expected| Fog::Logger.warning("Testing with #{data} #{expected}") expected = prefix_with_url(expected, @base_url) - file_resolver = Fog::Orchestration::Util::RecursiveHotFileLoader.new({}) + file_resolver = Fog::OpenStack::OrchestrationUtil::RecursiveHotFileLoader.new({}) file_resolver.send(:get_file_contents, data, @base_url) assert_equal(file_resolver.files.keys, expected) end @@ -65,19 +65,20 @@ def travis? end.compact test_cases.each do |data, _| assert_raises ArgumentError, URI::InvalidURIError do - Fog::Orchestration::Util::RecursiveHotFileLoader.new(data) + Fog::OpenStack::OrchestrationUtil::RecursiveHotFileLoader.new(data) end end end it "#get_file_contents_http_template" do - skip if Fog.mocking? - test_cases = @data["get_file_contents_http_template"].map do |testcase| - [testcase['input'], testcase['expected']] - end.compact - test_cases.each do |data, expected| - file_resolver = Fog::Orchestration::Util::RecursiveHotFileLoader.new(data) - assert_equal_set(file_resolver.files.keys, expected) + unless Fog.mocking? + test_cases = @data["get_file_contents_http_template"].map do |testcase| + [testcase['input'], testcase['expected']] + end.compact + test_cases.each do |data, expected| + file_resolver = Fog::OpenStack::OrchestrationUtil::RecursiveHotFileLoader.new(data) + assert_equal_set(file_resolver.files.keys, expected) + end end end @@ -89,13 +90,13 @@ def travis? test_cases.push([@local_yaml, ["local.yaml", "hot_1.yaml"]]) test_cases.each do |data, expected| expected = prefix_with_url(expected, @base_url) - file_resolver = Fog::Orchestration::Util::RecursiveHotFileLoader.new(data) + file_resolver = Fog::OpenStack::OrchestrationUtil::RecursiveHotFileLoader.new(data) assert_equal_set(file_resolver.files.keys, expected) end end it "#dont_modify_passed_template" do - file_resolver = Fog::Orchestration::Util::RecursiveHotFileLoader.new(@local_yaml) + file_resolver = Fog::OpenStack::OrchestrationUtil::RecursiveHotFileLoader.new(@local_yaml) template = file_resolver.template # The template argument should be modified. diff --git a/test/requests/orchestration/stack_tests.rb b/test/requests/orchestration/stack_tests.rb index 5bada0aa8..0ff9f2ed9 100644 --- a/test/requests/orchestration/stack_tests.rb +++ b/test/requests/orchestration/stack_tests.rb @@ -1,58 +1,58 @@ require "test_helper" require 'fog/core' -describe "Fog::Orchestration[:openstack] | stack requests" do +describe "Fog::OpenStack::Orchestration | stack requests" do before do @oldcwd = Dir.pwd Dir.chdir("test/requests/orchestration") @base_url = "file://" + File.absolute_path(".") - @orchestration = Fog::Orchestration[:openstack] + @orchestration = Fog::OpenStack::Orchestration.new - @stack_mock = Fog::Orchestration::OpenStack::Stack.new( - template_name: "stack_mock", - id: "stack_id" + created_stack = @orchestration.create_stack(stack_name: 'stack_mock') + @stack_mock = Fog::OpenStack::Orchestration::Stack.new( + @orchestration.show_stack_details('stack_mock', created_stack.body['id']).body['stack'] ) @stack_format = { - 'links' => Array, - 'id' => String, - 'stack_name' => String, - 'description' => Fog::Nullable::String, - 'stack_status' => String, + 'links' => Array, + 'id' => String, + 'stack_name' => String, + 'description' => Fog::Nullable::String, + 'stack_status' => String, 'stack_status_reason' => String, - 'creation_time' => Time, - 'updated_time' => Time + 'creation_time' => Time, + 'updated_time' => Time } @stack_detailed_format = { - "parent" => Fog::Nullable::String, - "disable_rollback" => Fog::Boolean, - "description" => String, - "links" => Array, - "stack_status_reason" => String, - "stack_name" => String, + "parent" => Fog::Nullable::String, + "disable_rollback" => Fog::Boolean, + "description" => String, + "links" => Array, + "stack_status_reason" => String, + "stack_name" => String, "stack_user_project_id" => String, - "stack_owner" => String, - "creation_time" => Fog::Nullable::String, - "capabilities" => Array, - "notification_topics" => Array, - "updated_time" => Fog::Nullable::String, - "timeout_mins" => Fog::Nullable::String, - "stack_status" => String, - "parameters" => Hash, - "id" => String, - "outputs" => Array, - "template_description" => String + "stack_owner" => String, + "creation_time" => Fog::Nullable::String, + "capabilities" => Array, + "notification_topics" => Array, + "updated_time" => Fog::Nullable::String, + "timeout_mins" => Fog::Nullable::String, + "stack_status" => String, + "parameters" => Hash, + "id" => String, + "outputs" => Array, + "template_description" => String } @create_format = { - 'id' => String, + 'id' => String, 'links' => Array } @create_format_files = { - 'id' => String, + 'id' => String, 'links' => Array, 'files' => Hash } diff --git a/test/requests/planning/plan_tests.rb b/test/requests/planning/plan_tests.rb index 128c47d2c..0b5037db0 100644 --- a/test/requests/planning/plan_tests.rb +++ b/test/requests/planning/plan_tests.rb @@ -1,22 +1,22 @@ require "test_helper" -describe "Fog::OpenStack[:planning] | Planning plan requests" do +describe "Fog::OpenStack::Planning | Planning plan requests" do before do @plan_format = { - "created_at" => Fog::Nullable::String, + "created_at" => Fog::Nullable::String, "description" => Fog::Nullable::String, - "name" => String, - "parameters" => Fog::Nullable::Array, - "roles" => Fog::Nullable::Array, - "updated_at" => Fog::Nullable::String, - "uuid" => String, - "version" => Fog::Nullable::Integer + "name" => String, + "parameters" => Fog::Nullable::Array, + "roles" => Fog::Nullable::Array, + "updated_at" => Fog::Nullable::String, + "uuid" => String, + "version" => Fog::Nullable::Integer } @plan_templates_format = Hash - @plans = Fog::OpenStack[:planning].list_plans.body + @plans = Fog::OpenStack::Planning.new.list_plans.body @instance = @plans.first - @role_instance = Fog::OpenStack[:planning].list_roles.body.first + @role_instance = Fog::OpenStack::Planning.new.list_roles.body.first end describe "success" do @@ -25,11 +25,11 @@ end it "#get_plan" do - Fog::OpenStack[:planning].get_plan(@instance['uuid']).body.must_match_schema(@plan_format) + Fog::OpenStack::Planning.new.get_plan(@instance['uuid']).body.must_match_schema(@plan_format) end it "#delete_plan" do - Fog::OpenStack[:planning].delete_plan(@instance['uuid']).status.must_equal 204 + Fog::OpenStack::Planning.new.delete_plan(@instance['uuid']).status.must_equal 204 end it "#create_plan" do @@ -37,37 +37,37 @@ name: 'test-plan-name', description: 'test-plan-desc' } - @instance = Fog::OpenStack[:planning].create_plan(plan_attributes).body + @instance = Fog::OpenStack::Planning.new.create_plan(plan_attributes).body @instance.must_match_schema(@plan_format) end it "#add_role_to_plan" do - Fog::OpenStack[:planning].add_role_to_plan( + Fog::OpenStack::Planning.new.add_role_to_plan( @instance['uuid'], @role_instance['uuid'] ).body.must_match_schema(@plan_format) end it "#patch_plan" do - parameters = Fog::OpenStack[:planning].get_plan(@instance['uuid']) - .body['parameters'][0..1] + parameters = Fog::OpenStack::Planning.new.get_plan(@instance['uuid']) + .body['parameters'][0..1] plan_parameters = parameters.collect do |parameter| { - "name" => parameter['name'], + "name" => parameter['name'], "value" => "test-#{parameter['name']}-value" } end - Fog::OpenStack[:planning].patch_plan(@instance['uuid'], plan_parameters).body - .must_match_schema(@plan_format) + Fog::OpenStack::Planning.new.patch_plan(@instance['uuid'], plan_parameters).body + .must_match_schema(@plan_format) end it "#get_plan_templates" do - Fog::OpenStack[:planning].get_plan_templates(@instance['uuid']).body - .must_match_schema(@plan_templates_format) + Fog::OpenStack::Planning.new.get_plan_templates(@instance['uuid']).body + .must_match_schema(@plan_templates_format) end it "#remove_role_from_plan" do - Fog::OpenStack[:planning].remove_role_from_plan( + Fog::OpenStack::Planning.new.remove_role_from_plan( @instance['uuid'], @role_instance['uuid'] ).body.must_match_schema(@plan_format) end diff --git a/test/requests/planning/role_tests.rb b/test/requests/planning/role_tests.rb index 65a0c09fa..c4334c870 100644 --- a/test/requests/planning/role_tests.rb +++ b/test/requests/planning/role_tests.rb @@ -1,18 +1,18 @@ require "test_helper" -describe "Fog::OpenStack[:planning] | Planning role requests" do +describe "Fog::OpenStack::Planning | Planning role requests" do before do @role_format = { 'description' => Fog::Nullable::String, - 'name' => Fog::Nullable::String, - 'uuid' => String, - 'version' => Integer + 'name' => Fog::Nullable::String, + 'uuid' => String, + 'version' => Integer } end describe "success" do it "#list_roles" do - Fog::OpenStack[:planning].list_roles.body.must_match_schema([@role_format]) + Fog::OpenStack::Planning.new.list_roles.body.must_match_schema([@role_format]) end end end diff --git a/test/requests/shared_file_system/quota_tests.rb b/test/requests/shared_file_system/quota_tests.rb index 412af7dc0..a4c23e2ac 100644 --- a/test/requests/shared_file_system/quota_tests.rb +++ b/test/requests/shared_file_system/quota_tests.rb @@ -1,18 +1,18 @@ require "test_helper" -describe "Fog::SharedFileSystem::OpenStack | quota requests" do +describe "Fog::OpenStack::SharedFileSystem | quota requests" do before do - @manila = Fog::SharedFileSystem::OpenStack.new + @manila = Fog::OpenStack::SharedFileSystem.new @project_id = @manila.respond_to?(:current_tenant) ? @manila.current_tenant['id'] : Fog::Mock.random_numbers(6).to_s @quota_format = { - "gigabytes" => Integer, - "shares" => Integer, - "snapshots" => Integer, + "gigabytes" => Integer, + "shares" => Integer, + "snapshots" => Integer, "snapshot_gigabytes" => Integer, - "share_networks" => Integer, - "id" => String + "share_networks" => Integer, + "id" => String } @quota = @manila.get_quota(@project_id).body['quota_set'] end @@ -24,7 +24,7 @@ it "#update_quota" do new_values = @quota.merge( - 'shares' => @quota['shares'] + 1, + 'shares' => @quota['shares'] + 1, 'snapshots' => @quota['snapshots'] + 2 ) diff --git a/test/requests/storage/container_tests.rb b/test/requests/storage/container_tests.rb index c1db06ba6..0ec9c6339 100644 --- a/test/requests/storage/container_tests.rb +++ b/test/requests/storage/container_tests.rb @@ -1,16 +1,17 @@ require "test_helper" -describe "Fog::Storage[:openstack] | container requests" do +describe "Fog::OpenStack::Storage | container requests" do def cleanup_container return if Fog.mocking? + if @storage.head_container(@container_name) @storage.delete_container(@container_name) end - rescue Fog::Storage::OpenStack::NotFound + rescue Fog::OpenStack::Storage::NotFound end before do - @storage = Fog::Storage[:openstack] + @storage = Fog::OpenStack::Storage.new @container_format = [String] @container_name = 'fogcontainertests' @@ -19,7 +20,7 @@ def cleanup_container @containers_format = [{ 'bytes' => Integer, 'count' => Integer, - 'name' => String + 'name' => String }] end @@ -29,8 +30,9 @@ def cleanup_container describe "success" do it "#put_container('fogcontainertests')" do - skip if Fog.mocking? - @storage.put_container('fogcontainertests').status.must_equal 201 + unless Fog.mocking? + @storage.put_container('fogcontainertests').status.must_equal 201 + end end describe "using container" do @@ -45,55 +47,63 @@ def cleanup_container end it "#get_container('fogcontainertests')" do - skip if Fog.mocking? - @storage.get_container('fogcontainertests').body.must_match_schema(@container_format) + unless Fog.mocking? + @storage.get_container('fogcontainertests').body.must_match_schema(@container_format) + end end it "#get_containers" do - skip if Fog.mocking? - @storage.get_containers.body.must_match_schema(@containers_format) + unless Fog.mocking? + @storage.get_containers.body.must_match_schema(@containers_format) + end end it "#head_container('fogcontainertests')" do - skip if Fog.mocking? - resp = @storage.head_container('fogcontainertests') - resp.status.must_equal 204 - resp.headers['X-Container-Object-Count'].to_i.must_equal 0 + unless Fog.mocking? + resp = @storage.head_container('fogcontainertests') + resp.status.must_equal 204 + resp.headers['X-Container-Object-Count'].to_i.must_equal 0 + end end it "#head_containers" do - skip if Fog.mocking? - resp = @storage.head_containers - resp.status.must_equal 204 - resp.headers['X-Account-Container-Count'].to_i.must_equal 1 + unless Fog.mocking? + resp = @storage.head_containers + resp.status.must_equal 204 + resp.headers['X-Account-Container-Count'].to_i.must_equal 1 + end end it "#delete_container('fogcontainertests')" do - skip if Fog.mocking? - @storage.delete_container('fogcontainertests').status.must_equal 204 + unless Fog.mocking? + @storage.delete_container('fogcontainertests').status.must_equal 204 + end end end end describe "failure" do it "#get_container('fognoncontainer')" do - skip if Fog.mocking? - proc do - @storage.get_container('fognoncontainer') - end.must_raise Fog::Storage::OpenStack::NotFound + unless Fog.mocking? + proc do + @storage.get_container('fognoncontainer') + end.must_raise Fog::OpenStack::Storage::NotFound + end end it "#head_container('fognoncontainer')" do - skip if Fog.mocking? - proc do - @storage.head_container('fognoncontainer') - end.must_raise Fog::Storage::OpenStack::NotFound + unless Fog.mocking? + proc do + @storage.head_container('fognoncontainer') + end.must_raise Fog::OpenStack::Storage::NotFound + end end it "#delete_container('fognoncontainer')" do - skip if Fog.mocking? - proc do - @storage.delete_container('fognoncontainer') - end.must_raise Fog::Storage::OpenStack::NotFound + unless Fog.mocking? + proc do + @storage.delete_container('fognoncontainer') + end.must_raise Fog::OpenStack::Storage::NotFound + end end end end diff --git a/test/requests/storage/large_object_tests.rb b/test/requests/storage/large_object_tests.rb index c52b3ef99..fe69cbe90 100644 --- a/test/requests/storage/large_object_tests.rb +++ b/test/requests/storage/large_object_tests.rb @@ -1,8 +1,8 @@ require "test_helper" -describe "Fog::Storage[:openstack] | large object requests" do +describe "Fog::OpenStack::Storage | large object requests" do before do - @storage = Fog::Storage[:openstack] + @storage = Fog::OpenStack::Storage.new unless Fog.mocking? @directory = @storage.directories.create(key: 'foglargeobjecttests') @@ -60,14 +60,16 @@ describe "dynamic large object requests" do it "#put_object_manifest alias" do - skip if Fog.mocking? - @storage.put_object_manifest(@directory.identity, 'fog_large_object') + unless Fog.mocking? + @storage.put_object_manifest(@directory.identity, 'fog_large_object') + end end describe "using default X-Object-Manifest header" do it "#put_dynamic_obj_manifest" do - skip if Fog.mocking? - @storage.put_dynamic_obj_manifest(@directory.identity, 'fog_large_object') + unless Fog.mocking? + @storage.put_dynamic_obj_manifest(@directory.identity, 'fog_large_object') + end end describe "with large object" do @@ -81,21 +83,27 @@ end it "#get_object streams all segments matching the default prefix" do - skip if Fog.mocking? - expected = @segments[:a][:data] + @segments[:b][:data] + @segments[:c][:data] - @storage.get_object(@directory.identity, 'fog_large_object').body.must_equal expected + unless Fog.mocking? + expected = @segments[:a][:data] + @segments[:b][:data] + @segments[:c][:data] + @storage.get_object(@directory.identity, 'fog_large_object').body.must_equal expected + end end # When the manifest object name is equal to the segment prefix, # OpenStack treats it as if it's the first segment. # So you must prepend the manifest object's Etag - Digest::MD5.hexdigest('') it "#head_object returns Etag that includes manifest object in calculation" do - skip if Fog.mocking? - etags = ['d41d8cd98f00b204e9800998ecf8427e', - @segments[:a][:etag], @segments[:b][:etag], @segments[:c][:etag]] - # returned in quotes "\"2577f38428e895c50de6ea78ccc7da2a"\" - expected = %("#{Digest::MD5.hexdigest(etags.join)}") - @storage.head_object(@directory.identity, 'fog_large_object').headers['Etag'].must_equal expected + unless Fog.mocking? + etags = [ + 'd41d8cd98f00b204e9800998ecf8427e', + @segments[:a][:etag], + @segments[:b][:etag], + @segments[:c][:etag] + ] + # returned in quotes "\"2577f38428e895c50de6ea78ccc7da2a"\" + expected = %("#{Digest::MD5.hexdigest(etags.join)}") + @storage.head_object(@directory.identity, 'fog_large_object').headers['Etag'].must_equal expected + end end end end @@ -115,18 +123,20 @@ end it "#get_object streams segments only matching the specified prefix" do - skip if Fog.mocking? - expected = @segments[:a][:data] + @segments[:b][:data] - resp = @storage.get_object(@directory.identity, 'fog_large_object') - resp.body.must_equal expected + unless Fog.mocking? + expected = @segments[:a][:data] + @segments[:b][:data] + resp = @storage.get_object(@directory.identity, 'fog_large_object') + resp.body.must_equal expected + end end it "#head_object returns Etag that does not include manifest object in calculation" do - skip if Fog.mocking? - etags = [@segments[:a][:etag], @segments[:b][:etag]] - # returned in quotes "\"0f035ed3cc38aa0ef46dda3478fad44d"\" - expected = %("#{Digest::MD5.hexdigest(etags.join)}") - @storage.head_object(@directory.identity, 'fog_large_object').headers['Etag'].must_equal expected + unless Fog.mocking? + etags = [@segments[:a][:etag], @segments[:b][:etag]] + # returned in quotes "\"0f035ed3cc38aa0ef46dda3478fad44d"\" + expected = %("#{Digest::MD5.hexdigest(etags.join)}") + @storage.head_object(@directory.identity, 'fog_large_object').headers['Etag'].must_equal expected + end end end end @@ -139,9 +149,10 @@ end end it "#get_object" do - skip if Fog.mocking? - expected = @segments[:a][:data] + @segments[:b][:data] - @storage.get_object(@directory2.identity, 'fog_large_object').body.must_equal expected + unless Fog.mocking? + expected = @segments[:a][:data] + @segments[:b][:data] + @storage.get_object(@directory2.identity, 'fog_large_object').body.must_equal expected + end end end end @@ -167,36 +178,39 @@ end it "#head_object" do - skip if Fog.mocking? - etags = [@segments[:a][:etag], @segments[:c][:etag]] - # "\"ad7e633a12e8a4915b45e6dd1d4b0b4b\"" - etag = %("#{Digest::MD5.hexdigest(etags.join)}") - content_length = @segments[:a][:size] + @segments[:c][:size] - response = @storage.head_object(@directory.identity, 'fog_large_object') - - response.headers['Etag'].must_equal etag - response.headers['Content-Length'].to_i.must_equal content_length - response.headers['X-Static-Large-Object'].must_equal 'True' + unless Fog.mocking? + etags = [@segments[:a][:etag], @segments[:c][:etag]] + # "\"ad7e633a12e8a4915b45e6dd1d4b0b4b\"" + etag = %("#{Digest::MD5.hexdigest(etags.join)}") + content_length = @segments[:a][:size] + @segments[:c][:size] + response = @storage.head_object(@directory.identity, 'fog_large_object') + + response.headers['Etag'].must_equal etag + response.headers['Content-Length'].to_i.must_equal content_length + response.headers['X-Static-Large-Object'].must_equal 'True' + end end it "#get_object" do - skip if Fog.mocking? - expected = @segments[:a][:data] + @segments[:c][:data] - resp = @storage.get_object(@directory.identity, 'fog_large_object') - resp.body.must_equal expected + unless Fog.mocking? + expected = @segments[:a][:data] + @segments[:c][:data] + resp = @storage.get_object(@directory.identity, 'fog_large_object') + resp.body.must_equal expected + end end describe "#delete_static_large_object" do it "deletes manifest and segments" do - skip if Fog.mocking? - expected = { - 'Number Not Found' => 0, - 'Response Status' => '200 OK', - 'Errors' => [], - 'Number Deleted' => 3, - 'Response Body' => '' - } - @storage.delete_static_large_object(@directory.identity, 'fog_large_object').body.must_equal expected + unless Fog.mocking? + expected = { + 'Number Not Found' => 0, + 'Response Status' => '200 OK', + 'Errors' => [], + 'Number Deleted' => 3, + 'Response Body' => '' + } + @storage.delete_static_large_object(@directory.identity, 'fog_large_object').body.must_equal expected + end end end end @@ -221,36 +235,39 @@ end it "#head_object" do - skip if Fog.mocking? - etags = [@segments[:b][:etag], @segments[:d][:etag]] - # "\"9801a4cc4472896a1e975d03f0d2c3f8\"" - etag = %("#{Digest::MD5.hexdigest(etags.join)}") - content_length = (@segments[:b][:size] + @segments[:d][:size]) - response = @storage.head_object(@directory2.identity, 'fog_large_object') - - response.headers['Etag'].must_equal etag - response.headers['Content-Length'].to_i.must_equal content_length - response.headers['X-Static-Large-Object'].must_equal 'True' + unless Fog.mocking? + etags = [@segments[:b][:etag], @segments[:d][:etag]] + # "\"9801a4cc4472896a1e975d03f0d2c3f8\"" + etag = %("#{Digest::MD5.hexdigest(etags.join)}") + content_length = (@segments[:b][:size] + @segments[:d][:size]) + response = @storage.head_object(@directory2.identity, 'fog_large_object') + + response.headers['Etag'].must_equal etag + response.headers['Content-Length'].to_i.must_equal content_length + response.headers['X-Static-Large-Object'].must_equal 'True' + end end it "#get_object" do - skip if Fog.mocking? - expected = @segments[:b][:data] + @segments[:d][:data] - resp = @storage.get_object(@directory2.identity, 'fog_large_object') - resp.body.must_equal expected + unless Fog.mocking? + expected = @segments[:b][:data] + @segments[:d][:data] + resp = @storage.get_object(@directory2.identity, 'fog_large_object') + resp.body.must_equal expected + end end it "#delete_static_large_object" do - skip if Fog.mocking? - expected = { - 'Number Not Found' => 0, - 'Response Status' => '200 OK', - 'Errors' => [], - 'Number Deleted' => 3, - 'Response Body' => '' - } - resp = @storage.delete_static_large_object(@directory2.identity, 'fog_large_object') - resp.body.must_equal expected + unless Fog.mocking? + expected = { + 'Number Not Found' => 0, + 'Response Status' => '200 OK', + 'Errors' => [], + 'Number Deleted' => 3, + 'Response Body' => '' + } + resp = @storage.delete_static_large_object(@directory2.identity, 'fog_large_object') + resp.body.must_equal expected + end end end end @@ -259,19 +276,21 @@ describe "failure" do describe "dynamic large object requests" do it "#put_dynamic_obj_manifest with missing container" do - skip if Fog.mocking? - proc do - @storage.put_dynamic_obj_manifest('fognoncontainer', 'fog_large_object') - end.must_raise Fog::Storage::OpenStack::NotFound + unless Fog.mocking? + proc do + @storage.put_dynamic_obj_manifest('fognoncontainer', 'fog_large_object') + end.must_raise Fog::OpenStack::Storage::NotFound + end end end describe "static large object requests" do it "#put_static_obj_manifest with missing container" do - skip if Fog.mocking? - proc do - @storage.put_static_obj_manifest('fognoncontainer', 'fog_large_object', []) - end.must_raise Fog::Storage::OpenStack::NotFound + unless Fog.mocking? + proc do + @storage.put_static_obj_manifest('fognoncontainer', 'fog_large_object', []) + end.must_raise Fog::OpenStack::Storage::NotFound + end end it "#put_static_obj_manifest with missing object" do @@ -317,6 +336,7 @@ it "#put_static_obj_manifest with invalid byte_size" do skip if Fog.mocking? + segments = [{ path: "#{@segments[:a][:container]}/#{@segments[:a][:name]}", etag: @segments[:a][:etag], @@ -352,44 +372,47 @@ end it "deletes manifest and segment :a, and reports missing segment :b" do - skip if Fog.mocking? - expected = { - 'Number Not Found' => 1, - 'Response Status' => '200 OK', - 'Errors' => [], - 'Number Deleted' => 2, - 'Response Body' => '' - } - @storage.delete_static_large_object(@directory.identity, 'fog_large_object').body.must_equal expected + unless Fog.mocking? + expected = { + 'Number Not Found' => 1, + 'Response Status' => '200 OK', + 'Errors' => [], + 'Number Deleted' => 2, + 'Response Body' => '' + } + @storage.delete_static_large_object(@directory.identity, 'fog_large_object').body.must_equal expected + end end end end it "#delete_static_large_object with missing container" do - skip if Fog.mocking? - expected = { - 'Number Not Found' => 1, - 'Response Status' => '200 OK', - 'Errors' => [], - 'Number Deleted' => 0, - 'Response Body' => '' - } + unless Fog.mocking? + expected = { + 'Number Not Found' => 1, + 'Response Status' => '200 OK', + 'Errors' => [], + 'Number Deleted' => 0, + 'Response Body' => '' + } - resp = @storage.delete_static_large_object('fognoncontainer', 'fog_large_object') - resp.body.must_equal expected + resp = @storage.delete_static_large_object('fognoncontainer', 'fog_large_object') + resp.body.must_equal expected + end end it "#delete_static_large_object with missing manifest" do - skip if Fog.mocking? - expected = { - 'Number Not Found' => 1, - 'Response Status' => '200 OK', - 'Errors' => [], - 'Number Deleted' => 0, - 'Response Body' => '' - } + unless Fog.mocking? + expected = { + 'Number Not Found' => 1, + 'Response Status' => '200 OK', + 'Errors' => [], + 'Number Deleted' => 0, + 'Response Body' => '' + } - @storage.delete_static_large_object(@directory.identity, 'fog_non_object').body.must_equal expected + @storage.delete_static_large_object(@directory.identity, 'fog_non_object').body.must_equal expected + end end end end diff --git a/test/requests/storage/object_tests.rb b/test/requests/storage/object_tests.rb index 0cd292352..c699abe73 100644 --- a/test/requests/storage/object_tests.rb +++ b/test/requests/storage/object_tests.rb @@ -9,10 +9,10 @@ def test_temp_url(url_s, time, desired_scheme) query_params.any? { |p| p == ['temp_url_expires', time.to_i.to_s] }.must_equal true end -describe "Fog::Storage[:openstack] | object requests" do +describe "Fog::OpenStack::Storage | object requests" do before do unless Fog.mocking? - @directory = Fog::Storage[:openstack].directories.create(key: 'fogobjecttests') + @directory = Fog::OpenStack::Storage.new.directories.create(key: 'fogobjecttests') end module OpenStackStorageHelpers @@ -31,86 +31,99 @@ def override_path(path) describe "success" do it "#put_object('fogobjecttests', 'fog_object')" do - resp = Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_object', lorem_file) + resp = Fog::OpenStack::Storage.new.put_object('fogobjecttests', 'fog_object', lorem_file) resp.headers['ETag'].must_equal '80d7930fe13ff4e45156b6581656a247' end describe "with_object" do before do file = lorem_file - resp = Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_object', file) + resp = Fog::OpenStack::Storage.new.put_object('fogobjecttests', 'fog_object', file) file.close resp.headers['ETag'].must_equal '80d7930fe13ff4e45156b6581656a247' end it "#get_object('fogobjectests', 'fog_object')" do - skip if Fog.mocking? - resp = Fog::Storage[:openstack].get_object('fogobjecttests', 'fog_object') - resp.body.must_equal lorem_file.read + unless Fog.mocking? + resp = Fog::OpenStack::Storage.new.get_object('fogobjecttests', 'fog_object') + resp.body.must_equal lorem_file.read + end end it "#get_object('fogobjecttests', 'fog_object', &block)" do - skip if Fog.mocking? - data = '' - Fog::Storage[:openstack].get_object('fogobjecttests', 'fog_object') do |chunk, _remaining_bytes, _total_bytes| - data << chunk + unless Fog.mocking? + data = '' + Fog::OpenStack::Storage.new.get_object('fogobjecttests', 'fog_object') do |chunk, _remaining_bytes, _total_bytes| + data << chunk + end + data.must_equal lorem_file.read end - data.must_equal lorem_file.read end it "#public_url('fogobjectests', 'fog_object')" do - skip if Fog.mocking? - url = Fog::Storage[:openstack].directories.first.files.first.public_url - url.end_with?('/fogobjecttests/fog_object').must_equal true + unless Fog.mocking? + url = Fog::OpenStack::Storage.new.directories.first.files.first.public_url + url.end_with?('/fogobjecttests/fog_object').must_equal true + end end it "#public_url('fogobjectests')" do - skip if Fog.mocking? - url = Fog::Storage[:openstack].directories.first.public_url - url.end_with?('/fogobjecttests').must_equal true + unless Fog.mocking? + url = Fog::OpenStack::Storage.new.directories.first.public_url + url.end_with?('/fogobjecttests').must_equal true + end end it "#head_object('fogobjectests', 'fog_object')" do - skip if Fog.mocking? - resp = Fog::Storage[:openstack].head_object('fogobjecttests', 'fog_object') - resp.headers['ETag'].must_equal '80d7930fe13ff4e45156b6581656a247' + unless Fog.mocking? + resp = Fog::OpenStack::Storage.new.head_object('fogobjecttests', 'fog_object') + resp.headers['ETag'].must_equal '80d7930fe13ff4e45156b6581656a247' + end end it "#post_object('fogobjecttests', 'fog_object')" do - skip if Fog.mocking? - Fog::Storage[:openstack].post_object('fogobjecttests', 'fog_object', - 'X-Object-Meta-test-header' => 'fog-test-value') - resp = Fog::Storage[:openstack].head_object('fogobjecttests', 'fog_object') - resp.headers.must_include 'X-Object-Meta-Test-Header' - resp.headers['X-Object-Meta-Test-Header'].must_equal 'fog-test-value' + unless Fog.mocking? + Fog::OpenStack::Storage.new.post_object( + 'fogobjecttests', + 'fog_object', + 'X-Object-Meta-test-header' => 'fog-test-value' + ) + resp = Fog::OpenStack::Storage.new.head_object('fogobjecttests', 'fog_object') + resp.headers.must_include 'X-Object-Meta-Test-Header' + resp.headers['X-Object-Meta-Test-Header'].must_equal 'fog-test-value' + end end it "#delete_object('fogobjecttests', 'fog_object')" do - skip if Fog.mocking? - resp = Fog::Storage[:openstack].delete_object('fogobjecttests', 'fog_object') - resp.status.must_equal 204 + unless Fog.mocking? + resp = Fog::OpenStack::Storage.new.delete_object('fogobjecttests', 'fog_object') + resp.status.must_equal 204 + end end it "#get_object_http_url('directory.identity', 'fog_object', expiration timestamp)" do - skip if Fog.mocking? - ts = Time.at(1_395_343_213) - url_s = Fog::Storage[:openstack].get_object_http_url(@directory.identity, 'fog_object', ts) - test_temp_url(url_s, ts, 'http') + unless Fog.mocking? + ts = Time.at(1_395_343_213) + url_s = Fog::OpenStack::Storage.new.get_object_http_url(@directory.identity, 'fog_object', ts) + test_temp_url(url_s, ts, 'http') + end end it "#get_object_https_url('directory.identity', 'fog_object', expiration timestamp)" do - skip if Fog.mocking? - ts = Time.at(1_395_343_213) - url_s = Fog::Storage[:openstack].get_object_https_url(@directory.identity, 'fog_object', ts) - test_temp_url(url_s, ts, 'https') + unless Fog.mocking? + ts = Time.at(1_395_343_213) + url_s = Fog::OpenStack::Storage.new.get_object_https_url(@directory.identity, 'fog_object', ts) + test_temp_url(url_s, ts, 'https') + end end it "#get_object_https_url_numeric('directory.identity', 'fog_object', expiration_timestamp)" do - skip if Fog.mocking? - ts = Time.at(1500000000) - fog = Fog::Storage.new(provider: :openstack, openstack_temp_url_key: '12345') - url_s = fog.get_object_https_url(@directory.identity, 'fog_object', ts) - test_temp_url(url_s, ts, 'https') + unless Fog.mocking? + ts = Time.at(1_500_000_000) + fog = Fog::Storage.new(provider: :openstack, openstack_temp_url_key: '12345') + url_s = fog.get_object_https_url(@directory.identity, 'fog_object', ts) + test_temp_url(url_s, ts, 'https') + end end end @@ -119,7 +132,7 @@ def override_path(path) begin file = lorem_file buffer_size = file.stat.size / 2 # chop it up into two buffers - resp = Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_block_object', nil) do + resp = Fog::OpenStack::Storage.new.put_object('fogobjecttests', 'fog_block_object', nil) do file.read(buffer_size).to_s end ensure @@ -131,22 +144,24 @@ def override_path(path) describe "with_object" do before do file = lorem_file - Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_block_object', nil) do + Fog::OpenStack::Storage.new.put_object('fogobjecttests', 'fog_block_object', nil) do file.read(file.stat.size).to_s end file.close end it "#get_object" do - skip if Fog.mocking? - resp = Fog::Storage[:openstack].get_object('fogobjecttests', 'fog_block_object') - resp.body.must_equal lorem_file.read + unless Fog.mocking? + resp = Fog::OpenStack::Storage.new.get_object('fogobjecttests', 'fog_block_object') + resp.body.must_equal lorem_file.read + end end it "#delete_object" do - skip if Fog.mocking? - resp = Fog::Storage[:openstack].delete_object('fogobjecttests', 'fog_block_object') - resp.status.must_equal 204 + unless Fog.mocking? + resp = Fog::OpenStack::Storage.new.delete_object('fogobjecttests', 'fog_block_object') + resp.status.must_equal 204 + end end end end @@ -154,114 +169,124 @@ def override_path(path) describe "deletes multiple objects" do before do unless Fog.mocking? - Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_object', lorem_file) - Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_object2', lorem_file) - Fog::Storage[:openstack].directories.create(key: 'fogobjecttests2') - Fog::Storage[:openstack].put_object('fogobjecttests2', 'fog_object', lorem_file) + Fog::OpenStack::Storage.new.put_object('fogobjecttests', 'fog_object', lorem_file) + Fog::OpenStack::Storage.new.put_object('fogobjecttests', 'fog_object2', lorem_file) + Fog::OpenStack::Storage.new.directories.create(key: 'fogobjecttests2') + Fog::OpenStack::Storage.new.put_object('fogobjecttests2', 'fog_object', lorem_file) end @expected = { "Number Not Found" => 0, - "Response Status" => "200 OK", - "Errors" => [], - "Number Deleted" => 2, - "Response Body" => "" + "Response Status" => "200 OK", + "Errors" => [], + "Number Deleted" => 2, + "Response Body" => "" } end after do - skip if Fog.mocking? - dir2 = Fog::Storage[:openstack].directories.get('fogobjecttests2') - if !dir2.nil? - dir2.files.each(&:destroy) - dir2.destroy + unless Fog.mocking? + dir2 = Fog::OpenStack::Storage.new.directories.get('fogobjecttests2') + unless dir2.nil? + dir2.files.each(&:destroy) + dir2.destroy + end end end it "#delete_multiple_objects" do skip if Fog.mocking? - resp = Fog::Storage[:openstack].delete_multiple_objects( + resp = Fog::OpenStack::Storage.new.delete_multiple_objects( 'fogobjecttests', %w[fog_object fog_object2] ) resp.body.must_equal @expected end it "deletes object and container" do - skip if Fog.mocking? - resp = Fog::Storage[:openstack].delete_multiple_objects( - nil, - ['fogobjecttests2/fog_object', 'fogobjecttests2'] - ) - resp.body.must_equal @expected + unless Fog.mocking? + resp = Fog::OpenStack::Storage.new.delete_multiple_objects( + nil, + ['fogobjecttests2/fog_object', 'fogobjecttests2'] + ) + resp.body.must_equal @expected + end end end end describe "failure" do it "#get_object('fogobjecttests', 'fog_non_object')" do - skip if Fog.mocking? - proc do - Fog::Storage[:openstack].get_object('fogobjecttests', 'fog_non_object') - end.must_raise(Fog::Storage::OpenStack::NotFound) + unless Fog.mocking? + proc do + Fog::OpenStack::Storage.new.get_object('fogobjecttests', 'fog_non_object') + end.must_raise(Fog::OpenStack::Storage::NotFound) + end end it "#get_object('fognoncontainer', 'fog_non_object')" do - skip if Fog.mocking? - proc do - Fog::Storage[:openstack].get_object('fognoncontainer', 'fog_non_object') - end.must_raise(Fog::Storage::OpenStack::NotFound) + unless Fog.mocking? + proc do + Fog::OpenStack::Storage.new.get_object('fognoncontainer', 'fog_non_object') + end.must_raise(Fog::OpenStack::Storage::NotFound) + end end it "#head_object('fogobjecttests', 'fog_non_object')" do - skip if Fog.mocking? - proc do - Fog::Storage[:openstack].head_object('fogobjecttests', 'fog_non_object') - end.must_raise(Fog::Storage::OpenStack::NotFound) + unless Fog.mocking? + proc do + Fog::OpenStack::Storage.new.head_object('fogobjecttests', 'fog_non_object') + end.must_raise(Fog::OpenStack::Storage::NotFound) + end end it "#head_object('fognoncontainer', 'fog_non_object')" do - skip if Fog.mocking? - proc do - Fog::Storage[:openstack].head_object('fognoncontainer', 'fog_non_object') - end.must_raise(Fog::Storage::OpenStack::NotFound) + unless Fog.mocking? + proc do + Fog::OpenStack::Storage.new.head_object('fognoncontainer', 'fog_non_object') + end.must_raise(Fog::OpenStack::Storage::NotFound) + end end it "#post_object('fognoncontainer', 'fog_non_object')" do - skip if Fog.mocking? - proc do - Fog::Storage[:openstack].post_object('fognoncontainer', 'fog_non_object') - end.must_raise(Fog::Storage::OpenStack::NotFound) + unless Fog.mocking? + proc do + Fog::OpenStack::Storage.new.post_object('fognoncontainer', 'fog_non_object') + end.must_raise(Fog::OpenStack::Storage::NotFound) + end end it "#delete_object('fogobjecttests', 'fog_non_object')" do - skip if Fog.mocking? - proc do - Fog::Storage[:openstack].delete_object('fogobjecttests', 'fog_non_object') - end.must_raise(Fog::Storage::OpenStack::NotFound) + unless Fog.mocking? + proc do + Fog::OpenStack::Storage.new.delete_object('fogobjecttests', 'fog_non_object') + end.must_raise(Fog::OpenStack::Storage::NotFound) + end end it "#delete_object('fognoncontainer', 'fog_non_object')" do - skip if Fog.mocking? - proc do - Fog::Storage[:openstack].delete_object('fognoncontainer', 'fog_non_object') - end.must_raise(Fog::Storage::OpenStack::NotFound) + unless Fog.mocking? + proc do + Fog::OpenStack::Storage.new.delete_object('fognoncontainer', 'fog_non_object') + end.must_raise(Fog::OpenStack::Storage::NotFound) + end end describe "#delete_multiple_objects" do before do - skip if Fog.mocking? - @expected = { - "Number Not Found" => 2, - "Response Status" => "200 OK", - "Errors" => [], - "Number Deleted" => 0, - "Response Body" => "" - } + unless Fog.mocking? + @expected = { + "Number Not Found" => 2, + "Response Status" => "200 OK", + "Errors" => [], + "Number Deleted" => 0, + "Response Body" => "" + } + end end it "reports missing objects" do skip if Fog.mocking? - resp = Fog::Storage[:openstack].delete_multiple_objects( + resp = Fog::OpenStack::Storage.new.delete_multiple_objects( 'fogobjecttests', %w[fog_non_object fog_non_object2] ) resp.body.must_equal @expected @@ -269,32 +294,33 @@ def override_path(path) it "reports missing container" do skip if Fog.mocking? - resp = Fog::Storage[:openstack].delete_multiple_objects( + resp = Fog::OpenStack::Storage.new.delete_multiple_objects( 'fognoncontainer', %w[fog_non_object fog_non_object2] ) resp.body.must_equal @expected end it "deleting non-empty container" do - skip if Fog.mocking? - file = lorem_file - resp = Fog::Storage[:openstack].put_object('fogobjecttests', 'fog_object', file) - file.close - resp.headers['ETag'].must_equal '80d7930fe13ff4e45156b6581656a247' - - expected = { - "Number Not Found" => 0, - "Response Status" => "400 Bad Request", - "Errors" => [['fogobjecttests', '409 Conflict']], - "Number Deleted" => 0, - "Response Body" => "" - } - - resp = Fog::Storage[:openstack].delete_multiple_objects( - nil, - %w[fogobjecttests] - ) - resp.body.must_equal expected + unless Fog.mocking? + file = lorem_file + resp = Fog::OpenStack::Storage.new.put_object('fogobjecttests', 'fog_object', file) + file.close + resp.headers['ETag'].must_equal '80d7930fe13ff4e45156b6581656a247' + + expected = { + "Number Not Found" => 0, + "Response Status" => "400 Bad Request", + "Errors" => [['fogobjecttests', '409 Conflict']], + "Number Deleted" => 0, + "Response Body" => "" + } + + resp = Fog::OpenStack::Storage.new.delete_multiple_objects( + nil, + %w[fogobjecttests] + ) + resp.body.must_equal expected + end end end end diff --git a/test/requests/volume/availability_zone_tests.rb b/test/requests/volume/availability_zone_tests.rb index 14377e6e7..eaae04a10 100644 --- a/test/requests/volume/availability_zone_tests.rb +++ b/test/requests/volume/availability_zone_tests.rb @@ -1,17 +1,17 @@ require 'test_helper' -describe "Fog::Volume[:openstack] | availability zone requests" do +describe "Fog::OpenStack::Volume | availability zone requests" do before do @flavor_format = { - 'zoneName' => String, + 'zoneName' => String, 'zoneState' => Hash } end describe "success" do it "#list_zones" do - Fog::Volume[:openstack].list_zones.body - .must_match_schema('availabilityZoneInfo' => [@flavor_format]) + Fog::OpenStack::Volume.new.list_zones.body + .must_match_schema('availabilityZoneInfo' => [@flavor_format]) end end end diff --git a/test/requests/volume/backup_tests.rb b/test/requests/volume/backup_tests.rb index 66102fe8a..d6c9d87ea 100644 --- a/test/requests/volume/backup_tests.rb +++ b/test/requests/volume/backup_tests.rb @@ -1,16 +1,16 @@ require 'test_helper' -describe "Fog::Volume[:openstack] | backup requests" do +describe "Fog::OpenStack::Volume | backup requests" do before do - @volume = Fog::Volume[:openstack] + @volume = Fog::OpenStack::Volume.new @backup_format = { - 'id' => String, - 'volume_id' => String, - 'status' => String, - 'name' => String, - 'size' => Integer, + 'id' => String, + 'volume_id' => String, + 'status' => String, + 'name' => String, + 'size' => Integer, 'object_count' => Integer, - 'container' => String + 'container' => String } @backup = @volume.create_backup(name: 'test_backup', volume_id: '2').body['backup'] diff --git a/test/requests/volume/quota_tests.rb b/test/requests/volume/quota_tests.rb index 29e2046ee..356990fec 100644 --- a/test/requests/volume/quota_tests.rb +++ b/test/requests/volume/quota_tests.rb @@ -1,14 +1,15 @@ require 'test_helper' -describe "Fog::Volume[:openstack] | quota requests" do +describe "Fog::OpenStack::Volume | quota requests" do before do - @volume = Fog::Volume[:openstack] - @tenant_id = Fog::Compute[:openstack].list_tenants.body['tenants'].first['id'] + @volume = Fog::OpenStack::Volume.new + identity = Fog::OpenStack::Identity.new(openstack_identity_api_version: 'v2.0') + @tenant_id = identity.list_tenants.body['tenants'].first['id'] @quota_set_format = { - 'volumes' => Fog::Nullable::Integer, + 'volumes' => Fog::Nullable::Integer, 'gigabytes' => Fog::Nullable::Integer, 'snapshots' => Fog::Nullable::Integer, - 'id' => String + 'id' => String } @quota = @volume.get_quota(@tenant_id).body['quota_set'] end @@ -25,7 +26,7 @@ it "updates quota" do @new_values = @quota.merge( - 'volumes' => @quota['volumes'] / 2, + 'volumes' => @quota['volumes'] / 2, 'snapshots' => @quota['snapshots'] / 2 ) diff --git a/test/requests/volume/volume_type_tests.rb b/test/requests/volume/volume_type_tests.rb index 33fdce02c..9cf29a632 100644 --- a/test/requests/volume/volume_type_tests.rb +++ b/test/requests/volume/volume_type_tests.rb @@ -1,13 +1,13 @@ require 'test_helper' -describe "Fog::Volume[:openstack] | volume_type requests" do +describe "Fog::OpenStack::Volume | volume_type requests" do before do - @volume = Fog::Volume[:openstack] + @volume = Fog::OpenStack::Volume.new @volume_type_format = { - 'name' => String, + 'name' => String, 'extra_specs' => Hash, - 'id' => String + 'id' => String } @volume_type = @volume.create_volume_type(name: 'test_volume_type').body['volume_type'] diff --git a/test/requests/workflow/workflow_tests.rb b/test/requests/workflow/workflow_tests.rb index 9b41a5c23..3f026b04b 100644 --- a/test/requests/workflow/workflow_tests.rb +++ b/test/requests/workflow/workflow_tests.rb @@ -1,10 +1,10 @@ require "test_helper" -require 'fog/workflow/openstack' -require 'fog/workflow/openstack/v2' +require 'fog/openstack/workflow' +require 'fog/openstack/workflow/v2' -describe "Fog::Workflow::OpenStack | Workflow requests" do +describe "Fog::OpenStack::Workflow | Workflow requests" do before do - @workflow = Fog::Workflow::OpenStack.new + @workflow = Fog::OpenStack::Workflow.new @execution_id = Fog::UUID.uuid @workflow_name = "tripleo.plan_management.v1.create_default_deployment_plan" @@ -12,18 +12,18 @@ @get_execution_response = { "state" => "running", - "id" => "1111" + "id" => "1111" } @workbook_sample = { - "version" => "2.0", - "name" => "workbook1", + "version" => "2.0", + "name" => "workbook1", "description" => "d1" } @workflow_sample = { - "version" => "2.0", - "name" => "workflow1", + "version" => "2.0", + "name" => "workflow1", "description" => "d1" } @@ -42,8 +42,8 @@ } @cron_trigger_sample = { - "version" => "2.0", - "name" => "cron_trigger1", + "version" => "2.0", + "name" => "cron_trigger1", "description" => "d1" } diff --git a/test/storage_tests.rb b/test/storage_tests.rb index 9c1bbf75f..e6f1f50a1 100644 --- a/test/storage_tests.rb +++ b/test/storage_tests.rb @@ -1,8 +1,8 @@ require "test_helper" -describe "Fog::Storage[:openstack], ['openstack', 'storage']" do +describe "Fog::OpenStack::Storage, ['openstack', 'storage']" do before do - @storage = Fog::Storage[:openstack] + @storage = Fog::OpenStack::Storage.new @original_path = @storage.instance_variable_get :@path end diff --git a/test/test_helper.rb b/test/test_helper.rb index cd429a9cd..0e11db47f 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -8,6 +8,7 @@ require 'fog/test_helpers/types_helper.rb' require 'fog/test_helpers/minitest/assertions' require 'fog/test_helpers/minitest/expectations' +require 'pry-byebug' require File.expand_path('../lib/fog/openstack', __dir__) diff --git a/test/version_tests.rb b/test/version_tests.rb index 07714bd15..f18d48a5b 100644 --- a/test/version_tests.rb +++ b/test/version_tests.rb @@ -10,31 +10,31 @@ "versions" => [ { "status" => "CURRENT", - "id" => "v2.0", - "links" => [ + "id" => "v2.0", + "links" => [ { "href" => "http://example:9292/v2/", - "rel" => "self" + "rel" => "self" } ] }, { "status" => "CURRENT", - "id" => "v1.1", - "links" => [ + "id" => "v1.1", + "links" => [ { "href" => "http://exampple:9292/v1/", - "rel" => "self" + "rel" => "self" } ] }, { "status" => "SUPPORTED", - "id" => "v1.0", - "links" => [ + "id" => "v1.0", + "links" => [ { "href" => "http://example:9292/v1/", - "rel" => "self" + "rel" => "self" } ] } diff --git a/test/volume_tests.rb b/test/volume_tests.rb index 07611c536..cf9aeeb05 100644 --- a/test/volume_tests.rb +++ b/test/volume_tests.rb @@ -1,11 +1,11 @@ require 'test_helper' -require 'fog/volume/openstack' -require 'fog/volume/openstack/v1' -require 'fog/volume/openstack/v2' +require 'fog/openstack/volume' +require 'fog/openstack/volume/v1' +require 'fog/openstack/volume/v2' -describe "Fog::Volume[:openstack], ['openstack', 'volume']" do - volume = Fog::Volume[:openstack] +describe "Fog::OpenStack::Volume, ['openstack', 'volume']" do + volume = Fog::OpenStack::Volume.new describe "Volumes collection" do %w{volumes}.each do |collection| diff --git a/unit/auth/catalog_test.rb b/unit/auth/catalog_test.rb new file mode 100644 index 000000000..ebb763f3c --- /dev/null +++ b/unit/auth/catalog_test.rb @@ -0,0 +1,252 @@ +require 'test_helper' + +describe Fog::OpenStack::Auth::Catalog::V3 do + CATALOGV3 = [ + { + "endpoints" => [ + { + "region_id" => "regionOne", + "url" => "http://localhost:9696", + "region" => "regionOne", + "interface" => "internal", + "id" => "id_endpoint1_internal" + }, + { + "region_id" => "regionOne", + "url" => "http://localhost:9696", + "region" => "regionOne", + "interface" => "public", + "id" => "id_endpoint1_public" + }, + { + "region_id" => "regionOne", + "url" => "http://localhost:9696", + "region" => "regionOne", + "interface" => "admin", + "id" => "id_endpoint1_admin" + } + ], + "type" => "network", + "id" => "id1", + "name" => "neutron" + }, + { + "endpoints" => [ + { + "region_id" => "regionOne", + "url" => "http://localhost:9292", + "region" => "regionOne", + "interface" => "internal", + "id" => "id_endpoint1_internal" + }, + { + "region_id" => "regionOne", + "url" => "http://localhost:9292", + "region" => "regionOne", + "interface" => "public", + "id" => "id_endpoint1_public" + }, + { + "region_id" => "regionOne", + "url" => "http://localhost:9292", + "region" => "regionOne", + "interface" => "admin", + "id" => "id_endpoint1_admin" + } + ], + "type" => "image", + "id" => "id2", + "name" => "glance" + }, + { + "endpoints" => [ + { + "region_id" => "regionOne", + "url" => "http://localhost:5000", + "region" => "regionOne", + "interface" => "internal", + "id" => "id_endpoint1_internal" + }, + { + "region_id" => "regionOne", + "url" => "http://localhost:5000", + "region" => "regionOne", + "interface" => "public", + "id" => "id_endpoint1_public" + }, + { + "region_id" => "regionOne", + "url" => "http://localhost:35357", + "region" => "regionOne", + "interface" => "admin", + "id" => "id_endpoint1_admin" + } + ], + "type" => "identity", + "id" => "id3", + "name" => "keystone" + }, + { + "endpoints" => [ + { + "region_id" => "regionOne", + "url" => "http://localhost2:5000", + "region" => "regionTwo", + "interface" => "internal", + "id" => "id_endpoint1_internal" + }, + { + "region_id" => "regionTwo", + "url" => "http://localhost2:5000", + "region" => "regionTwo", + "interface" => "public", + "id" => "id_endpoint1_public" + }, + { + "region_id" => "regionTwo", + "url" => "http://localhost2:35357", + "region" => "regionTwo", + "interface" => "admin", + "id" => "id_endpoint1_admin" + } + ], + "type" => "identity", + "id" => "id3", + "name" => "keystone" + } + ].freeze + + let(:payload) do + CATALOGV3 + end + + describe '#get_endpoint_url' do + it 'with matching name, interface and region' do + catalog = Fog::OpenStack::Auth::Catalog::V3.new(payload) + catalog.get_endpoint_url('identity', 'admin', 'regionTwo').must_equal 'http://localhost2:35357' + end + + it 'with matching name and interface using avail region' do + catalog = Fog::OpenStack::Auth::Catalog::V3.new(payload) + catalog.get_endpoint_url('network', %w[dummy admin]).must_equal 'http://localhost:9696' + end + + it 'with matching name and interface list' do + catalog = Fog::OpenStack::Auth::Catalog::V3.new(payload) + catalog.get_endpoint_url('network', %w[dummy admin]).must_equal 'http://localhost:9696' + end + + it 'with matching name and interface and several regions available' do + catalog = Fog::OpenStack::Auth::Catalog::V3.new(payload) + proc do + catalog.get_endpoint_url('identity', 'admin') + end.must_raise Fog::OpenStack::Auth::Catalog::EndpointError + end + + it 'with unmatched name for service type' do + catalog = Fog::OpenStack::Auth::Catalog::V3.new(payload) + proc do + catalog.get_endpoint_url('service', 'public') + end.must_raise Fog::OpenStack::Auth::Catalog::ServiceTypeError + end + + it 'with unmatched region' do + catalog = Fog::OpenStack::Auth::Catalog::V3.new(payload) + proc do + catalog.get_endpoint_url('identity', 'admin', 'regionOther') + end.must_raise Fog::OpenStack::Auth::Catalog::EndpointError + end + + it 'with unmatched interface' do + catalog = Fog::OpenStack::Auth::Catalog::V3.new(payload) + proc do + catalog.get_endpoint_url('identity', 'private') + end.must_raise Fog::OpenStack::Auth::Catalog::EndpointError + end + end +end + +describe Fog::OpenStack::Auth::Catalog::V2 do + CATALOGV2 = [ + { + 'endpoints' => [{ + 'adminURL' => 'http://localhost', + 'region' => 'regionOne', + 'internalURL' => 'http://localhost:8888/v2.0', + 'id' => 'id_endpoints', + 'publicURL' => 'http://localhost' + }], + 'endpoints_links' => [], + 'type' => 'identity', + 'name' => 'keystone' + }, + { + 'endpoints' => [{ + 'adminURL' => 'http://localhost', + 'region' => 'regionTwo', + 'internalURL' => 'http://localhost:9999/v2.0', + 'id' => 'id_endpoints', + 'publicURL' => 'http://localhost' + }], + 'endpoints_links' => [], + 'type' => 'identity', + 'name' => 'keystone' + }, + { + 'endpoints' => [{ + 'adminURL' => 'http://localhost', + 'region' => 'regionOne', + 'internalURL' => 'http://localhost:7777/v1.0', + 'id' => 'id_endpoints', + 'publicURL' => 'http://localhost' + }], + 'endpoints_links' => [], + 'type' => 'compute', + 'name' => 'nova' + } + ].freeze + + let(:payload) do + CATALOGV2 + end + + describe '#get_endpoint_url' do + it 'match name, interface and region' do + catalog = Fog::OpenStack::Auth::Catalog::V2.new(payload) + catalog.get_endpoint_url('identity', 'internal', 'regionTwo').must_equal 'http://localhost:9999/v2.0' + end + + it 'match name, interface and unique region available' do + catalog = Fog::OpenStack::Auth::Catalog::V2.new(payload) + catalog.get_endpoint_url('compute', 'internal').must_equal 'http://localhost:7777/v1.0' + end + + it 'fails when multiple region match' do + catalog = Fog::OpenStack::Auth::Catalog::V2.new(payload) + proc do + catalog.get_endpoint_url('identity', 'admin') + end.must_raise Fog::OpenStack::Auth::Catalog::EndpointError + end + + it 'with unmatched arguments' do + catalog = Fog::OpenStack::Auth::Catalog::V2.new(payload) + proc do + catalog.get_endpoint_url('test', 'unknown', 'regionOther') + end.must_raise Fog::OpenStack::Auth::Catalog::ServiceTypeError + end + + it 'with unmatched region' do + catalog = Fog::OpenStack::Auth::Catalog::V2.new(payload) + proc do + catalog.get_endpoint_url('identity', 'admin', 'regionOther') + end.must_raise Fog::OpenStack::Auth::Catalog::EndpointError + end + + it 'with unmatched interface' do + catalog = Fog::OpenStack::Auth::Catalog::V2.new(payload) + proc do + catalog.get_endpoint_url('identity', 'private', 'regionTwo') + end.must_raise Fog::OpenStack::Auth::Catalog::EndpointError + end + end +end diff --git a/unit/auth/name_test.rb b/unit/auth/name_test.rb new file mode 100644 index 000000000..2a977b949 --- /dev/null +++ b/unit/auth/name_test.rb @@ -0,0 +1,115 @@ +require 'test_helper' +require 'fog/openstack/auth/name' + +describe Fog::OpenStack::Auth::Name do + describe 'creates' do + it 'when id and name are provided' do + name = Fog::OpenStack::Auth::Name.new('default', 'Default') + name.id.must_equal 'default' + name.name.must_equal 'Default' + end + + it 'when id is null' do + name = Fog::OpenStack::Auth::Name.new(nil, 'Default') + name.id.must_be_nil + name.name.must_equal 'Default' + end + + it 'when name is null' do + name = Fog::OpenStack::Auth::Name.new('default', nil) + name.id.must_equal 'default' + name.name.must_be_nil + end + + it 'when both id and name is null' do + name = Fog::OpenStack::Auth::Name.new(nil, nil) + name.name.must_be_nil + end + end + + describe '#to_h' do + it 'returns the hash of provided attribute' do + name = Fog::OpenStack::Auth::Name.new('default', 'Default') + name.to_h(:id).must_equal(id: 'default') + name.to_h(:name).must_equal(name: 'Default') + end + end +end + +describe Fog::OpenStack::Auth::User do + describe '#password' do + it 'set/get password' do + user = Fog::OpenStack::Auth::User.new('user_id', 'User') + user.password = 'secret' + user.identity.must_equal(user: { id: 'user_id', password: 'secret' }) + end + end + + describe '#identity' do + describe 'succesful' do + it "with user id and user name" do + user = Fog::OpenStack::Auth::User.new('user_id', 'User') + user.password = 'secret' + user.identity.must_equal(user: { id: 'user_id', password: 'secret' }) + end + + it 'with user name and user domain name' do + user = Fog::OpenStack::Auth::User.new(nil, 'User') + user.password = 'secret' + user.domain = Fog::OpenStack::Auth::Name.new('default', nil) + user.identity.must_equal(user: { name: 'User', domain: { id: 'default' }, password: 'secret' }) + end + + it 'with user name and domain name' do + user = Fog::OpenStack::Auth::User.new(nil, 'User') + user.password = 'secret' + user.domain = Fog::OpenStack::Auth::Name.new(nil, 'Default') + user.identity.must_equal(user: { name: 'User', domain: { name: 'Default' }, password: 'secret' }) + end + end + + describe 'raises an error' do + it 'raises an error when password is missing' do + proc do + user = Fog::OpenStack::Auth::User.new('user_id', 'User') + user.identity + end.must_raise Fog::OpenStack::Auth::CredentialsError + end + + it 'with only user name and no domain' do + proc do + user = Fog::OpenStack::Auth::User.new(nil, 'User') + user.identity + end.must_raise Fog::OpenStack::Auth::CredentialsError + end + end + end +end + +describe Fog::OpenStack::Auth::ProjectScope do + describe '#identity' do + it "when id is provided it doesn't require domain" do + project = Fog::OpenStack::Auth::ProjectScope.new('project_id', 'Project') + project.identity.must_equal(project: { id: 'project_id' }) + end + + it 'when id is nul and name is provided it uses domain id' do + project = Fog::OpenStack::Auth::ProjectScope.new(nil, 'Project') + project.domain = Fog::OpenStack::Auth::Name.new('default', nil) + project.identity.must_equal(project: { name: 'Project', domain: { id: 'default' } }) + end + + it 'when id is nul and name is provided it uses domain name' do + project = Fog::OpenStack::Auth::ProjectScope.new(nil, 'Project') + project.domain = Fog::OpenStack::Auth::Name.new(nil, 'Default') + project.identity.must_equal(project: { name: 'Project', domain: { name: 'Default' } }) + end + + it 'raises an error with no project id and no domain are provided' do + proc do + project = Fog::OpenStack::Auth::ProjectScope.new(nil, 'Project') + project.identity + end.must_raise Fog::OpenStack::Auth::CredentialsError + end + end +end diff --git a/unit/auth/token_test.rb b/unit/auth/token_test.rb new file mode 100644 index 000000000..a97202093 --- /dev/null +++ b/unit/auth/token_test.rb @@ -0,0 +1,478 @@ +require 'test_helper' +require 'auth_helper' + +describe Fog::OpenStack::Auth::Token do + describe 'V3' do + describe '#new' do + it 'fails when missing credentials' do + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .to_return( + status: 200, + body: "{\"token\":{\"catalog\":[]}}", + headers: { 'x-subject-token' => 'token_data' } + ) + + proc do + Fog::OpenStack::Auth::Token.build({}, {}) + end.must_raise Fog::OpenStack::Auth::Token::URLError + end + + describe 'using the password method' do + describe 'with a project scope' do + it 'authenticates using a project id' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_userid: 'user_id', + openstack_api_key: 'secret', + openstack_project_id: 'project_id' + } + + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .with(body: "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":\ +{\"id\":\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"project\":{\"id\":\"project_id\"}}}}") + .to_return( + status: 200, + body: JSON.dump(auth_response_v3('identity', 'keystone')), + headers: { 'x-subject-token' => 'token_data_v3' } + ) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal 'token_data_v3' + end + + it 'authenticates using a project name and a project domain id' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_userid: 'user_id', + openstack_api_key: 'secret', + openstack_project_name: 'project', + openstack_project_domain_id: 'project_domain_id' + } + + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .with(body: "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\ +\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"project\":{\"name\":\"project\",\"domain\":{\"id\":\ +\"project_domain_id\"}}}}}") + .to_return( + status: 200, + body: JSON.dump(auth_response_v3('identity', 'keystone')), + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal 'token_data' + end + + it 'authenticates using a project name and a project domain name' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_username: 'user', + openstack_user_domain_name: 'user_domain', + openstack_api_key: 'secret', + openstack_project_name: 'project', + openstack_project_domain_name: 'project_domain' + } + + stub_request(:post, "http://localhost/identity/v3/auth/tokens") + .with(body: "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"name\":\ +\"user\",\"domain\":{\"name\":\"user_domain\"},\"password\":\"secret\"}}},\"scope\":{\"project\":{\"name\":\"project\"\ +,\"domain\":{\"name\":\"project_domain\"}}}}}") + .to_return( + status: 200, + body: JSON.dump(auth_response_v3('identity', 'keystone')), + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal 'token_data' + end + end + + describe 'with a domain scope' do + it 'authenticates using a domain id' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_userid: 'user_id', + openstack_api_key: 'secret', + openstack_domain_id: 'domain_id' + } + + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .with(body: "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\ +\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"domain\":{\"id\":\"domain_id\"}}}}") + .to_return( + status: 200, + body: JSON.dump(auth_response_v3('identity', 'keystone')), + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal 'token_data' + end + + it 'authenticates using a domain name' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_userid: 'user_id', + openstack_api_key: 'secret', + openstack_domain_name: 'domain' + } + + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .with(body: "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\ +\"user_id\",\"password\":\"secret\"}}},\"scope\":{\"domain\":{\"name\":\"domain\"}}}}") + .to_return( + status: 200, + body: JSON.dump(auth_response_v3('identity', 'keystone')), + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal 'token_data' + end + end + + describe 'unscoped' do + it 'authenticates' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_userid: 'user_id', + openstack_api_key: 'secret' + } + + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .with(body: "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"id\":\ +\"user_id\",\"password\":\"secret\"}}}}}") + .to_return( + status: 200, + body: JSON.dump(auth_response_v3('identity', 'keystone')), + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal 'token_data' + end + end + end + + describe 'using the token method' do + describe 'unscoped' do + it 'authenticates using a project id' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_auth_token: 'token' + } + + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .with(body: "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"token\"}}}}") + .to_return( + status: 200, + body: JSON.dump(auth_response_v3('identity', 'keystone')), + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal 'token_data' + end + end + + describe 'with a project scope' do + it 'authenticates using a project id' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_auth_token: 'token', + openstack_project_id: 'project_id' + } + + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .with(body: "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"token\"}},\ +\"scope\":{\"project\":{\"id\":\"project_id\"}}}}") + .to_return( + status: 200, + body: JSON.dump(auth_response_v3('identity', 'keystone')), + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal 'token_data' + end + + it 'authenticates using a project name and a project domain id' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_auth_token: 'token', + openstack_project_name: 'project', + openstack_project_domain_id: 'domain_id' + } + + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .with(body: "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"token\"}},\ +\"scope\":{\"project\":{\"name\":\"project\",\"domain\":{\"id\":\"domain_id\"}}}}}") + .to_return( + status: 200, + body: JSON.dump(auth_response_v3('identity', 'keystone')), + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal 'token_data' + end + end + + describe 'with a domain scope' do + it 'authenticates using a domain id' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_auth_token: 'token', + openstack_domain_id: 'domain_id' + } + + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .with(body: "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"token\"}},\ +\"scope\":{\"domain\":{\"id\":\"domain_id\"}}}}") + .to_return( + status: 200, + body: JSON.dump(auth_response_v3('identity', 'keystone')), + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal 'token_data' + end + + it 'authenticates using a domain name' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_auth_token: 'token', + openstack_domain_name: 'domain' + } + + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .with(body: "{\"auth\":{\"identity\":{\"methods\":[\"token\"],\"token\":{\"id\":\"token\"}},\ +\"scope\":{\"domain\":{\"name\":\"domain\"}}}}") + .to_return( + status: 200, + body: JSON.dump(auth_response_v3('identity', 'keystone')), + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal 'token_data' + end + end + end + end + + describe 'when authenticated' do + let(:authv3_creds) do + { + openstack_auth_url: 'http://localhost/identity', + openstack_username: 'admin', + openstack_api_key: 'secret', + openstack_project_name: 'admin', + openstack_project_domain_id: 'default' + } + end + + describe '#get' do + it 'when token has not expired' do + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .to_return( + status: 200, + body: "{\"token\":{\"catalog\":[\"catalog_data\"]}}", + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(authv3_creds, {}) + token.stub :expired?, false do + token.get.must_equal 'token_data' + end + end + + it 'when token has expired' do + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .to_return( + status: 200, + body: "{\"token\":{\"catalog\":[\"catalog_data\"]}}", + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(authv3_creds, {}) + token.stub :expired?, true do + token.get.must_equal 'token_data' + end + end + end + + it '#catalog' do + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .to_return( + status: 200, + body: "{\"token\":{\"catalog\":[\"catalog_data\"]}}", + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(authv3_creds, {}) + token.catalog.payload.must_equal ['catalog_data'] + end + + it '#get_endpoint_url' do + stub_request(:post, 'http://localhost/identity/v3/auth/tokens') + .to_return( + status: 200, + body: JSON.dump(auth_response_v3("identity", "keystone")), + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(authv3_creds, {}) + token.catalog.get_endpoint_url(%w[identity], 'public', 'regionOne').must_equal 'http://localhost' + end + end + end + + describe 'V2' do + describe '#new' do + it 'fails when missing credentials' do + stub_request(:post, 'http://localhost/identity/v2.0/tokens') + .to_return(status: 200, body: "{\"access\":{\"token\":{\"id\":\"token_data\"}}}", headers: {}) + + proc do + Fog::OpenStack::Auth::Token.build({}, {}) + end.must_raise Fog::OpenStack::Auth::Token::URLError + end + + describe 'using the password method' do + it 'authenticates using the tenant name' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_username: 'user', + openstack_api_key: 'secret', + openstack_tenant: 'tenant' + } + + stub_request(:post, 'http://localhost/identity/v2.0/tokens') + .with(body: "{\"auth\":{\"passwordCredentials\":{\"username\":\"user\",\"password\":\"secret\"},\ +\"tenantName\":\"tenant\"}}") + .to_return(status: 200, body: JSON.dump(auth_response_v2('identity', 'keystone')), headers: {}) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal '4ae647d3a5294690a3c29bc658e17e26' + end + + it 'authenticates using the tenant id' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_username: 'user', + openstack_api_key: 'secret', + openstack_tenant_id: 'tenant_id' + } + + stub_request(:post, 'http://localhost/identity/v2.0/tokens') + .with(body: "{\"auth\":{\"passwordCredentials\":{\"username\":\"user\",\"password\":\"secret\"},\ +\"tenantId\":\"tenant_id\"}}") + .to_return(status: 200, body: JSON.dump(auth_response_v2('identity', 'keystone')), headers: {}) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal '4ae647d3a5294690a3c29bc658e17e26' + end + end + + describe 'using the token method' do + it 'authenticates using the tenant name' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_auth_token: 'token_id', + openstack_tenant: 'tenant' + } + + stub_request(:post, 'http://localhost/identity/v2.0/tokens') + .with(body: "{\"auth\":{\"token\":{\"id\":\"token_id\"},\"tenantName\":\"tenant\"}}") + .to_return(status: 200, body: JSON.dump(auth_response_v2('identity', 'keystone')), headers: {}) + + token = Fog::OpenStack::Auth::Token.build(auth, {}) + token.get.must_equal '4ae647d3a5294690a3c29bc658e17e26' + end + + it 'authenticates using the tenant id' do + auth = { + openstack_auth_url: 'http://localhost/identity', + openstack_auth_token: 'token_id', + openstack_tenant_id: 'tenant_id' + } + + stub_request(:post, 'http://localhost/identity/v2.0/tokens') + .with(body: "{\"auth\":{\"token\":{\"id\":\"token_id\"},\"tenantId\":\"tenant_id\"}}") + .to_return(status: 200, body: JSON.dump(auth_response_v2('identity', 'keystone')), headers: {}) + + Fog::OpenStack::Auth::Token.build(auth, {}) + end + end + end + + describe 'when authenticated' do + let(:authv2_creds) do + { + openstack_auth_url: 'http://localhost/identity', + openstack_username: 'admin', + openstack_api_key: 'secret', + openstack_tenant: 'admin' + } + end + + describe '#get' do + it 'when token has not expired' do + stub_request(:post, 'http://localhost/identity/v2.0/tokens') + .to_return( + status: 200, + body: "{\"access\":{\"token\":{\"id\":\"token_not_expired\"},\"serviceCatalog\":\ +[\"catalog_data\"]}}", + headers: {} + ) + + token = Fog::OpenStack::Auth::Token.build(authv2_creds, {}) + token.stub :expired?, false do + token.get.must_equal 'token_not_expired' + end + end + + it 'when token has expired' do + stub_request(:post, 'http://localhost/identity/v2.0/tokens') + .to_return( + status: 200, + body: "{\"access\":{\"token\":{\"id\":\"token_expired\"},\"serviceCatalog\":[\"catalog_data\"]}}", + headers: {} + ) + + token = Fog::OpenStack::Auth::Token.build(authv2_creds, {}) + token.stub :expired?, true do + token.get.must_equal 'token_expired' + end + end + end + + it '#catalog' do + stub_request(:post, 'http://localhost/identity/v2.0/tokens') + .to_return( + status: 200, + body: "{\"access\":{\"token\":{\"id\":\"token_data\"},\"serviceCatalog\":[\"catalog_data\"]}}", + headers: {} + ) + + token = Fog::OpenStack::Auth::Token.build(authv2_creds, {}) + token.catalog.payload.must_equal ['catalog_data'] + end + + it '#get_endpoint_url' do + stub_request(:post, 'http://localhost/identity/v2.0/tokens') + .to_return( + status: 200, + body: JSON.dump(auth_response_v2('identity', 'keystone')), + headers: { 'x-subject-token' => 'token_data' } + ) + + token = Fog::OpenStack::Auth::Token.build(authv2_creds, {}) + token.catalog.get_endpoint_url(%w[identity], 'public', 'regionOne').must_equal 'http://localhost' + end + end + end +end diff --git a/unit/auth_helper.rb b/unit/auth_helper.rb new file mode 100644 index 000000000..c57793332 --- /dev/null +++ b/unit/auth_helper.rb @@ -0,0 +1,102 @@ +def auth_response_v3(type, name) + { + 'token' => { + 'methods' => ['password'], + 'roles' => [{ + 'id' => 'id_roles', + 'name' => 'admin' + }], + 'expires_at' => '2017-11-29T07:45:29.908554Z', + 'project' => { + 'domain' => { + 'id' => 'default', + 'name' => 'Default' + }, + 'id' => 'project_id', + 'name' => 'admin' + }, + 'catalog' => [{ + 'endpoints' => [ + { + 'region_id' => 'regionOne', + 'url' => 'http://localhost', + 'region' => 'regionOne', + 'interface' => 'internal', + 'id' => 'id_endpoint_internal' + }, + { + 'region_id' => 'regionOne', + 'url' => 'http://localhost', + 'region' => 'regionOne', + 'interface' => 'public', + 'id' => 'id_endpoint_public' + }, + { + 'region_id' => 'regionOne', + 'url' => 'http://localhost', + 'region' => 'regionOne', + 'interface' => 'admin', + 'id' => 'id_endpoint_admin' + } + ], + 'type' => type, + 'id' => 'id_endpoints', + 'name' => name + }], + 'user' => { + 'domain' => { + 'id' => 'default', + 'name' => 'Default' + }, + 'id' => 'id_user', + 'name' => 'admin' + }, + 'audit_ids' => ['id_audits'], + 'issued_at' => '2017-11-29T06:45:29.908578Z' + } + } +end + +def auth_response_v2(type, name) + { + 'access' => { + 'token' => { + 'issued_at' => '2017-12-05T10:44:31.454741Z', + 'expires' => '2017-12-05T11:44:31Z', + 'id' => '4ae647d3a5294690a3c29bc658e17e26', + 'tenant' => { + 'description' => 'admin tenant', + 'enabled' => true, + 'id' => 'tenant_id', + 'name' => 'admin' + }, + 'audit_ids' => ['Ye0Rq1HzTk2ggUAg8nDGbQ'] + }, + 'serviceCatalog' => [{ + 'endpoints' => [{ + 'adminURL' => 'http://localhost', + 'region' => 'regionOne', + 'internalURL' => 'http://localhost', + 'id' => 'id_endpoints', + 'publicURL' => 'http://localhost' + }], + 'endpoints_links' => [], + 'type' => type, + 'name' => name + }], + 'user' => { + 'username' => 'admin', + 'roles_links' => [], + 'id' => 'user_id', + 'roles' => [{ + 'name' => 'admin' + }], + 'name' => 'admin' + }, + 'metadata' => { + 'is_admin' => 0, + 'roles' => ['role_id'] + } + } + } +end diff --git a/unit/test_helper.rb b/unit/test_helper.rb new file mode 100644 index 000000000..6b12ae3ad --- /dev/null +++ b/unit/test_helper.rb @@ -0,0 +1,6 @@ +require 'minitest/autorun' +require 'webmock/minitest' + +require 'fog/core' +require 'fog/json' +require 'fog/openstack/auth/token'