Skip to Content
Жора К

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. Если вы не можете его найти, то вы можете использовать эту ссылку для установки вручную.

image

Шаг 3: Установка расширения Remote в VSCode

Так как установка Ansible Lint производилась в WSL, то нам нужно установить Remote extension в VSCode. Это позволит нам работать с файлами в WSL из VSCode. Расширение можно найти в маркетплейсе VSCode по названию "Remote". Это официальное расширение, которое поддерживает Microsoft. Этот пакет расширений состоит из расширения WSL, а также расширений Remote - SSH и Dev Containers, что позволяет вам открывать любую папку в контейнере, на удаленной машине или в WSL. Если вы не можете найти его, то воспользуйтесь ссылкой для установки.

image

Шаг 4: Открываем свой ansible workspace в VSCode

Если в данный момент вы попробуете открыть свой ansible playbook в VSCode, то вы увидите подсветку синтаксиса, линтинг работать не будет и VSCode отобразит ошибку. Такое поведение происходит так как по умолчанию VSCode пытается найти Ansible на вашем Windows хосте и не может это сделать(так как ansible установлен только в WSL).

image

Для того чтобы это исправить необходимо открыть свой ansible проект в VSCode на удаленном хосте с установленным ansible - в нашем случае WSL. Для этого откройте панель команд с помощью Ctrl+Shift+P, найдите >WSL: Open Folder in WSL и выберите папку с вашим проектом.

image

Теперь ваш проект открыт в WSL, и линтинг должен работать корректно. Если у вас в WSL установлено несколько версий Python, расширение Ansible позволит вам выбрать интерпретатор Python вручную. image

Теперь вы должны увидеть, что ваш проект открыт в WSL, версия Ansible обнаружена, и ansible-lint работает корректно.

image

Шаг 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!

Полезные ссылки