Rename roots to states
This commit renames the roots directory to states because it contains salt states.
This commit is contained in:
		
							parent
							
								
									cade234963
								
							
						
					
					
						commit
						3fd146215f
					
				
					 34 changed files with 0 additions and 0 deletions
				
			
		
							
								
								
									
										117
									
								
								states/_states/rsa_key.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								states/_states/rsa_key.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,117 @@ | |||
| # -*- coding: utf-8 -*- | ||||
| # | ||||
| # some internal functions are copied from salt.states.file | ||||
| 
 | ||||
| from Crypto.PublicKey import RSA | ||||
| import os | ||||
| 
 | ||||
| 
 | ||||
| def _check_user(user, group): | ||||
|     ''' | ||||
|     Checks if the named user and group are present on the minion | ||||
|     ''' | ||||
|     err = '' | ||||
|     if user: | ||||
|         uid = __salt__['file.user_to_uid'](user) | ||||
|         if uid == '': | ||||
|             err += 'User {0} is not available '.format(user) | ||||
|     if group: | ||||
|         gid = __salt__['file.group_to_gid'](group) | ||||
|         if gid == '': | ||||
|             err += 'Group {0} is not available'.format(group) | ||||
|     return err | ||||
| 
 | ||||
| 
 | ||||
| def _error(ret, err_msg): | ||||
|     ret['result'] = False | ||||
|     ret['comment'] = err_msg | ||||
|     return ret | ||||
| 
 | ||||
| 
 | ||||
| def _calculate_umask(mode): | ||||
|     mode = str(mode).lstrip('0') | ||||
|     if not mode: | ||||
|         mode = '0' | ||||
|     modeint = int(mode, 8) | ||||
|     return modeint ^ 0777 | ||||
| 
 | ||||
| 
 | ||||
| def valid_key(name, bits=2048, user=None, group=None, mode='0700'): | ||||
|     """ | ||||
|     Make sure that the given key file exists and contains a valid RSA key. | ||||
| 
 | ||||
|     name | ||||
|         The name of the key file to check | ||||
| 
 | ||||
|     bits | ||||
|         Minimum bits for the RSA key | ||||
| 
 | ||||
|     user | ||||
|         The user to own the file, this defaults to the user salt is running as | ||||
|         on the minion | ||||
| 
 | ||||
|     group | ||||
|         The group ownership set for the file, this defaults to the group salt | ||||
|         is running on the minion | ||||
| 
 | ||||
|     mode | ||||
|         The permissions set on the file, this defaults to 0600 | ||||
|     """ | ||||
| 
 | ||||
|     mode = __salt__['config.manage_mode'](mode) | ||||
| 
 | ||||
|     ret = { | ||||
|         'name': name, | ||||
|         'changes': {}, | ||||
|         'result': None, | ||||
|         'comment': ''} | ||||
|     if not os.path.isfile(name) and __opts__['test']: | ||||
|         ret['comment'] = 'would create RSA key in file {0}'.format(name) | ||||
|         return ret | ||||
| 
 | ||||
|     u_check = _check_user(user, group) | ||||
|     if u_check: | ||||
|         return _error(ret, u_check) | ||||
|     if not os.path.isabs(name): | ||||
|         return _error( | ||||
|             ret, 'Specified file {0} is not an absolute path'.format(name)) | ||||
|     if os.path.isdir(name): | ||||
|         return _error( | ||||
|             ret, 'Specified target {0} is a directory'.format(name)) | ||||
|     if os.path.exists(name): | ||||
|         ret, perms = __salt__['file.check_perms']( | ||||
|             name, ret, user, group, mode) | ||||
|         if __opts__['test']: | ||||
|             ret['comment'] = 'File {0} not updated'.format(name) | ||||
|             return ret | ||||
| 
 | ||||
|     if not os.path.isfile(name): | ||||
|         rsa = RSA.generate(bits) | ||||
|         oldumask = os.umask(_calculate_umask(mode)) | ||||
|         with open(name, 'w') as rsafile: | ||||
|             rsafile.write(rsa.exportKey()) | ||||
|         os.umask(oldumask) | ||||
|         ret['comment'] = 'created new RSA key and saved PEM file {0}'.format( | ||||
|             name) | ||||
|         ret['changes']['created'] = name | ||||
|         ret['result'] = True | ||||
|         return ret | ||||
|     try: | ||||
|         with open(name, 'r') as rsafile: | ||||
|             rsa = RSA.importKey(rsafile.read()) | ||||
|     except Exception as e: | ||||
|         ret['comment'] = 'error loading RSA key from file {0}: {1}'.format( | ||||
|             name, e) | ||||
|         ret['result'] = False | ||||
|         return ret | ||||
|     keysize = rsa.size() + 1 | ||||
|     if keysize < bits: | ||||
|         ret['comment'] = ( | ||||
|             'RSA key in {0} is only {1} bits, which is less than the ' | ||||
|             'required {2} bits'.format(name, keysize, bits)) | ||||
|         ret['result'] = False | ||||
|     else: | ||||
|         ret['comment'] = 'RSA key in file {0} is ok ({1} bits)'.format( | ||||
|             name, keysize) | ||||
|         ret['result'] = True | ||||
|     return ret | ||||
							
								
								
									
										61
									
								
								states/_states/x509_certificate.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								states/_states/x509_certificate.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,61 @@ | |||
| # -*- coding: utf8 -*- | ||||
| ''' | ||||
| Manage X.509 certificate life cycle | ||||
| =================================== | ||||
| 
 | ||||
| This state is useful for managing X.509 certificates' life cycles. | ||||
| 
 | ||||
| Copyright (c) 2014 Jan Dittberner <jan@dittberner.info> | ||||
| ''' | ||||
| 
 | ||||
| from M2Crypto import X509 | ||||
| from datetime import datetime | ||||
| import os | ||||
| 
 | ||||
| 
 | ||||
| def _error(ret, err_msg): | ||||
|     ret['result'] = False | ||||
|     ret['comment'] = err_msg | ||||
|     return ret | ||||
| 
 | ||||
| 
 | ||||
| def valid_certificate( | ||||
|     name, mindays=14, keyfile=None, | ||||
|     checkchain=False, trustedcerts=None): | ||||
|     ''' | ||||
|     Checks whether the given certificate file is valid. | ||||
| 
 | ||||
|     name | ||||
|         The name of the certificate file to check | ||||
|     mindays | ||||
|         Mark the certificate as invalid if it is valid for less then this many | ||||
|         days | ||||
|     ''' | ||||
|     ret = { | ||||
|         'name': name, | ||||
|         'changes': {}, | ||||
|         'result': None, | ||||
|         'comment': ''} | ||||
|     if not os.path.isfile(name): | ||||
|         return _error( | ||||
|             ret, 'certificate file {0} does not exist'.format(name)) | ||||
|     try: | ||||
|         cert = X509.load_cert(name) | ||||
|     except Exception as e: | ||||
|         return _error( | ||||
|             ret, | ||||
|             'error loading certificate {0}: {1}'.format(name, e)) | ||||
|     notafter = cert.get_not_after().get_datetime() | ||||
|     delta = notafter - datetime.now(notafter.tzinfo) | ||||
|     if delta.days < mindays: | ||||
|         return _error( | ||||
|             ret, | ||||
|             'certificate {0} is only valid for {1} more day(s)'.format( | ||||
|                 name, delta.days)) | ||||
|     # TODO: check keyfile match | ||||
|     # TODO: check trust chain | ||||
|     ret['comment'] = ( | ||||
|         'certificate {0} is ok and still valid for {1} days'.format( | ||||
|             name, delta.days)) | ||||
|     ret['result'] = True | ||||
|     return ret | ||||
							
								
								
									
										25
									
								
								states/base/bash_functions
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								states/base/bash_functions
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| function devenv | ||||
| { | ||||
|     . $HOME/gvasettings.sh | ||||
|     . {{ venv }}/bin/activate | ||||
|     cd {{ appdir }} | ||||
| } | ||||
| 
 | ||||
| function testenv | ||||
| { | ||||
|     devenv | ||||
|     export DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE%%.local}.test | ||||
| } | ||||
| 
 | ||||
| function settitle | ||||
| { | ||||
|     if [ -n "$STY" ] ; then      # We are in a screen session | ||||
|         echo "Setting screen titles to $@" | ||||
|         printf "\033k%s\033\\" "$@" | ||||
|         screen -X eval "at \\# title $@" "shelltitle $@" | ||||
|     else | ||||
|         printf "\033]0;%s\007" "$@" | ||||
|     fi | ||||
| } | ||||
							
								
								
									
										117
									
								
								states/base/bashrc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								states/base/bashrc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,117 @@ | |||
| # ~/.bashrc: executed by bash(1) for non-login shells. | ||||
| # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) | ||||
| # for examples | ||||
| 
 | ||||
| # If not running interactively, don't do anything | ||||
| case $- in | ||||
|     *i*) ;; | ||||
|       *) return;; | ||||
| esac | ||||
| 
 | ||||
| # don't put duplicate lines or lines starting with space in the history. | ||||
| # See bash(1) for more options | ||||
| HISTCONTROL=ignoreboth | ||||
| 
 | ||||
| # append to the history file, don't overwrite it | ||||
| shopt -s histappend | ||||
| 
 | ||||
| # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) | ||||
| HISTSIZE=1000 | ||||
| HISTFILESIZE=2000 | ||||
| 
 | ||||
| # check the window size after each command and, if necessary, | ||||
| # update the values of LINES and COLUMNS. | ||||
| shopt -s checkwinsize | ||||
| 
 | ||||
| # If set, the pattern "**" used in a pathname expansion context will | ||||
| # match all files and zero or more directories and subdirectories. | ||||
| #shopt -s globstar | ||||
| 
 | ||||
| # make less more friendly for non-text input files, see lesspipe(1) | ||||
| #[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" | ||||
| 
 | ||||
| # set variable identifying the chroot you work in (used in the prompt below) | ||||
| if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then | ||||
|     debian_chroot=$(cat /etc/debian_chroot) | ||||
| fi | ||||
| 
 | ||||
| # set a fancy prompt (non-color, unless we know we "want" color) | ||||
| case "$TERM" in | ||||
|     xterm-color) color_prompt=yes;; | ||||
| esac | ||||
| 
 | ||||
| # uncomment for a colored prompt, if the terminal has the capability; turned | ||||
| # off by default to not distract the user: the focus in a terminal window | ||||
| # should be on the output of commands, not on the prompt | ||||
| #force_color_prompt=yes | ||||
| 
 | ||||
| if [ -n "$force_color_prompt" ]; then | ||||
|     if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then | ||||
| 	# We have color support; assume it's compliant with Ecma-48 | ||||
| 	# (ISO/IEC-6429). (Lack of such support is extremely rare, and such | ||||
| 	# a case would tend to support setf rather than setaf.) | ||||
| 	color_prompt=yes | ||||
|     else | ||||
| 	color_prompt= | ||||
|     fi | ||||
| fi | ||||
| 
 | ||||
| if [ "$color_prompt" = yes ]; then | ||||
|     PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' | ||||
| else | ||||
|     PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' | ||||
| fi | ||||
| unset color_prompt force_color_prompt | ||||
| 
 | ||||
| # If this is an xterm set the title to user@host:dir | ||||
| case "$TERM" in | ||||
| xterm*|rxvt*) | ||||
|     PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" | ||||
|     ;; | ||||
| *) | ||||
|     ;; | ||||
| esac | ||||
| 
 | ||||
| # enable color support of ls and also add handy aliases | ||||
| if [ -x /usr/bin/dircolors ]; then | ||||
|     test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" | ||||
|     alias ls='ls --color=auto' | ||||
|     #alias dir='dir --color=auto' | ||||
|     #alias vdir='vdir --color=auto' | ||||
| 
 | ||||
|     #alias grep='grep --color=auto' | ||||
|     #alias fgrep='fgrep --color=auto' | ||||
|     #alias egrep='egrep --color=auto' | ||||
| fi | ||||
| 
 | ||||
| # colored GCC warnings and errors | ||||
| #export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' | ||||
| 
 | ||||
| # some more ls aliases | ||||
| #alias ll='ls -l' | ||||
| #alias la='ls -A' | ||||
| #alias l='ls -CF' | ||||
| 
 | ||||
| # Alias definitions. | ||||
| # You may want to put all your additions into a separate file like | ||||
| # ~/.bash_aliases, instead of adding them here directly. | ||||
| # See /usr/share/doc/bash-doc/examples in the bash-doc package. | ||||
| 
 | ||||
| if [ -f ~/.bash_aliases ]; then | ||||
|     . ~/.bash_aliases | ||||
| fi | ||||
| 
 | ||||
| # enable programmable completion features (you don't need to enable | ||||
| # this, if it's already enabled in /etc/bash.bashrc and /etc/profile | ||||
| # sources /etc/bash.bashrc). | ||||
| if ! shopt -oq posix; then | ||||
|   if [ -f /usr/share/bash-completion/bash_completion ]; then | ||||
|     . /usr/share/bash-completion/bash_completion | ||||
|   elif [ -f /etc/bash_completion ]; then | ||||
|     . /etc/bash_completion | ||||
|   fi | ||||
| fi | ||||
| 
 | ||||
| if [ -f ~/.bash_functions ]; then | ||||
|     . ~/.bash_functions | ||||
| fi | ||||
							
								
								
									
										31
									
								
								states/base/init.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								states/base/init.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | |||
| base-packages: | ||||
|   pkg.installed: | ||||
|     - pkgs: | ||||
|       - screen | ||||
|       - htop | ||||
|       - git | ||||
|       - locales-all | ||||
| 
 | ||||
| /home/vagrant/.screenrc: | ||||
|   file.managed: | ||||
|     - user: vagrant | ||||
|     - group: vagrant | ||||
|     - mode: 0644 | ||||
|     - source: salt://base/screenrc | ||||
| 
 | ||||
| update-system: | ||||
|   pkg.uptodate: | ||||
|     - refresh: True | ||||
| 
 | ||||
| /home/vagrant/bin: | ||||
|   file.directory: | ||||
|     - user: vagrant | ||||
|     - group: vagrant | ||||
|     - mode: 0750 | ||||
| 
 | ||||
| /home/vagrant/.bashrc: | ||||
|   file.managed: | ||||
|     - user: vagrant | ||||
|     - group: vagrant | ||||
|     - mode: 0644 | ||||
|     - source: salt://base/bashrc | ||||
							
								
								
									
										14
									
								
								states/base/screenrc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								states/base/screenrc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| # vim: syntax=screen | ||||
| 
 | ||||
| hardstatus on | ||||
| hardstatus alwayslastline | ||||
| hardstatus string "%{= r}[ %{G}%H%{= r} ] %= %{=b b}%-w%{=rb db}%>%n %t%{-}%+w %=%{= r} [ %{G}%c %{M}%D %m-%d %{r}]" | ||||
| 
 | ||||
| startup_message off | ||||
| 
 | ||||
| defscrollback 10240 | ||||
| 
 | ||||
| bind f eval "caption splitonly" "hardstatus ignore" | ||||
| bind F eval "caption always" "hardstatus alwayslastline" | ||||
| 
 | ||||
| defbce "on" | ||||
							
								
								
									
										83
									
								
								states/gnuviechadmin/base.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								states/gnuviechadmin/base.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,83 @@ | |||
| {% from 'gnuviechadmin/vars.sls' import home, gva_component, gva_amqp_user, checkout, appdir, venv %} | ||||
| 
 | ||||
| {% for host in salt['pillar.get']('gnuviechadmin:machines') %} | ||||
| {{ host }}: | ||||
|   host.present: | ||||
|     - ip: {{ salt['pillar.get']('gnuviechadmin:machines:%s:ip' % host) }} | ||||
| {% if salt['pillar.get']('gnuviechadmin:machines:%s:names' % host) %} | ||||
|     - names: | ||||
| {% for machine in salt['pillar.get']('gnuviechadmin:machines:%s:names' % host) %} | ||||
|       - {{ machine }} | ||||
| {% endfor %} | ||||
| {% endif %} | ||||
| {% endfor %} | ||||
| 
 | ||||
| gnuviechadmin-packages: | ||||
|   pkg.installed: | ||||
|     - pkgs: | ||||
|       - libyaml-dev | ||||
|       - python-virtualenv | ||||
|       - python-dev | ||||
|       - python-pip | ||||
|       - gettext | ||||
| 
 | ||||
| {{ home }}/gvasettings.sh: | ||||
|   file.managed: | ||||
|     - user: vagrant | ||||
|     - group: vagrant | ||||
|     - mode: 0640 | ||||
|     - source: salt://gnuviechadmin/{{ gva_component }}/settings.sh | ||||
|     - template: jinja | ||||
|     - context: | ||||
|         broker_url: {{ 'amqp://%s:%s@mq/%s' % (gva_amqp_user, salt['pillar.get']('gnuviechadmin:queues:users:%s:password' % gva_amqp_user), salt['pillar.get']('gnuviechadmin:queues:vhost')) }} | ||||
| 
 | ||||
| gnuviechadmin-venv: | ||||
|   cmd.run: | ||||
|     - name: virtualenv {{ venv }} | ||||
|     - user: vagrant | ||||
|     - group: vagrant | ||||
|     - unless: test -f {{ venv }}/bin/pip | ||||
| 
 | ||||
| gnuviechadmin-requires: | ||||
|   cmd.run: | ||||
|     - name: {{ venv }}/bin/pip install -U -r requirements/local.txt && touch {{ venv }}/lastinstall | ||||
|     - user: vagrant | ||||
|     - group: vagrant | ||||
|     - cwd: {{ checkout }} | ||||
|     - require: | ||||
|       - cmd: gnuviechadmin-venv | ||||
|       - pkg: gnuviechadmin-packages | ||||
|     - unless: test -e {{ venv }}/lastinstall && test {{ checkout }}/requirements/local.txt -ot {{ venv }}/lastinstall && test {{ checkout }}/requirements/base.txt -ot {{ venv }}/lastinstall | ||||
| 
 | ||||
| gnuviechadmin-dbschema: | ||||
|   cmd.wait: | ||||
|     - name: . {{ home }}/gvasettings.sh ; unset LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME ; {{ venv }}/bin/python manage.py migrate --noinput | ||||
|     - user: vagrant | ||||
|     - group: vagrant | ||||
|     - cwd: {{ appdir }} | ||||
|     - watch: | ||||
|       - cmd: gnuviechadmin-requires | ||||
|       - file: {{ home }}/gvasettings.sh | ||||
| 
 | ||||
| gnuviechadmin-locale-data-compile: | ||||
|   cmd.wait: | ||||
|     - name: . {{ home }}/gvasettings.sh ; {{ venv }}/bin/python {{ appdir }}/manage.py compilemessages | ||||
|     - user: vagrant | ||||
|     - group: vagrant | ||||
|     - cwd: {{ appdir }} | ||||
|     - require: | ||||
|       - pkg: gnuviechadmin-packages | ||||
|       - file: {{ home }}/gvasettings.sh | ||||
|       - cmd: gnuviechadmin-venv | ||||
| 
 | ||||
| /home/vagrant/.bash_functions: | ||||
|   file.managed: | ||||
|     - user: vagrant | ||||
|     - group: vagrant | ||||
|     - mode: 0644 | ||||
|     - source: salt://base/bash_functions | ||||
|     - template: jinja | ||||
|     - context: | ||||
|         home: {{ home }} | ||||
|         venv: {{ venv }} | ||||
|         appdir: {{ appdir }} | ||||
							
								
								
									
										25
									
								
								states/gnuviechadmin/bash_functions
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								states/gnuviechadmin/bash_functions
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| function devenv | ||||
| { | ||||
|     . $HOME/gvasettings.sh | ||||
|     . $HOME/gva-venv/bin/activate | ||||
|     cd /vagrant/gnuviechadmin | ||||
| } | ||||
| 
 | ||||
| function testenv | ||||
| { | ||||
|     devenv | ||||
|     export DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE%%.local}.test | ||||
| } | ||||
| 
 | ||||
| function settitle | ||||
| { | ||||
|     if [ -n "$STY" ] ; then      # We are in a screen session | ||||
|         echo "Setting screen titles to $@" | ||||
|         printf "\033k%s\033\\" "$@" | ||||
|         screen -X eval "at \\# title $@" "shelltitle $@" | ||||
|     else | ||||
|         printf "\033]0;%s\007" "$@" | ||||
|     fi | ||||
| } | ||||
							
								
								
									
										13
									
								
								states/gnuviechadmin/celery.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								states/gnuviechadmin/celery.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| {% from 'gnuviechadmin/vars.sls' import home, gva_component, venv, appdir %} | ||||
| 
 | ||||
| {{ home }}/bin/run_celery.sh: | ||||
|   file.managed: | ||||
|     - user: vagrant | ||||
|     - group: vagrant | ||||
|     - mode: 0750 | ||||
|     - source: salt://gnuviechadmin/{{ gva_component }}/run_celery.sh | ||||
|     - template: jinja | ||||
|     - context: | ||||
|         home: {{ home }} | ||||
|         virtualenv: {{ venv }} | ||||
|         appdir: {{ appdir }} | ||||
							
								
								
									
										33
									
								
								states/gnuviechadmin/database.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								states/gnuviechadmin/database.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | |||
| include: | ||||
|   - postgresql-server | ||||
| 
 | ||||
| gnuviechadmin-database: | ||||
|   postgres_user.present: | ||||
|     - name: {{ salt['pillar.get']('gnuviechadmin:database:owner:user') }} | ||||
|     - user: postgres | ||||
|     - password: {{ salt['pillar.get']('gnuviechadmin:database:owner:password') }} | ||||
|     - login: True | ||||
|     - createdb: {% if salt['pillar.get']('gnuviechadmin:deploymenttype', 'production') == 'local' %}True | ||||
| {%- else %}False | ||||
| {%- endif %} | ||||
|     - require: | ||||
|       - service: postgresql | ||||
|   postgres_database.present: | ||||
|     - name: {{ salt['pillar.get']('gnuviechadmin:database:name') }} | ||||
|     - user: postgres | ||||
|     - owner: {{ salt['pillar.get']('gnuviechadmin:database:owner:user') }} | ||||
|     - encoding: UTF8 | ||||
|     - template: template0 | ||||
|     - require: | ||||
|       - service: postgresql | ||||
|       - postgres_user: {{ salt['pillar.get']('gnuviechadmin:database:owner:user') }} | ||||
| 
 | ||||
| {% for gnuviechadmin_db_role in salt['pillar.get']('gnuviechadmin:database:users') %} | ||||
| gnuviechadmin-dbuser-{{ gnuviechadmin_db_role }}: | ||||
|   postgres_user.present: | ||||
|     - name: {{ salt['pillar.get']('gnuviechadmin:database:users:%s:user' % gnuviechadmin_db_role) }} | ||||
|     - password: {{ salt['pillar.get']('gnuviechadmin:database:users:%s:password' % gnuviechadmin_db_role) }} | ||||
|     - login: True | ||||
|     - require: | ||||
|       - service: postgresql | ||||
| {% endfor %} | ||||
							
								
								
									
										27
									
								
								states/gnuviechadmin/gva/gnuviechadmin.nginx
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								states/gnuviechadmin/gva/gnuviechadmin.nginx
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| server { | ||||
|   server_name www.{{ domainname }}; | ||||
|   listen 443 ssl; | ||||
| 
 | ||||
|   ssl_certificate {{ ssl_certdir }}/{{ domainname }}.crt.pem; | ||||
|   ssl_certificate_key {{ ssl_keydir }}/{{ domainname }}.key.pem; | ||||
| 
 | ||||
|   if ( $host != '{{ domainname }}') { | ||||
|     return 301 https://{{ domainname }}$request_uri; | ||||
|   } | ||||
| 
 | ||||
|   client_max_body_size 1M; | ||||
|   gzip on; | ||||
|   gzip_types text/javascript application/x-javascript text/css; | ||||
| 
 | ||||
|   location /media { | ||||
|     alias /vagrant/gnuviechadmin/media; | ||||
|   } | ||||
| 
 | ||||
|   location /static { | ||||
|     alias /vagrant/gnuviechadmin/assets; | ||||
|   } | ||||
| 
 | ||||
|   location / { | ||||
|     proxy_pass http://localhost:8000; | ||||
|   } | ||||
| } | ||||
							
								
								
									
										25
									
								
								states/gnuviechadmin/gva/settings.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								states/gnuviechadmin/gva/settings.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| #!/bin/sh | ||||
| 
 | ||||
| export DJANGO_SETTINGS_MODULE="gnuviechadmin.settings.{{ salt['pillar.get']('gnuviechadmin:deploymenttype', 'production') }}" | ||||
| export GVA_ADMIN_NAME="Jan Dittberner" | ||||
| export GVA_ADMIN_EMAIL="{{ salt['pillar.get']('gnuviechadmin:adminemail') }}" | ||||
| export GVA_PGSQL_DATABASE="{{ salt['pillar.get']('gnuviechadmin:database:name') }}" | ||||
| export GVA_PGSQL_USER="{{ salt['pillar.get']('gnuviechadmin:database:owner:user') }}" | ||||
| export GVA_PGSQL_PASSWORD="{{ salt['pillar.get']('gnuviechadmin:database:owner:password') }}" | ||||
| export GVA_PGSQL_HOSTNAME="{{ salt['pillar.get']('gnuviechadmin:database:host') }}" | ||||
| export GVA_PGSQL_PORT={{ salt['pillar.get']('gnuviechadmin:database:port') }} | ||||
| export GVA_DOMAIN_NAME="{{ salt['pillar.get']('gnuviechadmin:domainname') }}" | ||||
| export GVA_SITE_NAME="{{ salt['pillar.get']('gnuviechadmin:sitename') }}" | ||||
| export GVA_SITE_SECRET="{{ salt['grains.get_or_set_hash']('gnuviechadmin:SECRET_KEY', 50) }}" | ||||
| export GVA_SITE_ADMINMAIL="{{ salt['pillar.get']('gnuviechadmin:adminemail') }}" | ||||
| export GVA_MIN_OS_UID={{ salt['pillar.get']('gnuviechadmin:minosuid') }} | ||||
| export GVA_MIN_OS_GID={{ salt['pillar.get']('gnuviechadmin:minosgid') }} | ||||
| export GVA_OSUSER_PREFIX="{{ salt['pillar.get']('gnuviechadmin:osuserprefix') }}" | ||||
| export GVA_OSUSER_HOME_BASEPATH="{{ salt['pillar.get']('gnuviechadmin:osuserhomedirbase') }}" | ||||
| export GVA_OSUSER_DEFAULT_SHELL="{{ salt['pillar.get']('gnuviechadmin:osuserdefaultshell') }}" | ||||
| export GVA_BROKER_URL="{{ broker_url }}" | ||||
| export GVA_OSUSER_UPLOADSERVER="{{ salt['pillar.get']('gnuviechadmin:uploadserver') }}" | ||||
| export GVA_WEBMAIL_URL="{{ salt['pillar.get']('gnuviechadmin:webmail_url') }}" | ||||
| export GVA_PHPMYADMIN_URL="{{ salt['pillar.get']('gnuviechadmin:phpmyadmin_url') }}" | ||||
| export GVA_PHPPGADMIN_URL="{{ salt['pillar.get']('gnuviechadmin:phppgadmin_url') }}" | ||||
| export GVA_RESULTS_REDIS_URL="redis://:{{ salt['pillar.get']('gnuviechadmin:redis_password') }}@{{ salt['pillar.get']('gnuviechadmin:redis_host') }}/0" | ||||
							
								
								
									
										19
									
								
								states/gnuviechadmin/gvaldap.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								states/gnuviechadmin/gvaldap.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| include: | ||||
|   - gnuviechadmin.base | ||||
|   - gnuviechadmin.celery | ||||
| 
 | ||||
| gvaldap-packages: | ||||
|   pkg.installed: | ||||
|     - pkgs: | ||||
|       - libldap2-dev | ||||
|       - libsasl2-dev | ||||
|     - require_in: | ||||
|       - pkg: gnuviechadmin-packages | ||||
| 
 | ||||
| base-ldap-objects: | ||||
|   cmd.script: | ||||
|     - source: salt://gnuviechadmin/gvaldap/create_base_ldap_objects.sh | ||||
|     - template: jinja | ||||
|     - user: root | ||||
|     - group: root | ||||
|     - unless: ldapsearch -Y EXTERNAL -H ldapi:// -b "{{ salt['pillar.get']('gnuviechadmin:ldap_base_dn') }}" "cn={{ salt['pillar.get']('gnuviechadmin:ldap_admin_user') }}" | grep -q numEntries | ||||
							
								
								
									
										91
									
								
								states/gnuviechadmin/gvaldap/create_base_ldap_objects.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								states/gnuviechadmin/gvaldap/create_base_ldap_objects.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,91 @@ | |||
| #!/bin/sh | ||||
| 
 | ||||
| set -e | ||||
| 
 | ||||
| {% set base_dn = salt['pillar.get']('gnuviechadmin:ldap_base_dn') %} | ||||
| {% set ldap_admin_user = salt['pillar.get']('gnuviechadmin:ldap_admin_user') %} | ||||
| {% set ldap_groups_ou = salt['pillar.get']('gnuviechadmin:ldap_groups_ou') %} | ||||
| {% set ldap_users_ou = salt['pillar.get']('gnuviechadmin:ldap_users_ou') %} | ||||
| 
 | ||||
| # setup password hashing for cleartext input | ||||
| ldapadd -v -H ldapi:// -Y EXTERNAL -f /etc/ldap/schema/ppolicy.ldif | ||||
| 
 | ||||
| ldapmodify -v -H ldapi:// -Y EXTERNAL <<EOD | ||||
| dn: cn=module{0},cn=config | ||||
| changetype: modify | ||||
| add: olcModuleLoad | ||||
| olcModuleLoad: ppolicy | ||||
| 
 | ||||
| dn: olcOverlay=ppolicy,olcDatabase={1}mdb,cn=config | ||||
| changetype: add | ||||
| objectClass: olcOverlayConfig | ||||
| objectClass: olcPPolicyConfig | ||||
| olcOverlay: ppolicy | ||||
| olcPPolicyHashClearText: TRUE | ||||
| EOD | ||||
| 
 | ||||
| # define ACLs on LDAP tree | ||||
| ldapmodify -v -H ldapi:// -Y EXTERNAL <<EOD | ||||
| dn: olcDatabase={1}mdb,cn=config | ||||
| changetype: modify | ||||
| replace: olcAccess | ||||
| olcAccess: {0}to attrs=userPassword,shadowLastChange | ||||
|   by self write | ||||
|   by anonymous auth | ||||
|   by dn="cn={{ ldap_admin_user }},{{ base_dn }}" write | ||||
|   by * none | ||||
| olcAccess: {1}to dn.base="" | ||||
|   by * read | ||||
| olcAccess: {2}to dn.subtree="ou={{ ldap_users_ou }},{{ base_dn }}" | ||||
|   by dn="cn={{ ldap_admin_user }},{{ base_dn }}" write | ||||
|   by * read | ||||
| olcAccess: {3}to dn.subtree="ou={{ ldap_groups_ou }},{{ base_dn }}" | ||||
|   by dn="cn={{ ldap_admin_user }},{{ base_dn }}" write | ||||
|   by * read | ||||
| olcAccess: {4}to * | ||||
|   by self write | ||||
|   by * read | ||||
| EOD | ||||
| 
 | ||||
| # add OUs, groups and ldapadmin user | ||||
| ldapmodify -v -H {{ salt['pillar.get']('gnuviechadmin:ldap_url') }} -x -D "cn=admin,{{ base_dn }}" -w '{{ salt["grains.get_or_set_hash"]("slapd.password") }}' <<EOD | ||||
| dn: ou={{ ldap_users_ou }},{{ base_dn }} | ||||
| changetype: add | ||||
| objectClass: top | ||||
| objectClass: organizationalUnit | ||||
| ou: {{ ldap_users_ou }} | ||||
| 
 | ||||
| dn: ou={{ ldap_groups_ou }},{{ base_dn }} | ||||
| changetype: add | ||||
| objectClass: top | ||||
| objectClass: organizationalUnit | ||||
| ou: {{ ldap_groups_ou }} | ||||
| 
 | ||||
| dn: cn=sftponly,ou={{ ldap_groups_ou }},{{ base_dn }} | ||||
| changetype: add | ||||
| objectClass: posixGroup | ||||
| cn: sftponly | ||||
| gidNumber: 2000 | ||||
| description: SFTP users | ||||
| 
 | ||||
| dn: cn=wwwusers,ou={{ ldap_groups_ou }},{{ base_dn }} | ||||
| changetype: add | ||||
| objectClass: posixGroup | ||||
| cn: wwwusers | ||||
| gidNumber: 2001 | ||||
| 
 | ||||
| dn: cn=webserver,ou={{ ldap_groups_ou }},{{ base_dn }} | ||||
| changetype: add | ||||
| objectClass: posixGroup | ||||
| cn: webserver | ||||
| gidNumber: 2002 | ||||
| memberUid: www-data | ||||
| 
 | ||||
| dn: cn={{ ldap_admin_user }},{{ base_dn }} | ||||
| changetype: add | ||||
| objectClass: simpleSecurityObject | ||||
| objectClass: organizationalRole | ||||
| cn: {{ ldap_admin_user }} | ||||
| description: LDAP manager for celery worker | ||||
| userPassword:: {{ salt['grains.get_or_set_hash']('gnuviechadmin.ldap_admin_password', 16).encode("base64") }} | ||||
| EOD | ||||
							
								
								
									
										7
									
								
								states/gnuviechadmin/gvaldap/run_celery.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								states/gnuviechadmin/gvaldap/run_celery.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| #!/bin/sh | ||||
| 
 | ||||
| set -ex | ||||
| 
 | ||||
| . {{ home }}/gvasettings.sh | ||||
| cd {{ appdir }} | ||||
| {{ virtualenv }}/bin/celery worker -A gvaldap -Q ldap --loglevel=INFO | ||||
							
								
								
									
										15
									
								
								states/gnuviechadmin/gvaldap/settings.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								states/gnuviechadmin/gvaldap/settings.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| #!/bin/sh | ||||
| 
 | ||||
