Class: Bfire::Provider::Puppet

Inherits:
Object
  • Object
show all
Defined in:
lib/bfire/provider/puppet.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Puppet

Returns a new instance of Puppet.



9
10
11
12
13
14
# File 'lib/bfire/provider/puppet.rb', line 9

def initialize(opts = {})
  @classes = opts.delete(:classes) || opts.delete("classes")
  @modules = opts.delete(:modules) || opts.delete("modules")
  @options = opts
  @errors = []
end

Instance Attribute Details

#classesObject (readonly)

Returns the value of attribute classes.



4
5
6
# File 'lib/bfire/provider/puppet.rb', line 4

def classes
  @classes
end

#errorsObject (readonly)

Returns the value of attribute errors.



7
8
9
# File 'lib/bfire/provider/puppet.rb', line 7

def errors
  @errors
end

#modulesObject (readonly)

Returns the value of attribute modules.



5
6
7
# File 'lib/bfire/provider/puppet.rb', line 5

def modules
  @modules
end

#optionsObject (readonly)

Returns the value of attribute options.



6
7
8
# File 'lib/bfire/provider/puppet.rb', line 6

def options
  @options
end

Instance Method Details

#install(ssh_session) ⇒ Object



16
17
18
19
20
# File 'lib/bfire/provider/puppet.rb', line 16

def install(ssh_session)
  res = ssh_session.exec!("apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install curl puppet -y")
  res = ssh_session.exec!("which puppet")
  !res.nil? && !res.empty?
end

#manifest(name) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/bfire/provider/puppet.rb', line 37

def manifest(name)
  content = <<MANIFEST
class #{name} {
  #{classes.map{|klass| "include #{klass}"}.join("\n")}
}

include #{name}
MANIFEST
end

#run(ssh_session) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/bfire/provider/puppet.rb', line 22

def run(ssh_session)
  ssh_session.exec!("rm -rf /tmp/puppet && mkdir -p /tmp/puppet")
  ssh_session.scp.upload!(
    StringIO.new(manifest("vm")),
    "/tmp/puppet/manifest.pp"
  )
  ssh_session.sftp.upload!(modules, "/tmp/puppet/modules")
  ssh_session.exec!(
    "puppet --modulepath /tmp/puppet/modules /tmp/puppet/manifest.pp"
  ) do |ch, stream, data|
    yield "[#{stream.to_s.upcase}] #{data.chomp}"
  end
  true
end

#valid?Boolean

Returns:

  • (Boolean)


47
48
49
50
51
52
53
54
55
# File 'lib/bfire/provider/puppet.rb', line 47

def valid?
  @errors = []
  if modules.nil?
    @errors.push("You must pass a :modules option to `provider`")
  elsif !File.directory?(modules)
    @errors.push("#{modules} is not a valid directory")
  end
  @errors.empty?
end