From ea1a1dee0d8b6d4ccba410984ebb4d071ca098ea Mon Sep 17 00:00:00 2001
From: Eduardo Gonzalez <dabarren@gmail.com>
Date: Sun, 25 Feb 2018 12:02:00 +0100
Subject: [PATCH] Verify YAML syntax in gates

This patchset implements yamllint test to all *.yml
files.

Also fixes syntax errors to make jobs to pass.

Change-Id: I3186adf9835b4d0cada272d156b17d1bc9c2b799
---
 .yamllint                                     |  15 +++
 .zuul.yaml                                    |   3 +-
 ansible/group_vars/all.yml                    |  30 ++---
 ansible/kolla-host.yml                        |   1 -
 .../roles/baremetal/tasks/post-install.yml    |   2 +-
 ansible/roles/bifrost/tasks/config.yml        |   2 +-
 ansible/roles/ceilometer/tasks/register.yml   |   4 +-
 ansible/roles/chrony/tasks/config.yml         |   1 -
 ansible/roles/common/defaults/main.yml        |   2 +-
 ansible/roles/designate/tasks/config.yml      |   2 +-
 ansible/roles/destroy/tasks/cleanup_host.yml  |   2 +-
 ansible/roles/glance/handlers/main.yml        |   1 -
 ansible/roles/glance/tasks/config.yml         |   1 -
 ansible/roles/haproxy/tasks/config.yml        |   1 -
 ansible/roles/horizon/tasks/config.yml        |   3 +-
 .../roles/mariadb/tasks/recover_cluster.yml   | 104 +++++++++---------
 ansible/roles/memcached/tasks/config.yml      |   1 -
 .../neutron/tasks/config-neutron-fake.yml     |   1 -
 ansible/roles/neutron/tasks/config.yml        |   1 -
 ansible/roles/nova/defaults/main.yml          |   2 +-
 ansible/roles/nova/tasks/bootstrap_xenapi.yml |   1 +
 ansible/roles/nova/tasks/config.yml           |   1 -
 ansible/roles/openvswitch/tasks/config.yml    |   1 -
 ansible/roles/ovs-dpdk/defaults/main.yml      |   2 +-
 ansible/roles/ovs-dpdk/handlers/main.yml      |   4 +-
 ansible/roles/ovs-dpdk/tasks/config.yml       |   2 +-
 ansible/roles/ovs-dpdk/tasks/pull.yml         |   1 -
 .../roles/prechecks/tasks/database_checks.yml |  10 +-
 ansible/roles/prechecks/tasks/user_checks.yml |   4 +-
 ansible/roles/rabbitmq/tasks/config.yml       |   8 +-
 ansible/roles/skydive/defaults/main.yml       |   1 -
 ansible/roles/skydive/handlers/main.yml       |   1 -
 ansible/roles/skydive/tasks/precheck.yml      |   1 -
 ansible/roles/stop/tasks/stop_containers.yml  |   1 -
 ansible/roles/vitrage/defaults/main.yml       |   4 +-
 .../magnum/redis-kube/redis-controller.yaml   |  28 ++---
 .../demos/magnum/redis-kube/redis-proxy.yaml  |  10 +-
 .../redis-kube/redis-sentinel-controller.yaml |  16 +--
 etc/kolla/passwords.yml                       |   2 +-
 .../notes/add-congress-877644b4b0e2ed0a.yaml  |   6 +-
 ...d-designate-producer-b6e94153ff9bc45c.yaml |   2 +-
 .../notes/add-watcher-a97995ace827cf71.yaml   |  10 +-
 .../congress-broken-cbf8ca59d90a85cb.yaml     |   2 +-
 ...te-some-config-files-0ed8c75f6bb4aa26.yaml |   1 -
 ...nfs-volume-snapshots-a0347a31662b1109.yaml |   2 +-
 .../opendaylight-role-b1787bc458da5bc4.yaml   |   2 +-
 .../remove-nova-network-76e1c9b51a4acd5f.yaml |   1 -
 tests/pre.yml                                 |   1 +
 tools/playbook-setup-nodes.yml                |  10 +-
 tox.ini                                       |   4 +
 50 files changed, 160 insertions(+), 158 deletions(-)
 create mode 100644 .yamllint

diff --git a/.yamllint b/.yamllint
new file mode 100644
index 0000000000..85528611eb
--- /dev/null
+++ b/.yamllint
@@ -0,0 +1,15 @@
+extends: default
+ignore: |
+  .tox/
+
+rules:
+  line-length: disable
+  truthy: disable
+  braces:
+    max-spaces-inside: 1
+  comments:
+    # Ignore first space in comment because we set default options as:
+    #openstack_version: "pike"
+    require-starting-space: true
+    ignore: |
+      etc/kolla/globals.yml
\ No newline at end of file
diff --git a/.zuul.yaml b/.zuul.yaml
index 268c880387..7013c92990 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -1,3 +1,4 @@
+---
 - project:
     check:
       jobs:
@@ -72,7 +73,7 @@
     vars:
       scenario: aio
     roles:
-        - zuul: openstack-infra/zuul-jobs
+      - zuul: openstack-infra/zuul-jobs
 
 - job:
     name: kolla-ansible-centos-source
diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index 7bc5d64ed1..1710940a3a 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -62,7 +62,7 @@ container_proxy:
 
 # By default, Kolla API services bind to the network address assigned
 # to the api_interface.  Allow the bind address to be an override.
-api_interface_address:  "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
+api_interface_address: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
 
 ################
 # Chrony options
