▍Ansible Lint¶
Проверка корректности синтаксиса Ansible-lint в Gitlab¶
Ansible-lint — это утилита для проверки корректности синтаксиса плейбука и стиля кода, которую можно интегрировать в CI-сервис. В нашем случае мы внедряем её в gitlab-ci для проверки плейбуков.
Для начала у нас должен быть настроен сам Gitlab c Gitlab-runner. После чего можно приступить к созданию простенького контейнера с самим ansible-lint:
Dockerfile¶
FROM alpine:3.18
RUN apk --no-cache add \
ansible \
ansible-core \
ansible-lint \
py3-pip \
py3-jinja2 \
py3-jmespath \
yamllint
RUN pip3 install black
WORKDIR /code/
Собираем и пушим в свой локальный Registry
docker build -t daffin/ansible-lint .
docker tag daffin/ansible-lint:alpine registry.example.ru/ansible-lint
docker push registry.example.ru/ansible-lint
Добавим файл CI и файлы настроек линтеров в директорию с конфигами ansible.
Пример CI в Gitlab¶
stages:
- ansible-lint
ansible-lint:
stage: ansible-lint
tags: [docker]
only:
- /^main$/
image:
name: registry.example.ru/ansible-lint
before_script:
- echo "$CI_REGISTRY_PASSWORD" docker login $CI_REGISTRY --username $CI_REGISTRY_USER --password-stdin
- mkdir /root/.docker && echo $DOCKER_AUTH_CONFIG > $HOME/.docker/config.json
- chmod 700 $(pwd) # FIX [WARNING]: Ansible is being run in a world writable directory
script:
- yamllint -f colored -c .yamllint . ; ansible-lint -c .ansible-lint --force-color .
Пример .ansible-lint¶
exclude_paths:
- ./.git/
- ./.github/
- ./molecule/
parseable: true
quiet: true
use_default_rules: true
verbosity: 1
skip_list:
- name[template]
- no-handler
Пример .yamllint¶
---
ignore: |
./.git/
.github/*
molecule/*
extends: default
rules:
braces:
max-spaces-inside: 1
level: error
brackets:
max-spaces-inside: 1
level: error
colons:
max-spaces-after: -1
level: error
commas:
max-spaces-after: -1
level: error
comments: disable
comments-indentation: disable
document-start: disable
empty-lines:
max: 2
max-start: 2
max-end: 2
hyphens:
level: error
indentation: disable
key-duplicates: enable
line-length:
max: 2480
level: warning
new-line-at-end-of-file: enable
new-lines:
type: unix
trailing-spaces: enable
truthy: enable
Теперь если запушить настройки ansible с нашими новыми файлами .gitlab-ci.yml, .ansible-lint, .yamllint в Gitlab, то должно запуститься задание в разделе CI/CD. Здесь же мы увидим ошибки, если они будут, а они скорее всего будут
Берём текст ошибки и идём на сайт Ansible Lint Documentation, где указаны рекомендации как правильно должен выглядеть синтаксис и правим. По итогу должно получиться так: