From d2a1ac3b0cc55f1a2175b8df58790cf3587b3641 Mon Sep 17 00:00:00 2001
From: MarkusTeufelberger <mteufelberger@mgit.at>
Date: Wed, 10 Apr 2019 11:04:16 +0200
Subject: [PATCH] Add Ansible-lint CI step (#4411)

* Add ansible-lint as gitlab-ci step

* Fix jinja2 syntax in include_tasks that breaks ansible-lint

* Use a block scalar to get around gitlab quoting/escaping rules

* Run ansible-lint in verbose mode in CI
---
 .ansible-lint                 | 25 +++++++++++++++++++++++++
 .gitlab-ci.yml                |  8 ++++++++
 roles/download/tasks/main.yml |  3 ++-
 tests/requirements.txt        |  1 +
 4 files changed, 36 insertions(+), 1 deletion(-)
 create mode 100644 .ansible-lint

diff --git a/.ansible-lint b/.ansible-lint
new file mode 100644
index 000000000..c9b136abf
--- /dev/null
+++ b/.ansible-lint
@@ -0,0 +1,25 @@
+---
+parseable: true
+skip_list:
+  # see https://docs.ansible.com/ansible-lint/rules/default_rules.html for a list of all default rules
+  # The following rules throw errors.
+  # These either still need to be corrected in the repository and the rules re-enabled or they are skipped on purpose.
+  - '102'
+  - '103'
+  - '104'
+  - '201'
+  - '204'
+  - '206'
+  - '301'
+  - '302'
+  - '303'
+  - '305'
+  - '306'
+  - '403'
+  - '404'
+  - '502'
+  - '503'
+  - '504'
+  - '601'
+  - '602'
+  - '701'
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e4f84e776..5c391543d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -731,6 +731,14 @@ yamllint:
     - yamllint .
   except: ['triggers', 'master']
 
+ansible-lint:
+  <<: *job
+  stage: unit-tests
+  # lint every yml/yaml file that looks like it contains Ansible plays
+  script: |-
+    grep -Rl '^- hosts: \|^  hosts: \|^- name: ' --include \*.yml --include \*.yaml . | xargs ansible-lint -v
+  except: ['triggers', 'master']
+
 tox-inventory-builder:
   stage: unit-tests
   <<: *job
diff --git a/roles/download/tasks/main.yml b/roles/download/tasks/main.yml
index 80002fc2b..06ad9505a 100644
--- a/roles/download/tasks/main.yml
+++ b/roles/download/tasks/main.yml
@@ -4,9 +4,10 @@
     - not skip_downloads|default(false)
 
 - name: "Download items"
-  include_tasks: "download_{% if download.container %}container{% else %}file{% endif %}.yml"
+  include_tasks: "{{ include_file }}"
   vars:
     download: "{{ download_defaults | combine(item.value) }}"
+    include_file: "download_{% if download.container %}container{% else %}file{% endif %}.yml"
   with_dict: "{{ downloads }}"
   when:
     - not skip_downloads|default(false)
diff --git a/tests/requirements.txt b/tests/requirements.txt
index 37067448d..9a0a959d3 100644
--- a/tests/requirements.txt
+++ b/tests/requirements.txt
@@ -5,3 +5,4 @@ boto==2.9.0
 tox
 dopy
 PyCrypto
+ansible-lint==4.1.0
-- 
GitLab