@@ -98,14 +98,14 @@ docker_restart_policy_retry: "10"
 
 # Common options used throughout Docker
 docker_common_options:
-    auth_email: "{{ docker_registry_email }}"
-    auth_password: "{{ docker_registry_password }}"
-    auth_registry: "{{ docker_registry }}"
-    auth_username: "{{ docker_registry_username }}"
-    environment:
-      KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
-    restart_policy: "{{ docker_restart_policy }}"
-    restart_retries: "{{ docker_restart_policy_retry }}"
+  auth_email: "{{ docker_registry_email }}"
+  auth_password: "{{ docker_registry_password }}"
+  auth_registry: "{{ docker_registry }}"
+  auth_username: "{{ docker_registry_username }}"
+  environment:
+    KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
+  restart_policy: "{{ docker_restart_policy }}"
+  restart_retries: "{{ docker_restart_policy_retry }}"
 
 
 ####################
@@ -336,7 +336,7 @@ supported_policy_format_list:
 
 # In the context of multi-regions, list here the name of all your regions.
 multiple_regions_names:
-    - "{{ openstack_region_name }}"
+  - "{{ openstack_region_name }}"
 
 openstack_service_workers: "{{ [ansible_processor_vcpus, 5]|min }}"
 openstack_service_rpc_workers: "{{ [ansible_processor_vcpus, 3]|min }}"
@@ -350,11 +350,11 @@ nova_console: "novnc"
 # OpenStack authentication string. You should only need to override these if you
 # are changing the admin tenant/project or user.
 openstack_auth:
-    auth_url: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }}"
-    username: "admin"
-    password: "{{ keystone_admin_password }}"
-    project_name: "admin"
-    domain_name: "default"
+  auth_url: "{{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }}"
+  username: "admin"
+  password: "{{ keystone_admin_password }}"
+  project_name: "admin"
+  domain_name: "default"
 
 # Endpoint type used to connect with OpenStack services with ansible modules.
 # Valid options are [ public, internal, admin ]
diff --git a/ansible/kolla-host.yml b/ansible/kolla-host.yml
index 097b8de55b..4668f38422 100644
--- a/ansible/kolla-host.yml
+++ b/ansible/kolla-host.yml
@@ -37,4 +37,3 @@
   roles:
     - { role: baremetal,
         tags: baremetal }
-
diff --git a/ansible/roles/baremetal/tasks/post-install.yml b/ansible/roles/baremetal/tasks/post-install.yml
index 2415064b97..04d44c3485 100644
--- a/ansible/roles/baremetal/tasks/post-install.yml
+++ b/ansible/roles/baremetal/tasks/post-install.yml
@@ -93,7 +93,7 @@
     - enable_host_ntp | bool
 
 - name: Synchronizing time one-time
-  command:  ntpd -gq
+  command: ntpd -gq
   become: True
   when: enable_host_ntp | bool
 
diff --git a/ansible/roles/bifrost/tasks/config.yml b/ansible/roles/bifrost/tasks/config.yml
index 5fd4844ef2..a3dd50569b 100644
--- a/ansible/roles/bifrost/tasks/config.yml
+++ b/ansible/roles/bifrost/tasks/config.yml
@@ -31,7 +31,7 @@
     mode: "0660"
   become: true
   with_items:
-     - "rabbitmq-env.conf"
+    - "rabbitmq-env.conf"
 
 - name: Template ssh keys
   template:
diff --git a/ansible/roles/ceilometer/tasks/register.yml b/ansible/roles/ceilometer/tasks/register.yml
index 0904cbad2f..03dd658337 100644
--- a/ansible/roles/ceilometer/tasks/register.yml
+++ b/ansible/roles/ceilometer/tasks/register.yml
@@ -11,7 +11,7 @@
       auth: "{{ '{{ openstack_ceilometer_auth }}' }}"
       endpoint_type: "{{ openstack_interface }}"
     module_extra_vars:
-     openstack_ceilometer_auth: "{{ openstack_ceilometer_auth }}"
+      openstack_ceilometer_auth: "{{ openstack_ceilometer_auth }}"
   run_once: True
 
 - name: Associate the ResellerAdmin role and ceilometer user
@@ -25,6 +25,6 @@
       auth: "{{ '{{ openstack_ceilometer_auth }}' }}"
       endpoint_type: "{{ openstack_interface }}"
     module_extra_vars:
-     openstack_ceilometer_auth: "{{ openstack_ceilometer_auth }}"
+      openstack_ceilometer_auth: "{{ openstack_ceilometer_auth }}"
   when: enable_swift | bool
   run_once: True
diff --git a/ansible/roles/chrony/tasks/config.yml b/ansible/roles/chrony/tasks/config.yml
index 972b7ea8f2..e19a55cf89 100644
--- a/ansible/roles/chrony/tasks/config.yml
+++ b/ansible/roles/chrony/tasks/config.yml
@@ -49,4 +49,3 @@
   with_dict: "{{ chrony_services }}"
   notify:
     - Restart chrony container
-
diff --git a/ansible/roles/common/defaults/main.yml b/ansible/roles/common/defaults/main.yml
index 82f6c1d575..dec599c533 100644
--- a/ansible/roles/common/defaults/main.yml
+++ b/ansible/roles/common/defaults/main.yml
@@ -28,7 +28,7 @@ common_services:
       - "/dev/:/dev/"
       - "/run/:/run/:shared"
       - "kolla_logs:/var/log/kolla/"
-# DUMMY_ENVIRONMENT is needed because empty environment is not supported
+  # DUMMY_ENVIRONMENT is needed because empty environment is not supported
   cron:
     container_name: cron
     enabled: True
