Created
June 14, 2020 19:08
-
-
Save JCotton1123/4c324f4a3c4acc96b143495e4171fb76 to your computer and use it in GitHub Desktop.
Puppet Enterprise Node Group (Classification) data export
This file contains hidden or 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
#!/usr/bin/env ruby | |
# Export node group data from Puppet Enterprise | |
# Setup: | |
# export PATH=$PATH:/opt/puppetlabs/puppet/bin | |
# gem install --user-install puppetclassify | |
# puppet-access login --lifetime 8h | |
require 'csv' | |
require 'json' | |
require 'puppetclassify' | |
HOSTNAME = `hostname -f`.strip() | |
TOKEN_PATH = "#{ENV['HOME']}/.puppetlabs/token" | |
auth_info = { | |
"ca_certificate_path" => "/etc/puppetlabs/puppet/ssl/certs/ca.pem", | |
"certificate_path" => "/etc/puppetlabs/puppet/ssl/certs/#{HOSTNAME}.pem", | |
"token_path" => TOKEN_PATH | |
} | |
classifier_url = "https://#{HOSTNAME}:4433/classifier-api" | |
puppetclassify = PuppetClassify.new(classifier_url, auth_info) | |
groups = puppetclassify.groups.get_groups | |
groups.sort_by! { |g| g['name'] } | |
# Export raw data | |
File.open('groups.json', 'w') do |f| | |
f.write(JSON.pretty_generate(groups)) | |
end | |
# Export CSVs | |
csv_default_options = { | |
write_headers: true, | |
force_quotes: true | |
} | |
groups_csv = CSV.open( | |
'groups.csv', | |
'wb', | |
headers: [ | |
'name', | |
'environment', | |
'classes', | |
'variables', | |
], | |
**csv_default_options | |
) | |
groups_rules_csv = CSV.open( | |
'groups_rules.csv', | |
'wb', | |
headers: [ | |
'name', | |
'environment', | |
'rules' | |
], | |
**csv_default_options | |
) | |
groups.each do |grp| | |
groups_csv << [ | |
grp['name'], | |
grp['environment'], | |
grp['classes'].keys.join(','), | |
grp['variables'].collect { |k,v| "#{k}=#{v}" }.join(',') | |
] | |
groups_rules_csv << [ | |
grp['name'], | |
grp['environment'], | |
grp['rule'].to_json | |
] | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment