131 lines
3.9 KiB
Markdown
131 lines
3.9 KiB
Markdown
# Ansible
|
|
|
|
Support for Ansible in Zed is provided via a community-maintained [Ansible extension](https://github.com/kartikvashistha/zed-ansible).
|
|
|
|
- Tree-sitter: [zed-industries/tree-sitter-yaml](https://github.com/zed-industries/tree-sitter-yaml)
|
|
- Language Server: [ansible/vscode-ansible](https://github.com/ansible/vscode-ansible/tree/main/packages/ansible-language-server)
|
|
|
|
## Setup
|
|
|
|
### File detection
|
|
|
|
To avoid mishandling non-Ansible YAML files, the Ansible Language is not associated with any file extensions by default. To change this behavior you can add a `"file_types"` section to Zed settings inside your project (`.zed/settings.json`) or your Zed user settings (`~/.config/zed/settings.json`) to match your folder/naming conventions. For example:
|
|
|
|
```json
|
|
"file_types": {
|
|
"Ansible": [
|
|
"**.ansible.yml",
|
|
"**.ansible.yaml",
|
|
"**/defaults/*.yml",
|
|
"**/defaults/*.yaml",
|
|
"**/meta/*.yml",
|
|
"**/meta/*.yaml",
|
|
"**/tasks/*.yml",
|
|
"**/tasks/*.yaml",
|
|
"**/handlers/*.yml",
|
|
"**/handlers/*.yaml",
|
|
"**/group_vars/*.yml",
|
|
"**/group_vars/*.yaml",
|
|
"**/host_vars/*.yml",
|
|
"**/host_vars/*.yaml",
|
|
"**/playbooks/*.yml",
|
|
"**/playbooks/*.yaml",
|
|
"**playbook*.yml",
|
|
"**playbook*.yaml"
|
|
]
|
|
}
|
|
```
|
|
|
|
Feel free to modify this list as per your needs.
|
|
|
|
#### Inventory
|
|
|
|
If your inventory file is in the YAML format, you can either:
|
|
|
|
- Append the `ansible-lint` inventory json schema to it via the following comment at the top of your inventory file:
|
|
|
|
```yml
|
|
# yaml-language-server: $schema=https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/inventory.json
|
|
```
|
|
|
|
- Or configure the yaml language server settings to set this schema for all your inventory files, that match your inventory pattern, under your Zed settings ([ref](https://zed.dev/docs/languages/yaml)):
|
|
|
|
```json
|
|
"lsp": {
|
|
"yaml-language-server": {
|
|
"settings": {
|
|
"yaml": {
|
|
"schemas": {
|
|
"https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/inventory.json": [
|
|
"./inventory/*.yaml",
|
|
"hosts.yml",
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
```
|
|
|
|
### LSP Configuration
|
|
|
|
By default, the following default config is passed to the Ansible language server. It conveniently mirrors the defaults set by [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig/blob/03bc581e05e81d33808b42b2d7e76d70adb3b595/lua/lspconfig/configs/ansiblels.lua) for the Ansible language server:
|
|
|
|
```json
|
|
{
|
|
"ansible": {
|
|
"ansible": {
|
|
"path": "ansible"
|
|
},
|
|
"executionEnvironment": {
|
|
"enabled": false
|
|
},
|
|
"python": {
|
|
"interpreterPath": "python3"
|
|
},
|
|
"validation": {
|
|
"enabled": true,
|
|
"lint": {
|
|
"enabled": true,
|
|
"path": "ansible-lint"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
> [!NOTE]
|
|
> In order for linting to work, ensure that `ansible-lint` is installed and discoverable on your PATH
|
|
|
|
When desired, any of the above default settings can be overridden under the `"lsp"` section of your Zed settings file. For example:
|
|
|
|
```json
|
|
"lsp": {
|
|
// Note, the Zed Ansible extension prefixes all settings with `ansible`
|
|
// so instead of using `ansible.ansible.path` use `ansible.path`.
|
|
"ansible-language-server": {
|
|
"settings": {
|
|
"ansible": {
|
|
"path": "ansible"
|
|
},
|
|
"executionEnvironment": {
|
|
"enabled": false
|
|
},
|
|
"python": {
|
|
"interpreterPath": "python3"
|
|
},
|
|
"validation": {
|
|
"enabled": false, // disable validation
|
|
"lint": {
|
|
"enabled": false, // disable ansible-lint
|
|
"path": "ansible-lint"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
A full list of options/settings, that can be passed to the server, can be found at the project's page [here](https://github.com/ansible/vscode-ansible/blob/5a89836d66d470fb9d20e7ea8aa2af96f12f61fb/docs/als/settings.md).
|
|
Feel free to modify option values as needed.
|