diff --git a/ansible/roles/designate/tasks/config.yml b/ansible/roles/designate/tasks/config.yml
index a227da8ded..d1c3bebd91 100644
--- a/ansible/roles/designate/tasks/config.yml
+++ b/ansible/roles/designate/tasks/config.yml
@@ -79,7 +79,7 @@
   vars:
     service: "{{ designate_services['designate-worker'] }}"
   template:
-    src:  "{{ item }}"
+    src: "{{ item }}"
     dest: "{{ node_config_directory }}/designate-worker/pools.yaml"
     mode: "0660"
   become: true
diff --git a/ansible/roles/destroy/tasks/cleanup_host.yml b/ansible/roles/destroy/tasks/cleanup_host.yml
index 92248e7a1d..e36791059d 100644
--- a/ansible/roles/destroy/tasks/cleanup_host.yml
+++ b/ansible/roles/destroy/tasks/cleanup_host.yml
@@ -1,7 +1,7 @@
 ---
 - name: Destroying Kolla host configuration
   become: true
-  script:  ../tools/cleanup-host
+  script: ../tools/cleanup-host
   environment:
     enable_haproxy: "{{ enable_haproxy }}"
     enable_swift: "{{ enable_swift }}"
diff --git a/ansible/roles/glance/handlers/main.yml b/ansible/roles/glance/handlers/main.yml
index 39ea35a921..c018ace502 100644
--- a/ansible/roles/glance/handlers/main.yml
+++ b/ansible/roles/glance/handlers/main.yml
@@ -45,4 +45,3 @@
       or glance_conf.changed | bool
       or policy_overwriting.changed | bool
       or glance_registry_container.changed | bool
-
diff --git a/ansible/roles/glance/tasks/config.yml b/ansible/roles/glance/tasks/config.yml
index 39d4542aff..6015479b6c 100644
--- a/ansible/roles/glance/tasks/config.yml
+++ b/ansible/roles/glance/tasks/config.yml
@@ -125,4 +125,3 @@
   notify:
     - Restart glance-api container
     - Restart glance-registry container
-
diff --git a/ansible/roles/haproxy/tasks/config.yml b/ansible/roles/haproxy/tasks/config.yml
index 51ddb5b78b..04c43bce89 100644
--- a/ansible/roles/haproxy/tasks/config.yml
+++ b/ansible/roles/haproxy/tasks/config.yml
@@ -109,4 +109,3 @@
   with_dict: "{{ haproxy_services }}"
   notify:
     - "Restart {{ item.key }} container"
-
diff --git a/ansible/roles/horizon/tasks/config.yml b/ansible/roles/horizon/tasks/config.yml
index 5d0b77c12e..b78b327269 100644
--- a/ansible/roles/horizon/tasks/config.yml
+++ b/ansible/roles/horizon/tasks/config.yml
@@ -13,7 +13,7 @@
   with_dict: "{{ horizon_services }}"
 
 - set_fact:
-   custom_policy: []
+    custom_policy: []
 
 - include: policy_item.yml
   vars:
@@ -131,4 +131,3 @@
     - horizon.enabled | bool
   notify:
     - Restart horizon container
-
diff --git a/ansible/roles/mariadb/tasks/recover_cluster.yml b/ansible/roles/mariadb/tasks/recover_cluster.yml
index 5fda36221c..2258216e76 100644
--- a/ansible/roles/mariadb/tasks/recover_cluster.yml
+++ b/ansible/roles/mariadb/tasks/recover_cluster.yml
@@ -15,67 +15,67 @@
   run_once: true
 
 - block:
-  - name: Stop MariaDB containers
-    kolla_docker:
-      name: "{{ mariadb_service.container_name }}"
-      action: "stop_container"
+    - name: Stop MariaDB containers
+      kolla_docker:
+        name: "{{ mariadb_service.container_name }}"
+        action: "stop_container"
 
-  - name: Run MariaDB wsrep recovery
-    kolla_docker:
-      action: "start_container"
-      common_options: "{{ docker_common_options }}"
-      environment:
-        KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
-        BOOTSTRAP_ARGS: "--wsrep-recover"
-      image: "{{ mariadb_service.image }}"
-      labels:
-        BOOTSTRAP:
-      name: "{{ mariadb_service.container_name }}"
-      restart_policy: "never"
-      volumes: "{{ mariadb_service.volumes }}"
+    - name: Run MariaDB wsrep recovery
+      kolla_docker:
+        action: "start_container"
+        common_options: "{{ docker_common_options }}"
+        environment:
+          KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
+          BOOTSTRAP_ARGS: "--wsrep-recover"
+        image: "{{ mariadb_service.image }}"
+        labels:
+          BOOTSTRAP:
+        name: "{{ mariadb_service.container_name }}"
+        restart_policy: "never"
+        volumes: "{{ mariadb_service.volumes }}"
 
-  - name: Stop MariaDB containers
-    kolla_docker:
-      name: "{{ mariadb_service.container_name }}"
-      action: "stop_container"
+    - name: Stop MariaDB containers
+      kolla_docker:
+        name: "{{ mariadb_service.container_name }}"
+        action: "stop_container"
 
-  - name: Copying MariaDB log file to /tmp
-    shell: "docker cp {{ mariadb_service.container_name }}:/var/log/kolla/mariadb/mariadb.log /tmp/mariadb_tmp.log"
+    - name: Copying MariaDB log file to /tmp
+      shell: "docker cp {{ mariadb_service.container_name }}:/var/log/kolla/mariadb/mariadb.log /tmp/mariadb_tmp.log"
 
