Skip to content

Instantly share code, notes, and snippets.

@r7vme
Last active April 10, 2017 09:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save r7vme/d701cbdde81d64cf9b67107218f326f5 to your computer and use it in GitHub Desktop.
Save r7vme/d701cbdde81d64cf9b67107218f326f5 to your computer and use it in GitHub Desktop.
#!/bin/bash
NODE_NAME=$(hostname -f)
FORMULA_PATH=/usr/share/salt-formulas
FORMULA_BRANCH=master
# Sanity checks
test -d /srv/salt/reclass || (echo "Please put relass model in /srv/salt/reclass"; exit 1)
# Redirect all outputs
exec > >(tee -i /tmp/mk-bootstrap.log) 2>&1
set -x
echo "Preparing base OS ..."
which wget >/dev/null || (apt-get update; apt-get install -y wget)
echo "deb [arch=amd64] http://apt.tcpcloud.eu/nightly/ xenial main security extra tcp" > /etc/apt/sources.list
wget -O - http://apt.tcpcloud.eu/public.gpg | apt-key add -
echo "deb http://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3 xenial main" > /etc/apt/sources.list.d/saltstack.list
wget -O - https://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3/SALTSTACK-GPG-KEY.pub | apt-key add -
apt-get clean
apt-get update
echo "Installing salt master ..."
apt-get install -y reclass git
apt-get install -y salt-master
cat << 'EOF' > /etc/salt/master.d/master.conf
file_roots:
base:
- /usr/share/salt-formulas/env
pillar_opts: False
open_mode: True
reclass: &reclass
storage_type: yaml_fs
inventory_base_uri: /srv/salt/reclass
ext_pillar:
- reclass: *reclass
master_tops:
reclass: *reclass
EOF
echo "Configuring reclass ..."
mkdir -p /srv/salt/reclass/classes/service
echo "Configuring salt master formulas ..."
[ ! -d /srv/salt/reclass/classes/service ] && mkdir -p /srv/salt/reclass/classes/service
declare -a formula_services=("linux" "reclass" "salt" "openssh" "ntp" "git" "nginx" "collectd" "sensu" "heka" "sphinx" "keystone" "mysql" "grafana" "haproxy" "rsyslog" "horizon")
for formula_service in "${formula_services[@]}"; do
echo -e "\nConfiguring salt formula ${formula_service} ...\n"
if [[ ! -d "${FORMULA_PATH}/env/_formulas/${formula_service}" ]]; then
_URL=https://github.com/salt-formulas/salt-formula-${formula_service}.git
_BRANCH=$FORMULA_BRANCH
if ! git ls-remote --exit-code --heads $_URL $_BRANCH; then
# Fallback to the master branch if the branch doesn't exist for this repository
_BRANCH=master
fi
git clone $_URL ${FORMULA_PATH}/env/_formulas/${formula_service} -b $_BRANCH
fi
[ ! -L "/usr/share/salt-formulas/env/${formula_service}" ] && \
ln -s ${FORMULA_PATH}/env/_formulas/${formula_service}/${formula_service} /usr/share/salt-formulas/env/${formula_service}
[ ! -L "/srv/salt/reclass/classes/service/${formula_service}" ] && \
ln -s ${FORMULA_PATH}/env/_formulas/${formula_service}/metadata/service /srv/salt/reclass/classes/service/${formula_service}
done
[ ! -d /srv/salt/env ] && mkdir -p /srv/salt/env
[ ! -L /srv/salt/env/dev ] && ln -s /usr/share/salt-formulas/env /srv/salt/env/dev
[ ! -d /etc/reclass ] && mkdir /etc/reclass
cat << 'EOF' > /etc/reclass/reclass-config.yml
storage_type: yaml_fs
pretty_print: True
output: yaml
inventory_base_uri: /srv/salt/reclass
EOF
echo "Configuring salt minion ..."
[ ! -d /etc/salt/minion.d ] && mkdir -p /etc/salt/minion.d
cat << "EOF" > /etc/salt/minion.d/minion.conf
id: $NODE_NAME
master: 127.0.0.1
EOF
apt-get install -y salt-minion
echo "Restarting services ..."
systemctl restart salt-master
systemctl restart salt-minion
echo "Showing system info and metadata ..."
salt-call --no-color grains.items
salt-call --no-color pillar.data
#echo "Running complete state ..."
#salt-call --no-color state.sls linux,openssh -l info
#salt-call --no-color state.sls reclass -l info
#salt-call --no-color state.sls salt.master.service -l info
#salt-call --no-color state.sls salt.master,salt.api,salt.minion.ca -l info
#
#reclass-salt --top
#salt-call --no-color state.sls salt.minion.cert -l info
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment