Files
windmill/system_prompts/languages/ansible.md
Ruben Fiszel 017c3d3343 feat(ansible): add AI chat and editor bar buttons for ansible (#9671)
Ansible scripts previously lacked the AI assistant and the contextual
variable helper that other scripting languages expose in the script editor.

- Add 'ansible' to SUPPORTED_CHAT_SCRIPT_LANGUAGES so the AI chat button
  shows in the editor toolbar and the AI chat opens in SCRIPT mode without
  the "language not supported" warning.
- Add an Ansible system prompt (system_prompts/languages/ansible.md) plus a
  LANGUAGE_METADATA entry, and regenerate the auto-generated prompts/skills
  so the AI has tailored Ansible context.
- Show the contextual variable picker for ansible and insert references as
  `{{ lookup('env', 'NAME') }}`, matching how Windmill exposes reserved
  variables as environment variables to the ansible-playbook process.

Fixes WIN-2072

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:12:33 +00:00

2.4 KiB

Ansible

Windmill runs Ansible playbooks with ansible-playbook. A script is a single YAML document made of two parts separated by a --- line: a Windmill header and one or more standard Ansible plays.

Structure

---
# Windmill header: configures inventories, file resources, arguments and dependencies
extra_vars:
  world_qualifier:
    type: string
dependencies:
  galaxy:
    collections:
      - name: community.general
  python:
    - jmespath
---
# Standard Ansible plays
- name: Echo
  hosts: 127.0.0.1
  connection: local
  tasks:
    - name: Print debug message
      debug:
        msg: "Hello, {{ world_qualifier }} world!"

Header

The header is not standard Ansible — it is parsed by Windmill to build the script's inputs and runtime environment. Supported keys:

  • extra_vars: defines the script arguments. Each entry is passed to the playbook via --extra-vars and becomes a Jinja variable usable as {{ name }} in the plays. Give each argument a type (string, number, boolean, object, ...) so Windmill can generate the input form.
  • inventory: lists inventories. Use resource_type: ansible_inventory (optionally pinned with resource: u/user/your_resource) or resource_type: dynamic_inventory.
  • files: writes Windmill resources/variables to files before the run, e.g. - resource: u/user/template with target: ./config.j2, or - variable: u/user/ssh_key with target: ./ssh_key and mode: '0600'.
  • dependencies: galaxy collections/roles (installed with ansible-galaxy) and python pip packages available to the playbook.
  • options: extra ansible-playbook flags such as - verbosity: vvv.
  • vault_password: a Windmill variable path to use as the Ansible Vault password.

Arguments

Reference header extra_vars directly as Jinja variables in the plays:

extra_vars:
  name:
    type: string
  count:
    type: number
---
- hosts: localhost
  tasks:
    - debug:
        msg: "{{ name }} x {{ count }}"

Environment variables

Windmill contextual variables are available as environment variables and read with the env lookup:

- debug:
    msg: "Running in workspace {{ lookup('env', 'WM_WORKSPACE') }}"

Output

To return a result, write JSON to a result.json file in the job directory:

- hosts: localhost
  tasks:
    - name: Write result
      copy:
        content: "{{ { 'ok': true, 'value': 42 } | to_json }}"
        dest: result.json