Skip to content

Instantly share code, notes, and snippets.

@mjhennig
Last active June 14, 2017 10:52
Show Gist options
  • Select an option

  • Save mjhennig/093bb281a0bb159ba0855ae773621410 to your computer and use it in GitHub Desktop.

Select an option

Save mjhennig/093bb281a0bb159ba0855ae773621410 to your computer and use it in GitHub Desktop.
Configure Puppet with Puppet
#!/bin/sh
# vi: set fenc=utf-8 ft=sh ts=8 sw=2 sts=2 et:
# coding: utf-8
# http://www.in-ulm.de/~mascheck/various/set-e/
set -e
# https://docs.puppet.com/puppet/latest/install_linux.html
if ! which puppet >/dev/null; then
apt-get -y update
apt-get -y install puppet
fi
# https://docs.puppet.com/puppet/latest/man/agent.html
puppet agent --enable
# Usage: ensure_file $path $statusa $target=undef
ensure_file() {
echo "file {'$1':"
echo " ensure => '$2',"
echo " force => true,"
echo " target => '${3:-undef}'",
echo "}"
echo "File['$1'] <- Exec<| |>"
echo "File['$1'] <- Package<| |>"
}
# Usage: ensure_directory $path
ensure_directory() {
echo "exec {'$1':"
echo " command => shellquote(['mkdir', '-p', '$1']),"
echo " creates => '$1',"
echo " path => '/usr/bin:/bin',"
echo "}"
echo "Exec['$1'] <- Package<| |>"
}
# Usage: set_puppet_option $section.$key=$value | puppet apply
set_puppet_option() {
echo "augeas {'puppet.conf#$1':" ; set -- "${1%%.*}" "${1#*.}"
echo " context => '/files/etc/puppet/puppet.conf/$1',"
echo " changes => ['set ${2%%=*} ${2#*=}'],"
echo "}"
}
# Usage: remove_puppet_option $section.$key | puppet apply
remove_puppet_option() {
echo "augeas {'puppet.conf#$1':"
echo " context => '/files/etc/puppet/puppet.conf/${1%%.*}',"
echo " changes => ['remove ${1#*.}'],"
echo "}"
}
# Usage: ensure_host $ip=$fqdn,$alias $status | puppet apply
ensure_host() {
echo "host {'$1':"
echo " ensure => '$2'," ; export IFS=,
echo " ip => '${1%%=*}'," ; set -- ${1#*=}
echo " name => '$1'," ; shift
echo " host_aliases => split('$@', ' '),"
echo "}"
}
# Usage: ensure_package $name $status | puppet apply
ensure_package() {
echo "package {'$1':"
echo " ensure => '$2',"
echo "}"
echo "Package['$1'] -> Augeas<| |>"
}
# Usage: ensure_service $name $status $enable | puppet apply
ensure_service() {
echo "service {'$1':"
echo " enable => '$3',"
echo " ensure => '$2',"
echo "}"
echo "Service['$1'] <~ Augeas<| |>"
echo "Service['$1'] <~ Exec<| |>"
echo "Service['$1'] <~ File<| |>"
echo "Service['$1'] <~ Host<| |>"
}
while getopts D:d:H:h:L:l:O:o:P:p:S:s: option; do
case "$option" in
'D') ensure_file "$OPTARG" absent;;
'd') ensure_directory "$OPTARG";;
'H') ensure_host "$OPTARG" absent;;
'h') ensure_host "$OPTARG" present;;
'L') ensure_file "$OPTARG" absent;;
'l') ensure_file "${OPTARG%%=*}" link "${OPTARG#*=}";;
'O') remove_puppet_option "$OPTARG";;
'o') set_puppet_option "$OPTARG";;
'P') ensure_package "$OPTARG" absent;;
'p') ensure_package "$OPTARG" present;;
'S') ensure_service "$OPTARG" stopped false;;
's') ensure_service "$OPTARG" running true;;
'?') exit 2;;
esac
done | puppet apply
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment