Ansible
Support for Ansible in Zed is provided via a community-maintained Ansible extension.
- Tree-sitter: zed-industries/tree-sitter-yaml
- Language Server: ansible/vscode-ansible
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:
"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:
# 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):
"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 for the Ansible language server:
{
"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:
"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. Feel free to modify option values as needed.