Class: Gogetit::GogetMAAS
- Inherits:
-
Object
- Object
- Gogetit::GogetMAAS
- Defined in:
- lib/gogetit/maas.rb
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#conn ⇒ Object
readonly
Returns the value of attribute conn.
-
#domain ⇒ Object
readonly
Returns the value of attribute domain.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
Instance Method Summary collapse
- #change_hostname(system_id, hostname) ⇒ Object
- #delete_dns_record(name) ⇒ Object
- #dnsresource_exists?(name) ⇒ Boolean
- #domain_name_exists?(name) ⇒ Boolean
- #get_distro_name(system_id) ⇒ Object
- #get_domain ⇒ Object
- #get_machine_state(system_id) ⇒ Object
- #get_package_repos ⇒ Object
- #get_sshkeys ⇒ Object
- #get_subnets ⇒ Object
- #get_system_id(name) ⇒ Object
-
#initialize(conf, logger) ⇒ GogetMAAS
constructor
A new instance of GogetMAAS.
- #interfaces(url = [], params = {}) ⇒ Object
- #ip_reserved?(addresses) ⇒ Boolean
- #ipaddresses(op = nil, params = nil) ⇒ Object
- #ipaddresses_reserved?(ip) ⇒ Boolean
- #machine_exists?(name) ⇒ Boolean
- #refresh_pods ⇒ Object
- #wait_until_state(system_id, state) ⇒ Object
Constructor Details
#initialize(conf, logger) ⇒ GogetMAAS
Returns a new instance of GogetMAAS.
8 9 10 11 12 13 14 15 |
# File 'lib/gogetit/maas.rb', line 8 def initialize(conf, logger) @config = conf @conn = Maas::Client::MaasClient.new( config[:maas][:key], config[:maas][:url] ) @logger = logger end |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
6 7 8 |
# File 'lib/gogetit/maas.rb', line 6 def config @config end |
#conn ⇒ Object (readonly)
Returns the value of attribute conn.
6 7 8 |
# File 'lib/gogetit/maas.rb', line 6 def conn @conn end |
#domain ⇒ Object (readonly)
Returns the value of attribute domain.
6 7 8 |
# File 'lib/gogetit/maas.rb', line 6 def domain @domain end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
6 7 8 |
# File 'lib/gogetit/maas.rb', line 6 def logger @logger end |
Instance Method Details
#change_hostname(system_id, hostname) ⇒ Object
223 224 225 226 |
# File 'lib/gogetit/maas.rb', line 223 def change_hostname(system_id, hostname) logger.info("Calling <#{__method__.to_s}>") conn.request(:put, ['machines', system_id], { 'hostname' => hostname }) end |
#delete_dns_record(name) ⇒ Object
181 182 183 184 185 186 187 188 189 |
# File 'lib/gogetit/maas.rb', line 181 def delete_dns_record(name) logger.info("Calling <#{__method__.to_s}>") conn.request(:get, ['dnsresources']).each do |item| if item['fqdn'] == name + '.' + get_domain logger.info("#{item['fqdn']} is being deleted..") conn.request(:delete, ['dnsresources', item['id']]) end end end |
#dnsresource_exists?(name) ⇒ Boolean
39 40 41 42 43 44 45 |
# File 'lib/gogetit/maas.rb', line 39 def dnsresource_exists?(name) logger.info("Calling <#{__method__.to_s}> for #{name}") conn.request(:get, ['dnsresources']).each do |item| return true if item['fqdn'] == name + '.' + get_domain end false end |
#domain_name_exists?(name) ⇒ Boolean
47 48 49 50 |
# File 'lib/gogetit/maas.rb', line 47 def domain_name_exists?(name) logger.info("Calling <#{__method__.to_s}> for #{name}") return true if dnsresource_exists?(name) or machine_exists?(name) end |
#get_distro_name(system_id) ⇒ Object
31 32 33 34 35 36 37 |
# File 'lib/gogetit/maas.rb', line 31 def get_distro_name(system_id) logger.info("Calling <#{__method__.to_s}>") conn.request(:get, ['machines']).each do |m| return m['osystem'] if m['system_id'] == system_id end false end |
#get_domain ⇒ Object
17 18 19 20 21 |
# File 'lib/gogetit/maas.rb', line 17 def get_domain return @domain if @domain logger.info("Calling <#{__method__.to_s}>") @domain = conn.request(:get, ['domains'])[0]['name'] end |
#get_machine_state(system_id) ⇒ Object
215 216 217 218 219 220 221 |
# File 'lib/gogetit/maas.rb', line 215 def get_machine_state(system_id) logger.info("Calling <#{__method__.to_s}>") conn.request(:get, ['machines']).each do |m| return m['status_name'] if m['system_id'] == system_id end false end |
#get_package_repos ⇒ Object
233 234 235 236 |
# File 'lib/gogetit/maas.rb', line 233 def get_package_repos logger.info("Calling <#{__method__.to_s}>") conn.request(:get, ['package-repositories']) end |
#get_sshkeys ⇒ Object
228 229 230 231 |
# File 'lib/gogetit/maas.rb', line 228 def get_sshkeys logger.info("Calling <#{__method__.to_s}>") conn.request(:get, ['account', 'prefs', 'sshkeys']) end |
#get_subnets ⇒ Object
52 53 54 55 |
# File 'lib/gogetit/maas.rb', line 52 def get_subnets logger.info("Calling <#{__method__.to_s}>") return conn.request(:get, ['subnets']) end |
#get_system_id(name) ⇒ Object
199 200 201 202 203 204 205 |
# File 'lib/gogetit/maas.rb', line 199 def get_system_id(name) logger.info("Calling <#{__method__.to_s}>") conn.request(:get, ['machines']).each do |m| return m['system_id'] if m['hostname'] == name end nil end |
#interfaces(url = [], params = {}) ⇒ Object
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
# File 'lib/gogetit/maas.rb', line 159 def interfaces(url = [], params = {}) logger.info("Calling <#{__method__.to_s}>") url.insert(0, 'nodes') url.insert(2, 'interfaces') # ['nodes', system_id, 'interfaces'] case params['op'] when nil conn.request(:get, url) when 'create_vlan' logger.info("Creating a vlan interface for id: #{params['vlan']}..") conn.request(:post, url, params) when 'link_subnet' logger.info("Linking a subnet for id: #{url[3]}..") conn.request(:post, url, params) when 'unlink_subnet' logger.info("Linking a subnet for id: #{url[3]}..") conn.request(:post, url, params) end end |
#ip_reserved?(addresses) ⇒ Boolean
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/gogetit/maas.rb', line 57 def ip_reserved?(addresses) logger.info("Calling <#{__method__.to_s}>") ips = Set.new addresses.each do |ip| ips.add(IPAddr.new(ip)) end reserved_ips = Set.new conn.request(:get, ['ipaddresses']).each do |ip| reserved_ips.add(IPAddr.new(ip['ip'])) end rackcontroller_ips = Set.new conn.request(:get, ['rackcontrollers']).each do |rctrl| rctrl['ip_addresses'].each do |ip| rackcontroller_ips.add(IPAddr.new(ip)) end end # reserved_ips | rackcontroller_ips # Returns a new array by joining ary with other_ary, # excluding any duplicates and preserving the order from the original array. if ips.disjoint? reserved_ips | rackcontroller_ips subnets = conn.request(:get, ['subnets']) ipranges = conn.request(:get, ['ipranges']) ifaces = [] ips.each do |ip| available = false subnets.each do |subnet| if IPAddr.new(subnet['cidr']).include?(ip) ipranges.each do |range| if range['subnet']['id'] == subnet['id'] first = IPAddr.new(range['start_ip']).to_i last = IPAddr.new(range['end_ip']).to_i if (first..last) === ip.to_i logger.info("#{ip} is available.") available = true subnets.delete(subnet) subnet['ip'] = ip.to_s ifaces << subnet break end end end end break if available end if not available logger.info("#{ip.to_s} does not belong to any subnet pre-defined.") return false end end else logger.info("#{(ips & (reserved_ips | rackcontroller_ips)).to_a.join(', ')}\ is already reserved.") return false end return ifaces end |
#ipaddresses(op = nil, params = nil) ⇒ Object
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 |
# File 'lib/gogetit/maas.rb', line 133 def ipaddresses(op = nil, params = nil) logger.info("Calling <#{__method__.to_s}>") case op when nil conn.request(:get, ['ipaddresses']) when 'reserve' # params = { # 'subnet' => '10.1.2.0/24', # 'ip' => '10.1.2.8', # 'hostname' => 'hostname', # 'mac' => 'blahblah' # } default_param = { 'op' => op } logger.info("#{params['ip']} is being reserved..") conn.request(:post, ['ipaddresses'], default_param.merge!(params)) when 'release' # Gogetit.maas.ipaddresses('release', {'ip' => '10.1.2.8'}) # params = { # 'ip' => '10.1.2.8', # } default_param = { 'op' => op } logger.info("#{params['ip']} is being released..") conn.request(:post, ['ipaddresses'], default_param.merge!(params)) end end |
#ipaddresses_reserved?(ip) ⇒ Boolean
122 123 124 125 126 127 128 129 130 131 |
# File 'lib/gogetit/maas.rb', line 122 def ipaddresses_reserved?(ip) logger.info("Calling <#{__method__.to_s}>") conn.request(:get, ['ipaddresses']).each do |address| if address['ip'] == ip logger.info("#{ip} is reserved.") return true end end return false end |
#machine_exists?(name) ⇒ Boolean
23 24 25 26 27 28 29 |
# File 'lib/gogetit/maas.rb', line 23 def machine_exists?(name) logger.info("Calling <#{__method__.to_s}> for #{name}") conn.request(:get, ['machines']).each do |m| return true if m['hostname'] == name end false end |
#refresh_pods ⇒ Object
191 192 193 194 195 196 197 |
# File 'lib/gogetit/maas.rb', line 191 def refresh_pods logger.info("Calling <#{__method__.to_s}>") pod_id = conn.request(:get, ['pods']) pod_id.each do |pod| conn.request(:post, ['pods', pod['id']], { 'op' => 'refresh' } ) end end |
#wait_until_state(system_id, state) ⇒ Object
207 208 209 210 211 212 213 |
# File 'lib/gogetit/maas.rb', line 207 def wait_until_state(system_id, state) logger.info("Calling <#{__method__.to_s}> for being #{state}") until conn.request(:get, ['machines', system_id])['status_name'] == state sleep 3 end logger.info("The status has become '#{state}'.") end |