Alexandros Kosiaris has uploaded a new change for review. https://gerrit.wikimedia.org/r/311738
Change subject: WIP puppetmaster: servermon report handler ...................................................................... WIP puppetmaster: servermon report handler Use and abuse puppet report handlers to get servermon database updated Reuse the settings from puppet to get the database Change-Id: Id18971df1586883abeae8915b39a61cd43dfd2b4 --- A modules/puppetmaster/lib/puppet/reports/servermon.rb 1 file changed, 69 insertions(+), 0 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/operations/puppet refs/changes/38/311738/1 diff --git a/modules/puppetmaster/lib/puppet/reports/servermon.rb b/modules/puppetmaster/lib/puppet/reports/servermon.rb new file mode 100644 index 0000000..587814b --- /dev/null +++ b/modules/puppetmaster/lib/puppet/reports/servermon.rb @@ -0,0 +1,69 @@ +# Puppet reporter to update servermon database +# +# Based on https://serverfault.com/questions/515455/how-do-i-make-puppet-post-facts-after-run +# +# Copyright © 2016 Alexandros Kosiaris and Wikimedia Foundation. +# License http://www.apache.org/licenses/LICENSE-2.0 + +require 'puppet' +require 'pp' +require 'mysql' + +Puppet::Reports.register_report(:servermon) do + desc 'Update facts of a servermon database' + + + def process + # Get our users from the configuration + dbserver = Puppet[:dbserver] + dbuser = Puppet[:dbuser] + dbpassword = Puppet[:dbpassword] + begin + con = Mysql.new dbserver, dbuser, dbpassword, 'puppet' + # First we update the host + query = "UPDATE hosts SET \ + environment = '#{self.environment}', \ + updated_at = '#{self.time}', \ + last_compile = '#{self.time}' \ + WHERE name='#{self.host}'" + rs = con.query(query) + query = "SELECT id from hosts \ + WHERE name='#{self.host}'" + rs = con.query(query) + host_id = rs.fetch_row[0] + puts "Got host: #{self.host} with id: #{host_id}" + + # if facts file found, read it and update facts for host: + if File.exists?("#{Puppet[:vardir]}/yaml/facts/#{self.host}.yaml") + node_facts = YAML.load_file("#{Puppet[:vardir]}/yaml/facts/#{self.host}.yaml") + # We got a Ruby object, get the values attributes and walk it + node_facts.values.each do |key, value| + # First update the fact_names table + update_fact_name = "UPDATE fact_names SET \ + updated_at = '#{self.time}' \ + WHERE name='#{key}'" + puts(update_fact_name) + rs = con.query(update_fact_name) + query = "SELECT id from fact_names \ + WHERE name='#{key}'" + rs = con.query(query) + pp(rs) + fact_id = rs.fetch_row[0] + puts "Got fact: #{key} with id: #{fact_id}" + update_fact_value = "UPDATE fact_values SET \ + updated_at = '#{self.time}', \ + value = '#{value}' \ + WHERE fact_name_id=#{fact_id} AND host_id=#{host_id}" + puts(update_fact_value) + rs = con.query(update_fact_value) + pp(rs) + end + end + rescue Mysql::Error => e + puts e.errno + puts e.error + ensure + con.close if con + end + end +end -- To view, visit https://gerrit.wikimedia.org/r/311738 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id18971df1586883abeae8915b39a61cd43dfd2b4 Gerrit-PatchSet: 1 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Alexandros Kosiaris <akosia...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits