lib/knife-spork/plugins/irccat.rb in knife-spork-1.2.2 vs lib/knife-spork/plugins/irccat.rb in knife-spork-1.3.0
- old
+ new
@@ -5,11 +5,27 @@
class Irccat < Plugin
name :irccat
TEMPLATES = {
:upload => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} uploaded #TEAL%{cookbooks}#NORMAL',
- :promote => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} promoted #TEAL%{cookbooks}#NORMAL to %{environment} %{gist}'
+ :promote => '#BOLD#PURPLECHEF:#NORMAL %{organization}%{current_user} promoted #TEAL%{cookbooks}#NORMAL to %{environment} %{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
@@ -21,21 +37,187 @@
end
def after_promote_remote
environments.each do |environment|
diff = environment_diffs[environment.name]
- env_gist = gist(environment, diff) if config.gist
+ env_gist = env_gist(environment, diff) if config.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_rolefromfile
+ role_gist = object_gist("role", object_name, object_difference) if config.gist and !object_difference.empty?
+ 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?
+ 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?
+ 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?
+ 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?
+ 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?
+ 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?
+ 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?
+ 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?
+ 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?
+ 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?
+ 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?
+ 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?
+ 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?
+ 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?
+ 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?
+ 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
@@ -48,11 +230,16 @@
socket.close unless socket.nil?
end
end
end
- def gist(environment, diff)
+ 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 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