Module: Aviator::Openstack::Provider
- Defined in:
- lib/puppet/feature/aviator/openstack/provider.rb
Overview
Request Options
The following options may be used in combination with each other when calling an OpenStack request class
- :api_version => :v2
-
Forces Aviator to use the request class for the v2 API. For any other version, replace :v2 with the desired one. Note that this may throw an error if no such request class for the given api version exists. If you want to globally specify the API version to use for a specific service, declare it in your config file under the correct environment. For example:
production:
provider: openstack
...
compute_service:
api_version: v2
Note that the :api_version
option overrides whatever is declared in the configuration.
- :endpoint_type => (:public|:admin)
-
This allows you to be specific about the endpoint type in cases where two request classes under admin and public endpoints of the same service share the same name. This is true, for example, for the :list_tenants request of the identity service’s v2 API. Its public endpoint will return only the tenants the user is a member of whereas the admin endpoint will return all tenants in the system.
- :session_data => Hash
-
Under normal situations, you wouldn’t need to use this as it is automatically populated by the Session object provided it is authenticated. The specific use case when you’d need to set thsi optin is when you want to use Aviator to seed your OpenStack installation. In such a scenario, you would need to use a service token since no usernames and tenants would exist yet in the environment. To use a service token with Aviator, you will need to write something similar to the following example:
openstack = Aviator::Session.new(:config => { :provider => 'openstack'})
session_data = {:base_url => 'http://example.com',
:service_token => 'service-token-created-at-openstack-install-time'}
openstack.request :identity, :create_tenant, :api_version => :v2, :session_data => session_data) do |params|
params.name = 'Tenant A'
params.description = 'First Tenant!'
params.enabled = true
end
Notice how the above code skips authentication. This is because the service token is pre-validated and ready for use with any request. Also note how we’re providing a :base_url
member in our session data. This is necessary since we normally get the service endpoints from Keystone when we authenticate. Now since we are not authenticating against Keystone, we don’t have that catalogue to begin with. Thus the need to hardcode it in the request.
Defined Under Namespace
Classes: MultipleServiceApisError
Class Method Summary collapse
-
.find_request(service, name, session_data, options) ⇒ Object
:nodoc:.
- .request_file_paths(service) ⇒ Object
- .root_dir ⇒ Object
Class Method Details
.find_request(service, name, session_data, options) ⇒ Object
:nodoc:
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/puppet/feature/aviator/openstack/provider.rb', line 94 def find_request(service, name, session_data, ) service = service.to_s endpoint_type = [:endpoint_type] endpoint_types = if endpoint_type [endpoint_type.to_s.camelize] else ['Public', 'Admin'] end namespace = Aviator.const_get('Openstack') \ .const_get(service.camelize) \ .const_get('Requests') if [:api_version] m = [:api_version].to_s.match(/(v\d+)\.?\d*/) version = m[1].to_s.camelize unless m.nil? end version ||= infer_version(session_data, name, service) unless version.nil? version = version.to_s.camelize end return nil unless version && namespace.const_defined?(version) namespace = namespace.const_get(version, name) endpoint_types.each do |endpoint_type| name = name.to_s.camelize next unless namespace.const_defined?(endpoint_type) next unless namespace.const_get(endpoint_type).const_defined?(name) return namespace.const_get(endpoint_type).const_get(name) end nil end |
.request_file_paths(service) ⇒ Object
140 141 142 143 144 145 146 147 148 149 |
# File 'lib/puppet/feature/aviator/openstack/provider.rb', line 140 def request_file_paths(service) Dir.glob(Pathname.new(__FILE__).join( '..', service.to_s, 'requests', '**', '*.rb' ). ) end |
.root_dir ⇒ Object
135 136 137 |
# File 'lib/puppet/feature/aviator/openstack/provider.rb', line 135 def root_dir Pathname.new(__FILE__).join('..'). end |