diff options
author | mail_redacted_for_web | 2015-11-11 13:41:34 -0800 |
---|---|---|
committer | mail_redacted_for_web | 2015-12-09 09:44:35 -0800 |
commit | 4c2be74083287516b72ab4f3ccaaf317ea7a2eb0 (patch) | |
tree | c7bf02592404dc9c302059b4001ced20df82adf6 /site/profile/manifests/code_manager.pp | |
parent | 8c71bd0b13160f13eeb27613031be167e94f7ade (diff) | |
download | control-repo-template-4c2be74083287516b72ab4f3ccaaf317ea7a2eb0.tar.bz2 |
Add support for code manager which will replace zack r10k
Add pltraing-rbac module
Added a new profile for code_manager that:
- creates a service users for code manager
- creates a token for that service user
- creates a hook on a git server using the token
Turns out that the file function in puppet cannot read files in
/root. The pe-puppet user needs read permissions on the file
and traversal on the directory which giving to /root would
probably be a bad idea. So, I just put the file containing
the token in /etc/puppetlabs/puppetserver since I'm not sure
where would be better.
Diffstat (limited to 'site/profile/manifests/code_manager.pp')
-rw-r--r-- | site/profile/manifests/code_manager.pp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/site/profile/manifests/code_manager.pp b/site/profile/manifests/code_manager.pp new file mode 100644 index 0000000..f244564 --- /dev/null +++ b/site/profile/manifests/code_manager.pp @@ -0,0 +1,66 @@ +class profile::code_manager { + + $code_manager_service_user = 'code_manager_service_user' + $code_manager_service_user_password = fqdn_rand_string(40, '', "${code_manager_service_user}_password") + + #puppet_master_classifier_settings is a custom function + $classifier_settings = puppet_master_classifer_settings() + $classifier_hostname = $classifier_settings['server'] + $classifier_port = $classifier_settings['port'] + + $token_directory = '/etc/puppetlabs/puppetserver/.puppetlabs' + $token_filename = "${token_directory}/${code_manager_service_user}_token" + + $gms_api_token = hiera('gms_api_token', undef) + $git_management_system = hiera('git_management_system', undef) + + rbac_user { $code_manager_service_user : + ensure => 'present', + name => $code_manager_service_user, + email => "${code_manager_service_user}@example.com", + display_name => 'Code Manager Service Account', + password => $code_manager_service_user_password, + roles => [ 'Deploy Environments' ], + } + + file { $token_directory : + ensure => directory, + owner => 'pe-puppet', + group => 'pe-puppet', + } + + exec { "Generate Token for ${code_manager_service_user}" : + command => epp('profile/code_manager/create_rbac_token.epp', + { 'code_manager_service_user' => $code_manager_service_user, + 'code_manager_service_user_password' => $code_manager_service_user_password, + 'classifier_hostname' => $classifier_hostname, + 'classifier_port' => $classifier_port, + 'token_filename' => $token_filename + }), + creates => $token_filename, + require => [ Rbac_user[$code_manager_service_user], File[$token_directory] ], + } + + + if !empty($gms_api_token) { + + #this file cannont be read until the next run after the above exec + #because the file function runs on the master not on the agent + $rbac_token = parsejson(file($token_filename))['token'] + + $code_manager_webhook_type = $git_management_system ? { + 'gitlab' => 'github', + default => $git_management_system, + } + + git_webhook { "code_manager_post_receive_webhook-${::fqdn}" : + ensure => present, + webhook_url => "https://${::fqdn}:8170/code-manager/v1/webhook?type=${code_manager_webhook_type}&token=${rbac_token}", + token => $gms_api_token, + project_name => 'puppet/control-repo', + server_url => hiera('gms_server_url'), + provider => $git_management_system, + disable_ssl_verify => true, + } + } +} |