| export DJANGO_SETTINGS_MODULE='gvaldap.settings.{{ salt['pillar.get']('gnuviechadmin:deploymenttype', 'production') }}' | ||||
| export GVALDAP_ADMIN_NAME='Jan Dittberner' | ||||
| export GVALDAP_ADMIN_EMAIL='{{ salt['pillar.get']('gnuviechadmin:adminemail') }}' | ||||
| export GVALDAP_LDAP_URL='{{ salt['pillar.get']('gnuviechadmin:ldap_url') }}' | ||||
| export GVALDAP_LDAP_USER='{{ 'cn=%s,%s' % (salt['pillar.get']('gnuviechadmin:ldap_admin_user'), salt['pillar.get']('gnuviechadmin:ldap_base_dn')) }}' | ||||
| export GVALDAP_LDAP_PASSWORD='{{ salt['grains.get_or_set_hash']('gnuviechadmin.ldap_admin_password', 16) }}' | ||||
| export GVALDAP_BASEDN_GROUP='{{ 'ou=%s,%s' % (salt['pillar.get']('gnuviechadmin:ldap_groups_ou'), salt['pillar.get']('gnuviechadmin:ldap_base_dn')) }}' | ||||
| export GVALDAP_BASEDN_USER='{{ 'ou=%s,%s' % (salt['pillar.get']('gnuviechadmin:ldap_users_ou'), salt['pillar.get']('gnuviechadmin:ldap_base_dn')) }}' | ||||
| export GVALDAP_SECRETKEY='{{ salt['grains.get_or_set_hash']('gnuviechadmin.secret_key', 50) }}' | ||||
| export GVALDAP_BROKER_URL='{{ broker_url }}' | ||||
| export GVALDAP_ALLOWED_HOSTS='{{ salt['pillar.get']('gnuviechadmin:allowed_hosts') }}' | ||||
| export GVALDAP_SERVER_EMAIL='{{ salt['pillar.get']('gnuviechadmin:mailfrom') }}' | ||||
| export GVALDAP_RESULTS_REDIS_URL="redis://:{{ salt['pillar.get']('gnuviechadmin:redis_password') }}@{{ salt['pillar.get']('gnuviechadmin:redis_host') }}/0" | ||||
							
								
								
									
										38
									
								
								states/gnuviechadmin/queues.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								states/gnuviechadmin/queues.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| include: | ||||
|   - rabbitmq-server | ||||
| 
 | ||||
| gnuviechadmin-queue-vhost: | ||||
|   rabbitmq_vhost.present: | ||||
|     - name: {{ salt['pillar.get']('gnuviechadmin:queues:vhost') }} | ||||
| 
 | ||||
| gnuviechadmin_test-queue-vhost: | ||||
|   rabbitmq_vhost.present: | ||||
|     - name: {{ "%s_test" % salt['pillar.get']('gnuviechadmin:queues:vhost') }} | ||||
| 
 | ||||
| {% for user in salt['pillar.get']('gnuviechadmin:queues:users') %} | ||||
| gnuviechadmin-queue-user-{{ user }}: | ||||
|   rabbitmq_user.present: | ||||
|     - name: {{ user }} | ||||
|     - password: {{ salt['pillar.get']('gnuviechadmin:queues:users:%s:password' % user) }} | ||||
| {% if salt['pillar.get']('gnuviechadmin:queues:users:%s:perms' % user) %} | ||||
|     - perms: | ||||
| {% for vhost, perms in salt['pillar.get']('gnuviechadmin:queues:users:%s:perms' % user).iteritems() %} | ||||
|       - {{ vhost }}: | ||||
|         - {{ perms[0] }} | ||||
|         - {{ perms[1] }} | ||||
|         - {{ perms[2] }} | ||||
|       - {{ vhost + "_test" }}: | ||||
|         - {{ perms[0] }} | ||||
|         - {{ perms[1] }} | ||||
|         - {{ perms[2] }} | ||||
| {% endfor %} | ||||
| {% endif %} | ||||
| {% if salt['pillar.get']('gnuviechadmin:queues:users:%s:tags' % user) %} | ||||
|     - tags: | ||||
| {% for tag in salt['pillar.get']('gnuviechadmin:queues:users:%s:tags' % user) %} | ||||
|       - {{ tag }} | ||||
| {% endfor %} | ||||
| {% endif %} | ||||
|     - require: | ||||
|       - rabbitmq_vhost: {{ salt['pillar.get']('gnuviechadmin:queues:vhost') }} | ||||
| {% endfor %} | ||||
							
								
								
									
										7
									
								
								states/gnuviechadmin/vars.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								states/gnuviechadmin/vars.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| {% set home = '/home/vagrant' %} | ||||
| {% set venv = home + '/gva-venv' %} | ||||
| {% set checkout = '/vagrant' %} | ||||
| {% set gva_component = salt['pillar.get']('gnuviechadmin:component:name') %} | ||||
| {% set gva_amqp_user = salt['pillar.get']('gnuviechadmin:component:amqp_user') %} | ||||
| {% set python_module = salt['pillar.get']('gnuviechadmin:component:python_module', gva_component) %} | ||||
| {% set appdir = checkout + '/' + python_module %} | ||||
							
								
								
									
										39
									
								
								states/gnuviechadmin/webinterface.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								states/gnuviechadmin/webinterface.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,39 @@ | |||
| include: | ||||
|   - gnuviechadmin.base | ||||
|   - webserver | ||||
| 
 | ||||
| libpq-dev: | ||||
|   pkg.installed: | ||||
|     - require_in: | ||||
|       - pkg: gnuviechadmin-packages | ||||
| 
 | ||||
| python-m2crypto: | ||||
|   pkg.installed: | ||||
|     - reload_modules: true | ||||
| 
 | ||||
| {% import "webserver/sslcert.macros.sls" as sslcert %} | ||||
| 
 | ||||
| {% set domainname = salt['pillar.get']('gnuviechadmin:domainname') %} | ||||
| {{ sslcert.key_cert(domainname) }} | ||||
| 
 | ||||
| /etc/nginx/sites-available/{{ domainname }}: | ||||
|   file.managed: | ||||
|     - user: root | ||||
|     - group: root | ||||
|     - mode: 0640 | ||||
|     - source: salt://gnuviechadmin/gva/gnuviechadmin.nginx | ||||
|     - template: jinja | ||||
|     - context: | ||||
|         domainname: {{ domainname }} | ||||
|         ssl_keydir: {{ salt['pillar.get']('nginx:sslkeydir', '/etc/nginx/ssl/private') }} | ||||
|         ssl_certdir: {{ salt['pillar.get']('nginx:sslcertdir', '/etc/nginx/ssl/certs') }} | ||||
|     - require: | ||||
|       - pkg: nginx | ||||
| 
 | ||||
| /etc/nginx/sites-enabled/{{ domainname }}: | ||||
|   file.symlink: | ||||
|     - target: /etc/nginx/sites-available/{{ domainname }} | ||||
|     - require: | ||||
|       - file: /etc/nginx/sites-available/{{ domainname }} | ||||
|     - watch_in: | ||||
|       - service: nginx | ||||
							
								
								
									
										18
									
								
								states/ldapserver/init.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								states/ldapserver/init.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | |||
| ldapserver-packages: | ||||
|   debconf.set: | ||||
|     - name: slapd | ||||
|     - data: | ||||
|         'slapd/domain': {'type': 'string', 'value': '{{ salt["pillar.get"]("gnuviechadmin:ldap_domain") }}' } | ||||
|         'slapd/password1': {'type': 'string', 'value': '{{ salt["grains.get_or_set_hash"]("slapd.password") }}'} | ||||
|         'slapd/password2': {'type': 'string', 'value': '{{ salt["grains.get_or_set_hash"]("slapd.password") }}'} | ||||
|   pkg.installed: | ||||
|     - pkgs: | ||||
|       - ldap-utils | ||||
|       - ldapscripts | ||||
|       - ldapvi | ||||
|       - slapd | ||||
|   service.running: | ||||
|     - name: slapd | ||||
|     - require: | ||||
|       - pkg: ldapserver-packages | ||||
|       - debconf: slapd | ||||
							
								
								
									
										38
									
								
								states/nginx/init.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								states/nginx/init.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| nginx: | ||||
|   pkg: | ||||
|     - installed | ||||
|   service.running: | ||||
|     - enable: True | ||||
|     - require: | ||||
|       - pkg: nginx | ||||
| 
 | ||||
| nginx-common: | ||||
|   pkg.installed | ||||
| 
 | ||||
| /etc/nginx/nginx.conf: | ||||
|   file.managed: | ||||
|     - source: salt://nginx/nginx.conf | ||||
|     - user: root | ||||
|     - group: root | ||||
|     - mode: 0644 | ||||
|     - require: | ||||
|       - pkg: nginx-common | ||||
|     - watch_in: | ||||
|       - service: nginx | ||||
| 
 | ||||
| {% set nginx_ssl_keydir = salt['pillar.get']('nginx:sslkeydir', '/etc/nginx/ssl/private') %} | ||||
| {% set nginx_ssl_certdir = salt['pillar.get']('nginx:sslcertdir', '/etc/nginx/ssl/certs') %} | ||||
| 
 | ||||
| {{ nginx_ssl_certdir }}: | ||||
|   file.directory: | ||||
|     - user: root | ||||
|     - group: root | ||||
|     - mode: 0755 | ||||
|     - makedirs: True | ||||
| 
 | ||||
| {{ nginx_ssl_keydir }}: | ||||
|   file.directory: | ||||
|     - user: root | ||||
|     - group: root | ||||
|     - mode: 0750 | ||||
|     - makedirs: True | ||||
							
								
								
									
										49
									
								
								states/nginx/nginx.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								states/nginx/nginx.conf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,49 @@ | |||
| user www-data; | ||||
| worker_processes 4; | ||||
| pid /run/nginx.pid; | ||||
| 
 | ||||
| events { | ||||
| 	worker_connections 768; | ||||
| 	# multi_accept on; | ||||
| } | ||||
| 
 | ||||
