class Awsom::SaltBootstrap
Public Class Methods
new(name, ip:, template:)
click to toggle source
# File lib/awsom/salt_bootstrap.rb, line 10 def initialize(name, ip:, template:) @name = name @ip = ip @template = template validate! end
Public Instance Methods
run()
click to toggle source
# File lib/awsom/salt_bootstrap.rb, line 17 def run copy_bootstrap_data puts "running bootstrap.sh" run_bootstrap_sh end
Private Instance Methods
copy_bootstrap_data()
click to toggle source
# File lib/awsom/salt_bootstrap.rb, line 25 def copy_bootstrap_data Dir.mktmpdir("./") do |dir| puts "generating salt key" system "salt-key", "--gen-keys-dir=#{dir}", "--gen-keys=minion" puts "generating bootstrap script" erb = ERB.new(File.read @template) script = erb.result_with_hash({name: @name}) File.write("#{dir}/bootstrap.sh", script) scp "#{dir}/minion.pem", "#{dir}/minion.pub", "#{dir}/bootstrap.sh", "root@#{@ip}:/root/" FileUtils.mv "#{dir}/minion.pub", "/etc/salt/pki/master/minions/#{@name}" end end
pty_read(io, out)
click to toggle source
# File lib/awsom/salt_bootstrap.rb, line 52 def pty_read(io, out) io.each { |line| out.print line } rescue EOFError,Errno::ECONNRESET, Errno::EPIPE, Errno::EIO => e end
run_bootstrap_sh()
click to toggle source
# File lib/awsom/salt_bootstrap.rb, line 40 def run_bootstrap_sh FileUtils.mkdir_p "log" log_file = "log/#{@name}.log" script = 'bash /root/bootstrap.sh; rm /root/bootstrap.sh' r, w, pid = PTY.spawn "ssh", "-tt", *ssh_opts, "root@#{@ip}", script File.open log_file, "w" do |f| pty_read(r, f) end pid, status = Process.waitpid2(pid) p status end
scp(*args, tries: 5)
click to toggle source
# File lib/awsom/salt_bootstrap.rb, line 57 def scp(*args, tries: 5) begin tries = tries - 1 system "timeout", "60", "scp", *ssh_opts, *args, exception: true rescue RuntimeError sleep 5 retry if tries > 0 end end
ssh_opts(attempts = 65)
click to toggle source
# File lib/awsom/salt_bootstrap.rb, line 67 def ssh_opts(attempts = 65) [ "-oConnectTimeout=1", "-oConnectionAttempts=#{attempts}", "-oStrictHostKeyChecking=no", "-oUserKnownHostsFile=/dev/null", "-oBatchMode=yes" ] end
validate!()
click to toggle source
# File lib/awsom/salt_bootstrap.rb, line 77 def validate! if @name !~ /\A[a-zA-Z0-9\-\. ]+\z/ raise "invalid name #{@name}" end if @ip !~ /\A[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\z/ raise "invalid ip #{@ip}" end end