-  - name: Get MariaDB wsrep recovery seqno
-    shell: "tail -n 200 /tmp/mariadb_tmp.log | grep  Recovered | tail -1 | awk '{print $7}' | awk -F'\n' '{print $1}' | awk -F':' '{print $2}'"
-    register: wsrep_recovery_seqno
+    - name: Get MariaDB wsrep recovery seqno
+      shell: "tail -n 200 /tmp/mariadb_tmp.log | grep  Recovered | tail -1 | awk '{print $7}' | awk -F'\n' '{print $1}' | awk -F':' '{print $2}'"
+      register: wsrep_recovery_seqno
 
-  - name: Removing MariaDB log file from /tmp
-    file: path=/tmp/mariadb_tmp.log state=absent
-    changed_when: false
-    check_mode: no
+    - name: Removing MariaDB log file from /tmp
+      file: path=/tmp/mariadb_tmp.log state=absent
+      changed_when: false
+      check_mode: no
 
-  - name: Registering MariaDB seqno variable
-    set_fact:
-      seqno: "{{ wsrep_recovery_seqno.stdout_lines[0] }}"
-    changed_when: false
+    - name: Registering MariaDB seqno variable
+      set_fact:
+        seqno: "{{ wsrep_recovery_seqno.stdout_lines[0] }}"
+      changed_when: false
 
-  - name: Comparing seqno value on all mariadb hosts
-    shell:
-      cmd: |
-        if [[ ! -z {{ hostvars[inventory_hostname]['seqno'] }} && ! -z {{ hostvars[item]['seqno'] }} &&
-        {{ hostvars[inventory_hostname]['seqno'] }} =~ ^[0-9]+$ && {{ hostvars[item]['seqno'] }} =~ ^[0-9]+$ &&
-        {{ hostvars[inventory_hostname]['seqno'] }} -lt {{ hostvars[item]['seqno'] }} ]]; then echo {{ hostvars[item]['seqno'] }}; fi
-    with_items: "{{ groups['mariadb'] }}"
-    register: seqno_compare
-    args:
-      executable: /bin/bash
-    changed_when: false
+    - name: Comparing seqno value on all mariadb hosts
+      shell:
+        cmd: |
+          if [[ ! -z {{ hostvars[inventory_hostname]['seqno'] }} && ! -z {{ hostvars[item]['seqno'] }} &&
+          {{ hostvars[inventory_hostname]['seqno'] }} =~ ^[0-9]+$ && {{ hostvars[item]['seqno'] }} =~ ^[0-9]+$ &&
+          {{ hostvars[inventory_hostname]['seqno'] }} -lt {{ hostvars[item]['seqno'] }} ]]; then echo {{ hostvars[item]['seqno'] }}; fi
+      with_items: "{{ groups['mariadb'] }}"
+      register: seqno_compare
+      args:
+        executable: /bin/bash
+      changed_when: false
 
-  - name: Writing hostname of host with the largest seqno to temp file
-    local_action: copy content={{ inventory_hostname }} dest=/tmp/kolla_mariadb_recover_inventory_name mode=0644
-    changed_when: false
-    when: seqno_compare.results | map(attribute='stdout') | join('') == ""
+    - name: Writing hostname of host with the largest seqno to temp file
+      local_action: copy content={{ inventory_hostname }} dest=/tmp/kolla_mariadb_recover_inventory_name mode=0644
+      changed_when: false
+      when: seqno_compare.results | map(attribute='stdout') | join('') == ""
 
-  - name: Registering mariadb_recover_inventory_name from temp file
-    set_fact:
-      mariadb_recover_inventory_name: "{{ lookup('file', '/tmp/kolla_mariadb_recover_inventory_name') }}"
+    - name: Registering mariadb_recover_inventory_name from temp file
+      set_fact:
+        mariadb_recover_inventory_name: "{{ lookup('file', '/tmp/kolla_mariadb_recover_inventory_name') }}"
   when:
     - mariadb_recover_inventory_name is not defined
 
diff --git a/ansible/roles/memcached/tasks/config.yml b/ansible/roles/memcached/tasks/config.yml
index f69b7ad6bb..2b6409d3a9 100644
--- a/ansible/roles/memcached/tasks/config.yml
+++ b/ansible/roles/memcached/tasks/config.yml
@@ -37,4 +37,3 @@
     - service.enabled | bool
     - action != "config"
   notify: Restart memcached container
-
diff --git a/ansible/roles/neutron/tasks/config-neutron-fake.yml b/ansible/roles/neutron/tasks/config-neutron-fake.yml
index 8577a16bee..c1cc895b9d 100644
--- a/ansible/roles/neutron/tasks/config-neutron-fake.yml
+++ b/ansible/roles/neutron/tasks/config-neutron-fake.yml
@@ -86,4 +86,3 @@
     group: "{{ config_owner_group }}"
   when: inventory_hostname in groups['compute']
   with_sequence: start=1 end={{ num_nova_fake_per_node }}
-
diff --git a/ansible/roles/neutron/tasks/config.yml b/ansible/roles/neutron/tasks/config.yml
index c7e6a54495..f6b1bcbb7f 100644
--- a/ansible/roles/neutron/tasks/config.yml
+++ b/ansible/roles/neutron/tasks/config.yml
@@ -436,4 +436,3 @@
   with_dict: "{{ neutron_services }}"
   notify:
     - "Restart {{ item.key }} container"
