module Overcloud::Node
Public Instance Methods
configure_node(node_uuid)
click to toggle source
# File lib/egon/overcloud/undercloud_handle/node.rb, line 45 def configure_node(node_uuid) workflow = 'tripleo.baremetal.v1.configure' input = { node_uuids: [node_uuid] } execute_workflow(workflow, input) end
create_node(node_parameters)
click to toggle source
# File lib/egon/overcloud/undercloud_handle/node.rb, line 24 def create_node(node_parameters) node = create_node_only(node_parameters) introspect_node(node.uuid) node end
create_node_only(node_parameters)
click to toggle source
# File lib/egon/overcloud/undercloud_handle/node.rb, line 30 def create_node_only(node_parameters) workflow = 'tripleo.baremetal.v1.register_or_update' json = node_parameters_to_json(node_parameters) input = { nodes_json: json } workflow_execution_id = execute_workflow(workflow, input) connection = service('Workflow') output = connection.get_execution(workflow_execution_id).body['output'] output_json = JSON.parse(output) node_uuid = output_json['registered_nodes'].first['uuid'] configure_node(node_uuid) get_node(node_uuid) end
create_nodes_from_csv(csv_file)
click to toggle source
# File lib/egon/overcloud/undercloud_handle/node.rb, line 55 def create_nodes_from_csv(csv_file) CSV.foreach(csv_file) do |node_data| memory_mb = node_data[0] local_gb = node_data[1] cpus = node_data[2] cpu_arch = node_data[3] driver = node_data[4] mac_address = node_data[8] if driver == 'pxe_ssh' ssh_key_contents = node_data[7] # CSV processing appends an extra '\', we need to remove it ssh_key_contents.gsub!("\\n", "\n") driver_info = { :ssh_address => node_data[5], :ssh_username => node_data[6], :ssh_key_contents => ssh_key_contents, :ssh_virt_type => 'virsh', :deploy_kernel => get_baremetal_deploy_kernel_image.id, :deploy_ramdisk => get_baremetal_deploy_ramdisk_image.id } elsif driver == 'pxe_ipmitool' driver_info = { :ipmi_address => node_data[5], :ipmi_username => node_data[6], :ipmi_password => node_data[7], :pxe_deploy_kernel => get_baremetal_deploy_kernel_image.id, :pxe_deploy_ramdisk => get_baremetal_deploy_ramdisk_image.id } else raise "Unknown node driver: #{driver}" end node_parameters = { :driver => driver, :driver_info => driver_info, :properties => { :cpus => cpus, :memory_mb => memory_mb, :local_gb => local_gb, :cpu_arch => cpu_arch, :capabilities => 'boot_option:local' }, :address => mac_address } node = create_node(node_parameters) end end
create_port(port_parameters)
click to toggle source
# File lib/egon/overcloud/undercloud_handle/node.rb, line 51 def create_port(port_parameters) service('Baremetal').ports.create(port_parameters) end
delete_node(node_id)
click to toggle source
# File lib/egon/overcloud/undercloud_handle/node.rb, line 130 def delete_node(node_id) begin node = get_node(node_id) if node.power_state == 'power on' && node.provision_state != 'active' node.set_power_state('power off') retries = 15 while retries > 0 && node.power_state != 'power off' do sleep(2) retries -= 1 end end service('Baremetal').nodes.destroy(node_id) rescue Fog::Compute::OpenStack::NotFound => e "Node Not Found" rescue Excon::Errors::Conflict, Excon::Errors::BadRequest => e JSON.parse(JSON.parse(e.response.body)["error_message"])["faultstring"].split("\n").first end end
get_node(node_id)
click to toggle source
# File lib/egon/overcloud/undercloud_handle/node.rb, line 20 def get_node(node_id) service('Baremetal').nodes.find_by_uuid(node_id) end
introspect_node(node_uuid)
click to toggle source
THESE METHODS ARE TEMPORARY UNTIL IRONIC-DISCOVERD IS ADDED TO OPENSTACK AND KEYSTONE
# File lib/egon/overcloud/undercloud_handle/node.rb, line 152 def introspect_node(node_uuid) workflow = 'tripleo.baremetal.v1.introspect' input = { node_uuids: [node_uuid] } execute_workflow(workflow, input, false) end
introspect_node_status(node_uuid)
click to toggle source
# File lib/egon/overcloud/undercloud_handle/node.rb, line 158 def introspect_node_status(node_uuid) uri = "http://#{@auth_url}:5050/v1/introspection/#{node_uuid}" response = Fog::Core::Connection.new(uri, false).request({ :expects => 200, :headers => {'Content-Type' => 'application/json', 'Accept' => 'application/json', 'X-Auth-Token' => auth_token}, :method => 'GET' }) body = Fog::JSON.decode(response.body) finished = body['finished'] if finished if body['error'] raise body['error'] end create_flavor_from_node(get_node(node_uuid)) end finished end
list_nodes()
click to toggle source
# File lib/egon/overcloud/undercloud_handle/node.rb, line 8 def list_nodes service('Baremetal').nodes.details end
list_ports()
click to toggle source
# File lib/egon/overcloud/undercloud_handle/node.rb, line 12 def list_ports service('Baremetal').ports.all end
list_ports_detailed()
click to toggle source
# File lib/egon/overcloud/undercloud_handle/node.rb, line 16 def list_ports_detailed service('Baremetal').ports.details end
node_parameters_to_json(node_parameters)
click to toggle source
# File lib/egon/overcloud/undercloud_handle/node.rb, line 103 def node_parameters_to_json(node_parameters) json = { 'disk' => node_parameters[:properties][:local_gb], 'cpu' => node_parameters[:properties][:cpus], 'memory' => node_parameters[:properties][:memory_mb], 'arch' => node_parameters[:properties][:cpu_arch], 'mac' => [node_parameters[:address]], 'pm_type' => node_parameters[:driver] } if node_parameters[:driver] == 'pxe_ssh' json['pm_user'] = node_parameters[:driver_info][:ssh_username] if node_parameters[:driver_info][:ssh_password] json['pm_password'] = node_parameters[:driver_info][:ssh_password] elsif node_parameters[:driver_info][:ssh_key_contents] json['pm_password'] = node_parameters[:driver_info][:ssh_key_contents] end json['pm_addr'] = node_parameters[:driver_info][:ssh_address] elsif node_parameters[:driver] == 'pxe_ipmitool' json['pm_user'] = node_parameters[:driver_info][:ipmi_username] json['pm_password'] = node_parameters[:driver_info][:ipmi_password] json['pm_addr'] = node_parameters[:driver_info][:ipmi_address] else raise "Unknown node driver: #{node_parameters[:driver]}" end [json] end