Class: Fog::Baremetal::OpenStack::Real

Inherits:
Object
  • Object
show all
Includes:
OpenStack::Core
Defined in:
lib/fog/openstack/baremetal.rb,
lib/fog/openstack/requests/baremetal/get_node.rb,
lib/fog/openstack/requests/baremetal/get_port.rb,
lib/fog/openstack/requests/baremetal/list_ports.rb,
lib/fog/openstack/requests/baremetal/patch_node.rb,
lib/fog/openstack/requests/baremetal/list_nodes.rb,
lib/fog/openstack/requests/baremetal/patch_port.rb,
lib/fog/openstack/requests/baremetal/get_driver.rb,
lib/fog/openstack/requests/baremetal/create_port.rb,
lib/fog/openstack/requests/baremetal/delete_port.rb,
lib/fog/openstack/requests/baremetal/get_chassis.rb,
lib/fog/openstack/requests/baremetal/create_node.rb,
lib/fog/openstack/requests/baremetal/delete_node.rb,
lib/fog/openstack/requests/baremetal/list_chassis.rb,
lib/fog/openstack/requests/baremetal/list_drivers.rb,
lib/fog/openstack/requests/baremetal/patch_chassis.rb,
lib/fog/openstack/requests/baremetal/create_chassis.rb,
lib/fog/openstack/requests/baremetal/delete_chassis.rb,
lib/fog/openstack/requests/baremetal/list_ports_detailed.rb,
lib/fog/openstack/requests/baremetal/list_nodes_detailed.rb,
lib/fog/openstack/requests/baremetal/set_node_maintenance.rb,
lib/fog/openstack/requests/baremetal/set_node_power_state.rb,
lib/fog/openstack/requests/baremetal/list_chassis_detailed.rb,
lib/fog/openstack/requests/baremetal/get_driver_properties.rb,
lib/fog/openstack/requests/baremetal/unset_node_maintenance.rb,
lib/fog/openstack/requests/baremetal/set_node_provision_state.rb

Instance Attribute Summary

Attributes included from OpenStack::Core

#auth_token, #auth_token_expiration, #current_tenant, #current_user, #current_user_id, #openstack_domain_id, #openstack_domain_name, #openstack_project_domain, #openstack_project_domain_id, #openstack_user_domain, #openstack_user_domain_id

Instance Method Summary collapse

Methods included from OpenStack::Core

#credentials, #initialize_identity, #reload

Constructor Details

#initialize(options = {}) ⇒ Real

Returns a new instance of Real



251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
# File 'lib/fog/openstack/baremetal.rb', line 251

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

  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

Instance Method Details

#create_chassis(attributes) ⇒ Object

Create a new chassis

Attributes ===

description = Free text description of the chassis extra = Record arbitrary key/value metadata. Can be specified multiple times



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/fog/openstack/requests/baremetal/create_chassis.rb', line 10

def create_chassis(attributes)
  desired_options = [
    :description,
    :extra
  ]

  # 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 => 'chassis'
  )
end

#create_node(attributes) ⇒ Object

Create a new node

Attributes ===

chassis_uuid = UUID of the chassis that this node belongs to driver = Driver used to control the node [REQUIRED] driver_info = Key/value pairs used by the driver, such as out-of-band management credentials. Can be

specified multiple times

extra = Record arbitrary key/value metadata. Can be specified multiple times uuid = Unique UUID for the node properties = Key/value pairs describing the physical characteristics of the node. This is exported to

Nova and used by the scheduler. Can be specified multiple times


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/fog/openstack/requests/baremetal/create_node.rb', line 16

def create_node(attributes)
  desired_options = [
    :chassis_uuid,
    :driver,
    :driver_info,
    :extra,
    :uuid,
    :properties
  ]

  # 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 => 'nodes'
  )
end

#create_port(attributes) ⇒ Object

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



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/fog/openstack/requests/baremetal/create_port.rb', line 11

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