-
diff --git a/ansible/roles/nova/defaults/main.yml b/ansible/roles/nova/defaults/main.yml
index aa33955cc3..0e108f51cd 100644
--- a/ansible/roles/nova/defaults/main.yml
+++ b/ansible/roles/nova/defaults/main.yml
@@ -111,7 +111,7 @@ nova_services:
     group: "compute"
     image: "{{ nova_compute_image_full }}"
     environment:
-        LIBGUESTFS_BACKEND: "direct"
+      LIBGUESTFS_BACKEND: "direct"
     privileged: True
     enabled: "{{ not enable_nova_fake | bool }}"
     ipc_mode: "host"
diff --git a/ansible/roles/nova/tasks/bootstrap_xenapi.yml b/ansible/roles/nova/tasks/bootstrap_xenapi.yml
index 7673463e92..f3a5e2febe 100644
--- a/ansible/roles/nova/tasks/bootstrap_xenapi.yml
+++ b/ansible/roles/nova/tasks/bootstrap_xenapi.yml
@@ -1,3 +1,4 @@
+---
 - name: Install package python-os-xenapi
   package:
     name: python-os-xenapi
diff --git a/ansible/roles/nova/tasks/config.yml b/ansible/roles/nova/tasks/config.yml
index ad5b4f8ef8..f528ebbb26 100644
--- a/ansible/roles/nova/tasks/config.yml
+++ b/ansible/roles/nova/tasks/config.yml
@@ -203,4 +203,3 @@
   with_dict: "{{ nova_services }}"
   notify:
     - "Restart {{ item.key }} container"
-
diff --git a/ansible/roles/openvswitch/tasks/config.yml b/ansible/roles/openvswitch/tasks/config.yml
index 4c1c1cce3d..551f3fac46 100644
--- a/ansible/roles/openvswitch/tasks/config.yml
+++ b/ansible/roles/openvswitch/tasks/config.yml
@@ -70,4 +70,3 @@
   with_dict: "{{ openvswitch_services }}"
   notify:
     - "Restart {{ item.key }} container"
-
diff --git a/ansible/roles/ovs-dpdk/defaults/main.yml b/ansible/roles/ovs-dpdk/defaults/main.yml
index 66feb52bc0..8138ff6cb2 100644
--- a/ansible/roles/ovs-dpdk/defaults/main.yml
+++ b/ansible/roles/ovs-dpdk/defaults/main.yml
@@ -50,7 +50,7 @@ ovsdpdk_services:
 ####################
 ovs_bridge_mappings: "{% for bridge in neutron_bridge_name.split(',') %}physnet{{ loop.index0 + 1 }}:{{ bridge }}{% if not loop.last %},{% endif %}{% endfor %}"
 ovs_port_mappings: "{% for bridge in neutron_bridge_name.split(',') %} {{ neutron_external_interface.split(',')[loop.index0] }}:{{ bridge }}{% if not loop.last %},{% endif %}{% endfor %}"
-dpdk_tunnel_interface : "{{neutron_external_interface}}"
+dpdk_tunnel_interface: "{{neutron_external_interface}}"
 dpdk_tunnel_interface_address: "{{ hostvars[inventory_hostname]['ansible_' + dpdk_tunnel_interface]['ipv4']['address'] }}"
 tunnel_interface_network: "{{ hostvars[inventory_hostname]['ansible_' + dpdk_tunnel_interface]['ipv4']['network']}}/{{hostvars[inventory_hostname]['ansible_' + dpdk_tunnel_interface]['ipv4']['netmask']}}"
 tunnel_interface_cidr: "{{dpdk_tunnel_interface_address}}/{{ tunnel_interface_network | ipaddr('prefix') }}"
diff --git a/ansible/roles/ovs-dpdk/handlers/main.yml b/ansible/roles/ovs-dpdk/handlers/main.yml
index 811db6d2a0..3c5857449f 100644
--- a/ansible/roles/ovs-dpdk/handlers/main.yml
+++ b/ansible/roles/ovs-dpdk/handlers/main.yml
@@ -50,7 +50,7 @@
        or inventory_hostname in groups['neutron-l3-agent']
        or inventory_hostname in groups['neutron-metadata-agent']
        or inventory_hostname in groups['neutron-vpnaas-agent'])
-    -  ovs_physical_port_policy == 'indexed'
+    - ovs_physical_port_policy == 'indexed'
 
 - name: Restart ovsdpdk-vswitchd container
   vars:
@@ -86,7 +86,7 @@
        or inventory_hostname in groups['neutron-l3-agent']
        or inventory_hostname in groups['neutron-metadata-agent']
        or inventory_hostname in groups['neutron-vpnaas-agent'])
-    -  ovs_physical_port_policy == 'named'
+    - ovs_physical_port_policy == 'named'
 
 - name: wait for dpdk tunnel ip
   wait_for:
diff --git a/ansible/roles/ovs-dpdk/tasks/config.yml b/ansible/roles/ovs-dpdk/tasks/config.yml
index bfb7b15bff..89c6d68b8b 100644
--- a/ansible/roles/ovs-dpdk/tasks/config.yml
+++ b/ansible/roles/ovs-dpdk/tasks/config.yml
@@ -19,7 +19,7 @@
     - item.value.host_in_groups | bool
   with_dict: "{{ ovsdpdk_services }}"
   notify:
-  - "Restart {{ item.key }} container"
+    - "Restart {{ item.key }} container"
 
 - name: Copying ovs-dpdkctl tool
   copy:
