Initial commit
This commit is contained in:
commit
3676273bc4
10 changed files with 381 additions and 0 deletions
13
LICENSE
Normal file
13
LICENSE
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
Copyright (c) 2013-2015 Salt Stack Formulas
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
20
README
Normal file
20
README
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
======
|
||||||
|
consul
|
||||||
|
======
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
See the full `Salt Formulas installation and usage instructions
|
||||||
|
<http://docs.saltstack.com/en/latest/topics/development/conventions/formulas.html>`_.
|
||||||
|
|
||||||
|
Available states
|
||||||
|
================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
:local:
|
||||||
|
|
||||||
|
``consul``
|
||||||
|
------------
|
||||||
|
|
||||||
|
Installs and configures the Consul service.
|
||||||
|
|
7
consul/defaults.yaml
Normal file
7
consul/defaults.yaml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
consul:
|
||||||
|
server: false
|
||||||
|
client: false
|
||||||
|
service: false
|
||||||
|
token: ""
|
||||||
|
bootstrap: 1
|
||||||
|
datacenter: "main"
|
7
consul/files/common.json
Normal file
7
consul/files/common.json
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"data_dir": "/var/consul",
|
||||||
|
"ui_dir": "/opt/consul/dist",
|
||||||
|
"enable_debug": true,
|
||||||
|
"log_level": "info",
|
||||||
|
"encrypt": "{{ salt['pillar.get']('consul:token') }}"
|
||||||
|
}
|
194
consul/files/consul.sysvinit
Normal file
194
consul/files/consul.sysvinit
Normal file
|
@ -0,0 +1,194 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# consul Manage the consul agent
|
||||||
|
#
|
||||||
|
# chkconfig: 2345 95 95
|
||||||
|
# description: Consul is a tool for service discovery and configuration
|
||||||
|
# processname: consul
|
||||||
|
# config: /etc/consul.conf
|
||||||
|
# pidfile: /var/run/consul.pid
|
||||||
|
|
||||||
|
### BEGIN INIT INFO
|
||||||
|
# Provides: consul
|
||||||
|
# Required-Start: $local_fs $network
|
||||||
|
# Required-Stop:
|
||||||
|
# Should-Start:
|
||||||
|
# Should-Stop:
|
||||||
|
# Default-Start: 2 3 4 5
|
||||||
|
# Default-Stop: 0 1 6
|
||||||
|
# Short-Description: Manage the consul agent
|
||||||
|
# Description: Consul is a tool for service discovery and configuration
|
||||||
|
### END INIT INFO
|
||||||
|
|
||||||
|
# source function library
|
||||||
|
. /etc/rc.d/init.d/functions
|
||||||
|
|
||||||
|
prog="consul"
|
||||||
|
user="consul"
|
||||||
|
exec="/usr/local/bin/$prog"
|
||||||
|
pidfile="/var/run/$prog.pid"
|
||||||
|
lockfile="/var/lock/subsys/$prog"
|
||||||
|
logfile="/var/log/$prog"
|
||||||
|
confdir="/etc/consul.d"
|
||||||
|
|
||||||
|
# pull in sysconfig settings
|
||||||
|
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
|
||||||
|
|
||||||
|
export GOMAXPROCS=${GOMAXPROCS:-2}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
[ -x $exec ] || exit 5
|
||||||
|
|
||||||
|
[ -d $confdir ] || exit 6
|
||||||
|
|
||||||
|
umask 077
|
||||||
|
|
||||||
|
touch $logfile $pidfile
|
||||||
|
chown $user:$user $logfile $pidfile
|
||||||
|
|
||||||
|
echo -n $"Starting $prog: "
|
||||||
|
|
||||||
|
## holy shell shenanigans, batman!
|
||||||
|
## daemon can't be backgrounded. we need the pid of the spawned process,
|
||||||
|
## which is actually done via runuser thanks to --user.
|
||||||
|
## you can't do "cmd &; action" but you can do "{cmd &}; action".
|
||||||
|
## consul 0.2.1 added -pid-file; although the following creates $pidfile
|
||||||
|
## owned by consul:consul, using -pid-file results in a permission error.
|
||||||
|
daemon \
|
||||||
|
--pidfile=$pidfile \
|
||||||
|
--user=consul \
|
||||||
|
" { $exec agent -config-dir=$confdir &>> $logfile & } ; echo \$! >| $pidfile "
|
||||||
|
|
||||||
|
RETVAL=$?
|
||||||
|
echo
|
||||||
|
|
||||||
|
[ $RETVAL -eq 0 ] && touch $lockfile
|
||||||
|
|
||||||
|
echo -n $"Waiting for Consul ready: "
|
||||||
|
|
||||||
|
## wait up to 60s for the rpc port to become listened-upon
|
||||||
|
## consul 0.2.1 got much slower to start!
|
||||||
|
count=0
|
||||||
|
ready=0
|
||||||
|
pid=$( cat ${pidfile} )
|
||||||
|
while checkpid ${pid} && [ $count -lt 60 ] && [ $ready -ne 1 ]; do
|
||||||
|
count=$(( count + 1 ))
|
||||||
|
|
||||||
|
if netstat -lptn | egrep -q ":8400.*LISTEN +${pid}/" ; then
|
||||||
|
ready=1
|
||||||
|
else
|
||||||
|
sleep 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $ready -eq 1 ]; then
|
||||||
|
RETVAL=0
|
||||||
|
success
|
||||||
|
else
|
||||||
|
RETVAL=1
|
||||||
|
failure
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
return $RETVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
echo -n $"Shutting down $prog: "
|
||||||
|
|
||||||
|
## graceful shutdown with leave
|
||||||
|
$exec leave &> /dev/null
|
||||||
|
RETVAL=$?
|
||||||
|
|
||||||
|
## wait up to 10s for the daemon to exit
|
||||||
|
if [ $RETVAL -eq 0 ]; then
|
||||||
|
count=0
|
||||||
|
stopped=0
|
||||||
|
pid=$( cat ${pidfile} )
|
||||||
|
while [ $count -lt 10 ] && [ $stopped -ne 1 ]; do
|
||||||
|
count=$(( count + 1 ))
|
||||||
|
|
||||||
|
if ! checkpid ${pid} ; then
|
||||||
|
stopped=1
|
||||||
|
else
|
||||||
|
sleep 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $stopped -ne 1 ]; then
|
||||||
|
RETVAL=125
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $RETVAL -eq 0 ]; then
|
||||||
|
success
|
||||||
|
rm -f $lockfile $pidfile
|
||||||
|
else
|
||||||
|
failure
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
return $RETVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
restart() {
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
}
|
||||||
|
|
||||||
|
reload() {
|
||||||
|
echo -n $"Reloading $prog: "
|
||||||
|
killproc -p $pidfile $exec -HUP
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
force_reload() {
|
||||||
|
restart
|
||||||
|
}
|
||||||
|
|
||||||
|
rh_status() {
|
||||||
|
status -p "$pidfile" -l $prog $exec
|
||||||
|
|
||||||
|
RETVAL=$?
|
||||||
|
|
||||||
|
[ $RETVAL -eq 0 ] && $exec members
|
||||||
|
|
||||||
|
return $RETVAL
|
||||||
|
}
|
||||||
|
|
||||||
|
rh_status_q() {
|
||||||
|
rh_status >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
rh_status_q && exit 0
|
||||||
|
$1
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
rh_status_q || exit 0
|
||||||
|
$1
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
$1
|
||||||
|
;;
|
||||||
|
reload)
|
||||||
|
rh_status_q || exit 7
|
||||||
|
$1
|
||||||
|
;;
|
||||||
|
force-reload)
|
||||||
|
force_reload
|
||||||
|
;;
|
||||||
|
status)
|
||||||
|
rh_status
|
||||||
|
;;
|
||||||
|
condrestart|try-restart)
|
||||||
|
rh_status_q || exit 0
|
||||||
|
restart
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
|
||||||
|
exit 2
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit $?
|
25
consul/files/consul.upstart
Normal file
25
consul/files/consul.upstart
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
description "Consul agent"
|
||||||
|
|
||||||
|
start on runlevel [2345]
|
||||||
|
stop on runlevel [!2345]
|
||||||
|
|
||||||
|
respawn
|
||||||
|
|
||||||
|
script
|
||||||
|
if [ -f "/etc/service/consul" ]; then
|
||||||
|
. /etc/service/consul
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make sure to use all our CPUs, because Consul can block a scheduler thread
|
||||||
|
export GOMAXPROCS=`nproc`
|
||||||
|
|
||||||
|
# Get the public IP
|
||||||
|
BIND=`ifconfig eth0 | grep "inet addr" | awk '{ print substr($2,6) }'`
|
||||||
|
|
||||||
|
exec start-stop-daemon --start -c consul \
|
||||||
|
--exec /usr/local/bin/consul agent -- \
|
||||||
|
-config-dir="/etc/consul.d" \
|
||||||
|
-bind=$BIND \
|
||||||
|
${CONSUL_FLAGS} \
|
||||||
|
>> /var/log/consul.log 2>&1
|
||||||
|
end script
|
5
consul/files/server.json
Normal file
5
consul/files/server.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"server": true,
|
||||||
|
"bootstrap_expect": {{ salt['pillar.get']('consul:bootstrap') }},
|
||||||
|
"datacenter": "{{ salt['pillar.get']('consul:datacenter') }}"
|
||||||
|
}
|
101
consul/init.sls
Normal file
101
consul/init.sls
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
{% from "consul/map.jinja" import consul with context %}
|
||||||
|
|
||||||
|
unzip:
|
||||||
|
pkg.installed
|
||||||
|
|
||||||
|
consul_download:
|
||||||
|
archive.extracted:
|
||||||
|
- name: /opt/consul
|
||||||
|
- source: http://dl.bintray.com/mitchellh/consul/0.5.2_linux_amd64.zip
|
||||||
|
- source_hash: sha1=b3ae610c670fc3b81737d44724ebde969da66ebf
|
||||||
|
- archive_format: zip
|
||||||
|
- require:
|
||||||
|
- pkg: unzip
|
||||||
|
|
||||||
|
consul_ui_download:
|
||||||
|
archive.extracted:
|
||||||
|
- name: /opt/consul
|
||||||
|
- source: http://dl.bintray.com/mitchellh/consul/0.5.2_web_ui.zip
|
||||||
|
- source_hash: sha1=67a2665e3c6aa6ca95c24d6176641010a1002cd6
|
||||||
|
- archive_format: zip
|
||||||
|
- if_missing: /opt/consul/dist
|
||||||
|
- require:
|
||||||
|
- pkg: unzip
|
||||||
|
|
||||||
|
consul_link:
|
||||||
|
file.symlink:
|
||||||
|
- target: /opt/consul/consul
|
||||||
|
- name: /usr/local/bin/consul
|
||||||
|
|
||||||
|
consul_user:
|
||||||
|
group.present:
|
||||||
|
- name: consul
|
||||||
|
user.present:
|
||||||
|
- name: consul
|
||||||
|
- createhome: false
|
||||||
|
- system: true
|
||||||
|
- groups:
|
||||||
|
- consul
|
||||||
|
- require:
|
||||||
|
- group: consul
|
||||||
|
|
||||||
|
consul_init_script:
|
||||||
|
file.managed:
|
||||||
|
{% if salt['test.provider']('service') == 'upstart' %}
|
||||||
|
- source: salt://consul/files/consul.upstart
|
||||||
|
- name: /etc/init/consul.conf
|
||||||
|
- mode: 0644
|
||||||
|
{% else %}
|
||||||
|
- source: salt://consul/files/consul.sysvinit
|
||||||
|
- name: /etc/init.d/consul
|
||||||
|
- mode: 0755
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
consul_config_dir:
|
||||||
|
file.directory:
|
||||||
|
- name: /etc/consul.d
|
||||||
|
- user: consul
|
||||||
|
- group: consul
|
||||||
|
|
||||||
|
consul_data_dir:
|
||||||
|
file.directory:
|
||||||
|
- name: /var/consul
|
||||||
|
- user: consul
|
||||||
|
- group: consul
|
||||||
|
|
||||||
|
consul_common_config:
|
||||||
|
file.managed:
|
||||||
|
- source: salt://consul/files/common.json
|
||||||
|
- template: jinja
|
||||||
|
- name: /etc/consul.d/common.json
|
||||||
|
{% if consul.service != False %}
|
||||||
|
- watch_in:
|
||||||
|
- service: consul
|
||||||
|
{% endif %}
|
||||||
|
- user: consul
|
||||||
|
- group: consul
|
||||||
|
- require:
|
||||||
|
- user: consul
|
||||||
|
|
||||||
|
{% if consul.server != False %}
|
||||||
|
consul_server_config:
|
||||||
|
file.managed:
|
||||||
|
- source: salt://consul/files/server.json
|
||||||
|
- name: /etc/consul.d/server.json
|
||||||
|
- template: jinja
|
||||||
|
{% if consul.service != False %}
|
||||||
|
- watch_in:
|
||||||
|
- service: consul
|
||||||
|
{% endif %}
|
||||||
|
- user: consul
|
||||||
|
- group: consul
|
||||||
|
- require:
|
||||||
|
- user: consul
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if consul.service != False %}
|
||||||
|
consul_service:
|
||||||
|
service.running:
|
||||||
|
- name: consul
|
||||||
|
{% endif %}
|
||||||
|
|
3
consul/map.jinja
Normal file
3
consul/map.jinja
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{% import_yaml "consul/defaults.yaml" as defaults %}
|
||||||
|
|
||||||
|
{% set consul = salt['pillar.get']('consul', default=defaults.consul, merge=True) %}
|
6
pillar.example
Normal file
6
pillar.example
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
consul:
|
||||||
|
server: true
|
||||||
|
service: true
|
||||||
|
token: "RIxqpNlOXqtr/j4BgvIMEw=="
|
||||||
|
bootstrap: 3
|
||||||
|
datacenter: "eu"
|
Loading…
Reference in a new issue