Class: Fog::Orchestration::OpenStack::Real

Inherits:
Object
  • Object
show all
Includes:
Fog::OpenStack::Core
Defined in:
lib/fog/orchestration/openstack.rb,
lib/fog/orchestration/openstack/requests/build_info.rb,
lib/fog/orchestration/openstack/requests/list_events.rb,
lib/fog/orchestration/openstack/requests/patch_stack.rb,
lib/fog/orchestration/openstack/requests/create_stack.rb,
lib/fog/orchestration/openstack/requests/delete_stack.rb,
lib/fog/orchestration/openstack/requests/update_stack.rb,
lib/fog/orchestration/openstack/requests/abandon_stack.rb,
lib/fog/orchestration/openstack/requests/cancel_update.rb,
lib/fog/orchestration/openstack/requests/preview_stack.rb,
lib/fog/orchestration/openstack/requests/list_resources.rb,
lib/fog/orchestration/openstack/requests/list_stack_data.rb,
lib/fog/orchestration/openstack/requests/list_stack_events.rb,
lib/fog/orchestration/openstack/requests/validate_template.rb,
lib/fog/orchestration/openstack/requests/get_stack_template.rb,
lib/fog/orchestration/openstack/requests/show_event_details.rb,
lib/fog/orchestration/openstack/requests/show_resource_data.rb,
lib/fog/orchestration/openstack/requests/show_stack_details.rb,
lib/fog/orchestration/openstack/requests/list_resource_types.rb,
lib/fog/orchestration/openstack/requests/list_resource_events.rb,
lib/fog/orchestration/openstack/requests/show_resource_schema.rb,
lib/fog/orchestration/openstack/requests/show_resource_metadata.rb,
lib/fog/orchestration/openstack/requests/show_resource_template.rb,
lib/fog/orchestration/openstack/requests/list_stack_data_detailed.rb

Instance Attribute Summary

Attributes included from Fog::OpenStack::Core

#auth_token, #auth_token_expiration, #current_tenant, #current_user, #current_user_id, #openstack_cache_ttl, #openstack_domain_id, #openstack_domain_name, #openstack_identity_prefix, #openstack_project_domain, #openstack_project_domain_id, #openstack_project_id, #openstack_user_domain, #openstack_user_domain_id, #unscoped_token

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Fog::OpenStack::Core

#credentials, #initialize_identity, #reload

Constructor Details

#initialize(options = {}) ⇒ Real

Returns a new instance of Real.



138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/fog/orchestration/openstack.rb', line 138

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

Class Method Details

.not_found_classObject



134
135
136
# File 'lib/fog/orchestration/openstack.rb', line 134

def self.not_found_class
  Fog::Orchestration::OpenStack::NotFound
end

Instance Method Details

#abandon_stack(stack) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/fog/orchestration/openstack/requests/abandon_stack.rb', line 5

def abandon_stack(stack)
  request(
    :expects => [200],
    :method  => 'DELETE',
    :path    => "stacks/#{stack.stack_name}/#{stack.id}/abandon"
  )
end

#build_infoObject



5
6
7
8
9
10
11
# File 'lib/fog/orchestration/openstack/requests/build_info.rb', line 5

def build_info
  request(
    :expects => [200],
    :method  => 'GET',
    :path    => 'build_info'
  )
end

#cancel_update(stack) ⇒ Object



6
7
8
9
10
11
12
13
# File 'lib/fog/orchestration/openstack/requests/cancel_update.rb', line 6

def cancel_update(stack)
  request(
    :expects => 200,
    :method  => 'POST',
    :path    => "stacks/#{stack.stack_name}/#{stack.id}/actions",
    :body    => Fog::JSON.encode('cancel_update' => nil)
  )
end

#create_stack(arg1, arg2 = nil) ⇒ Object

Create a stack.

  • options [Hash]:

    • :stack_name [String] Name of the stack to create.

    • :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.

    • :files [Hash] Hash with files resources.

    • :disable_rollback [Boolean] Controls rollback on stack creation failure, defaults to false.

    • :parameters [Hash] Hash of providers to supply to template

    • :timeout_mins [Integer] Minutes to wait before status is set to CREATE_FAILED



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/fog/orchestration/openstack/requests/create_stack.rb', line 20

def create_stack(arg1, arg2 = nil)
  if arg1.kind_of?(Hash)
    # Normal use: create_stack(options)
    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})[/]")
    options = {
      :stack_name => arg1
    }.merge(arg2.nil? ? {} : arg2)
  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 => 201,
    :path    => 'stacks',
    :method  => 'POST',
    :body    => Fog::JSON.encode(options)
  )
end

#delete_stack(arg1, arg2 = nil) ⇒ Excon::Response

Delete a stack.

Parameters:

  • Stack (Stack)

    to be deleted

Returns:

  • (Excon::Response)

See Also:



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/fog/orchestration/openstack/requests/delete_stack.rb', line 13

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
    stack_id = arg2
  end

  request(
    :expects => 204,
    :path    => "stacks/#{stack_name}/#{stack_id}",
    :method  => 'DELETE'
  )
end

#get_stack_template(stack) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/fog/orchestration/openstack/requests/get_stack_template.rb', line 5

def get_stack_template(stack)
  request(
    :method  => 'GET',
    :path    => "stacks/#{stack.stack_name}/#{stack.id}/template",
    :expects => 200
  )
end

#list_events(options = {}) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/fog/orchestration/openstack/requests/list_events.rb', line 5

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

#list_resource_events(stack, resource, options = {}) ⇒ Object



