diff --git a/site/no_fail_file/lib/puppet/parser/functions/no_fail_file.rb b/site/no_fail_file/lib/puppet/parser/functions/no_fail_file.rb new file mode 100644 index 0000000..3819ebf --- /dev/null +++ b/site/no_fail_file/lib/puppet/parser/functions/no_fail_file.rb @@ -0,0 +1,36 @@ +require 'puppet/file_system' + +Puppet::Parser::Functions::newfunction( + :no_fail_file, :arity => -2, :type => :rvalue, + :doc => "Loads a file from a module and returns its contents as a string. + + This is a replacement to the file function that returns nothing + if the file specified cannot be found instead of erroring out. + + The argument to this function should be a `/` + reference, which will load `` from a module's `files` + directory. (For example, the reference `mysql/mysqltuner.pl` will load the + file `/mysql/files/mysqltuner.pl`.) + + This function can also accept: + + * An absolute path, which can load a file from anywhere on disk. + * Multiple arguments, which will return the contents of the **first** file + found, skipping any files that don't exist. + " +) do |vals| + path = nil + vals.each do |file| + found = Puppet::Parser::Files.find_file(file, compiler.environment) + if found && Puppet::FileSystem.exist?(found) + path = found + break + end + end + + if path + Puppet::FileSystem.read_preserve_line_endings(path) + else + nil + end +end diff --git a/site/profile/manifests/code_manager.pp b/site/profile/manifests/code_manager.pp index f244564..6416054 100644 --- a/site/profile/manifests/code_manager.pp +++ b/site/profile/manifests/code_manager.pp @@ -42,11 +42,14 @@ class profile::code_manager { } - 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 + #so the file doesn't exist at the time the function is run + $rbac_token_file_contents = no_fail_file($token_filename) - #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'] + if !empty($gms_api_token) and !empty($rbac_token_file_contents) { + + $rbac_token = parsejson($rbac_token_file_contents)['token'] $code_manager_webhook_type = $git_management_system ? { 'gitlab' => 'github',