#delete_chassis(chassis_uuid) ⇒ Object



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

def delete_chassis(chassis_uuid)
  data = { :chassis_uuid => chassis_uuid }
  request(
      :body => Fog::JSON.encode(data),
      :expects  => [200, 204],
      :method   => 'DELETE',
      :path     => 'chassis'
  )
end

#delete_node(node_uuid) ⇒ Object



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

def delete_node(node_uuid)
  data = { :node_uuid => node_uuid }
  request(
      :body => Fog::JSON.encode(data),
      :expects  => [200, 204],
      :method   => 'DELETE',
      :path     => 'nodes'
  )
end

#delete_port(port_uuid) ⇒ Object



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

def delete_port(port_uuid)
  data = { :port_uuid => port_uuid }
  request(
      :body => Fog::JSON.encode(data),
      :expects  => [200, 204],
      :method   => 'DELETE',
      :path     => 'ports'
  )
end

#get_chassis(chassis_uuid) ⇒ Object



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

def get_chassis(chassis_uuid)
  request(
      :expects => [200, 204],
      :method  => 'GET',
      :path    => "chassis/#{chassis_uuid}"
  )
end

#get_driver(driver_name) ⇒ Object



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

def get_driver(driver_name)
  request(
      :expects => [200, 204],
      :method  => 'GET',
      :path    => "drivers/#{driver_name}"
  )
end

#get_driver_properties(driver_name) ⇒ Object



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

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

#get_node(node_id) ⇒ Object



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

def get_node(node_id)
  request(
      :expects => [200, 204],
      :method  => 'GET',
      :path    => "nodes/#{node_id}"
  )
end

#get_port(port_id) ⇒ Object



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

def get_port(port_id)
  request(
      :expects => [200, 204],
      :method  => 'GET',
      :path    => "ports/#{port_id}"
  )
end

#list_chassis(options = {}) ⇒ Object



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

def list_chassis(options = {})
  request(
    :expects => [200, 204],
    :method  => 'GET',
    :path    => 'chassis',
    :query   => options
  )
end

#list_chassis_detailed(options = {}) ⇒ Object



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

def list_chassis_detailed(options = {})
  request(
    :expects => [200, 204],
    :method  => 'GET',
    :path    => 'chassis/detail',
    :query   => options
  )
end

#list_drivers(options = {}) ⇒ Object



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

def list_drivers(options = {})
  request(
    :expects => [200, 204],
    :method  => 'GET',
    :path    => 'drivers',
    :query   => options
  )
end

#list_nodes(options = {}) ⇒ Object



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

def list_nodes(options = {})
  request(
    :expects => [200, 204],
    :method  => 'GET',
    :path    => 'nodes',
    :query   => options
  )
end

#list_nodes_detailed(options = {}) ⇒ Object



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

def list_nodes_detailed(options = {})
  request(
    :expects => [200, 204],
    :method  => 'GET',
    :path    => 'nodes/detail',
    :query   => options
  )
end

#list_ports(options = {}) ⇒ Object



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

def list_ports(options = {})
  request(
    :expects => [200, 204],
    :method  => 'GET',
    :path    => 'ports',
    :query   => options
  )
end

#list_ports_detailed(options = {}) ⇒ Object



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

def list_ports_detailed(options = {})
  request(
    :expects => [200, 204],
    :method  => 'GET',
    :path    => 'ports/detail',
    :query   => options
  )
end

#patch_chassis(chassis_uuid, patch) ⇒ Object

Patch a chassis

parameter example:

'replace', :path => “/extra/placement”, :value => “somewhere”

Patch parameter, list of jsonpatch ===

op = Operations: 'add', 'replace' or 'remove' path = Attributes to add/replace or remove (only PATH is necessary on remove),

e.g. /extra/placement

value = Value to set



15
16
17
18
19
20
21
22
# File 'lib/fog/openstack/requests/baremetal/patch_chassis.rb', line 15

