{% from "nginx/map.jinja" import nginx as nginx_map with context %} {% set nginx = pillar.get('nginx', {}) -%} {% set use_sysvinit = nginx.get('use_sysvinit', nginx_map['use_sysvinit']) %} {% set version = nginx.get('version', '1.6.2') -%} {% set tarball_url = nginx.get('tarball_url', 'http://nginx.org/download/nginx-' + version + '.tar.gz') -%} {% set checksum = nginx.get('checksum', 'sha256=b5608c2959d3e7ad09b20fc8f9e5bd4bc87b3bc8ba5936a513c04ed8f1391a18') -%} {% set home = nginx.get('home', nginx_map['home']) -%} {% set base_temp_dir = nginx.get('base_temp_dir', '/tmp') -%} {% set source = nginx.get('source_root', '/usr/local/src') -%} {% set conf_dir = nginx.get('conf_dir', nginx_map['conf_dir']) -%} {% set conf_only = nginx.get('conf_only', false) -%} {% set log_dir = nginx.get('log_dir', nginx_map['log_dir']) -%} {% set pid_path = nginx.get('pid_path', nginx_map['pid_path']) -%} {% set lock_path = nginx.get('lock_path', '/var/lock/nginx.lock') -%} {% set sbin_dir = nginx.get('sbin_dir', nginx_map['sbin_dir']) -%} {% set install_prefix = nginx.get('install_prefix', nginx_map['install_prefix']) -%} {% set with_items = nginx.get('with', ['debug', 'http_dav_module', 'http_stub_status_module', 'pcre', 'ipv6']) -%} {% set without_items = nginx.get('without', []) -%} {% set make_flags = nginx.get('make_flags', nginx_map['make_flags']) -%} {% set service_name = nginx.get('service_name', 'nginx') %} {% set service_enable = nginx.get('service_enable', True) %} {% set nginx_package = source + '/nginx-' + version + '.tar.gz' -%} {% set nginx_source = source + "/nginx-" + version -%} {% set nginx_modules_dir = source + "/nginx-modules" -%} include: - nginx.common {% if nginx.get('with_luajit', false) %} - nginx.luajit2 {% endif -%} {% if nginx.get('with_openresty', false) %} - nginx.openresty {% endif -%} nginx_group: group.present: - name: {{ nginx_map.default_group }} nginx_user: file.directory: - name: {{ home }} - user: {{ nginx_map.default_user }} - group: {{ nginx_map.default_group }} - mode: 0755 - require: - user: nginx_user - group: nginx_group user.present: - name: {{ nginx_map.default_user }} - home: {{ home }} - groups: - {{ nginx_map.default_group }} - require: - group: nginx_group {{ nginx_modules_dir }}: file: - directory - makedirs: True get-build-tools: {% if grains['saltversion'] < '2015.8.0' and grains['os_family'] == 'RedHat' %} module.run: - name: pkg.group_install - m_name: {{ nginx_map.group_pkg }} {% else %} {{ nginx_map.group_action }}: - name: {{ nginx_map.group_pkg }} {% endif %} get-nginx: pkg.installed: - names: - {{ nginx_map.libpcre_dev }} - {{ nginx_map.libssl_dev }} file.managed: - name: {{ nginx_package }} - source: {{ tarball_url }} - source_hash: {{ checksum }} - require: - file: {{ nginx_modules_dir }} cmd.wait: - cwd: {{ source }} - name: tar --transform "s,^$(tar --list -zf nginx-{{ version }}.tar.gz | head -n 1),nginx-{{ version }}/," -zxf {{ nginx_package }} - require: - pkg: get-nginx - file: get-nginx - watch: - file: get-nginx {% for name, module in nginx.get('modules', {}).items() -%} get-nginx-{{name}}: file.managed: - name: {{ nginx_modules_dir }}/{{name}}.tar.gz - source: {{ module['source'] }} - source_hash: {{ module['source_hash'] }} cmd.wait: - cwd: {{ nginx_modules_dir }} - names: - tar --transform "s,^$(tar --list -zf {{name}}.tar.gz | head -n 1),{{name}}/," -zxf {{name}}.tar.gz - watch: - file: get-nginx-{{name}} - require_in: - cmd: nginx {% endfor -%} {% if nginx.get('ngx_devel_kit', true) -%} get-ngx_devel_kit: file.managed: - name: {{ source }}/ngx_devel_kit.tar.gz - source: https://github.com/simpl/ngx_devel_kit/archive/v0.2.18.tar.gz - source_hash: sha1=e21ba642f26047661ada678b21eef001ee2121d8 cmd.wait: - cwd: {{ source }} - name: tar -zxf {{ source }}/ngx_devel_kit.tar.gz -C {{ source }} - watch: - file: get-ngx_devel_kit {% endif %} is-nginx-source-modified: cmd.run: - cwd: {{ source }} - stateful: True - names: - if [ ! -d "nginx-{{ version }}" ]; then echo "changed=yes comment='Tarball has not yet been extracted'"; exit 0; fi; cd "nginx-{{ version }}"; m=$(find . \! -name "build.*" -newer {{ sbin_dir }}/nginx -print -quit); r=$?; if [ x$r != x0 ]; then echo "changed=yes comment='binary file does not exist or other find error'"; exit 0; fi; if [ x$m != "x" ]; then echo "changed=yes comment='source files are newer than binary'"; exit 0; fi; echo "changed=no comment='source files are older than binary'" {% for name, module in nginx.get('modules', {}).items() -%} is-nginx-module-modified-{{name}}: cmd.run: - cwd: {{ nginx_modules_dir }}/{{name}} - stateful: True - names: - m=$(find . \! -name "build.*" -newer {{ sbin_dir }}/nginx -print -quit); r=$?; if [ x$r != x0 ]; then echo "changed=yes comment='binary file does not exist or other find error'"; exit 0; fi; if [ x$m != "x" ]; then echo "changed=yes comment='module source files are newer than binary'"; exit 0; fi; echo "changed=no comment='module source files are older than binary'" {% endfor -%} nginx: cmd.wait: - cwd: {{ nginx_source }} - names: - ( ./configure --conf-path={{ conf_dir }}/nginx.conf --sbin-path={{ sbin_dir }}/nginx --user={{ nginx_map.default_user }} --group={{ nginx_map.default_group }} --prefix={{ install_prefix }} --http-log-path={{ log_dir }}/access.log --error-log-path={{ log_dir }}/error.log --pid-path={{ pid_path }} --lock-path={{ lock_path }} --http-client-body-temp-path={{ base_temp_dir }}/body --http-proxy-temp-path={{ base_temp_dir }}/proxy --http-fastcgi-temp-path={{ base_temp_dir }}/fastcgi --http-uwsgi-temp-path={{ base_temp_dir }}/temp_uwsgi --http-scgi-temp-path={{ base_temp_dir }}/temp_scgi {%- for name, module in nginx.get('modules', {}).items() %} --add-module={{nginx_modules_dir}}/{{name}} {%- endfor %} {%- for name in with_items %} --with-{{ name }} {%- endfor %} {%- for name in without_items %} --without-{{ name }} {%- endfor %} && make {{ make_flags }} && make install ) {#- If they want to silence the compiler output, then save it to file so we can reference it later if needed #} {%- if nginx.get('silence_compiler', true) %} > {{ nginx_source }}/build.out 2> {{ nginx_source }}/build.err; {#- If the build process failed, write stderr to stderr and exit with the error code #} r=$?; if [ x$r != x0 ]; then cat {{ nginx_source }}/build.err 1>&2; {#- copy err output to stderr #} exit $r; fi; {% endif %} - watch: - cmd: get-nginx - cmd: is-nginx-source-modified {% for name, module in nginx.get('modules', {}).items() -%} - cmd: is-nginx-module-modified-{{name}} - file: get-nginx-{{name}} {% endfor %} {% if use_sysvinit %} - watch_in: {% set logger_types = ('access', 'error') %} {% for log_type in logger_types %} - service: nginx-logger-{{ log_type }} {% endfor %} {% endif %} - require: - cmd: get-nginx {% for name, module in nginx.get('modules', {}).items() -%} - file: get-nginx-{{name}} {% endfor %} {% if use_sysvinit %} file: - managed - template: jinja - name: /etc/init.d/{{ service_name }} - source: salt://nginx/templates/nginx.init.jinja - user: root - group: root - mode: 0755 - context: service_name: {{ service_name }} sbin_dir: {{ sbin_dir }} pid_path: {{ pid_path }} {% endif %} service: {% if service_enable %} - running - enable: True - restart: True {% else %} - dead - enable: False {% endif %} - name: {{ service_name }} - watch: - cmd: nginx - file: {{ conf_dir }}/nginx.conf - require: - cmd: nginx - file: {{ conf_dir }}/nginx.conf {% for file in nginx.get('delete_confs', []) %} {{ conf_dir }}/{{ file }}: file: - absent - require_in: - service: nginx {% endfor %} {% for file in nginx.get('delete_htdocs', []) %} {{ install_prefix }}/html/{{ file }}: file: - absent - require_in: - service: nginx {% endfor %}