| http { | ||||
| 
 | ||||
| 	## | ||||
| 	# Basic Settings | ||||
| 	## | ||||
| 
 | ||||
| 	sendfile on; | ||||
| 	tcp_nopush on; | ||||
| 	tcp_nodelay on; | ||||
| 	keepalive_timeout 65; | ||||
| 	types_hash_max_size 2048; | ||||
| 	# server_tokens off; | ||||
| 
 | ||||
| 	server_names_hash_bucket_size 64; | ||||
| 	# server_name_in_redirect off; | ||||
| 
 | ||||
| 	include /etc/nginx/mime.types; | ||||
| 	default_type application/octet-stream; | ||||
| 
 | ||||
| 	## | ||||
| 	# Logging Settings | ||||
| 	## | ||||
| 
 | ||||
| 	access_log /var/log/nginx/access.log; | ||||
| 	error_log /var/log/nginx/error.log; | ||||
| 
 | ||||
| 	## | ||||
| 	# Gzip Settings | ||||
| 	## | ||||
| 
 | ||||
| 	gzip on; | ||||
| 	gzip_disable "msie6"; | ||||
| 
 | ||||
| 	## | ||||
| 	# Virtual Host Configs | ||||
| 	## | ||||
| 
 | ||||
| 	include /etc/nginx/conf.d/*.conf; | ||||
| 	include /etc/nginx/sites-enabled/*; | ||||
| } | ||||
							
								
								
									
										9
									
								
								states/postgresql-server/init.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								states/postgresql-server/init.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| locales-all: | ||||
|   pkg.installed | ||||
| 
 | ||||
| postgresql: | ||||
|   pkg: | ||||
|     - installed | ||||
|   service.running: | ||||
|     - require: | ||||
|       - pkg: postgresql | ||||
							
								
								
									
										17
									
								
								states/rabbitmq-server/init.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								states/rabbitmq-server/init.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| rabbitmq-server: | ||||
|   pkg: | ||||
|     - installed | ||||
|   service: | ||||
|     - running | ||||
|     - requires: | ||||
|       - pkg: rabbitmq-server | ||||
| 
 | ||||
| guest: | ||||
|   rabbitmq_user: | ||||
|     - absent | ||||
| 
 | ||||
| rabbitmq_management: | ||||
|   rabbitmq_plugin: | ||||
|     - enabled | ||||
|     - watch_in: | ||||
|       - service: rabbitmq-server | ||||
							
								
								
									
										21
									
								
								states/redis-server/init.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								states/redis-server/init.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| redis-server: | ||||
|   pkg: | ||||
|     - installed | ||||
|   service.running: | ||||
|     - enable: true | ||||
|     - require: | ||||
|       - pkg: redis-server | ||||
| 
 | ||||
| python-redis: | ||||
|   pkg.installed: | ||||
|     - reload_modules: true | ||||
| 
 | ||||
| /etc/redis/redis.conf: | ||||
|   file.managed: | ||||
|     - source: salt://redis-server/redis.conf | ||||
|     - template: jinja | ||||
|     - user: root | ||||
|     - group: root | ||||
|     - mode: 0644 | ||||
|     - watch_in: | ||||
|       - service: redis-server | ||||
							
								
								
									
										762
									
								
								states/redis-server/redis.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										762
									
								
								states/redis-server/redis.conf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,762 @@ | |||
| # Redis configuration file example | ||||
| 
 | ||||
| # Note on units: when memory size is needed, it is possible to specify | ||||
| # it in the usual form of 1k 5GB 4M and so forth: | ||||
| # | ||||
| # 1k => 1000 bytes | ||||
| # 1kb => 1024 bytes | ||||
| # 1m => 1000000 bytes | ||||
| # 1mb => 1024*1024 bytes | ||||
| # 1g => 1000000000 bytes | ||||
| # 1gb => 1024*1024*1024 bytes | ||||
| # | ||||
| # units are case insensitive so 1GB 1Gb 1gB are all the same. | ||||
| 
 | ||||
| ################################## INCLUDES ################################### | ||||
| 
 | ||||
| # Include one or more other config files here.  This is useful if you | ||||
| # have a standard template that goes to all Redis server but also need | ||||
| # to customize a few per-server settings.  Include files can include | ||||
| # other files, so use this wisely. | ||||
| # | ||||
| # Notice option "include" won't be rewritten by command "CONFIG REWRITE" | ||||
| # from admin or Redis Sentinel. Since Redis always uses the last processed | ||||
| # line as value of a configuration directive, you'd better put includes | ||||
| # at the beginning of this file to avoid overwriting config change at runtime. | ||||
| # | ||||
| # If instead you are interested in using includes to override configuration | ||||
| # options, it is better to use include as the last line. | ||||
| # | ||||
| # include /path/to/local.conf | ||||
| # include /path/to/other.conf | ||||
| 
 | ||||
| ################################ GENERAL  ##################################### | ||||
| 
 | ||||
| # By default Redis does not run as a daemon. Use 'yes' if you need it. | ||||
| # Note that Redis will write a pid file in /var/run/redis.pid when daemonized. | ||||
| daemonize yes | ||||
| 
 | ||||
| # When running daemonized, Redis writes a pid file in /var/run/redis.pid by | ||||
| # default. You can specify a custom pid file location here. | ||||
| pidfile /var/run/redis/redis-server.pid | ||||
| 
 | ||||
| # Accept connections on the specified port, default is 6379. | ||||
| # If port 0 is specified Redis will not listen on a TCP socket. | ||||
| port 6379 | ||||
| 
 | ||||
| # TCP listen() backlog. | ||||
| # | ||||
| # In high requests-per-second environments you need an high backlog in order | ||||
| # to avoid slow clients connections issues. Note that the Linux kernel | ||||
| # will silently truncate it to the value of /proc/sys/net/core/somaxconn so | ||||
| # make sure to raise both the value of somaxconn and tcp_max_syn_backlog | ||||
| # in order to get the desired effect. | ||||
| tcp-backlog 511 | ||||
| 
 | ||||
| # By default Redis listens for connections from all the network interfaces | ||||
| # available on the server. It is possible to listen to just one or multiple | ||||
| # interfaces using the "bind" configuration directive, followed by one or | ||||
| # more IP addresses. | ||||
| # | ||||
| # Examples: | ||||
| # | ||||
| # bind 192.168.1.100 10.0.0.1 | ||||
| bind 127.0.0.1 {{ salt['pillar.get']('gnuviechadmin:machines:%s:ip' % salt['pillar.get']('gnuviechadmin:redis_host')) }} | ||||
| 
 | ||||
| # Specify the path for the Unix socket that will be used to listen for | ||||
| # incoming connections. There is no default, so Redis will not listen | ||||
| # on a unix socket when not specified. | ||||
| # | ||||
| # unixsocket /tmp/redis.sock | ||||
| # unixsocketperm 700 | ||||
| 
 | ||||
| # Close the connection after a client is idle for N seconds (0 to disable) | ||||
| timeout 0 | ||||
| 
 | ||||
| # TCP keepalive. | ||||
| # | ||||
| # If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence | ||||
| # of communication. This is useful for two reasons: | ||||
| # | ||||
| # 1) Detect dead peers. | ||||
| # 2) Take the connection alive from the point of view of network | ||||
| #    equipment in the middle. | ||||
| # | ||||
| # On Linux, the specified value (in seconds) is the period used to send ACKs. | ||||
| # Note that to close the connection the double of the time is needed. | ||||
| # On other kernels the period depends on the kernel configuration. | ||||
| # | ||||
| # A reasonable value for this option is 60 seconds. | ||||
| tcp-keepalive 0 | ||||
| 
 | ||||
| # Specify the server verbosity level. | ||||
| # This can be one of: | ||||
| # debug (a lot of information, useful for development/testing) | ||||
| # verbose (many rarely useful info, but not a mess like the debug level) | ||||
| # notice (moderately verbose, what you want in production probably) | ||||
| # warning (only very important / critical messages are logged) | ||||
| loglevel notice | ||||
| 
 | ||||
| # Specify the log file name. Also the empty string can be used to force | ||||
| # Redis to log on the standard output. Note that if you use standard | ||||
| # output for logging but daemonize, logs will be sent to /dev/null | ||||
| logfile /var/log/redis/redis-server.log | ||||
| 
 | ||||
| # To enable logging to the system logger, just set 'syslog-enabled' to yes, | ||||
| # and optionally update the other syslog parameters to suit your needs. | ||||
| # syslog-enabled no | ||||
| 
 | ||||
| # Specify the syslog identity. | ||||
| # syslog-ident redis | ||||
| 
 | ||||
| # Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7. | ||||
| # syslog-facility local0 | ||||
| 
 | ||||
| # Set the number of databases. The default database is DB 0, you can select | ||||
| # a different one on a per-connection basis using SELECT <dbid> where | ||||
| # dbid is a number between 0 and 'databases'-1 | ||||
| databases 16 | ||||
| 
 | ||||
| ################################ SNAPSHOTTING  ################################ | ||||
| # | ||||
| # Save the DB on disk: | ||||
| # | ||||
| #   save <seconds> <changes> | ||||
| # | ||||
| #   Will save the DB if both the given number of seconds and the given | ||||
| #   number of write operations against the DB occurred. | ||||
| # | ||||
| #   In the example below the behaviour will be to save: | ||||
| #   after 900 sec (15 min) if at least 1 key changed | ||||
| #   after 300 sec (5 min) if at least 10 keys changed | ||||
| #   after 60 sec if at least 10000 keys changed | ||||
| # | ||||
| #   Note: you can disable saving at all commenting all the "save" lines. | ||||
| # | ||||
| #   It is also possible to remove all the previously configured save | ||||
| #   points by adding a save directive with a single empty string argument | ||||
| #   like in the following example: | ||||
| # | ||||
| #   save "" | ||||
| 
 | ||||
| save 900 1 | ||||
| save 300 10 | ||||
| save 60 10000 | ||||
| 
 | ||||
| # By default Redis will stop accepting writes if RDB snapshots are enabled | ||||
| # (at least one save point) and the latest background save failed. | ||||
| # This will make the user aware (in a hard way) that data is not persisting | ||||
| # on disk properly, otherwise chances are that no one will notice and some | ||||
| # disaster will happen. | ||||
| # | ||||
| # If the background saving process will start working again Redis will | ||||
| # automatically allow writes again. | ||||
| # | ||||
| # However if you have setup your proper monitoring of the Redis server | ||||
| # and persistence, you may want to disable this feature so that Redis will | ||||
| # continue to work as usual even if there are problems with disk, | ||||
| # permissions, and so forth. | ||||
| stop-writes-on-bgsave-error yes | ||||
| 
 | ||||
| # Compress string objects using LZF when dump .rdb databases? | ||||
| # For default that's set to 'yes' as it's almost always a win. | ||||
| # If you want to save some CPU in the saving child set it to 'no' but | ||||
| # the dataset will likely be bigger if you have compressible values or keys. | ||||
| rdbcompression yes | ||||
| 
 | ||||
| # Since version 5 of RDB a CRC64 checksum is placed at the end of the file. | ||||
| # This makes the format more resistant to corruption but there is a performance | ||||
| # hit to pay (around 10%) when saving and loading RDB files, so you can disable it | ||||
| # for maximum performances. | ||||
| # | ||||
| # RDB files created with checksum disabled have a checksum of zero that will | ||||
| # tell the loading code to skip the check. | ||||
| rdbchecksum yes | ||||
| 
 | ||||
| # The filename where to dump the DB | ||||
| dbfilename dump.rdb | ||||
| 
 | ||||
| # The working directory. | ||||
| # | ||||
| # The DB will be written inside this directory, with the filename specified | ||||
| # above using the 'dbfilename' configuration directive. | ||||
| #  | ||||
| # The Append Only File will also be created inside this directory. | ||||
| #  | ||||
| # Note that you must specify a directory here, not a file name. | ||||
| dir /var/lib/redis | ||||
| 
 | ||||
| ################################# REPLICATION ################################# | ||||
| 
 | ||||
| # Master-Slave replication. Use slaveof to make a Redis instance a copy of | ||||
| # another Redis server. A few things to understand ASAP about Redis replication. | ||||
| # | ||||
| # 1) Redis replication is asynchronous, but you can configure a master to | ||||
| #    stop accepting writes if it appears to be not connected with at least | ||||
| #    a given number of slaves. | ||||
| # 2) Redis slaves are able to perform a partial resynchronization with the | ||||
| #    master if the replication link is lost for a relatively small amount of | ||||
| #    time. You may want to configure the replication backlog size (see the next | ||||
| #    sections of this file) with a sensible value depending on your needs. | ||||
| # 3) Replication is automatic and does not need user intervention. After a | ||||
| #    network partition slaves automatically try to reconnect to masters | ||||
| #    and resynchronize with them. | ||||
| # | ||||
| # slaveof <masterip> <masterport> | ||||
| 
 | ||||
| # If the master is password protected (using the "requirepass" configuration | ||||
| # directive below) it is possible to tell the slave to authenticate before | ||||
| # starting the replication synchronization process, otherwise the master will | ||||
| # refuse the slave request. | ||||
| # | ||||
| # masterauth <master-password> | ||||
| 
 | ||||
| # When a slave loses its connection with the master, or when the replication | ||||
| # is still in progress, the slave can act in two different ways: | ||||
| # | ||||
| # 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will | ||||
| #    still reply to client requests, possibly with out of date data, or the | ||||
| #    data set may just be empty if this is the first synchronization. | ||||
| # | ||||
| # 2) if slave-serve-stale-data is set to 'no' the slave will reply with | ||||
| #    an error "SYNC with master in progress" to all the kind of commands | ||||
| #    but to INFO and SLAVEOF. | ||||
| # | ||||
| slave-serve-stale-data yes | ||||
| 
 | ||||
| # You can configure a slave instance to accept writes or not. Writing against | ||||
| # a slave instance may be useful to store some ephemeral data (because data | ||||
| # written on a slave will be easily deleted after resync with the master) but | ||||
| # may also cause problems if clients are writing to it because of a | ||||
| # misconfiguration. | ||||
| # | ||||
| # Since Redis 2.6 by default slaves are read-only. | ||||
| # | ||||
| # Note: read only slaves are not designed to be exposed to untrusted clients | ||||
| # on the internet. It's just a protection layer against misuse of the instance. | ||||
| # Still a read only slave exports by default all the administrative commands | ||||
| # such as CONFIG, DEBUG, and so forth. To a limited extent you can improve | ||||
| # security of read only slaves using 'rename-command' to shadow all the | ||||
| # administrative / dangerous commands. | ||||
| slave-read-only yes | ||||
| 
 | ||||
| # Slaves send PINGs to server in a predefined interval. It's possible to change | ||||
| # this interval with the repl_ping_slave_period option. The default value is 10 | ||||
| # seconds. | ||||
| # | ||||
| # repl-ping-slave-period 10 | ||||
| 
 | ||||
| # The following option sets the replication timeout for: | ||||
| # | ||||
| # 1) Bulk transfer I/O during SYNC, from the point of view of slave. | ||||
| # 2) Master timeout from the point of view of slaves (data, pings). | ||||
| # 3) Slave timeout from the point of view of masters (REPLCONF ACK pings). | ||||
| # | ||||
| # It is important to make sure that this value is greater than the value | ||||
| # specified for repl-ping-slave-period otherwise a timeout will be detected | ||||
| # every time there is low traffic between the master and the slave. | ||||
| # | ||||
| # repl-timeout 60 | ||||
| 
 | ||||
| # Disable TCP_NODELAY on the slave socket after SYNC? | ||||
| # | ||||
| # If you select "yes" Redis will use a smaller number of TCP packets and | ||||
| # less bandwidth to send data to slaves. But this can add a delay for | ||||
| # the data to appear on the slave side, up to 40 milliseconds with | ||||
| # Linux kernels using a default configuration. | ||||
| # | ||||
| # If you select "no" the delay for data to appear on the slave side will | ||||
| # be reduced but more bandwidth will be used for replication. | ||||
| # | ||||
| # By default we optimize for low latency, but in very high traffic conditions | ||||
| # or when the master and slaves are many hops away, turning this to "yes" may | ||||
| # be a good idea. | ||||
| repl-disable-tcp-nodelay no | ||||
| 
 | ||||
| # Set the replication backlog size. The backlog is a buffer that accumulates | ||||
| # slave data when slaves are disconnected for some time, so that when a slave | ||||
| # wants to reconnect again, often a full resync is not needed, but a partial | ||||
| # resync is enough, just passing the portion of data the slave missed while | ||||
| # disconnected. | ||||
| # | ||||
| # The biggest the replication backlog, the longer the time the slave can be | ||||
| # disconnected and later be able to perform a partial resynchronization. | ||||
| # | ||||
| # The backlog is only allocated once there is at least a slave connected. | ||||
| # | ||||
| # repl-backlog-size 1mb | ||||
| 
 | ||||
| # After a master has no longer connected slaves for some time, the backlog | ||||
| # will be freed. The following option configures the amount of seconds that | ||||
| # need to elapse, starting from the time the last slave disconnected, for | ||||
| # the backlog buffer to be freed. | ||||
| # | ||||
| # A value of 0 means to never release the backlog. | ||||
| # | ||||
| # repl-backlog-ttl 3600 | ||||
| 
 | ||||
| # The slave priority is an integer number published by Redis in the INFO output. | ||||
| # It is used by Redis Sentinel in order to select a slave to promote into a | ||||
| # master if the master is no longer working correctly. | ||||
| # | ||||
| # A slave with a low priority number is considered better for promotion, so | ||||
| # for instance if there are three slaves with priority 10, 100, 25 Sentinel will | ||||
| # pick the one with priority 10, that is the lowest. | ||||
| # | ||||
| # However a special priority of 0 marks the slave as not able to perform the | ||||
| # role of master, so a slave with priority of 0 will never be selected by | ||||
| # Redis Sentinel for promotion. | ||||
| # | ||||
| # By default the priority is 100. | ||||
| slave-priority 100 | ||||
| 
 | ||||
| # It is possible for a master to stop accepting writes if there are less than | ||||
| # N slaves connected, having a lag less or equal than M seconds. | ||||
| # | ||||
| # The N slaves need to be in "online" state. | ||||
| # | ||||
| # The lag in seconds, that must be <= the specified value, is calculated from | ||||
| # the last ping received from the slave, that is usually sent every second. | ||||
| # | ||||
| # This option does not GUARANTEES that N replicas will accept the write, but | ||||
| # will limit the window of exposure for lost writes in case not enough slaves | ||||
| # are available, to the specified number of seconds. | ||||
| # | ||||
| # For example to require at least 3 slaves with a lag <= 10 seconds use: | ||||
| # | ||||
| # min-slaves-to-write 3 | ||||
| # min-slaves-max-lag 10 | ||||
| # | ||||
| # Setting one or the other to 0 disables the feature. | ||||
| # | ||||
| # By default min-slaves-to-write is set to 0 (feature disabled) and | ||||
| # min-slaves-max-lag is set to 10. | ||||
| 
 | ||||
| ################################## SECURITY ################################### | ||||
| 
 | ||||
| # Require clients to issue AUTH <PASSWORD> before processing any other | ||||
| # commands.  This might be useful in environments in which you do not trust | ||||
| # others with access to the host running redis-server. | ||||
| # | ||||
| # This should stay commented out for backward compatibility and because most | ||||
| # people do not need auth (e.g. they run their own servers). | ||||
| #  | ||||
| # Warning: since Redis is pretty fast an outside user can try up to | ||||
| # 150k passwords per second against a good box. This means that you should | ||||
| # use a very strong password otherwise it will be very easy to break. | ||||
| # | ||||
| # requirepass foobared | ||||
| requirepass {{ salt['pillar.get']('gnuviechadmin:redis_password') }} | ||||
| 
 | ||||
| # Command renaming. | ||||
| # | ||||
| # It is possible to change the name of dangerous commands in a shared | ||||
| # environment. For instance the CONFIG command may be renamed into something | ||||
| # hard to guess so that it will still be available for internal-use tools | ||||
| # but not available for general clients. | ||||
| # | ||||
| # Example: | ||||
| # | ||||
| # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 | ||||
| # | ||||
| # It is also possible to completely kill a command by renaming it into | ||||
| # an empty string: | ||||
| # | ||||
| # rename-command CONFIG "" | ||||
| # | ||||
| # Please note that changing the name of commands that are logged into the | ||||
| # AOF file or transmitted to slaves may cause problems. | ||||
| 
 | ||||
| ################################### LIMITS #################################### | ||||
| 
 | ||||
| # Set the max number of connected clients at the same time. By default | ||||
| # this limit is set to 10000 clients, however if the Redis server is not | ||||
| # able to configure the process file limit to allow for the specified limit | ||||
| # the max number of allowed clients is set to the current file limit | ||||
| # minus 32 (as Redis reserves a few file descriptors for internal uses). | ||||
| # | ||||
| # Once the limit is reached Redis will close all the new connections sending | ||||
| # an error 'max number of clients reached'. | ||||
| # | ||||
| # maxclients 10000 | ||||
| 
 | ||||
| # Don't use more memory than the specified amount of bytes. | ||||
| # When the memory limit is reached Redis will try to remove keys | ||||
| # according to the eviction policy selected (see maxmemory-policy). | ||||
| # | ||||
| # If Redis can't remove keys according to the policy, or if the policy is | ||||
| # set to 'noeviction', Redis will start to reply with errors to commands | ||||
| # that would use more memory, like SET, LPUSH, and so on, and will continue | ||||
| # to reply to read-only commands like GET. | ||||
| # | ||||
| # This option is usually useful when using Redis as an LRU cache, or to set | ||||
| # a hard memory limit for an instance (using the 'noeviction' policy). | ||||
| # | ||||
| # WARNING: If you have slaves attached to an instance with maxmemory on, | ||||
| # the size of the output buffers needed to feed the slaves are subtracted | ||||
| # from the used memory count, so that network problems / resyncs will | ||||
| # not trigger a loop where keys are evicted, and in turn the output | ||||
| # buffer of slaves is full with DELs of keys evicted triggering the deletion | ||||
| # of more keys, and so forth until the database is completely emptied. | ||||
| # | ||||
| # In short... if you have slaves attached it is suggested that you set a lower | ||||
| # limit for maxmemory so that there is some free RAM on the system for slave | ||||
| # output buffers (but this is not needed if the policy is 'noeviction'). | ||||
| # | ||||
| # maxmemory <bytes> | ||||
| 
 | ||||
| # MAXMEMORY POLICY: how Redis will select what to remove when maxmemory | ||||
| # is reached. You can select among five behaviors: | ||||
| #  | ||||
| # volatile-lru -> remove the key with an expire set using an LRU algorithm | ||||
| # allkeys-lru -> remove any key accordingly to the LRU algorithm | ||||
| # volatile-random -> remove a random key with an expire set | ||||
| # allkeys-random -> remove a random key, any key | ||||
| # volatile-ttl -> remove the key with the nearest expire time (minor TTL) | ||||
| # noeviction -> don't expire at all, just return an error on write operations | ||||
| #  | ||||
| # Note: with any of the above policies, Redis will return an error on write | ||||
| #       operations, when there are not suitable keys for eviction. | ||||
| # | ||||
| #       At the date of writing this commands are: set setnx setex append | ||||
| #       incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd | ||||
| #       sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby | ||||
| #       zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby | ||||
| #       getset mset msetnx exec sort | ||||
| # | ||||
| # The default is: | ||||
| # | ||||
| # maxmemory-policy volatile-lru | ||||
| 
 | ||||
| # LRU and minimal TTL algorithms are not precise algorithms but approximated | ||||
| # algorithms (in order to save memory), so you can select as well the sample | ||||
| # size to check. For instance for default Redis will check three keys and | ||||
| # pick the one that was used less recently, you can change the sample size | ||||
| # using the following configuration directive. | ||||
| # | ||||
| # maxmemory-samples 3 | ||||
| 
 | ||||
| ############################## APPEND ONLY MODE ############################### | ||||
| 
 | ||||
| # By default Redis asynchronously dumps the dataset on disk. This mode is | ||||
| # good enough in many applications, but an issue with the Redis process or | ||||
| # a power outage may result into a few minutes of writes lost (depending on | ||||
| # the configured save points). | ||||
| # | ||||
| # The Append Only File is an alternative persistence mode that provides | ||||
| # much better durability. For instance using the default data fsync policy | ||||
| # (see later in the config file) Redis can lose just one second of writes in a | ||||
| # dramatic event like a server power outage, or a single write if something | ||||
| # wrong with the Redis process itself happens, but the operating system is | ||||
| # still running correctly. | ||||
| # | ||||
| # AOF and RDB persistence can be enabled at the same time without problems. | ||||
| # If the AOF is enabled on startup Redis will load the AOF, that is the file | ||||
| # with the better durability guarantees. | ||||
| # | ||||
| # Please check http://redis.io/topics/persistence for more information. | ||||
| 
 | ||||
| appendonly no | ||||
| 
 | ||||
| # The name of the append only file (default: "appendonly.aof") | ||||
| 
 | ||||
| appendfilename "appendonly.aof" | ||||
| 
 | ||||
| # The fsync() call tells the Operating System to actually write data on disk | ||||
| # instead to wait for more data in the output buffer. Some OS will really flush  | ||||
| # data on disk, some other OS will just try to do it ASAP. | ||||
| # | ||||
| # Redis supports three different modes: | ||||
| # | ||||
| # no: don't fsync, just let the OS flush the data when it wants. Faster. | ||||
| # always: fsync after every write to the append only log . Slow, Safest. | ||||
| # everysec: fsync only one time every second. Compromise. | ||||
| # | ||||
| # The default is "everysec", as that's usually the right compromise between | ||||
| # speed and data safety. It's up to you to understand if you can relax this to | ||||
| # "no" that will let the operating system flush the output buffer when | ||||
| # it wants, for better performances (but if you can live with the idea of | ||||
| # some data loss consider the default persistence mode that's snapshotting), | ||||
| # or on the contrary, use "always" that's very slow but a bit safer than | ||||
| # everysec. | ||||
| # | ||||
| # More details please check the following article: | ||||
| # http://antirez.com/post/redis-persistence-demystified.html | ||||
| # | ||||
| # If unsure, use "everysec". | ||||
| 
 | ||||
| # appendfsync always | ||||
| appendfsync everysec | ||||
| # appendfsync no | ||||
| 
 | ||||
| # When the AOF fsync policy is set to always or everysec, and a background | ||||
| # saving process (a background save or AOF log background rewriting) is | ||||
| # performing a lot of I/O against the disk, in some Linux configurations | ||||
| # Redis may block too long on the fsync() call. Note that there is no fix for | ||||
| # this currently, as even performing fsync in a different thread will block | ||||
| # our synchronous write(2) call. | ||||
| # | ||||
| # In order to mitigate this problem it's possible to use the following option | ||||
| # that will prevent fsync() from being called in the main process while a | ||||
| # BGSAVE or BGREWRITEAOF is in progress. | ||||
| # | ||||
| # This means that while another child is saving, the durability of Redis is | ||||
| # the same as "appendfsync none". In practical terms, this means that it is | ||||
| # possible to lose up to 30 seconds of log in the worst scenario (with the | ||||
| # default Linux settings). | ||||
| #  | ||||
| # If you have latency problems turn this to "yes". Otherwise leave it as | ||||
| # "no" that is the safest pick from the point of view of durability. | ||||
| 
 | ||||
| no-appendfsync-on-rewrite no | ||||
| 
 | ||||
| # Automatic rewrite of the append only file. | ||||
| # Redis is able to automatically rewrite the log file implicitly calling | ||||
| # BGREWRITEAOF when the AOF log size grows by the specified percentage. | ||||
| #  | ||||
| # This is how it works: Redis remembers the size of the AOF file after the | ||||
| # latest rewrite (if no rewrite has happened since the restart, the size of | ||||
| # the AOF at startup is used). | ||||
| # | ||||
| # This base size is compared to the current size. If the current size is | ||||
| # bigger than the specified percentage, the rewrite is triggered. Also | ||||
| # you need to specify a minimal size for the AOF file to be rewritten, this | ||||
| # is useful to avoid rewriting the AOF file even if the percentage increase | ||||
| # is reached but it is still pretty small. | ||||
| # | ||||
| # Specify a percentage of zero in order to disable the automatic AOF | ||||
| # rewrite feature. | ||||
| 
 | ||||
| auto-aof-rewrite-percentage 100 | ||||
| auto-aof-rewrite-min-size 64mb | ||||
| 
 | ||||
| ################################ LUA SCRIPTING  ############################### | ||||
| 
 | ||||
| # Max execution time of a Lua script in milliseconds. | ||||
| # | ||||
| # If the maximum execution time is reached Redis will log that a script is | ||||
| # still in execution after the maximum allowed time and will start to | ||||
| # reply to queries with an error. | ||||
| # | ||||
| # When a long running script exceed the maximum execution time only the | ||||
| # SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be | ||||
| # used to stop a script that did not yet called write commands. The second | ||||
| # is the only way to shut down the server in the case a write commands was | ||||
| # already issue by the script but the user don't want to wait for the natural | ||||
| # termination of the script. | ||||
| # | ||||
| # Set it to 0 or a negative value for unlimited execution without warnings. | ||||
| lua-time-limit 5000 | ||||
| 
 | ||||
| ################################## SLOW LOG ################################### | ||||
| 
 | ||||
| # The Redis Slow Log is a system to log queries that exceeded a specified | ||||
| # execution time. The execution time does not include the I/O operations | ||||
| # like talking with the client, sending the reply and so forth, | ||||
| # but just the time needed to actually execute the command (this is the only | ||||
| # stage of command execution where the thread is blocked and can not serve | ||||
| # other requests in the meantime). | ||||
| #  | ||||
| # You can configure the slow log with two parameters: one tells Redis | ||||
| # what is the execution time, in microseconds, to exceed in order for the | ||||
| # command to get logged, and the other parameter is the length of the | ||||
| # slow log. When a new command is logged the oldest one is removed from the | ||||
| # queue of logged commands. | ||||
| 
 | ||||
| # The following time is expressed in microseconds, so 1000000 is equivalent | ||||
| # to one second. Note that a negative number disables the slow log, while | ||||
| # a value of zero forces the logging of every command. | ||||
| slowlog-log-slower-than 10000 | ||||
| 
 | ||||
| # There is no limit to this length. Just be aware that it will consume memory. | ||||
| # You can reclaim memory used by the slow log with SLOWLOG RESET. | ||||
| slowlog-max-len 128 | ||||
| 
 | ||||
| ################################ LATENCY MONITOR ############################## | ||||
| 
 | ||||
| # The Redis latency monitoring subsystem samples different operations | ||||
| # at runtime in order to collect data related to possible sources of | ||||
| # latency of a Redis instance. | ||||
| # | ||||
| # Via the LATENCY command this information is available to the user that can | ||||
| # print graphs and obtain reports. | ||||
| # | ||||
| # The system only logs operations that were performed in a time equal or | ||||
| # greater than the amount of milliseconds specified via the | ||||
| # latency-monitor-threshold configuration directive. When its value is set | ||||
| # to zero, the latency monitor is turned off. | ||||
| # | ||||
| # By default latency monitoring is disabled since it is mostly not needed | ||||
| # if you don't have latency issues, and collecting data has a performance | ||||
| # impact, that while very small, can be measured under big load. Latency | ||||
| # monitoring can easily be enalbed at runtime using the command | ||||
| # "CONFIG SET latency-monitor-threshold <milliseconds>" if needed. | ||||
| latency-monitor-threshold 0 | ||||
| 
 | ||||
| ############################# Event notification ############################## | ||||
| 
 | ||||
| # Redis can notify Pub/Sub clients about events happening in the key space. | ||||
| # This feature is documented at http://redis.io/topics/notifications | ||||
| #  | ||||
| # For instance if keyspace events notification is enabled, and a client | ||||
| # performs a DEL operation on key "foo" stored in the Database 0, two | ||||
| # messages will be published via Pub/Sub: | ||||
| # | ||||
| # PUBLISH __keyspace@0__:foo del | ||||
| # PUBLISH __keyevent@0__:del foo | ||||
| # | ||||
| # It is possible to select the events that Redis will notify among a set | ||||
| # of classes. Every class is identified by a single character: | ||||
| # | ||||
| #  K     Keyspace events, published with __keyspace@<db>__ prefix. | ||||
| #  E     Keyevent events, published with __keyevent@<db>__ prefix. | ||||
| #  g     Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ... | ||||
| #  $     String commands | ||||
| #  l     List commands | ||||
| #  s     Set commands | ||||
| #  h     Hash commands | ||||
| #  z     Sorted set commands | ||||
| #  x     Expired events (events generated every time a key expires) | ||||
| #  e     Evicted events (events generated when a key is evicted for maxmemory) | ||||
| #  A     Alias for g$lshzxe, so that the "AKE" string means all the events. | ||||
| # | ||||
| #  The "notify-keyspace-events" takes as argument a string that is composed | ||||
| #  by zero or multiple characters. The empty string means that notifications | ||||
| #  are disabled at all. | ||||
| # | ||||
| #  Example: to enable list and generic events, from the point of view of the | ||||
| #           event name, use: | ||||
| # | ||||
| #  notify-keyspace-events Elg | ||||
| # | ||||
| #  Example 2: to get the stream of the expired keys subscribing to channel | ||||
| #             name __keyevent@0__:expired use: | ||||
| # | ||||
| #  notify-keyspace-events Ex | ||||
| # | ||||
| #  By default all notifications are disabled because most users don't need | ||||
| #  this feature and the feature has some overhead. Note that if you don't | ||||
| #  specify at least one of K or E, no events will be delivered. | ||||
| notify-keyspace-events "" | ||||
| 
 | ||||
| ############################### ADVANCED CONFIG ############################### | ||||
| 
 | ||||
| # Hashes are encoded using a memory efficient data structure when they have a | ||||
| # small number of entries, and the biggest entry does not exceed a given | ||||
| # threshold. These thresholds can be configured using the following directives. | ||||
| hash-max-ziplist-entries 512 | ||||
| hash-max-ziplist-value 64 | ||||
| 
 | ||||
| # Similarly to hashes, small lists are also encoded in a special way in order | ||||
| # to save a lot of space. The special representation is only used when | ||||
| # you are under the following limits: | ||||
| list-max-ziplist-entries 512 | ||||
| list-max-ziplist-value 64 | ||||
| 
 | ||||
| # Sets have a special encoding in just one case: when a set is composed | ||||
| # of just strings that happens to be integers in radix 10 in the range | ||||
| # of 64 bit signed integers. | ||||
| # The following configuration setting sets the limit in the size of the | ||||
| # set in order to use this special memory saving encoding. | ||||
| set-max-intset-entries 512 | ||||
| 
 | ||||
| # Similarly to hashes and lists, sorted sets are also specially encoded in | ||||
| # order to save a lot of space. This encoding is only used when the length and | ||||
| # elements of a sorted set are below the following limits: | ||||
| zset-max-ziplist-entries 128 | ||||
| zset-max-ziplist-value 64 | ||||
| 
 | ||||
| # HyperLogLog sparse representation bytes limit. The limit includes the | ||||
| # 16 bytes header. When an HyperLogLog using the sparse representation crosses | ||||
| # this limit, it is converted into the dense representation. | ||||
| # | ||||
| # A value greater than 16000 is totally useless, since at that point the | ||||
| # dense representation is more memory efficient. | ||||
| #  | ||||
| # The suggested value is ~ 3000 in order to have the benefits of | ||||
| # the space efficient encoding without slowing down too much PFADD, | ||||
| # which is O(N) with the sparse encoding. The value can be raised to | ||||
| # ~ 10000 when CPU is not a concern, but space is, and the data set is | ||||
| # composed of many HyperLogLogs with cardinality in the 0 - 15000 range. | ||||
| hll-sparse-max-bytes 3000 | ||||
| 
 | ||||
| # Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in | ||||
| # order to help rehashing the main Redis hash table (the one mapping top-level | ||||
| # keys to values). The hash table implementation Redis uses (see dict.c) | ||||
| # performs a lazy rehashing: the more operation you run into a hash table | ||||
| # that is rehashing, the more rehashing "steps" are performed, so if the | ||||
| # server is idle the rehashing is never complete and some more memory is used | ||||
| # by the hash table. | ||||
| #  | ||||
| # The default is to use this millisecond 10 times every second in order to | ||||
| # active rehashing the main dictionaries, freeing memory when possible. | ||||
| # | ||||
| # If unsure: | ||||
| # use "activerehashing no" if you have hard latency requirements and it is | ||||
| # not a good thing in your environment that Redis can reply form time to time | ||||
| # to queries with 2 milliseconds delay. | ||||
| # | ||||
| # use "activerehashing yes" if you don't have such hard requirements but | ||||
| # want to free memory asap when possible. | ||||
| activerehashing yes | ||||
| 
 | ||||
| # The client output buffer limits can be used to force disconnection of clients | ||||
| # that are not reading data from the server fast enough for some reason (a | ||||
| # common reason is that a Pub/Sub client can't consume messages as fast as the | ||||
| # publisher can produce them). | ||||
| # | ||||
| # The limit can be set differently for the three different classes of clients: | ||||
| # | ||||
| # normal -> normal clients including MONITOR clients | ||||
| # slave  -> slave clients | ||||
| # pubsub -> clients subscribed to at least one pubsub channel or pattern | ||||
| # | ||||
| # The syntax of every client-output-buffer-limit directive is the following: | ||||
| # | ||||
| # client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds> | ||||
| # | ||||
| # A client is immediately disconnected once the hard limit is reached, or if | ||||
| # the soft limit is reached and remains reached for the specified number of | ||||
| # seconds (continuously). | ||||
| # So for instance if the hard limit is 32 megabytes and the soft limit is | ||||
| # 16 megabytes / 10 seconds, the client will get disconnected immediately | ||||
| # if the size of the output buffers reach 32 megabytes, but will also get | ||||
| # disconnected if the client reaches 16 megabytes and continuously overcomes | ||||
| # the limit for 10 seconds. | ||||
| # | ||||
| # By default normal clients are not limited because they don't receive data | ||||
| # without asking (in a push way), but just after a request, so only | ||||
| # asynchronous clients may create a scenario where data is requested faster | ||||
| # than it can read. | ||||
| # | ||||
| # Instead there is a default limit for pubsub and slave clients, since | ||||
| # subscribers and slaves receive data in a push fashion. | ||||
| # | ||||
| # Both the hard or the soft limit can be disabled by setting them to zero. | ||||
| client-output-buffer-limit normal 0 0 0 | ||||
| client-output-buffer-limit slave 256mb 64mb 60 | ||||
| client-output-buffer-limit pubsub 32mb 8mb 60 | ||||
| 
 | ||||
| # Redis calls an internal function to perform many background tasks, like | ||||
| # closing connections of clients in timeout, purging expired keys that are | ||||
| # never requested, and so forth. | ||||
| # | ||||
| # Not all tasks are performed with the same frequency, but Redis checks for | ||||
| # tasks to perform accordingly to the specified "hz" value. | ||||
| # | ||||
| # By default "hz" is set to 10. Raising the value will use more CPU when | ||||
| # Redis is idle, but at the same time will make Redis more responsive when | ||||
| # there are many keys expiring at the same time, and timeouts may be | ||||
| # handled with more precision. | ||||
| # | ||||
| # The range is between 1 and 500, however a value over 100 is usually not | ||||
| # a good idea. Most users should use the default of 10 and raise this up to | ||||
| # 100 only in environments where very low latency is required. | ||||
| hz 10 | ||||
| 
 | ||||
| # When a child rewrites the AOF file, if the following option is enabled | ||||
| # the file will be fsync-ed every 32 MB of data generated. This is useful | ||||
| # in order to commit the file to the disk more incrementally and avoid | ||||
| # big latency spikes. | ||||
| aof-rewrite-incremental-fsync yes | ||||
| 
 | ||||
							
								
								
									
										11
									
								
								states/top.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								states/top.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| base: | ||||
|   '*': | ||||
|     - vim | ||||
|     - base | ||||
| {% if 'roles' in grains %} | ||||
| {% for role in grains['roles'] %} | ||||
|   'roles:{{ role }}': | ||||
|     - match: grain | ||||
|     - {{ role }} | ||||
| {% endfor %} | ||||
| {% endif %} | ||||
							
								
								
									
										15
									
								
								states/vim/init.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								states/vim/init.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| vim-nox: | ||||
|   pkg.installed | ||||
| 
 | ||||
| editor: | ||||
|   alternatives.set: | ||||
|     - path: /usr/bin/vim.nox | ||||
|     - require: | ||||
|       - pkg: vim-nox | ||||
| 
 | ||||
| /home/vagrant/.vimrc: | ||||
|   file.managed: | ||||
|     - user: vagrant | ||||
|     - group: vagrant | ||||
|     - mode: 0644 | ||||
|     - source: salt://vim/vimrc | ||||
							
								
								
									
										34
									
								
								states/vim/vimrc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								states/vim/vimrc
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| syntax on | ||||
| 
 | ||||
| set showcmd | ||||
| set modeline | ||||
| set modelines=3 | ||||
| set expandtab | ||||
| set shiftwidth=4 | ||||
| set autoindent | ||||
| set smarttab | ||||
| set ruler | ||||
| set list listchars=tab:▷⋅,trail:⋅,nbsp:⋅ | ||||
| set cpoptions+=$ | ||||
| set hlsearch | ||||
| set virtualedit=all | ||||
| set guioptions-=T | ||||
| set guioptions-=m | ||||
| set wildmenu | ||||
| set complete=.,w,b,u,t | ||||
| set number | ||||
| 
 | ||||
| filetype plugin indent on | ||||
| 
 | ||||
| autocmd BufNewFile,BufRead *.sls set filetype=yaml | ||||
| 
 | ||||
| autocmd FileType make set noexpandtab | ||||
| autocmd FileType python set tabstop=4 shiftwidth=4 autoindent smartindent textwidth=79 | ||||
| autocmd FileType html set tabstop=2 shiftwidth=2 textwidth=200 smartindent autoindent | ||||
| autocmd FileType htmldjango set tabstop=2 shiftwidth=2 textwidth=200 | ||||
| autocmd FileType moin set tabstop=2 shiftwidth=2 | ||||
| autocmd FileType rst set textwidth=79 | ||||
| autocmd FileType yaml set tabstop=2 shiftwidth=2 | ||||
| 
 | ||||
| set laststatus=2 | ||||
| set statusline=%f%m%r%h%w\ [TYPE=%Y\ %{&ff}]\ \ [%c\ @\ %l/%L]\ (%p%%)\ [%b\ 0x%B] | ||||
							
								
								
									
										50
									
								
								states/webserver/init.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								states/webserver/init.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,50 @@ | |||
| include: | ||||
|   - nginx | ||||
| 
 | ||||
| /etc/nginx/conf.d/logformat.conf: | ||||
|   file.managed: | ||||
|     - user: root | ||||
|     - group: root | ||||
|     - mode: 0644 | ||||
|     - source: salt://webserver/nginx-logformat.conf | ||||
|     - require: | ||||
|       - pkg: nginx | ||||
|     - watch_in: | ||||
|       - service: nginx | ||||
| 
 | ||||
| {% set ssldir = salt['pillar.get']('nginx:sslcertdir', '/etc/nginx/ssl/certs') %} | ||||
| 
 | ||||
| generate-dhparam-nginx: | ||||
|   cmd.run: | ||||
|     - name: openssl dhparam -out {{ ssldir }}/dhparams.pem 2048 | ||||
|     - umask: 022 | ||||
|     - user: root | ||||
|     - group: root | ||||
|     - creates: {{ ssldir }}/dhparams.pem | ||||
|     - require_in: | ||||
|       - file: /etc/nginx/conf.d/ssl.conf | ||||
|     - watch_in: | ||||
|       - service: nginx | ||||
| 
 | ||||
| /etc/nginx/conf.d/ssl.conf: | ||||
|   file.managed: | ||||
|     - user: root | ||||
|     - group: root | ||||
|     - mode: 0644 | ||||
|     - source: salt://webserver/nginx-ssl.conf | ||||
|     - template: jinja | ||||
|     - require: | ||||
|       - pkg: nginx | ||||
|     - watch_in: | ||||
|       - service: nginx | ||||
| 
 | ||||
| /etc/nginx/snippets/security.conf: | ||||
|   file.managed: | ||||
|     - user: root | ||||
|     - group: root | ||||
|     - mode: 0644 | ||||
|     - source: salt://webserver/nginx-security.conf | ||||
|     - require: | ||||
|       - pkg: nginx | ||||
|     - watch_in: | ||||
|       - service: nginx | ||||
							
								
								
									
										4
									
								
								states/webserver/nginx-logformat.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								states/webserver/nginx-logformat.conf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| log_format main '$remote_addr - $remote_user [$time_local]  ' | ||||
|                 '$server_name ' | ||||
|                 '"$request" $status $body_bytes_sent ' | ||||
|                 '"$http_referer" "$http_user_agent"'; | ||||
							
								
								
									
										19
									
								
								states/webserver/nginx-security.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								states/webserver/nginx-security.conf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| # Security - Basic configuration | ||||
|     location = /favicon.ico { | ||||
|         log_not_found off; | ||||
|         access_log off; | ||||
|         expires max; | ||||
|     } | ||||
| 
 | ||||
|     location = /robots.txt { | ||||
|         allow all; | ||||
|         log_not_found off; | ||||
|         access_log off; | ||||
|     } | ||||
| 
 | ||||
|     # Deny access to hidden files | ||||
|     location ~ /\. { | ||||
|         deny all; | ||||
|         access_log off; | ||||
|         log_not_found off; | ||||
|     } | ||||
							
								
								
									
										15
									
								
								states/webserver/nginx-ssl.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								states/webserver/nginx-ssl.conf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| # Default TLS settings | ||||
| ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | ||||
| ssl_ciphers kEECDH+AESGCM:kEECDH+AES:kEECDH:EDH+AESGCM:kEDH+AES:kEDH:AESGCM:ALL:!LOW:!EXP:!MD5:!aNULL:!eNULL:!RC4:!DSS; | ||||
| ssl_prefer_server_ciphers on; | ||||
| ssl_session_cache shared:SSL:10m; | ||||
| 
 | ||||
| ssl_dhparam {{ salt['pillar.get']('nginx:sslcertdir', '/etc/nginx/ssl/certs') }}/dhparams.pem; | ||||
| 
 | ||||
| # OCSP stapling | ||||
| ssl_stapling on; | ||||
| ssl_stapling_verify on; | ||||
| 
 | ||||
| # use Google's DNS | ||||
| resolver 8.8.8.8; | ||||
| resolver_timeout 5s; | ||||
							
								
								
									
										30
									
								
								states/webserver/sslcert.macros.sls
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								states/webserver/sslcert.macros.sls
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | |||
| {%- macro key_cert(domain_name) %} | ||||
| {% set nginx_ssl_keydir = salt['pillar.get']('nginx:sslkeydir', '/etc/nginx/ssl/private') %} | ||||
| {% set nginx_ssl_certdir = salt['pillar.get']('nginx:sslcertdir', '/etc/nginx/ssl/certs') %} | ||||
| {% set keyfile = nginx_ssl_keydir + '/' + domain_name + '.key.pem' %} | ||||
| {% set certfile = nginx_ssl_certdir + '/' + domain_name + '.crt.pem' %} | ||||
| 
 | ||||
| {{ keyfile }}: | ||||
|   rsa_key.valid_key: | ||||
|     - bits: {{ salt['pillar.get']('nginx:keylength:' + domain_name, 2048) }} | ||||
|     - require: | ||||
|       - file: {{ nginx_ssl_keydir }} | ||||
|     - require_in: | ||||
|       - file: /etc/nginx/sites-available/{{ domain_name }} | ||||
|       - service: nginx | ||||
| 
 | ||||
| {{ certfile }}: | ||||
|   cmd.run: | ||||
|     - name: openssl req -new -x509 -key {{ keyfile }} -subj '/CN={{ domain_name }}' -days 730 -out {{ certfile }} | ||||
|     - require: | ||||
|       - rsa_key: {{ keyfile }} | ||||
|     - creates: {{ certfile }} | ||||
|   x509_certificate.valid_certificate: | ||||
|     - require: | ||||
|       - file: {{ nginx_ssl_certdir }} | ||||
|       - cmd: {{ certfile }} | ||||
|       - pkg: python-m2crypto | ||||
|     - require_in: | ||||
|       - file: /etc/nginx/sites-available/{{ domain_name }} | ||||
|       - service: nginx | ||||
| {% endmacro %} | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue