lib/knife-spork/plugins/irccat.rb in knife-spork-1.7.2 vs lib/knife-spork/plugins/irccat.rb in knife-spork-1.7.3
- old
+ new
@@ -1,332 +1,332 @@
-require 'knife-spork/plugins/plugin'
-
-module KnifeSpork
- module Plugins
- class Irccat < Plugin
- name :irccat
-
- TEMPLATES = {
- :upload => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} uploaded #TEAL%{cookbooks}#NORMAL',
- :delete => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} deleted the following cookbooks: #TEAL%{misc_output}#NORMAL',
- :promote => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} promoted #TEAL%{cookbooks}#NORMAL to %{environment} %{gist}',
- :environmentfromfile => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} uploaded environment #TEAL%{object_name}#NORMAL %{gist}',
- :environmentedit => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} edited environment #TEAL%{object_name}#NORMAL %{gist}',
- :environmentcreate => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} created environment #TEAL%{object_name}#NORMAL %{gist}',
- :environmentdelete => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} deleted environment #TEAL%{object_name}#NORMAL %{gist}',
- :rolefromfile => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} uploaded role #TEAL%{object_name}#NORMAL %{gist}',
- :roleedit => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} edited role #TEAL%{object_name}#NORMAL %{gist}',
- :rolecreate => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} created role #TEAL%{object_name}#NORMAL %{gist}',
- :roledelete => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} deleted role #TEAL%{object_name}#NORMAL %{gist}',
- :databagedit => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} edited data bag item #TEAL%{object_name}:%{object_secondary_name}#NORMAL %{gist}',
- :databagdelete => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} deleted data bag #TEAL%{object_name}#NORMAL %{gist}',
- :databagitemdelete => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} deleted data bag item #TEAL%{object_name}:%{object_secondary_name}#NORMAL %{gist}',
- :databagcreate => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} created data bag #TEAL%{object_name}#NORMAL %{gist}',
- :databagfromfile => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} uploaded data bag item #TEAL%{object_name}:%{object_secondary_name}#NORMAL %{gist}',
- :nodeedit => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} edited node #TEAL%{object_name}#NORMAL %{gist}',
- :nodedelete => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} deleted node #TEAL%{object_name}#NORMAL %{gist}',
- :nodecreate => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} created node #TEAL%{object_name}#NORMAL %{gist}',
- :nodefromfile => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} uploaded node #TEAL%{object_name}#NORMAL %{gist}',
- :noderunlistadd => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} added run_list items to #TEAL%{object_name}: %{object_secondary_name}#NORMAL %{gist}',
- :noderunlistremove => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} removed run_list items from #TEAL%{object_name}: %{object_secondary_name}#NORMAL %{gist}',
- :noderunlistset => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} set the run_list for #TEAL%{object_name} to %{object_secondary_name}#NORMAL %{gist}'
- }
-
- def perform; end
-
- def after_upload
- irccat(template(:upload) % {
- :organization => organization,
- :current_user => current_user,
- :cookbooks => cookbooks.collect { |c| "#{c.name}@#{c.version}" }.join(", ")
- })
- end
-
- def after_delete
- irccat(template(:delete) % {
- :organization => organization,
- :current_user => current_user,
- :misc_output => misc_output
- })
- end
-
- def after_promote_remote
- environments.each do |environment|
- diff = environment_diffs[environment.name]
- env_gist = env_gist(environment, diff) if config.gist
- display_gist(env_gist) if env_gist
- irccat(template(:promote) % {
- :organization => organization,
- :current_user => current_user,
- :cookbooks => cookbooks.collect{ |c| "#{c.name}@#{c.version}" }.join(", "),
- :environment => environment.name,
- :gist => env_gist
- })
- end
- end
-
- def after_environmentfromfile
- environment_gist = object_gist("environment", object_name, object_difference) if config.gist and !object_difference.empty?
- display_gist(environment_gist) if environment_gist
- irccat(template(:environmentfromfile) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => environment_gist
- })
- end
-
- def after_environmentedit
- environment_gist = object_gist("environment", object_name, object_difference) if config.gist and !object_difference.empty?
- display_gist(environment_gist) if environment_gist
- irccat(template(:environmentedit) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => environment_gist
- })
- end
-
- def after_environmentcreate
- environment_gist = object_gist("environment", object_name, object_difference) if config.gist and !object_difference.empty?
- display_gist(environment_gist) if environment_gist
- irccat(template(:environmentcreate) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => environment_gist
- })
- end
-
- def after_environmentdelete
- environment_gist = object_gist("environment", object_name, object_difference) if config.gist and !object_difference.empty?
- display_gist(environment_gist) if environment_gist
- irccat(template(:environmentdelete) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => environment_gist
- })
- end
-
- def after_rolefromfile
- role_gist = object_gist("role", object_name, object_difference) if config.gist and !object_difference.empty?
- display_gist(role_gist) if role_gist
- irccat(template(:rolefromfile) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => role_gist
- })
- end
-
- def after_roleedit
- role_gist = object_gist("role", object_name, object_difference) if config.gist and !object_difference.empty?
- display_gist(role_gist) if role_gist
- irccat(template(:roleedit) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => role_gist
- })
- end
-
- def after_rolecreate
- role_gist = object_gist("role", object_name, object_difference) if config.gist and !object_difference.empty?
- display_gist(role_gist) if role_gist
- irccat(template(:rolecreate) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => role_gist
- })
- end
-
- def after_roledelete
- role_gist = object_gist("role", object_name, object_difference) if config.gist and !object_difference.empty?
- display_gist(role_gist) if role_gist
- irccat(template(:roledelete) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => role_gist
- })
- end
-
- def after_databagedit
- databag_gist = object_gist("databag item", "#{object_name}:#{object_secondary_name}", object_difference) if config.gist and !object_difference.empty?
- display_gist(databag_gist) if databag_gist
- irccat(template(:databagedit) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :object_secondary_name => object_secondary_name,
- :gist => databag_gist
- })
- end
-
- def after_databagdelete
- databag_gist = object_gist("databag item", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
- display_gist(databag_gist) if databag_gist
- irccat(template(:databagdelete) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => databag_gist
- })
- end
-
- def after_databagitemdelete
- databag_gist = object_gist("databag item", "#{object_name}:#{object_secondary_name}", object_difference) if config.gist and !object_difference.empty?
- display_gist(databag_gist) if databag_gist
- irccat(template(:databagitemdelete) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :object_secondary_name => object_secondary_name,
- :gist => databag_gist
- })
- end
-
- def after_databagcreate
- databag_gist = object_gist("databag", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
- display_gist(databag_gist) if databag_gist
- irccat(template(:databagcreate) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => databag_gist
- })
- end
-
- def after_databagfromfile
- databag_gist = object_gist("databag", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
- display_gist(databag_gist) if databag_gist
- irccat(template(:databagfromfile) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :object_secondary_name => object_secondary_name,
- :gist => databag_gist
- })
- end
-
- def after_nodeedit
- node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
- display_gist(node_gist) if node_gist
- irccat(template(:nodeedit) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => node_gist
- })
- end
-
- def after_nodedelete
- node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
- display_gist(node_gist) if node_gist
- irccat(template(:nodedelete) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => node_gist
- })
- end
-
- def after_nodecreate
- node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
- display_gist(node_gist) if node_gist
- irccat(template(:nodecreate) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => node_gist
- })
- end
-
- def after_nodefromfile
- node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
- display_gist(node_gist) if node_gist
- irccat(template(:nodefromfile) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :gist => node_gist
- })
- end
-
- def after_noderunlistadd
- node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
- display_gist(node_gist) if node_gist
- irccat(template(:noderunlistadd) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :object_secondary_name => object_secondary_name,
- :gist => node_gist
- })
- end
-
- def after_noderunlistremove
- node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
- display_gist(node_gist) if node_gist
- irccat(template(:noderunlistremove) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :object_secondary_name => object_secondary_name,
- :gist => node_gist
- })
- end
-
- def after_noderunlistset
- node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
- display_gist(node_gist) if node_gist
- irccat(template(:noderunlistset) % {
- :organization => organization,
- :current_user => current_user,
- :object_name => object_name,
- :object_secondary_name => object_secondary_name,
- :gist => node_gist
- })
- end
-
- private
- def irccat(message)
- channels.each do |channel|
- begin
- # Write the message using a TCP Socket
- socket = TCPSocket.open(config.server, config.port)
- socket.write("#{channel} #{message}")
- rescue Exception => e
- ui.error 'Failed to post message with irccat.'
- ui.error e.to_s
- ensure
- socket.close unless socket.nil?
- end
- end
- end
-
- def env_gist(environment, diff)
- msg = "Environment #{environment} uploaded at #{Time.now.getutc} by #{current_user}\n\nConstraints updated on server in this version:\n\n#{diff.collect { |k, v| "#{k}: #{v}\n" }.join}"
- %x[ echo "#{msg}" | #{config.gist}]
- end
-
- def display_gist(gist)
- ui.info "Gist generated at #{gist}"
- end
-
- def object_gist(object_type, object_name, object_diff)
- msg = "#{object_type.capitalize} #{object_name} changed at #{Time.now.getutc} by #{current_user}\n\nDiff is as follows:\n\n#{object_diff}"
- %x[ echo "#{msg}" | #{config.gist}]
- end
-
- def channels
- [ config.channel || config.channels ].flatten
- end
-
- def template(name)
- (config.template && config.template[name]) || TEMPLATES[name]
- end
- end
- end
-end
+require 'knife-spork/plugins/plugin'
+
+module KnifeSpork
+ module Plugins
+ class Irccat < Plugin
+ name :irccat
+
+ TEMPLATES = {
+ :upload => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} uploaded #TEAL%{cookbooks}#NORMAL',
+ :delete => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} deleted the following cookbooks: #TEAL%{misc_output}#NORMAL',
+ :promote => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} promoted #TEAL%{cookbooks}#NORMAL to %{environment} %{gist}',
+ :environmentfromfile => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} uploaded environment #TEAL%{object_name}#NORMAL %{gist}',
+ :environmentedit => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} edited environment #TEAL%{object_name}#NORMAL %{gist}',
+ :environmentcreate => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} created environment #TEAL%{object_name}#NORMAL %{gist}',
+ :environmentdelete => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} deleted environment #TEAL%{object_name}#NORMAL %{gist}',
+ :rolefromfile => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} uploaded role #TEAL%{object_name}#NORMAL %{gist}',
+ :roleedit => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} edited role #TEAL%{object_name}#NORMAL %{gist}',
+ :rolecreate => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} created role #TEAL%{object_name}#NORMAL %{gist}',
+ :roledelete => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} deleted role #TEAL%{object_name}#NORMAL %{gist}',
+ :databagedit => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} edited data bag item #TEAL%{object_name}:%{object_secondary_name}#NORMAL %{gist}',
+ :databagdelete => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} deleted data bag #TEAL%{object_name}#NORMAL %{gist}',
+ :databagitemdelete => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} deleted data bag item #TEAL%{object_name}:%{object_secondary_name}#NORMAL %{gist}',
+ :databagcreate => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} created data bag #TEAL%{object_name}#NORMAL %{gist}',
+ :databagfromfile => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} uploaded data bag item #TEAL%{object_name}:%{object_secondary_name}#NORMAL %{gist}',
+ :nodeedit => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} edited node #TEAL%{object_name}#NORMAL %{gist}',
+ :nodedelete => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} deleted node #TEAL%{object_name}#NORMAL %{gist}',
+ :nodecreate => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} created node #TEAL%{object_name}#NORMAL %{gist}',
+ :nodefromfile => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} uploaded node #TEAL%{object_name}#NORMAL %{gist}',
+ :noderunlistadd => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} added run_list items to #TEAL%{object_name}: %{object_secondary_name}#NORMAL %{gist}',
+ :noderunlistremove => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} removed run_list items from #TEAL%{object_name}: %{object_secondary_name}#NORMAL %{gist}',
+ :noderunlistset => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} set the run_list for #TEAL%{object_name} to %{object_secondary_name}#NORMAL %{gist}'
+ }
+
+ def perform; end
+
+ def after_upload
+ irccat(template(:upload) % {
+ :organization => organization,
+ :current_user => current_user,
+ :cookbooks => cookbooks.collect { |c| "#{c.name}@#{c.version}" }.join(", ")
+ })
+ end
+
+ def after_delete
+ irccat(template(:delete) % {
+ :organization => organization,
+ :current_user => current_user,
+ :misc_output => misc_output
+ })
+ end
+
+ def after_promote_remote
+ environments.each do |environment|
+ diff = environment_diffs[environment.name]
+ env_gist = env_gist(environment, diff) if config.gist
+ display_gist(env_gist) if env_gist
+ irccat(template(:promote) % {
+ :organization => organization,
+ :current_user => current_user,
+ :cookbooks => cookbooks.collect{ |c| "#{c.name}@#{c.version}" }.join(", "),
+ :environment => environment.name,
+ :gist => env_gist
+ })
+ end
+ end
+
+ def after_environmentfromfile
+ environment_gist = object_gist("environment", object_name, object_difference) if config.gist and !object_difference.empty?
+ display_gist(environment_gist) if environment_gist
+ irccat(template(:environmentfromfile) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => environment_gist
+ })
+ end
+
+ def after_environmentedit
+ environment_gist = object_gist("environment", object_name, object_difference) if config.gist and !object_difference.empty?
+ display_gist(environment_gist) if environment_gist
+ irccat(template(:environmentedit) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => environment_gist
+ })
+ end
+
+ def after_environmentcreate
+ environment_gist = object_gist("environment", object_name, object_difference) if config.gist and !object_difference.empty?
+ display_gist(environment_gist) if environment_gist
+ irccat(template(:environmentcreate) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => environment_gist
+ })
+ end
+
+ def after_environmentdelete
+ environment_gist = object_gist("environment", object_name, object_difference) if config.gist and !object_difference.empty?
+ display_gist(environment_gist) if environment_gist
+ irccat(template(:environmentdelete) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => environment_gist
+ })
+ end
+
+ def after_rolefromfile
+ role_gist = object_gist("role", object_name, object_difference) if config.gist and !object_difference.empty?
+ display_gist(role_gist) if role_gist
+ irccat(template(:rolefromfile) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => role_gist
+ })
+ end
+
+ def after_roleedit
+ role_gist = object_gist("role", object_name, object_difference) if config.gist and !object_difference.empty?
+ display_gist(role_gist) if role_gist
+ irccat(template(:roleedit) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => role_gist
+ })
+ end
+
+ def after_rolecreate
+ role_gist = object_gist("role", object_name, object_difference) if config.gist and !object_difference.empty?
+ display_gist(role_gist) if role_gist
+ irccat(template(:rolecreate) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => role_gist
+ })
+ end
+
+ def after_roledelete
+ role_gist = object_gist("role", object_name, object_difference) if config.gist and !object_difference.empty?
+ display_gist(role_gist) if role_gist
+ irccat(template(:roledelete) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => role_gist
+ })
+ end
+
+ def after_databagedit
+ databag_gist = object_gist("databag item", "#{object_name}:#{object_secondary_name}", object_difference) if config.gist and !object_difference.empty?
+ display_gist(databag_gist) if databag_gist
+ irccat(template(:databagedit) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :object_secondary_name => object_secondary_name,
+ :gist => databag_gist
+ })
+ end
+
+ def after_databagdelete
+ databag_gist = object_gist("databag item", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
+ display_gist(databag_gist) if databag_gist
+ irccat(template(:databagdelete) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => databag_gist
+ })
+ end
+
+ def after_databagitemdelete
+ databag_gist = object_gist("databag item", "#{object_name}:#{object_secondary_name}", object_difference) if config.gist and !object_difference.empty?
+ display_gist(databag_gist) if databag_gist
+ irccat(template(:databagitemdelete) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :object_secondary_name => object_secondary_name,
+ :gist => databag_gist
+ })
+ end
+
+ def after_databagcreate
+ databag_gist = object_gist("databag", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
+ display_gist(databag_gist) if databag_gist
+ irccat(template(:databagcreate) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => databag_gist
+ })
+ end
+
+ def after_databagfromfile
+ databag_gist = object_gist("databag", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
+ display_gist(databag_gist) if databag_gist
+ irccat(template(:databagfromfile) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :object_secondary_name => object_secondary_name,
+ :gist => databag_gist
+ })
+ end
+
+ def after_nodeedit
+ node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
+ display_gist(node_gist) if node_gist
+ irccat(template(:nodeedit) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => node_gist
+ })
+ end
+
+ def after_nodedelete
+ node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
+ display_gist(node_gist) if node_gist
+ irccat(template(:nodedelete) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => node_gist
+ })
+ end
+
+ def after_nodecreate
+ node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
+ display_gist(node_gist) if node_gist
+ irccat(template(:nodecreate) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => node_gist
+ })
+ end
+
+ def after_nodefromfile
+ node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
+ display_gist(node_gist) if node_gist
+ irccat(template(:nodefromfile) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :gist => node_gist
+ })
+ end
+
+ def after_noderunlistadd
+ node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
+ display_gist(node_gist) if node_gist
+ irccat(template(:noderunlistadd) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :object_secondary_name => object_secondary_name,
+ :gist => node_gist
+ })
+ end
+
+ def after_noderunlistremove
+ node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
+ display_gist(node_gist) if node_gist
+ irccat(template(:noderunlistremove) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :object_secondary_name => object_secondary_name,
+ :gist => node_gist
+ })
+ end
+
+ def after_noderunlistset
+ node_gist = object_gist("node", "#{object_name}", object_difference) if config.gist and !object_difference.empty?
+ display_gist(node_gist) if node_gist
+ irccat(template(:noderunlistset) % {
+ :organization => organization,
+ :current_user => current_user,
+ :object_name => object_name,
+ :object_secondary_name => object_secondary_name,
+ :gist => node_gist
+ })
+ end
+
+ private
+ def irccat(message)
+ channels.each do |channel|
+ begin
+ # Write the message using a TCP Socket
+ socket = TCPSocket.open(config.server, config.port)
+ socket.write("#{channel} #{message}")
+ rescue Exception => e
+ ui.error 'Failed to post message with irccat.'
+ ui.error e.to_s
+ ensure
+ socket.close unless socket.nil?
+ end
+ end
+ end
+
+ def env_gist(environment, diff)
+ msg = "Environment #{environment} uploaded at #{Time.now.getutc} by #{current_user}\n\nConstraints updated on server in this version:\n\n#{diff.collect { |k, v| "#{k}: #{v}\n" }.join}"
+ %x[ echo "#{msg}" | #{config.gist}]
+ end
+
+ def display_gist(gist)
+ ui.info "Gist generated at #{gist}"
+ end
+
+ def object_gist(object_type, object_name, object_diff)
+ msg = "#{object_type.capitalize} #{object_name} changed at #{Time.now.getutc} by #{current_user}\n\nDiff is as follows:\n\n#{object_diff}"
+ %x[ echo "#{msg}" | #{config.gist}]
+ end
+
+ def channels
+ [ config.channel || config.channels ].flatten
+ end
+
+ def template(name)
+ (config.template && config.template[name]) || TEMPLATES[name]
+ end
+ end
+ end
+end