9 мин чтения
Как установить расширение Ansible Lint в VSCode на Windows с использованием WSL
Пошаговое руководство по установке ansible-lint расширения на Windows. Исправляем ошибки 'Ansible-lint is not available. Kindly check the path or disable validation using ansible-lint' в VSCode.
Введение
Добро пожаловать! Следуя этому руководству, вы узнаете, как настроить расширение Ansible Lint в Visual Studio Code на Windows с помощью WSL для настройки подсветки синтаксиса, а также отображения ошибок и варнингов в ваших плейбуках. Здесь вы найдете пошаговое руководство по правильной настройке ansible-lint с исправлением ошибок 'Ansible-lint is not available. Kindly check the path or disable validation using ansible-lint'.
Чтобы следовать этому руководству, убедитесь, что на вашем компьютере с Windows установлена и настроена WSL (подсистема Windows для Linux), а Ansible и ansible-lint правильно настроены в среде WSL. Мы установим официальное расширение Ansible для VS Code и откроем ваш проект Ansible в VS Code на WSL. Затем мы проверим, что ansible-lint функционирует, создав простой playbook.
Подготовка
Так как вы хотите настроить проверку кода в VSCode c помощью ansible lint, то будем считать что вы уже установили Visual Studio Code и Ansible в своем WSL окружении. Если еще нет, то вот ссылка на официальную документацию по установке Ansible и ссылка для загрузки последней версии VSCode.
Установка Ansible Lint производится через pip. Если у вас нет pip, то установите его по инстуркции из официальной документации.
По окончании установки у вас на машине должена быть настроена WSL машина на которой установлен Ansible.
Не забудьте запустить WSL перед началом установки использования этого руководства из PowerShell c помощью команды wsl
.
Шаг 1: Установка Ansible Lint в WSL
Команда ansible-lint находится в пакете ansible-tools. Ее можно установить или самостоятельно или вместе со всеми пакетами Ansible Tools(такой вариант предпочтительнее). Для установки Ansible Lint в WSL выполните следующую pip команду:
pip3 install ansible-dev-tools
# or pip3 install ansible-lint
Шаг 2: Установка расширения Ansible Lint в VSCode
Запустите VSCode и откройте панель расширений с помощью Ctrl
+ Shift
+ X
или нажав на значок расширений на боковой панели окна VSCode.
Введите в поиск "Ansible" в панели расширений и установите официальное расширение Ansible от Microsoft. Если вы не можете его найти, то вы можете использовать эту ссылку для установки вручную.
Шаг 3: Установка расширения Remote в VSCode
Так как установка Ansible Lint производилась в WSL, то нам нужно установить Remote extension в VSCode. Это позволит нам работать с файлами в WSL из VSCode. Расширение можно найти в маркетплейсе VSCode по названию "Remote". Это официальное расширение, которое поддерживает Microsoft. Этот пакет расширений состоит из расширения WSL, а также расширений Remote - SSH и Dev Containers, что позволяет вам открывать любую папку в контейнере, на удаленной машине или в WSL. Если вы не можете найти его, то воспользуйтесь ссылкой для установки.
Шаг 4: Открываем свой ansible workspace в VSCode
Если в данный момент вы попробуете открыть свой ansible playbook в VSCode, то вы увидите подсветку синтаксиса, линтинг работать не будет и VSCode отобразит ошибку. Такое поведение происходит так как по умолчанию VSCode пытается найти Ansible на вашем Windows хосте и не может это сделать(так как ansible установлен только в WSL).
Для того чтобы это исправить необходимо открыть свой ansible проект в VSCode на удаленном хосте с установленным ansible - в нашем случае WSL.
Для этого откройте панель команд с помощью Ctrl
+Shift
+P
, найдите >WSL: Open Folder in WSL
и выберите папку с вашим проектом.
Теперь ваш проект открыт в WSL, и линтинг должен работать корректно. Если у вас в WSL установлено несколько версий Python, расширение Ansible позволит вам выбрать интерпретатор Python вручную.
Теперь вы должны увидеть, что ваш проект открыт в WSL, версия Ansible обнаружена, и ansible-lint работает корректно.
Шаг 5: Проверяем работу ansible-lint в VSCode
Давайте создадим простой playbook, чтобы проверить, работает ли ansible-lint в VSCode.
Скопируйте следующий код в ваш файл ansible playbook с именем simple-playbook.yml
:
---
- name: Update web servers
hosts: webservers
remote_user: root
tasks:
- name: Ensure apache is at the latest version
ansible.builtin.yum:
name: httpd
state: latest
- name: Write the apache config file
ansible.builtin.template:
src: ./srv/httpd.j2
dest: /etc/httpd.conf
- name: Update db servers
hosts: databases
remote_user: root
tasks:
- name: Add PostgreSQL repository
package:
name: "https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm"
state: present
- name: Ensure postgresql is at the latest version
package:
name: postgresql13-server
state: latest
- name: Run PostgreSQL initdb if data directory does not exist
shell: /usr/pgsql-13/bin/postgresql-13-setup initdb
args:
creates: /var/lib/pgsql/13/data/
- name: Ensure that postgresql is started
service:
name: postgresql-13
state: started
enabled: true
Вы увидите, что в вашем playbook выделены некоторые ошибки с помощью расширения Ansible!
Если вы выполните ansible-lint simple-playbook.yml
в терминале WSL, вы увидите те же ошибки.
WARNING Listing 11 violation(s) that are fatal
fqcn[action-core]: Use FQCN for builtin module actions (ansible.builtin.yum).
initial-playbook.yml:7 Use `ansible.builtin.dnf` or `ansible.legacy.dnf` instead.
package-latest: Package installs should not use latest.
initial-playbook.yml:7 Task/Handler: Ensure apache is at the latest version
yaml[indentation]: Wrong indentation: expected at least 3
initial-playbook.yml:7
risky-file-permissions: File permissions unset or incorrect.
initial-playbook.yml:12 Task/Handler: Write the apache config file
...
Read documentation for instructions on how to ignore specific rule violations.
Rule Violation Summary
count tag profile rule associated tags
1 command-instead-of-shell basic command-shell, idiom
1 yaml[indentation] basic formatting, yaml
1 yaml[new-line-at-end-of-file] basic formatting, yaml
2 package-latest safety idempotency
1 risky-file-permissions safety unpredictability
5 fqcn[action-core] production formatting
Failed: 11 failure(s), 0 warning(s) on 1 files. Last profile that met the validation criteria was 'min'.
Давайте попробуем исправить их, используя подсказки из расширения Ansible для VSCode!
После исправления выделенных ошибок у вас получится следующий корректный ansible playbook:
---
- name: Update web servers
hosts: webservers
remote_user: root
tasks:
- name: Ensure apache is at the latest version
ansible.builtin.package:
name: httpd-2.4.62
state: present
- name: Write the apache config file
ansible.builtin.template:
src: ./srv/httpd.j2
dest: /etc/httpd.conf
mode: "0644"
- name: Update db servers
hosts: databases
remote_user: root
tasks:
- name: Add PostgreSQL repository
ansible.builtin.package:
name: "https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm"
state: present
- name: Ensure postgresql is at the latest version
ansible.builtin.package:
name: postgresql13-server
state: present
- name: Run PostgreSQL initdb if data directory does not exist
# noqa: command-instead-of-shell
ansible.builtin.shell: /usr/pgsql-13/bin/postgresql-13-setup initdb
args:
creates: /var/lib/pgsql/13/data/
- name: Ensure that postgresql is started
ansible.builtin.service:
name: postgresql-13
state: started
enabled: true
Одно из правил линтинга было явно отключено (command-instead-of-shell
), так как мы уверены, что здесь нужно использовать команду shell. Кроме того, вы можете настроить правила линтинга для ваших ansible файлов. Для этого вам нужно создать файл .ansible-lint
в корне вашего ansible проекта.
Например, чтобы предотвратить выделение ошибки при использовании встроенных модулей без префикса ansible.builtin
, вы можете создать такой файл .ansible-lint
:
---
skip_list:
- fqcn-builtins
PROFIT!
Полезные ссылки
- Install Ansible
- Install Ansible Lint
- VSCode Ansible extension
- VSCode Remote extension
- How to open a WSL project in VSCode
- Install WSL
- Install VSCode
- Install pip