diff --git a/.gitignore b/.gitignore index c9b2377..f56f5b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.retry -tests/test.sh +*/__pycache__ +*.pyc diff --git a/.travis.yml b/.travis.yml index 5d3b1be..0631078 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,31 +1,31 @@ --- +language: python services: docker env: - - distro: centos7 - - distro: ubuntu1604 - - distro: ubuntu1404 - - distro: debian9 - - distro: debian8 + global: + - ROLE_NAME: nginx + matrix: + - MOLECULE_DISTRO: centos7 + MOLECULE_DOCKER_COMMAND: /usr/lib/systemd/systemd + - MOLECULE_DISTRO: ubuntu1604 + - MOLECULE_DISTRO: ubuntu1404 + - MOLECULE_DISTRO: debian9 + - MOLECULE_DISTRO: debian8 -script: - # Configure test script so we can run extra tests after playbook is run. - - export container_id=$(date +%s) - - export cleanup=false +install: + # Install test dependencies. + - pip install molecule docker - # Download test shim. - - wget -O ${PWD}/tests/test.sh https://gist.githubusercontent.com/geerlingguy/73ef1e5ee45d8694570f334be385e181/raw/ - - chmod +x ${PWD}/tests/test.sh +before_script: + # Use actual Ansible Galaxy role name for the project directory. + - cd ../ + - mv ansible-role-$ROLE_NAME geerlingguy.$ROLE_NAME + - cd geerlingguy.$ROLE_NAME +script: # Run tests. - - ${PWD}/tests/test.sh - - # Setup test site. - - 'docker exec ${container_id} mkdir -p /var/www/test' - - 'docker exec ${container_id} bash -c "echo Success >| /var/www/test/index.html"' - - # Make sure virtualhost exists. - - 'docker exec --tty ${container_id} env TERM=xterm curl http://localhost/ | grep "Success"' + - molecule test notifications: webhooks: https://galaxy.ansible.com/api/v1/notifications/ diff --git a/README.md b/README.md index ef8c7cc..d8f45db 100644 --- a/README.md +++ b/README.md @@ -130,7 +130,7 @@ Extra lines to be inserted in the top of `nginx.conf`. The value should be defin See the template in `templates/nginx.conf.j2` for more details on the placement. - nginx_log_format: | + nginx_log_format: |- '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' diff --git a/defaults/main.yml b/defaults/main.yml index f711e71..1b2c681 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -15,7 +15,8 @@ nginx_package_name: "nginx" nginx_conf_template: "nginx.conf.j2" nginx_vhost_template: "vhost.j2" -nginx_worker_processes: "{{ ansible_processor_vcpus | default(ansible_processor_count) }}" +nginx_worker_processes: >- + "{{ ansible_processor_vcpus | default(ansible_processor_count) }}" nginx_worker_connections: "1024" nginx_multi_accept: "off" @@ -70,7 +71,7 @@ nginx_vhosts: [] # server_name: "example.com" # default: N/A # root: "/var/www/example.com" # default: N/A # index: "index.html index.htm" # default: "index.html index.htm" -# filename: "example.com.conf" # Can be used to set the filename of the vhost file. +# filename: "example.com.conf" # Can be used to set the vhost filename. # # # Properties that are only added if defined: # server_name_redirect: "www.example.com" # default: N/A @@ -91,7 +92,7 @@ nginx_upstreams: [] # "srv3.example.com" # } -nginx_log_format: | +nginx_log_format: |- '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' diff --git a/handlers/main.yml b/handlers/main.yml index 3f6d024..2db781e 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -4,7 +4,7 @@ - name: validate nginx configuration command: nginx -t -c /etc/nginx/nginx.conf - changed_when: False + changed_when: false - name: reload nginx service: name=nginx state=reloaded diff --git a/meta/main.yml b/meta/main.yml index da5e348..b258974 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -10,29 +10,29 @@ galaxy_info: platforms: - name: EL versions: - - 6 - - 7 + - 6 + - 7 - name: Debian versions: - - all + - all - name: Ubuntu versions: - - trusty - - xenial + - trusty + - xenial - name: Archlinux versions: - - all + - all - name: FreeBSD versions: - - 10.3 - - 10.2 - - 10.1 - - 10.0 - - 9.3 + - 10.3 + - 10.2 + - 10.1 + - 10.0 + - 9.3 - name: OpenBSD versions: - - 5.9 - - 6.0 + - 5.9 + - 6.0 galaxy_tags: - development - web diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml new file mode 100644 index 0000000..0339702 --- /dev/null +++ b/molecule/default/molecule.yml @@ -0,0 +1,27 @@ +--- +dependency: + name: galaxy +driver: + name: docker +lint: + name: yamllint + options: + config-file: molecule/default/yaml-lint.yml +platforms: + - name: instance + image: geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible + command: ${MOLECULE_DOCKER_COMMAND:-"sleep infinity"} + privileged: true + pre_build_image: true +provisioner: + name: ansible + lint: + name: ansible-lint + playbooks: + converge: ${MOLECULE_PLAYBOOK:-playbook.yml} +scenario: + name: default +verifier: + name: testinfra + lint: + name: flake8 diff --git a/tests/test.yml b/molecule/default/playbook.yml similarity index 74% rename from tests/test.yml rename to molecule/default/playbook.yml index 9ae8960..ee65197 100644 --- a/tests/test.yml +++ b/molecule/default/playbook.yml @@ -1,5 +1,6 @@ --- -- hosts: all +- name: Converge + hosts: all vars: nginx_use_ppa: true @@ -14,8 +15,5 @@ when: ansible_os_family == 'Debian' changed_when: false - - name: Install dependencies. - package: name=curl state=present - roles: - - role_under_test + - role: geerlingguy.nginx diff --git a/molecule/default/tests/test_default.py b/molecule/default/tests/test_default.py new file mode 100644 index 0000000..eedd64a --- /dev/null +++ b/molecule/default/tests/test_default.py @@ -0,0 +1,14 @@ +import os + +import testinfra.utils.ansible_runner + +testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( + os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') + + +def test_hosts_file(host): + f = host.file('/etc/hosts') + + assert f.exists + assert f.user == 'root' + assert f.group == 'root' diff --git a/molecule/default/yaml-lint.yml b/molecule/default/yaml-lint.yml new file mode 100644 index 0000000..a3dbc38 --- /dev/null +++ b/molecule/default/yaml-lint.yml @@ -0,0 +1,6 @@ +--- +extends: default +rules: + line-length: + max: 120 + level: warning diff --git a/tasks/setup-Ubuntu.yml b/tasks/setup-Ubuntu.yml index 920dc0b..e198062 100644 --- a/tasks/setup-Ubuntu.yml +++ b/tasks/setup-Ubuntu.yml @@ -3,7 +3,7 @@ apt_repository: repo: 'ppa:nginx/{{ nginx_ppa_version }}' state: present - update_cache: yes + update_cache: true register: nginx_ppa_added when: nginx_ppa_use diff --git a/tasks/vhosts.yml b/tasks/vhosts.yml index 05af037..f497216 100644 --- a/tasks/vhosts.yml +++ b/tasks/vhosts.yml @@ -16,13 +16,15 @@ template: src: "{{ item.template|default(nginx_vhost_template) }}" dest: "{{ nginx_vhost_path }}/{{ item.filename|default(item.server_name.split(' ')[0] ~ '.conf') }}" - force: yes + force: true owner: root group: root mode: 0644 when: item.state|default('present') != 'absent' with_items: "{{ nginx_vhosts }}" notify: reload nginx + tags: + - skip_ansible_lint - name: Remove managed vhost config files. file: @@ -31,6 +33,8 @@ when: item.state|default('present') == 'absent' with_items: "{{ nginx_vhosts }}" notify: reload nginx + tags: + - skip_ansible_lint - name: Remove legacy vhosts.conf file. file: diff --git a/tests/README.md b/tests/README.md deleted file mode 100644 index 6fb2117..0000000 --- a/tests/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Ansible Role tests - -To run the test playbook(s) in this directory: - - 1. Install and start Docker. - 1. Download the test shim (see .travis.yml file for the URL) into `tests/test.sh`: - - `wget -O tests/test.sh https://gist.githubusercontent.com/geerlingguy/73ef1e5ee45d8694570f334be385e181/raw/` - 1. Make the test shim executable: `chmod +x tests/test.sh`. - 1. Run (from the role root directory) `distro=[distro] playbook=[playbook] ./tests/test.sh` - -If you don't want the container to be automatically deleted after the test playbook is run, add the following environment variables: `cleanup=false container_id=$(date +%s)`