ansible-lint 도입
6128 단어 Ansible
배경
ansible/ansible-lint
Ansible-playbook이 많아져 관리가 번거롭게 되었기 때문에 메모 쓰기 정도에 기사를 썼다.
설치
pip로 쉽게 도입 가능
$ pip install ansible-lint
옵션에 대해서는 --help에서 볼 수 있습니다.
Usage: ansible-lint [options] [playbook.yml [playbook2 ...]]|roledirectory
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-L list all the rules
-q quieter, although not silent output
-p parseable output in the format of pep8
--parseable-severity parseable output including severity of rule
-r RULESDIR specify one or more rules directories using one or
more -r arguments. Any -r flags override the default
rules in ['/path/to/ansible-
lint/lib/ansiblelint/rules'], unless -R is also used.
-R Use default rules ['/path/to/ansible-
lint/lib/ansiblelint/rules'] in addition to any extra
rules directories specified with -r. There is no need
to specify this if no -r flags are used
-t TAGS only check rules whose id/tags match these values
-T list all the tags
-v Increase verbosity level
-x SKIP_LIST only check rules whose id/tags do not match these
values
--nocolor disable colored output
--force-color Try force colored output (relying on ansible's code)
--exclude=EXCLUDE_PATHS
path to directories or files to skip. This option is
repeatable.
-c /path/to/file Specify configuration file to use. Defaults to
".ansible-lint"
실행
$ ansible-lint
세세한 설정 등은 실행 디렉토리에 「.ansible-lint」를 작성해 그곳에 기재해 갑니다.
.ansible-lint
exclude_paths:
- ./common_script/
- ./ansible/bin/
- ./ansible/module/
- ./ansible/apps/
parseable: true
quiet: true
skip_list:
- skip_this_tag # skipするタグを指定
- skip_this_id # skipするidを指定
use_default_rules: true
verbosity: 1
특정의 룰만을 실행하고 싶은 경우는 -t를 붙이는 것으로 실행이 가능.
규칙
ansible-lint에 대한 규칙을 직접 만들 수 있습니다.
README에도 작성하는 방법이 기재되어 있지만 그 중 시도해 보려고합니다.
다음은 기본 규칙의 거의 직역입니다. 별로 보지 않는 녀석은 생략하고 있습니다. (추기해 나갈 예정)
ANSIBLE0002: Trailing whitespace
줄 끝에 공백이 있음
ANSIBLE0004: Git checkouts must contain explicit version
git 모듈에서 version을 지정하지 않거나 HEAD로 지정하면 나옵니다.
ANSIBLE0005: Mercurial checkouts must contain explicit revision
ANSIBLE0004의 hg 버전. revision을 지정하지 않거나 default로 지정하면 경고가 발생합니다.
ANSIBLE000a6: Using command rather than module
git, curl, service 그 외, Ansible 모듈이 사용할 수 있는 곳에서 command, shell을 직접 두드리고 있으면 경고가 나온다.
ANSIBLE0007: Using command rather than an argument to e.g. file
chmod, mkdir, rm 그 외, file 모듈의 인수로 할 수 있는 것으로 command, shell을 직접 두드리고 있다고 경고가 나온다.
ANSIBLE0008: Deprecated sudo
become, become_user가 아닌 sudo, 사용하고 있으면 경고가 나온다.
ANSIBLE0009: Octal file permissions must contain leading zero
file 모듈 등에서 mode를 지정할 때 0666과 같은 표기가 아니라 666과 같은 표기를 하고 있다고 경고가 나온다.
ANSIBLE0011: All tasks should be named
작업에 이름을 지정하지 않으면 경고
ANSIBLE0012: Commands should not change things if nothing needs doing
command, shell 등이 when, creates 등에서 조건부로 실행되어 있지 않은 경우 경고.
ANSIBLE0013: Use shell only when shell functionality is required
쉘 모듈 흔들림 오류 대체 모듈이 있다면 그 곳을 사용할 수 있습니다.
ANSIBLE0014: Environment variables don't work as part of command
command, shell 명령 내에서 환경 변수를 사용하면 경고
ANSIBLE0015: Using bare variables is deprecated
{{ var}} 형식 이외의 변수를 사용했을 경우에 경고된다.
ANSIBLE0016: Tasks that run when changed should likely be handlers
when: result.changed 같은 일을 한다면 보통 handlers 사용하면 변경된 경우의 태스크 실행할 수 있기 때문에 그렇게 하자, 같은 규칙.
ANSIBLE0017: become_user requires become to work as expected
become없이 become_user하고 있다고 경고합니다.
ANSIBLE0018: Deprecated always_run
always_run을 사용하고 있다고 경고합니다. check_mode가 대체입니다.
GitHub Actions와의 협력
CI와의 연계도 간단하고 아래와 같이 정의해 두는 것으로 Ansible의 playbook 수정 때마다 linter가 달리는 구조가 된다.
# https://github.com/ansible/ansible-lint |
- name: Lint Ansible
shell: bash
run: |
find . -maxdepth 1 -name '*.yml' | xargs ansible-lint -v linux_init.yml
Reference
이 문제에 관하여(ansible-lint 도입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryuichi1208/items/c70b7f88ff4d49cd036c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)