diff --git a/ansible/roles/ovs-dpdk/tasks/pull.yml b/ansible/roles/ovs-dpdk/tasks/pull.yml
index 9341fcc4b6..2ac1173c60 100644
--- a/ansible/roles/ovs-dpdk/tasks/pull.yml
+++ b/ansible/roles/ovs-dpdk/tasks/pull.yml
@@ -8,4 +8,3 @@
     - item.value.enabled | bool
     - item.value.host_in_groups | bool
   with_dict: "{{ ovsdpdk_services }}"
-
diff --git a/ansible/roles/prechecks/tasks/database_checks.yml b/ansible/roles/prechecks/tasks/database_checks.yml
index 883a462b8c..0f53135a46 100644
--- a/ansible/roles/prechecks/tasks/database_checks.yml
+++ b/ansible/roles/prechecks/tasks/database_checks.yml
@@ -6,9 +6,9 @@
     port: "{{ database_port }}"
   with_items: "{{ groups['mariadb'] }}"
   when:
-      - not enable_mariadb | bool
-      - enable_external_mariadb_load_balancer | bool
-      - inventory_hostname in groups['haproxy']
+    - not enable_mariadb | bool
+    - enable_external_mariadb_load_balancer | bool
+    - inventory_hostname in groups['haproxy']
 
 - name: "Check if external database address is reachable from all hosts"
   wait_for:
@@ -16,5 +16,5 @@
     host: "{{ database_address }}"
     port: "{{ database_port }}"
   when:
-      - not enable_mariadb | bool
-      - not enable_external_mariadb_load_balancer | bool
+    - not enable_mariadb | bool
+    - not enable_external_mariadb_load_balancer | bool
diff --git a/ansible/roles/prechecks/tasks/user_checks.yml b/ansible/roles/prechecks/tasks/user_checks.yml
index faae3e48d4..fe8d4afff0 100644
--- a/ansible/roles/prechecks/tasks/user_checks.yml
+++ b/ansible/roles/prechecks/tasks/user_checks.yml
@@ -10,10 +10,8 @@
     key: "{{ config_owner_group }}"
   register: getent_group
 
-#(duonghq) it's only a basic check, should be refined later
+# NOTE(duonghq): it's only a basic check, should be refined later
 - name: Check if ansible user can do passwordless sudo
   shell: sudo -n true
   register: result
   failed_when: result | failed
-
-
diff --git a/ansible/roles/rabbitmq/tasks/config.yml b/ansible/roles/rabbitmq/tasks/config.yml
index bc4f3ac491..faa511536d 100644
--- a/ansible/roles/rabbitmq/tasks/config.yml
+++ b/ansible/roles/rabbitmq/tasks/config.yml
@@ -39,10 +39,10 @@
     - inventory_hostname in groups[service.group]
     - service.enabled | bool
   with_items:
-     - "rabbitmq-env.conf"
-     - "rabbitmq.config"
-     - "rabbitmq-clusterer.config"
-     - "definitions.json"
+    - "rabbitmq-env.conf"
+    - "rabbitmq.config"
+    - "rabbitmq-clusterer.config"
+    - "definitions.json"
   notify:
     - Restart rabbitmq container
 
diff --git a/ansible/roles/skydive/defaults/main.yml b/ansible/roles/skydive/defaults/main.yml
index b5e6f56268..a30ca1a9a8 100644
--- a/ansible/roles/skydive/defaults/main.yml
+++ b/ansible/roles/skydive/defaults/main.yml
@@ -34,4 +34,3 @@ skydive_analyzer_image_full: "{{ skydive_analyzer_image }}:{{ skydive_analyzer_t
 skydive_agent_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-skydive-agent"
 skydive_agent_tag: "{{ openstack_release }}"
 skydive_agent_image_full: "{{ skydive_agent_image }}:{{ skydive_agent_tag }}"
-
diff --git a/ansible/roles/skydive/handlers/main.yml b/ansible/roles/skydive/handlers/main.yml
index 353f9e87d0..01466e062d 100644
--- a/ansible/roles/skydive/handlers/main.yml
+++ b/ansible/roles/skydive/handlers/main.yml
@@ -41,4 +41,3 @@
     - config_json.changed | bool
       or skydive_conf.changed |bool
       or skydive_agent_container.changed | bool
-
diff --git a/ansible/roles/skydive/tasks/precheck.yml b/ansible/roles/skydive/tasks/precheck.yml
index e67c612c6a..0f58c10e0b 100644
--- a/ansible/roles/skydive/tasks/precheck.yml
+++ b/ansible/roles/skydive/tasks/precheck.yml
@@ -31,4 +31,3 @@
     - container_facts['skydive_agent'] is not defined
     - inventory_hostname in groups[skydive_agent.group]
     - skydive_agent.enabled | bool
-
diff --git a/ansible/roles/stop/tasks/stop_containers.yml b/ansible/roles/stop/tasks/stop_containers.yml
index 7b679f8c43..df184d0fe2 100644
--- a/ansible/roles/stop/tasks/stop_containers.yml
+++ b/ansible/roles/stop/tasks/stop_containers.yml
@@ -1,4 +1,3 @@
 ---
 - name: Stopping Kolla containers
   command: /tmp/kolla-stop/tools/stop-containers
-
diff --git a/ansible/roles/vitrage/defaults/main.yml b/ansible/roles/vitrage/defaults/main.yml
index eb0ba109ad..a5c8bd5a1e 100644
--- a/ansible/roles/vitrage/defaults/main.yml
+++ b/ansible/roles/vitrage/defaults/main.yml
@@ -121,8 +121,8 @@ vitrage_datasource:
     enabled: "{{ enable_cinder | bool }}"
   - name: "neutron.network,neutron.port"
     enabled: "{{ enable_neutron | bool }}"
