diff --git a/nginx/ng/config.sls b/nginx/ng/config.sls index fc3520a..4d2ed1d 100644 --- a/nginx/ng/config.sls +++ b/nginx/ng/config.sls @@ -4,6 +4,14 @@ {% from 'nginx/ng/map.jinja' import nginx, sls_block with context %} +{% if nginx.install_from_source %} +nginx_log_dir: + file.directory: + - name: /var/log/nginx + - user: {{ nginx.server.config.user }} + - group: {{ nginx.server.config.user }} +{% endif %} + nginx_config: file.managed: {{ sls_block(nginx.server.opts) }} diff --git a/nginx/ng/files/nginx.service b/nginx/ng/files/nginx.service new file mode 100644 index 0000000..ad3d0ca --- /dev/null +++ b/nginx/ng/files/nginx.service @@ -0,0 +1,15 @@ +[Unit] +Description=The NGINX HTTP and reverse proxy server +After=syslog.target network.target remote-fs.target nss-lookup.target + +[Service] +Type=forking +PIDFile=/run/nginx.pid +ExecStartPre=/usr/sbin/nginx -t +ExecStart=/usr/sbin/nginx +ExecReload=/bin/kill -s HUP $MAINPID +ExecStop=/bin/kill -s QUIT $MAINPID +PrivateTmp=true + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/nginx/ng/init.sls b/nginx/ng/init.sls index 692263a..3473b44 100644 --- a/nginx/ng/init.sls +++ b/nginx/ng/init.sls @@ -2,6 +2,8 @@ # # Meta-state to fully install nginx. +{% from 'nginx/ng/map.jinja' import nginx, sls_block with context %} + include: - nginx.ng.config - nginx.ng.service @@ -18,4 +20,8 @@ extend: nginx_config: file: - require: + {% if nginx.install_from_source %} + - cmd: nginx_install + {% else %} - pkg: nginx_install + {% endif %} diff --git a/nginx/ng/map.jinja b/nginx/ng/map.jinja index 2623b1d..30ac548 100644 --- a/nginx/ng/map.jinja +++ b/nginx/ng/map.jinja @@ -77,6 +77,12 @@ 'install_from_ppa': False, 'install_from_repo': False, 'ppa_version': 'stable', + 'source_version': '1.10.0', + 'source_hash': '8ed647c3dd65bc4ced03b0e0f6bf9e633eff6b01bac772bcf97077d58bc2be4d', + 'source': { + 'opts': {}, + 'modules': {} + }, 'package': { 'opts': {}, }, diff --git a/nginx/ng/install.sls b/nginx/ng/pkg.sls similarity index 94% rename from nginx/ng/install.sls rename to nginx/ng/pkg.sls index 8525304..7f149d4 100644 --- a/nginx/ng/install.sls +++ b/nginx/ng/pkg.sls @@ -1,17 +1,13 @@ -# nginx.ng.install +# nginx.ng.pkg # -# Manages installation of nginx. +# Manages installation of nginx from pkg. {% from 'nginx/ng/map.jinja' import nginx, sls_block with context %} nginx_install: - {% if nginx.install_from_source %} - ## add source compilation here - {% else %} pkg.installed: {{ sls_block(nginx.package.opts) }} - name: {{ nginx.lookup.package }} - {% endif %} {% if salt['grains.get']('os_family') == 'Debian' %} {%- if nginx.install_from_repo %} diff --git a/nginx/ng/service.sls b/nginx/ng/service.sls index 2812619..3ea3d5b 100644 --- a/nginx/ng/service.sls +++ b/nginx/ng/service.sls @@ -6,7 +6,18 @@ {% set service_function = {True:'running', False:'dead'}.get(nginx.service.enable) %} include: - - nginx.ng.install + {% if nginx.install_from_source %} + - nginx.ng.src + {% else %} + - nginx.ng.pkg + {% endif %} + +{% if nginx.install_from_source %} +nginx_systemd_service_file: + file.managed: + - name: /lib/systemd/system/nginx.service + - source: salt://nginx/ng/files/nginx.service +{% endif %} nginx_service: service.{{ service_function }}: @@ -14,8 +25,14 @@ nginx_service: - name: {{ nginx.lookup.service }} - enable: {{ nginx.service.enable }} - require: - - sls: nginx.ng.install + {% if nginx.install_from_source %} + - sls: nginx.ng.src + {% else %} + - sls: nginx.ng.pkg + {% endif %} - watch: - {% if not nginx.install_from_source %} + {% if nginx.install_from_source %} + - cmd: nginx_install + {% else %} - pkg: nginx_install {% endif %} diff --git a/nginx/ng/src.sls b/nginx/ng/src.sls new file mode 100644 index 0000000..46d52fd --- /dev/null +++ b/nginx/ng/src.sls @@ -0,0 +1,62 @@ +# nginx.ng.src +# +# Manages installation of nginx from source. + +{% from 'nginx/ng/map.jinja' import nginx, sls_block with context %} + +nginx_build_dep: + {% if salt['grains.get']('os_family') == 'Debian' %} + cmd.run: + - name: apt-get -y build-dep nginx + {% elif salt['grains.get']('os_family') == 'RedHat' %} + cmd.run: + - name: yum-builddep -y nginx + {% else %} + ## install build deps for other distros + {% endif %} + +nginx_download: + archive.extracted: + - name: /tmp/ + - source: http://nginx.org/download/nginx-{{ nginx.source_version }}.tar.gz + - source_hash: sha256={{ nginx.source_hash }} + - archive_format: tar + - if_missing: /usr/sbin/nginx-{{ nginx.source_version }} + - require: + - cmd: nginx_build_dep + - onchanges: + - cmd: nginx_build_dep + +nginx_configure: + cmd.run: + - name: ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf {{ nginx.source.opts | join(' ') }} + - cwd: /tmp/nginx-{{ nginx.source_version }} + - require: + - archive: nginx_download + - onchanges: + - archive: nginx_download + +nginx_compile: + cmd.run: + - name: make + - cwd: /tmp/nginx-{{ nginx.source_version }} + - require: + - cmd: nginx_configure + +nginx_install: + cmd.run: + - name: make install + - cwd: /tmp/nginx-{{ nginx.source_version }} + - require: + - cmd: nginx_compile + - onchanges: + - cmd: nginx_compile + +nginx_link: + file.copy: + - name: /usr/sbin/nginx-{{ nginx.source_version }} + - source: /usr/sbin/nginx + - require: + - cmd: nginx_install + - onchanges: + - cmd: nginx_install \ No newline at end of file diff --git a/pillar.example b/pillar.example index 82fbbf3..847cdde 100644 --- a/pillar.example +++ b/pillar.example @@ -21,10 +21,14 @@ nginx: nginx: ng: - # PPA installing + # PPA install install_from_ppa: True # Set to 'stable', 'development' (mainline), 'community', or 'nightly' for each build accordingly ( https://launchpad.net/~nginx ) ppa_version: 'stable' + + # Source install + source_version: '1.10.0' + source_hash: '' # These are usually set by grains in map.jinja lookup: @@ -43,6 +47,9 @@ nginx: # Source compilation is not currently a part of nginx.ng from_source: False + source: + opts: {} + package: opts: {} # this partially exposes parameters of pkg.installed