Module: Gogetit::Util
- Included in:
- Etcd::Etcd, CLI, Config, GogetLXD, GogetLibvirt
- Defined in:
- lib/gogetit/util.rb
Instance Method Summary collapse
- #check_ip_available(addresses, maas, logger) ⇒ Object
- #get_gateway(version) ⇒ Object
- #knife_bootstrap(name, type, config, logger) ⇒ Object
- #knife_remove(name, logger) ⇒ Object
- #ping_available?(host, logger) ⇒ Boolean
- #recognize_env ⇒ Object
- #ssh_available?(fqdn, user) ⇒ Boolean
-
#symbolize_keys(thing) ⇒ Object
taken from gist.github.com/andrewpcone/11359798.
- #update_vault(config, logger) ⇒ Object
- #wait_until_available(fqdn, logger) ⇒ Object
Instance Method Details
#check_ip_available(addresses, maas, logger) ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/gogetit/util.rb', line 126 def check_ip_available(addresses, maas, logger) logger.info("Calling <#{__method__.to_s}>") # to do a ping test addresses.each do |ip| abort("#{ip} is already being used.") if ping_available?(ip, logger) end # to check with MAAS ifaces = maas.ip_reserved?(addresses) abort("one of #{addresses.join(', ')} is already being used.") \ unless ifaces return ifaces end |
#get_gateway(version) ⇒ Object
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/gogetit/util.rb', line 72 def get_gateway(version) IO.popen("ip -#{version.to_s} route").read.each_line do |route| if route.include? 'default' route.split[2] else 'There is no get_gateway!' nil end end end |
#knife_bootstrap(name, type, config, logger) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/gogetit/util.rb', line 7 def knife_bootstrap(name, type, config, logger) logger.info("Calling <#{__method__.to_s}>") if find_executable 'knife' if system('knife ssl check') install_cmd = "curl \ -l #{config[:chef][:bootstrap][:install_script][type.to_sym]} \ | sudo bash -s --" knife_cmd = "knife bootstrap -y #{name} \ --node-name #{name} \ --ssh-user ubuntu \ --sudo \ --bootstrap-install-command \"#{install_cmd}\"".gsub(/ * /, ' ') puts 'Bootstrapping..' puts knife_cmd system(knife_cmd) end end end |
#knife_remove(name, logger) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/gogetit/util.rb', line 47 def knife_remove(name, logger) logger.info("Calling <#{__method__.to_s}>") if find_executable 'knife' if system('knife ssl check') puts "Deleting node #{name}.." system("knife node delete -y #{name}") puts "Deleting client #{name}.." system("knife client delete -y #{name}") end end end |
#ping_available?(host, logger) ⇒ Boolean
111 112 113 114 115 116 |
# File 'lib/gogetit/util.rb', line 111 def ping_available?(host, logger) # host can be both IP and FQDN. logger.info("Calling <#{__method__.to_s}> for #{host}") `ping -c 1 -W 1 #{host}` $?.exitstatus == 0 end |
#recognize_env ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/gogetit/util.rb', line 59 def recognize_env thedir = 'lib/env' gateway = get_gateway(4) Dir.foreach(thedir) do |item| if item.match(/\.json$/) env_data = JSON.parse(File.read(thedir+'/'+item)) if gateway =~ Regexp.new(env_data['regexp_pattern']) return env_data['name'] end end end end |
#ssh_available?(fqdn, user) ⇒ Boolean
118 119 120 121 122 123 124 |
# File 'lib/gogetit/util.rb', line 118 def ssh_available?(fqdn, user) begin Net::SSH.start(fqdn, user).class rescue Exception => e puts e end end |
#symbolize_keys(thing) ⇒ Object
taken from gist.github.com/andrewpcone/11359798
84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/gogetit/util.rb', line 84 def symbolize_keys(thing) case thing when Array thing.map{|v| symbolize_keys(v)} when Hash inj = thing.inject({}) {|h, (k,v)| h[k] = symbolize_keys(v); h} inj.symbolize_keys else thing end end |
#update_vault(config, logger) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/gogetit/util.rb', line 26 def update_vault(config, logger) logger.info("Calling <#{__method__.to_s}>") # It assumes the data_bags directory is under the root directory of Chef Repo data_bags_dir = "#{config[:chef][:chef_repo_root]}/data_bags" (Dir.entries("#{data_bags_dir}") - ['.', '..']).each do |bag| (Dir.entries("#{data_bags_dir}/#{bag}").select do |f| /^((?!keys).)*\.json/.match(f) end ).each do |item| puts 'Refreshing vaults..' refresh_cmd = "knife vault refresh #{bag} #{item.gsub('.json', '')} --clean-unknown-clients" puts refresh_cmd system(refresh_cmd) end puts 'Updating data bags..' update_cmd = "knife data bag from file #{bag} #{data_bags_dir}/#{bag}" puts update_cmd system(update_cmd) end end |
#wait_until_available(fqdn, logger) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/gogetit/util.rb', line 96 def wait_until_available(fqdn, logger) logger.info("Calling <#{__method__.to_s}>") until ping_available?(fqdn, logger) logger.info("Calling <#{__method__.to_s}> for ping to be ready..") sleep 3 end logger.info("#{fqdn} is now available to ping..") until ssh_available?(fqdn, 'ubuntu') logger.info("Calling <#{__method__.to_s}> for ssh to be ready..") sleep 3 end logger.info("#{fqdn} is now available to ssh..") end |