Last active
April 8, 2020 18:57
-
-
Save justinstoller/aa2f0ede214c42adede9278085a55051 to your computer and use it in GitHub Desktop.
Puppet Server Dev Debugger
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
puppetserver justin (master *$%<>) ‖ wget https://gist.githubusercontent.com/justinstoller/aa2f0ede214c42adede9278085a55051/raw/e089a2474608af9d42fff1ba2832f3e989b2f562/puppet_server_helper.rb | |
puppetserver justin (master *$%<>) ‖ lein gem install pry-nav | |
puppetserver justin (master *$%<>) ‖ lein irb | |
.... | |
irb(main):002:0> load './puppet_server_helper.rb' | |
=> true | |
irb(main):005:0> req = @helper.basic_catalog_request | |
=> {"authenticated"=>true, "params"=.... | |
irb(main):006:0> @server.handleRequest(req) | |
From: uri:classloader:/puppetserver-lib/puppet/server/master.rb @ line 47 Puppet::Server::Master#handleRequest: | |
46: def handleRequest(request) | |
=> 47: binding.pry | |
48: response = {} | |
49: process(request, response) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'puppet/server/master' | |
require 'securerandom' | |
require 'json' | |
require 'uri' | |
class PuppetServerHelper | |
# alternatively: load 'spec/lib/puppet_spec/handler'; profiler = PuppetSpec::HandlerProfiler.new ???? | |
NullProfiler = Struct.new("Profiler") do | |
def start(*args); end | |
def finish(*args); end | |
def shutdown(*args); end | |
end | |
NullRegistry = Struct.new("Registry") do | |
def register_environment(env); end | |
def is_expired?(env); true; end | |
def remove_environment(env); end | |
def evicted(env); end | |
end | |
attr_accessor :root_dir, :servername, :clientname, | |
:profiler, :env_registry, :metric_registry | |
def initialize | |
@root_dir = ENV['HOME'] + '/.puppetlabs' | |
@servername = @clientname = 'localhost' | |
@profiler = Puppet::Server::JvmProfiler.new(NullProfiler.new) | |
@env_registry = NullRegistry.new | |
import com.codahale.metrics.MetricRegistry | |
@metric_registry = Java::ComCodahaleMetrics::MetricRegistry.new | |
end | |
def default_puppet_config(overrides = {}) | |
{ | |
"codedir" => @root_dir + '/etc/code', | |
"confdir" => @root_dir + '/etc/puppet', | |
"vardir" => @root_dir + '/opt/puppet/cache', | |
"rundir" => @root_dir + '/var/run', | |
"logdir" => @root_dir + '/var/log' | |
}.merge(overrides) | |
end | |
def default_server_config(overrides = {}) | |
{ | |
"metric_registry" => @metric_registry, | |
"use_legacy_auth_conf" => false, | |
"environment_registry" => @env_registry, | |
"http_connect_timeout_milliseconds" => 120000, | |
"http_idle_timeout_milliseconds" => 1200000, | |
"profiler" => @profiler, | |
"server_id" => @servername, | |
}.merge(overrides) | |
end | |
def load_puppet_server! | |
puppet_config = default_puppet_config | |
puppet_server_config = default_server_config | |
Puppet::Server::Master.new(puppet_config, puppet_server_config) | |
end | |
def create_facts(values = {}, name = clientname) | |
{ | |
'name' => name, | |
'values' => values, | |
'timestamp' => Time.now.iso8601 | |
} | |
end | |
def create_params(facts = create_facts, env = 'production') | |
{ | |
"fail_on_404" => "true", | |
"code_id" => nil, | |
"facts" => URI.encode(JSON.dump(facts)), | |
"rest" => "localhost", | |
"transaction_uuid" => SecureRandom.uuid, | |
"static_catalog" => "true", | |
"checksum_type" => "md5.sha256", | |
"environment" => env, | |
"facts_format" => "application/json" | |
} | |
end | |
def create_cert(cert_path = root_dir + '/etc/puppet/ssl/certs/' + clientname + '.pem') | |
import com.puppetlabs.ssl_utils.SSLUtils | |
pem = File.read(cert_path) | |
reader = Java::JavaIo::StringReader.new(pem) | |
Java::ComPuppetlabsSsl_utils::SSLUtils.pemToCert(reader) | |
end | |
def basic_catalog_request(params = create_params, | |
cert = create_cert, | |
client = clientname, | |
server = servername) | |
{ | |
"authenticated" => true, | |
"params" => params, | |
"remote-addr" => "0:0:0:0:0:0:0:1", | |
"client-cert-cn" => client, | |
"client-cert" => cert, | |
"body" => URI.encode(JSON.dump(params)), | |
"request-method" => "POST", | |
"uri" => "/puppet/v3/catalog/" + client, | |
"headers" => { | |
"accept" => "application/json, application/x-msgpack, text/pson", | |
"x-puppet-version" => "5.3.3", | |
"user-agent" => "Puppet/5.3.3 Ruby/2.2.7-p470 (x86_64-darwin16)", | |
"host" => server + ":8140", | |
"accept-encoding" => "gzip;q=1.0,deflate; q=0.6,identity;q=0.3", | |
"content-length" => "7278", | |
"content-type" => "application/x-www-form-urlencoded" | |
} | |
} | |
end | |
def response_to_hash(java_res) | |
{ | |
body: java_res.getBody, | |
status: java_res.getStatus, | |
content_type: java_res.getContentType, | |
puppet_version: java_res.getPuppetVersion | |
} | |
end | |
end | |
@helper = PuppetServerHelper.new | |
@server = @helper.load_puppet_server! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
puppetserver justin (master *$%<>) ‖ git diff | |
diff --git a/project.clj b/project.clj | |
index 5b52c1a..84ef415 100644 | |
--- a/project.clj | |
+++ b/project.clj | |
@@ -142,7 +142,8 @@ | |
[com.cemerick/url "0.1.1"]] | |
;; SERVER-332, enable SSLv3 for unit tests that exercise SSLv3 | |
- :jvm-opts ["-Djava.security.properties=./dev-resources/java.security"]} | |
+ :jvm-opts ["-Djava.security.properties=./dev-resources/java.security" | |
+ "-Djruby.debug.fullTrace=true"]} | |
:testutils {:source-paths ["test/unit" "test/integration"]} | |
:test { | |
diff --git a/src/ruby/puppetserver-lib/puppet/server/master.rb b/src/ruby/puppetserver-lib/puppet/server/master.rb | |
index a682467..8b6cb05 100644 | |
--- a/src/ruby/puppetserver-lib/puppet/server/master.rb | |
+++ b/src/ruby/puppetserver-lib/puppet/server/master.rb | |
@@ -10,6 +10,8 @@ require 'puppet/server/config' | |
require 'puppet/server/puppet_config' | |
require 'puppet/server/network/http/handler' | |
require 'puppet/server/compiler' | |
+require 'pry' | |
+require 'pry-nav' | |
require 'java' | |
@@ -42,6 +44,7 @@ class Puppet::Server::Master | |
end | |
def handleRequest(request) | |
+ binding.pry | |
response = {} | |
process(request, response) | |
# 'process' returns only the status - |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Adding this at the bottom of the script shortens the number of steps that must be done each time in the REPL: