Skip to content

Instantly share code, notes, and snippets.

@epleterte
Forked from tommybotten/role.rb
Created September 17, 2012 23:07
Show Gist options
  • Save epleterte/3740319 to your computer and use it in GitHub Desktop.
Save epleterte/3740319 to your computer and use it in GitHub Desktop.
Example fact to determine the role of a server
# Fact: role
#
# Purpose:
# Return the installed and running applications on the system.
#
# FIXME: Add amq, varnish,
# FIXME: As of now, interpreting/matching text and not return codes :(
Facter.add(:role) do
setcode do
introle = []
# Check for MySQL
if mysqlstatus = Facter::Util::Resolution.exec('service mysqld status') \
and mysqlstatus =~ /^mysqld \(pid .*\) is running\.\.\.$/
introle << "mydb"
end
# And postgresql...
if pgsqlstatus = Facter::Util::Resolution.exec('service postgresql status') \
and pgsqlstatus =~ /^postmaster \(pid .*\) is running\.\.\.$/
# Perhpas this should be factored out...?
introle << "pgdb"
end
# And then apache ...
if apachestatus = Facter::Util::Resolution.exec('service httpd status') \
and apachestatus =~ /^httpd \(pid .*\) is running\.\.\.$/
# Perhpas this should be factored out...?
introle << "webfront"
end
# And Oracle
# And appserver / tomcat
# How to check this? Init scripts are not suited for this ... pgrep? ...
role = introle.join(", ")
end
end
Facter.add(:mydb) do
setcode do
dbs = Facter::Util::Resolution.exec("mysql -Bse 'show databases' | egrep -v '^information_schema$|^mysql$'")
mydb = []
mydb << dbs.split("\n")
mydb = mydb.join(", ")
mydb
end
end
Facter.add(:pgdb) do
setcode do
dbs = Facter::Util::Resolution.exec("sudo -u postgres psql -l --pset border=off 2>/dev/null | egrep '^[a-zA-Z]' | awk '{ print $1 }'")
pgdb = []
pgdb << dbs.split("\n")
pgdb = pgdb.join(", ")
pgdb
end
end
Facter.add(:modb) do
setcode do
dbs = Facter::Util::Resolution.exec("echo 'show dbs' | mongo --quiet 2>/dev/null | awk '{ print $1 }'")
modb = []
modb << dbs.split("\n")
modb = modb.join(", ")
modb
end
end
# Note that this only works with named virtual hosts and not aliases.
Facter.add(:webfront_vhosts) do
setcode do
# testing purposes
vhosts = Facter::Util::Resolution.exec("apachectl -S 2> /dev/null | awk '/namevhost/ { print $4 }' | sort -u")
webfront_vhosts = []
webfront_vhosts << vhosts.split("\n")
webfront_vhosts = webfront_vhosts.join(", ")
webfront_vhosts
end
end
# Maybe this should check (using init scripts) wether the application actually runs?
# Check for /etc/init.d/tomcatsuperscript's symlinks. Iterate and check status for each.
# Check if the application is actually started and if supposed to start. Return some kind of list with this.
Facter.add(:tomcat_apps) do
setcode do
apps = Facter::Util::Resolution.exec("ls -1 /apps/tomcat/")
tomcat_apps = []
tomcat_apps << apps.split("\n")
tomcat_apps = tomcat_apps.join(", ")
tomcat_apps
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment