git.lirion.de

Of git, get, and gud

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormail_redacted_for_web 2015-11-15 10:44:53 -0800
committermail_redacted_for_web 2015-12-09 09:44:50 -0800
commitb71ab8d42eca09d24c4f0b4955b0779fcbb3a5bc (patch)
treee5e0a84aea08fb98def761912687feb31ffc5912
parent2d7a9a72e10526c07bdc77b2b8eefcc368db8b45 (diff)
downloadcontrol-repo-template-b71ab8d42eca09d24c4f0b4955b0779fcbb3a5bc.tar.bz2
Allow code_manager profile to not error out on first run
Prior to this commit, the code manger profile could not complete on the first run because the file function would error out I implemented a new version of the file function that returns nothing when the file does not exist instead of erroring out which allows me to gate creating the webhook on whether there is content in the file. As a result this means that it takes 2 runs to get everything setup but this is preferable over having to manually intervene in some other way if the token file doesn't exist.
-rw-r--r--site/no_fail_file/lib/puppet/parser/functions/no_fail_file.rb36
-rw-r--r--site/profile/manifests/code_manager.pp11
2 files changed, 43 insertions, 4 deletions
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 `<MODULE NAME>/<FILE>`
+ reference, which will load `<FILE>` from a module's `files`
+ directory. (For example, the reference `mysql/mysqltuner.pl` will load the
+ file `<MODULES DIRECTORY>/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',