def patch_chassis(chassis_uuid, patch)
  request(
    :body => Fog::JSON.encode(patch),
    :expects => 200,
    :method => 'PATCH',
    :path => "chassis/#{chassis_uuid}"
  )
end

#patch_node(node_uuid, patch) ⇒ Object

Patch a node

parameter example:

'replace', :path => “/driver”, :value => “pxe_ssh”

Patch parameter, list of jsonpatch ===

op = Operations: 'add', 'replace' or 'remove' path = Attributes to add/replace or remove (only PATH is necessary on remove),

e.g. /driver_info/ipmi_address

value = Value to set



15
16
17
18
19
20
21
22
# File 'lib/fog/openstack/requests/baremetal/patch_node.rb', line 15

def patch_node(node_uuid, patch)
  request(
    :body => Fog::JSON.encode(patch),
    :expects => 200,
    :method => 'PATCH',
    :path => "nodes/#{node_uuid}"
  )
end

#patch_port(port_uuid, patch) ⇒ Object

Patch a port

parameter example:

'replace', :path => “/driver_info/ipmi_address”, :value => “192.0.2.1”

Patch parameter, list of jsonpatch ===

op = Operations: 'add', 'replace' or 'remove' path = Attributes to add/replace or remove (only PATH is necessary on remove),

e.g. /driver_info/ipmi_address

value = Value to set



15
16
17
18
19
20
21
22
# File 'lib/fog/openstack/requests/baremetal/patch_port.rb', line 15

def patch_port(port_uuid, patch)
  request(
    :body => Fog::JSON.encode(patch),
    :expects => 200,
    :method => 'PATCH',
    :path => "ports/#{port_uuid}"
  )
end

#request(params) ⇒ Object



272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
# File 'lib/fog/openstack/baremetal.rb', line 272

def request(params)
  begin
    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::Compute::OpenStack::NotFound.slurp(error)
    else
      error
    end
  end
  unless response.body.empty?
    response.body = Fog::JSON.decode(response.body)
  end
  response
end

#set_node_maintenance(node_uuid, parameters = nil) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/fog/openstack/requests/baremetal/set_node_maintenance.rb', line 5

def set_node_maintenance(node_uuid, parameters=nil)
  if parameters
    query = parameters.each { |k, v| parameters[k] = URI::encode(v) }
  else
    query = {}
  end

  request(
    :expects => [200, 202, 204],
    :method => 'PUT',
    :path => "nodes/#{node_uuid}/maintenance",
    :query   => query
  )
end

#set_node_power_state(node_id, power_state) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/fog/openstack/requests/baremetal/set_node_power_state.rb', line 5

def set_node_power_state(node_id, power_state)
  data = {
    'target' => power_state
  }

  request(
    :body => Fog::JSON.encode(data),
    :expects => 202,
    :method => 'PUT',
    :path => "nodes/#{node_id}/states/power"
  )
end

#set_node_provision_state(node_id, provision_state) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/fog/openstack/requests/baremetal/set_node_provision_state.rb', line 5

def set_node_provision_state(node_id, provision_state)
  data = {
    'target' => provision_state
  }

  request(
    :body => Fog::JSON.encode(data),
    :expects => 202,
    :method => 'PUT',
    :path => "nodes/#{node_id}/states/provision",
    :headers => {
            :'X-OpenStack-Ironic-API-Version' => 'latest'
          }
  )
end

#unset_node_maintenance(node_uuid, parameters = nil) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/fog/openstack/requests/baremetal/unset_node_maintenance.rb', line 5

def unset_node_maintenance(node_uuid, parameters=nil)
  if parameters
    query = parameters.each { |k, v| parameters[k] = URI::encode(v) }
  else
    query = {}
  end

  request(
    :expects => [200, 202, 204],
    :method => 'DELETE',
    :path => "nodes/#{node_uuid}/maintenance",
    :query   => query
  )
end