Class: Actions::ForemanPipeline::JenkinsInstance::CreateJenkinsInstanceKeys

Inherits:
AbstractJenkinsInstanceAction show all
Defined in:
app/lib/actions/foreman_pipeline/jenkins_instance/create_jenkins_instance_keys.rb

Instance Method Summary collapse

Methods inherited from AbstractJenkinsInstanceAction

#parse_jenkins_hostname

Methods included from Mixins::SshExtension

#ssh_exec!

Instance Method Details

#fetch_pubkey(host) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'app/lib/actions/foreman_pipeline/jenkins_instance/create_jenkins_instance_keys.rb', line 14

def fetch_pubkey(host)
  buffer = StringIO.new
  ip = Socket::getaddrinfo(host, 'www', nil, Socket::SOCK_STREAM)[0][3]

  Net::SSH.start(ip, 'root', :keys => [input.fetch(:cert_path)], :non_interactive => true) do |ssh|
    status = ssh_exec!(ssh, "ls #{key_location}")[2]
    ssh.exec!("mkdir #{key_location}") if status > 0
    ssh.exec! "sed -i s:Defaults\\.*requiretty:#Defaults\\ requiretty:g /etc/sudoers"
    ssh.exec! "rm -f #{key_location}/#{parse_jenkins_hostname}.pub #{key_location}/#{parse_jenkins_hostname}"
    ssh.exec! "sudo -u jenkins ssh-keygen -f #{key_location}/#{parse_jenkins_hostname} -t rsa -N '' -q"
    ssh.scp.download! "#{key_location}/#{parse_jenkins_hostname}.pub", buffer
  end

  buffer.string
end

#finalizeObject



34
35
36
37
38
39
40
# File 'app/lib/actions/foreman_pipeline/jenkins_instance/create_jenkins_instance_keys.rb', line 34

def finalize
  if output[:pubkey].match(/^ssh-rsa/)
    output[:status] = 0
  else
    output[:status] = 1
  end
end

#key_locationObject



30
31
32
# File 'app/lib/actions/foreman_pipeline/jenkins_instance/create_jenkins_instance_keys.rb', line 30

def key_location
  "#{input.fetch(:jenkins_home)}/.ssh"
end

#runObject



10
11
12
# File 'app/lib/actions/foreman_pipeline/jenkins_instance/create_jenkins_instance_keys.rb', line 10

def run
  output[:pubkey] = fetch_pubkey(parse_jenkins_hostname)
end