Skip to content

Instantly share code, notes, and snippets.

@metacoma
Created March 2, 2016 20:40
Show Gist options
  • Save metacoma/9e3a43e1eef46a9bf919 to your computer and use it in GitHub Desktop.
Save metacoma/9e3a43e1eef46a9bf919 to your computer and use it in GitHub Desktop.
upload host facts
#!/usr/bin/ruby
#
#
require 'astute'
require 'net/http'
require 'pp'
require 'yaml'
require 'json'
URL_NAILGUN="http://10.21.20.2:8000"
ENV_ID=1
def handle_request(req, url)
begin
use_ssl = url.scheme == 'https'
r = Net::HTTP.start(url.hostname, url.port, ':use_ssl' => use_ssl) do |http|
http.request(req)
end
if r.code != '200'
raise "Received error response from http server at #{url}: #{r.message}"
end
rescue Errno::ECONNREFUSED => detail
raise "Failed to connect to http server at #{url}: #{detail}"
rescue SocketError => detail
raise "Failed to connect to http server at #{url}: #{detail}"
end
r
end
def keystone_v2_authenticate(auth_url,
username,
password,
tenant_name)
post_args = {
'auth' => {
'passwordCredentials' => {
'username' => username,
'password' => password,
},
'tenantName' => tenant_name
}
}
url = URI.parse("#{auth_url}/tokens")
req = Net::HTTP::Post.new url.to_s
req['content-type'] = 'application/json'
req.body = post_args.to_json
res = handle_request(req, url)
data = JSON.parse res.body
[data['access']['token']['id'], data]
end
def upload_namespace(node_id, namespace, data)
uri = URI.parse("http://10.21.20.2:8000/environment/#{ENV_ID}/node/#{node_id}/resource/#{namespace}/values")
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data({"data" => data})
request['X-Auth-Token'] = $authtoken
end
def node_facts(node_id, files)
puts "node-#{node_id}"
shell = Astute::MClient.new($ctx, 'execute_shell_command', [node_id])
files.each do | f |
response = shell.execute(:cmd => "cat #{f}", :cwd => "/etc/hiera")
upload_namespace node_id, f, response[0].results[:data][:stdout]
end
end
reporter = Astute::HookReporter.new()
$ctx = Astute::Context.new('18', reporter)
shell = Astute::MClient.new($ctx, 'execute_shell_command', [1,2,3,5])
$authtoken = keystone_v2_authenticate("http://10.21.10.2:5000", "admin", "admin" , "admin")
response = shell.execute(:cmd => 'find -xtype f', :cwd => "/etc/hiera")
response.each do | r |
node_facts r.results[:sender], r.results[:data][:stdout].split("\n")
end
~
~
~
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment