0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ansible PlaybookをVSCodeで開発する

Posted at

はじめに

普段AnsibleのPlaybookを作成する際は、VSCodeを使用しています。
備忘録も兼ねて現在使用しているVSCode等の環境設定についてまとめます。

WSLの導入

まず、AnsibleのLinterとして有名どころでAnsible Lintが存在します。
こちらを活用することで、PlaybookやRoleがルールに従ってコーディングできているかをチェックできます。
.....が、Ansible LintはWindowsに対応していません。
自分は最初知らずにWindows環境で使おうとしたのですが、インストールはできるものの正常に動きませんでした。

そこで、Windows上でLinuxを動かせる、Windows Subsystem for Linux (WSL) を導入します。
Windowsのバージョンに問題なければ、PowerShellを管理者で開き、以下を実行して再起動するだけです。
自分はディストリビューションにはUbuntu(default)を使用しています。

wsl --install -d <DistroName>

インストールが完了したら、パッケージの最新化をしておきます。

sudo apt update && sudo apt upgrade

Ansible Lintの導入

それでは、WSLに対してAnsible Lintをインストールしていきます。
Ansible LintはPyPIからインストールを行うため、事前にpython3-pipをインストールしておきます。

sudo apt install python3-pip
pip -V

その後、Ansible Lintをインストールします。
単体でもインストールできますが、Ansible Development Tools (ADT)としてパッケージをインストールするのが推奨となります。

pip3 install ansible-dev-tools
ansible-lint --version

これで、Windows PCでもAnsible Lintを使用できるようになりました。

VSCode上での設定

VSCode上でWSLを使用して効率的に開発をするための設定を実施していきます。

まずは拡張機能「WSL」をインストールします。
image.png

続いて、WSL上で以下のコマンドを実行します。
これにより、VS Code Server for Linuxがインストールされ、VSCodeとWSLが連携されるようになります。

code .

VSCodeに戻り、今度は拡張機能「Ansible」をインストールします。
WSL側にインストールしますので、VSCodeがWSLに接続されていない場合は接続します。
下図の場合はローカル接続の状態ですので、次の操作をしましょう。
image.png

・左下のアイコンをクリックし、WSLへの接続をクリック
image.png
image.png

左下のアイコンが下図のように変われば完了です。
image.png

WSLとの接続に問題なければ、拡張機能「Ansible」をインストールしていきます。
インストール後は拡張機能はWSL: xxxで有効ですの表示がされるはずです。
image.png

インストールが完了したら設定を変更していきます。
歯車から設定をクリックし、設定の画面を開きます。
image.png

リモート[WSL: xxx]タブを選択し、「Ansible: Path」にWSL上でのAnsibleのPathを記載します。
image.png

同様に「Python: Interpreter Path」にもPythonのPathを入れます。
image.png

Lightspeedは使用しないため、チェックを外します。
※こちらはAIを活用した開発支援ツールです。私はGitHub Copilotを使用しているためこちらは無効化しています。
image.png

これで、設定は完了です。
あとはVSCodeでPlkaybookの開発を行うだけです。
Ansible Lintのルールに則って、エラーや警告を出してくれるようになります。
※下図はモジュール名をFQCNで指定しましょう…といったエラーです。
image.png

コンテナでの開発

これまでの設定を実施すれば、VSCode上でAnsible Lintを使用した開発が可能となります。
ただ、以前先輩に教えていただいたコンテナ上での開発が便利だったので、現在はコンテナ上に開発環境を作成しています。
開発環境をコンテナ化することで、主に以下のメリットを感じています。

  • 開発環境の再現が簡単にできる
  • パッケージはそれぞれのコンテナで独立しているため、競合が起こらない
  • ローカル環境のパッケージ導入が不要で、不必要にパッケージを導入しなくて済む

VSCodeで簡単にコンテナ環境を準備するには、拡張機能「Dev Containers」を使用します。
ローカル環境の方でインストールを実施しましょう。
image.png

インストール完了後、リモートウィンドウから「新しい開発コンテナー…」をクリックすると、WSLにDockerをインストールするか聞かれます。
未インストールの場合は、「インストール」を選択し、Dockerのインストールを行います。

Dockerのインストールができたら「新しい開発コンテナー…」からコンテナを作成していきます。
image.png

後からでも設定できますが、構成テンプレートはPython 3を選択します。
image.png

その後、任意のコンテナ名を入力して、Dev Containerの作成を行います。
image.png

すると、コンテナが作成され、.devcontainer/devcontainer.jsonに設定ファイルが作成されます。
こちらを書き換えて開発コンテナをカスタマイズできます。
今回は以下のようにdevcontainer.jsonを書き換えましょう。

devcontainer.json
{
	"name": "Ansible Container",
	"image": "mcr.microsoft.com/devcontainers/python:2-3.13-trixie",
	"postCreateCommand": "pip3 install ansible-dev-tools",
	"customizations": {
		"vscode": {
			"extensions": [
				"redhat.ansible",
				"yzhang.markdown-all-in-one",
				"DavidAnson.vscode-markdownlint"
			],
			"settings": {
				"yaml.customTags": [
					"!vault"
				],
				"ansible.ansible.path": "/home/vscode/.local/bin/ansible",
				"ansible.validation.enabled": true,
				"ansible.validation.lint.enabled": true,
				"ansible.validation.lint.arguments": "--fix",
				"ansible.validation.lint.path": "/home/vscode/.local/bin/ansible-lint",
				"ansible.ansibleNavigator.path": "/home/vscode/.local/bin/ansible-navigator",
				"ansible.lightspeed.enabled": false,
				"ansible.python.interpreterPath": "/usr/local/bin/python3",
				"files.associations": {
					"*.yml": "ansible"
				},
				"[ansible]": {
					"editor.defaultFormatter": "redhat.ansible"
				},
				"markdownlint.config": {
					"MD032": false
				},
				"[markdown]": {
					"editor.unicodeHighlight.ambiguousCharacters": false,
					"editor.unicodeHighlight.invisibleCharacters": false,
					"diffEditor.ignoreTrimWhitespace": false,
					"editor.wordWrap": "on",
					"editor.quickSuggestions": {
						"comments": "off",
						"strings": "off",
						"other": "off"
					}
				}
			}
		}
	}
}
}

その後、リモートウィンドウから「コンテナーのリビルド」を実施します。

image.png

リビルド完了後、コンテナ上でのPlaybook開発を開始できるようになります。
image.png

まとめ

今回は自分がPlaybook作成時に使用しているVSCodeの設定をまとめました。
後々ansible-builderを使うことを考えると、WSLでvenvを利用して開発環境を整える方がよい気もしますね。
次はMacを買おうか悩み中です…

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?