-#TODO(egonzalez) Heat cannot be used with default policy.json due stacks:global_index=rule:deny_everybody.
-# Document process to deploy vitrage+heat.
+  # TODO(egonzalez) Heat cannot be used with default policy.json due stacks:global_index=rule:deny_everybody.
+  # Document process to deploy vitrage+heat.
   - name: "heat.stack"
     enabled: "no"
 
diff --git a/contrib/demos/magnum/redis-kube/redis-controller.yaml b/contrib/demos/magnum/redis-kube/redis-controller.yaml
index 11332e3d47..28efd3196e 100644
--- a/contrib/demos/magnum/redis-kube/redis-controller.yaml
+++ b/contrib/demos/magnum/redis-kube/redis-controller.yaml
@@ -4,7 +4,7 @@ kind: ReplicationController
 metadata:
   name: redis
 spec:
-  replicas:  2
+  replicas: 2
   selector:
     name: redis
   template:
@@ -13,16 +13,16 @@ spec:
         name: redis
     spec:
       containers:
-      - name: redis
-        image: kubernetes/redis:v1
-        ports:
-        - containerPort: 6379
-        resources:
-          limits:
-            cpu: "1"
-        volumeMounts:
-        - mountPath: /redis-master-data
-          name: data
-      volumes:
-        - name: data
-          emptyDir: {}
+        - name: redis
+          image: kubernetes/redis:v1
+          ports:
+            - containerPort: 6379
+          resources:
+            limits:
+              cpu: "1"
+          volumeMounts:
+            - mountPath: /redis-master-data
+              name: data
+          volumes:
+            - name: data
+              emptyDir: {}
diff --git a/contrib/demos/magnum/redis-kube/redis-proxy.yaml b/contrib/demos/magnum/redis-kube/redis-proxy.yaml
index 03262f8996..07a2d34001 100644
--- a/contrib/demos/magnum/redis-kube/redis-proxy.yaml
+++ b/contrib/demos/magnum/redis-kube/redis-proxy.yaml
@@ -8,8 +8,8 @@ metadata:
   name: redis-proxy
 spec:
   containers:
-  - name: proxy
-    image: kubernetes/redis-proxy:v1
-    ports:
-    - containerPort: 6379
-      name: api
+    - name: proxy
+      image: kubernetes/redis-proxy:v1
+      ports:
+        - containerPort: 6379
+          name: api
diff --git a/contrib/demos/magnum/redis-kube/redis-sentinel-controller.yaml b/contrib/demos/magnum/redis-kube/redis-sentinel-controller.yaml
index 65e514a3ed..d8ae236e60 100644
--- a/contrib/demos/magnum/redis-kube/redis-sentinel-controller.yaml
+++ b/contrib/demos/magnum/redis-kube/redis-sentinel-controller.yaml
@@ -4,7 +4,7 @@ kind: ReplicationController
 metadata:
   name: redis-sentinel
 spec:
-  replicas:  2
+  replicas: 2
   selector:
     redis-sentinel: "true"
   template:
@@ -15,10 +15,10 @@ spec:
         role: sentinel
     spec:
       containers:
-      - name: sentinel
-        image: kubernetes/redis:v1
-        env:
-          - name: SENTINEL
-            value: "true"
-        ports:
-          - containerPort: 26379
+        - name: sentinel
+          image: kubernetes/redis:v1
+          env:
+            - name: SENTINEL
+              value: "true"
+          ports:
+            - containerPort: 26379
diff --git a/etc/kolla/passwords.yml b/etc/kolla/passwords.yml
index 9a59564e01..0094a156c9 100644
--- a/etc/kolla/passwords.yml
+++ b/etc/kolla/passwords.yml
@@ -179,7 +179,7 @@ vitrage_keystone_password:
 
 memcache_secret_key:
 
-#HMAC secret key
+# HMAC secret key
 osprofiler_secret:
 
 nova_ssh_key:
diff --git a/releasenotes/notes/add-congress-877644b4b0e2ed0a.yaml b/releasenotes/notes/add-congress-877644b4b0e2ed0a.yaml
index 4a150d0948..4e500c7834 100644
--- a/releasenotes/notes/add-congress-877644b4b0e2ed0a.yaml
+++ b/releasenotes/notes/add-congress-877644b4b0e2ed0a.yaml
@@ -1,5 +1,5 @@
 ---
 features:
-- Add ansible role for openstack congress project which provide
-  policy as a service across any collection of cloud services in
-  order to offer governance and compliance for dynamic infrastructures.
+  - Add ansible role for openstack congress project which provide
+    policy as a service across any collection of cloud services in
+    order to offer governance and compliance for dynamic infrastructures.
diff --git a/releasenotes/notes/add-designate-producer-b6e94153ff9bc45c.yaml b/releasenotes/notes/add-designate-producer-b6e94153ff9bc45c.yaml
index 27e8997593..cd27145979 100644
--- a/releasenotes/notes/add-designate-producer-b6e94153ff9bc45c.yaml
+++ b/releasenotes/notes/add-designate-producer-b6e94153ff9bc45c.yaml
@@ -1,3 +1,3 @@
 ---
 features:
-  -  Add designate-producer ansible role. Orchestrates periodic tasks that are run by designate.
+  - Add designate-producer ansible role. Orchestrates periodic tasks that are run by designate.
diff --git a/releasenotes/notes/add-watcher-a97995ace827cf71.yaml b/releasenotes/notes/add-watcher-a97995ace827cf71.yaml
index 4e081ddeb3..3d4c1738b9 100644
--- a/releasenotes/notes/add-watcher-a97995ace827cf71.yaml
+++ b/releasenotes/notes/add-watcher-a97995ace827cf71.yaml
@@ -1,6 +1,6 @@
 ---
