Class: Puppet::Provider::Nova
- Inherits:
-
Puppet::Provider
- Object
- Puppet::Provider
- Puppet::Provider::Nova
- Defined in:
- lib/puppet/provider/nova.rb
Class Method Summary collapse
- .auth_endpoint ⇒ Object
- .auth_nova(*args) ⇒ Object
- .cliout2list(output) ⇒ Object
- .conf_filename ⇒ Object
- .get_auth_endpoint ⇒ Object
- .get_nova_credentials ⇒ Object
- .nova_aggregate_resources_attr(id) ⇒ Object
- .nova_aggregate_resources_get_name_by_id(name) ⇒ Object
- .nova_aggregate_resources_ids ⇒ Object
- .nova_conf ⇒ Object
- .nova_credentials ⇒ Object
- .reset ⇒ Object
- .str2hash(s) ⇒ Object
- .str2list(s) ⇒ Object
- .withenv(hash, &block) ⇒ Object
Instance Method Summary collapse
Class Method Details
.auth_endpoint ⇒ Object
61 62 63 |
# File 'lib/puppet/provider/nova.rb', line 61 def self.auth_endpoint @auth_endpoint ||= get_auth_endpoint end |
.auth_nova(*args) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/puppet/provider/nova.rb', line 65 def self.auth_nova(*args) q = nova_credentials authenv = { :OS_AUTH_URL => self.auth_endpoint, :OS_USERNAME => q['admin_user'], :OS_TENANT_NAME => q['admin_tenant_name'], :OS_PASSWORD => q['admin_password'] } begin withenv authenv do nova(args) end rescue Exception => e if (e. =~ /\[Errno 111\] Connection refused/) or (e. =~ /\(HTTP 400\)/) sleep 10 withenv authenv do nova(args) end else raise(e) end end end |
.cliout2list(output) ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/puppet/provider/nova.rb', line 131 def self.cliout2list(output) #don't proceed with empty output if output.empty? return [] end lines = [] output.each_line do |line| #ignore lines starting with '+' if not line.match("^\\+") #split line at '|' and remove useless information line = line.gsub(/^\| /, "").gsub(/ \|$/, "").gsub(/[\n]+/, "") line = line.split("|").map do |el| el.strip().gsub(/^-$/, "") end #check every element for list line = line.map do |el| el = str2list(el) end lines.push(line) end end #create a list of hashes and return the list hash_list = [] header = lines[0] lines[1..-1].each do |line| hash_list.push(Hash[header.zip(line)]) end return hash_list end |
.conf_filename ⇒ Object
7 8 9 |
# File 'lib/puppet/provider/nova.rb', line 7 def self.conf_filename '/etc/nova/nova.conf' end |
.get_auth_endpoint ⇒ Object
56 57 58 59 |
# File 'lib/puppet/provider/nova.rb', line 56 def self.get_auth_endpoint q = nova_credentials "#{q['auth_protocol']}://#{q['auth_host']}:#{q['auth_port']}/v2.0/" end |
.get_nova_credentials ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/puppet/provider/nova.rb', line 40 def self.get_nova_credentials #needed keys for authentication auth_keys = ['auth_host', 'auth_port', 'auth_protocol', 'admin_tenant_name', 'admin_user', 'admin_password'] conf = nova_conf if conf and conf['keystone_authtoken'] and auth_keys.all?{|k| !conf['keystone_authtoken'][k].nil?} return Hash[ auth_keys.map \ { |k| [k, conf['keystone_authtoken'][k].strip] } ] else raise(Puppet::Error, "File: #{conf_filename} does not contain all " + "required sections. Nova types will not work if nova is not " + "correctly configured.") end end |
.nova_aggregate_resources_attr(id) ⇒ Object
185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/puppet/provider/nova.rb', line 185 def self.nova_aggregate_resources_attr(id) #run command to get details for given Id cmd_output = auth_nova("aggregate-details", id) list = cliout2list(cmd_output)[0] if ! list["Hosts"].is_a?(Array) if list["Hosts"] == "" list["Hosts"] = [] else list["Hosts"] = [ list["Hosts"] ] end end return list end |
.nova_aggregate_resources_get_name_by_id(name) ⇒ Object
174 175 176 177 178 179 180 181 182 183 |
# File 'lib/puppet/provider/nova.rb', line 174 def self.nova_aggregate_resources_get_name_by_id(name) #find the id by the given name nova_aggregate_resources_ids.each do |entry| if entry["Name"] == name return entry["Id"] end end #name not found return nil end |
.nova_aggregate_resources_ids ⇒ Object
161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/puppet/provider/nova.rb', line 161 def self.nova_aggregate_resources_ids #produce a list of hashes with Id=>Name pairs lines = [] #run command cmd_output = auth_nova("aggregate-list") #parse output hash_list = cliout2list(cmd_output) #only interessted in Id and Name hash_list.map{ |e| e.delete("Availability Zone")} hash_list.map{ |e| e['Id'] = e['Id'].to_i} return hash_list end |
.nova_conf ⇒ Object
25 26 27 28 29 30 |
# File 'lib/puppet/provider/nova.rb', line 25 def self.nova_conf return @nova_conf if @nova_conf @nova_conf = Puppet::Util::IniConfig::File.new @nova_conf.read(conf_filename) @nova_conf end |
.nova_credentials ⇒ Object
32 33 34 |
# File 'lib/puppet/provider/nova.rb', line 32 def self.nova_credentials @nova_credentials ||= get_nova_credentials end |
.reset ⇒ Object
94 95 96 97 |
# File 'lib/puppet/provider/nova.rb', line 94 def self.reset @nova_conf = nil @nova_credentials = nil end |
.str2hash(s) ⇒ Object
99 100 101 102 103 104 105 106 107 |
# File 'lib/puppet/provider/nova.rb', line 99 def self.str2hash(s) #parse string if s.include? "=" k, v = s.split("=", 2) return {k.gsub(/'/, "") => v.gsub(/'/, "")} else return s.gsub(/'/, "") end end |
.str2list(s) ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/puppet/provider/nova.rb', line 109 def self.str2list(s) #parse string if s.include? "," if s.include? "=" new = {} else new = [] end s.split(",").each do |el| ret = str2hash(el.strip()) if s.include? "=" new.update(ret) else new.push(ret) end end return new else return str2hash(s.strip()) end end |
.withenv(hash, &block) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/puppet/provider/nova.rb', line 11 def self.withenv(hash, &block) saved = ENV.to_hash hash.each do |name, val| ENV[name.to_s] = val end yield ensure ENV.clear saved.each do |name, val| ENV[name] = val end end |
Instance Method Details
#auth_nova(*args) ⇒ Object
90 91 92 |
# File 'lib/puppet/provider/nova.rb', line 90 def auth_nova(*args) self.class.auth_nova(args) end |
#nova_credentials ⇒ Object
36 37 38 |
# File 'lib/puppet/provider/nova.rb', line 36 def nova_credentials self.class.nova_credentials end |