Class: Bolt::Catalog

Inherits:
Object
  • Object
show all
Defined in:
lib/bolt/catalog.rb

Instance Method Summary collapse

Instance Method Details

#compile_catalog(request) ⇒ Object



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/bolt/catalog.rb', line 101

def compile_catalog(request)
  pal_main = request['code_ast'] || request['code_string']
  target = request['target']
  with_puppet_settings do
    Puppet[:code] = ''
    Puppet[:node_name_value] = target['name']
    Puppet::Pal.in_tmp_environment(
      'bolt_catalog',
      modulepath: request["modulepath"] || [],
      facts: target["facts"] || {},
      variables: target["variables"] || {}
    ) do |_pal|
      node = Puppet.lookup(:pal_current_node)
      setup_node(node)

      Puppet.override(pal_main: pal_main) do
        compile_node(node)
      end
    end
  end
end

#compile_node(node) ⇒ Object



86
87
88
89
# File 'lib/bolt/catalog.rb', line 86

def compile_node(node)
  compiler = Puppet::Parser::BoltCompiler.new(node)
  compiler.compile(&:to_resource)
end

#generate_ast(code) ⇒ Object



91
92
93
94
95
96
97
98
99
# File 'lib/bolt/catalog.rb', line 91

def generate_ast(code)
  with_puppet_settings do
    Puppet::Pal.in_tmp_environment("bolt_parse") do |_pal|
      node = Puppet.lookup(:pal_current_node)
      compiler = Puppet::Parser::BoltCompiler.new(node)
      compiler.dump_ast(compiler.parse_string(code))
    end
  end
end

#in_envObject



56
57
58
59
60
# File 'lib/bolt/catalog.rb', line 56

def in_env
  Puppet::Pal.in_tmp_environment('bolt_apply', modulepath: ['~/bolt/modules/'], facts: @scope['facts']) do |pal|
    yield pal
  end
end

#setup_node(node) ⇒ Object



75
76
77
78
79
80
81
82
83
84
# File 'lib/bolt/catalog.rb', line 75

def setup_node(node)
  facts = Puppet.lookup(:pal_facts)
  node_facts = Puppet::Node::Facts.new(Puppet[:node_name_value], facts)
  node.fact_merge(node_facts)

  node.parameters = node.parameters.merge(Puppet.lookup(:pal_variables))
  # TODO: setup server_facts
  # TODO: setup trusted in params
  # TODO: setup serverversion/clientversion in params
end

#with_puppet_settingsObject



62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/bolt/catalog.rb', line 62

def with_puppet_settings
  Dir.mktmpdir('bolt') do |dir|
    cli = []
    Puppet::Settings::REQUIRED_APP_SETTINGS.each do |setting|
      cli << "--#{setting}" << dir
    end
    Puppet.settings.send(:clear_everything_for_tests)
    Puppet.initialize_settings(cli)
    # self.class.configure_logging
    yield
  end
end