- features:
-   - Introduce OpenStack Infrastructure Optimization
-     service, also known as Watcher.  This project makes
-     use of Ceilometer data to rebalance the cloud to
-     meet declared goals and strategies.
+features:
+  - Introduce OpenStack Infrastructure Optimization
+    service, also known as Watcher.  This project makes
+    use of Ceilometer data to rebalance the cloud to
+    meet declared goals and strategies.
diff --git a/releasenotes/notes/congress-broken-cbf8ca59d90a85cb.yaml b/releasenotes/notes/congress-broken-cbf8ca59d90a85cb.yaml
index 3172822629..0109d8a999 100644
--- a/releasenotes/notes/congress-broken-cbf8ca59d90a85cb.yaml
+++ b/releasenotes/notes/congress-broken-cbf8ca59d90a85cb.yaml
@@ -1,4 +1,4 @@
 ---
 other:
   - Congress doesn't work correctly out of the box and will
-    not deploy.  See Bug #1634641.
+    not deploy. See Bug https://bugs.launchpad.net/kolla-ansible/+bug/1634641.
diff --git a/releasenotes/notes/deprecate-some-config-files-0ed8c75f6bb4aa26.yaml b/releasenotes/notes/deprecate-some-config-files-0ed8c75f6bb4aa26.yaml
index 87883fb398..94953abab7 100644
--- a/releasenotes/notes/deprecate-some-config-files-0ed8c75f6bb4aa26.yaml
+++ b/releasenotes/notes/deprecate-some-config-files-0ed8c75f6bb4aa26.yaml
@@ -6,4 +6,3 @@ deprecations:
 
     * /etc/kolla/config/database.conf
     * /etc/kolla/config/messaging.conf
-
diff --git a/releasenotes/notes/enable-nfs-volume-snapshots-a0347a31662b1109.yaml b/releasenotes/notes/enable-nfs-volume-snapshots-a0347a31662b1109.yaml
index 7eea6d4e7b..e6ef1d2c29 100644
--- a/releasenotes/notes/enable-nfs-volume-snapshots-a0347a31662b1109.yaml
+++ b/releasenotes/notes/enable-nfs-volume-snapshots-a0347a31662b1109.yaml
@@ -8,4 +8,4 @@ upgrade:
   - |
     On upgrade NFS Cinder snapshots will be activated. One can
     prohibit this by setting nfs_snapshot_support = False in
-    /etc/kolla/config/cinder/cinder-volume.conf, section '[nfs-1]'.
\ No newline at end of file
+    /etc/kolla/config/cinder/cinder-volume.conf, section '[nfs-1]'.
diff --git a/releasenotes/notes/opendaylight-role-b1787bc458da5bc4.yaml b/releasenotes/notes/opendaylight-role-b1787bc458da5bc4.yaml
index b7c0ae0f89..c3686d7c92 100644
--- a/releasenotes/notes/opendaylight-role-b1787bc458da5bc4.yaml
+++ b/releasenotes/notes/opendaylight-role-b1787bc458da5bc4.yaml
@@ -1,3 +1,3 @@
 ---
 features:
-  - Add OpenDaylight role
\ No newline at end of file
+  - Add OpenDaylight role
diff --git a/releasenotes/notes/remove-nova-network-76e1c9b51a4acd5f.yaml b/releasenotes/notes/remove-nova-network-76e1c9b51a4acd5f.yaml
index 2e3d24c615..b33885379b 100644
--- a/releasenotes/notes/remove-nova-network-76e1c9b51a4acd5f.yaml
+++ b/releasenotes/notes/remove-nova-network-76e1c9b51a4acd5f.yaml
@@ -2,4 +2,3 @@
 deprecations:
   - The nova-network was deprecated, we remove it from the nova ansible
     role.
-
diff --git a/tests/pre.yml b/tests/pre.yml
index 446575bee2..cbad56d190 100644
--- a/tests/pre.yml
+++ b/tests/pre.yml
@@ -1,3 +1,4 @@
+---
 - hosts: all
   vars:
     logs_dir: "/tmp/logs"
diff --git a/tools/playbook-setup-nodes.yml b/tools/playbook-setup-nodes.yml
index cd765cfa39..7b059701a5 100644
--- a/tools/playbook-setup-nodes.yml
+++ b/tools/playbook-setup-nodes.yml
@@ -32,8 +32,8 @@
   become: true
 
   tasks:
-  - name: Create log directory for node
-    file:
-      state: directory
-      path: /tmp/{{ inventory_hostname }}
-    become: false
+    - name: Create log directory for node
+      file:
+        state: directory
+        path: /tmp/{{ inventory_hostname }}
+      become: false
diff --git a/tox.ini b/tox.ini
index 254efcd5d6..73ae651045 100644
--- a/tox.ini
+++ b/tox.ini
@@ -30,11 +30,15 @@ setenv = VIRTUAL_ENV={envdir}
 commands = python setup.py testr --coverage --testr-args='{posargs}'
 
 [testenv:pep8]
+deps =
+    {[testenv]deps}
+    yamllint
 commands =
   {toxinidir}/tools/run-bashate.sh
   flake8 {posargs}
   python {toxinidir}/tools/validate-all-file.py
   bandit -r ansible kolla_ansible tests tools
+  yamllint .
 
 [testenv:bandit]
 commands = bandit -r ansible kolla_ansible tests tools