5
6
7
8
9
10
11
12
13
# File 'lib/fog/orchestration/openstack/requests/list_resource_events.rb', line 5

def list_resource_events(stack, resource, options = {})
  Fog::Logger.deprecation('Calling OpenStack[:orchestration].list_resource_events(stack, resource, options)'\
                          ' is deprecated, call .list_events(:stack => stack, :resource => resource) or '\
                          ' .list_events(:stack_name => value, :stack_id => value, :resource_name => value)'\
                          ' instead')

  uri = "stacks/#{stack.stack_name}/#{stack.id}/resources/#{resource.resource_name}/events"
  request(:method => 'GET', :path => uri, :expects => 200, :query => options)
end

#list_resource_types(_options = {}) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/fog/orchestration/openstack/requests/list_resource_types.rb', line 5

def list_resource_types(_options = {})
  request(
    :method  => 'GET',
    :path    => "resource_types",
    :expects => 200,
    :query   => {}
  )
end

#list_resources(options = {}, options_deprecated = {}) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/fog/orchestration/openstack/requests/list_resources.rb', line 5

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

#list_stack_data(options = {}) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/fog/orchestration/openstack/requests/list_stack_data.rb', line 5

def list_stack_data(options = {})
  request(
    :method  => 'GET',
    :path    => 'stacks',
    :expects => 200,
    :query   => options
  )
end

#list_stack_data_detailed(options = {}) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/fog/orchestration/openstack/requests/list_stack_data_detailed.rb', line 5

def list_stack_data_detailed(options = {})
  request(
    :method  => 'GET',
    :path    => 'stacks/detail',
    :expects => 200,
    :query   => options
  )
end

#list_stack_events(stack, options = {}) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/fog/orchestration/openstack/requests/list_stack_events.rb', line 5

def list_stack_events(stack, options = {})
  Fog::Logger.deprecation('Calling OpenStack[:orchestration].list_stack_events(stack, options)'\
                          ' is deprecated, call .list_events(:stack => stack) or '\
                          ' .list_events(:stack_name => value, :stack_id => value) instead')

  uri = "stacks/#{stack.stack_name}/#{stack.id}/events"
  request(:method => 'GET', :path => uri, :expects => 200, :query => options)
end

#patch_stack(stack, options = {}) ⇒ Object

patch a stack.

Parameters:

  • the (Fog::Orchestration::OpenStack::Stack)

    stack to patch.

  • options (Hash) (defaults to: {})
    • :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.



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/fog/orchestration/openstack/requests/patch_stack.rb', line 14

def patch_stack(stack, options = {})
  stack_name = stack.stack_name
  stack_id = stack.id

  request(
    :expects => 202,
    :path    => "stacks/#{stack_name}/#{stack_id}",
    :method  => 'PATCH',
    :body    => Fog::JSON.encode(options)
  )
end

#preview_stack(options = {}) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/fog/orchestration/openstack/requests/preview_stack.rb', line 5

def preview_stack(options = {})
  request(
    :body    => Fog::JSON.encode(options),
    :expects => [200],
    :method  => 'POST',
    :path    => 'stacks/preview'
  )
end

#show_event_details(stack, resource, event_id) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/fog/orchestration/openstack/requests/show_event_details.rb', line 5

def show_event_details(stack, resource, event_id)
  request(
    :method  => 'GET',
    :path    => "stacks/#{stack.stack_name}/#{stack.id}/resources/#{resource.resource_name}/events/#{event_id}",
    :expects => 200
  )
end

#show_resource_data(stack_name, stack_id, resource_name) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/fog/orchestration/openstack/requests/show_resource_data.rb', line 5

def show_resource_data(stack_name, stack_id, resource_name)
  request(
    :method  => 'GET',
    :path    => "stacks/#{stack_name}/#{stack_id}/resources/#{resource_name}",
    :expects => 200
  )
end

#show_resource_metadata(stack, resource_name) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/fog/orchestration/openstack/requests/show_resource_metadata.rb', line 5

def (stack, resource_name)
  request(
    :method  => 'GET',
    :path    => "stacks/#{stack.stack_name}/#{stack.id}/resources/#{resource_name}/metadata",
    :expects => 200
  )
end

#show_resource_schema(name) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/fog/orchestration/openstack/requests/show_resource_schema.rb', line 5

def show_resource_schema(name)
  request(
    :method  => 'GET',
    :path    => "resource_types/#{name}",
    :expects => 200
  )
end

#show_resource_template(name) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/fog/orchestration/openstack/requests/show_resource_template.rb', line 5

def show_resource_template(name)
  request(
    :method  => 'GET',
    :path    => "resource_types/#{name}/template",
    :expects => 200
  )
end

#show_stack_details(name, id) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/fog/orchestration/openstack/requests/show_stack_details.rb', line 5

def show_stack_details(name, id)
  request(
    :method  => 'GET',
    :path    => "stacks/#{name}/#{id}",
    :expects => 200
  )
end

#update_stack(arg1, arg2 = nil, arg3 = nil) ⇒ Object

Update a stack.

Parameters:

  • the (Fog::Orchestration::OpenStack::Stack)

    stack to update.

  • options (Hash)
    • :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.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/fog/orchestration/openstack/requests/update_stack.rb', line 15

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

#validate_template(options = {}) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/fog/orchestration/openstack/requests/validate_template.rb', line 5

def validate_template(options = {})
  request(
    :body    => Fog::JSON.encode(options),
    :expects => [200],
    :method  => 'POST',
    :path    => 'validate'
  )
end