{
  "$comment": "Generated from ansible.json, do not edit.",
  "$defs": {
    "become_method": {
      "anyOf": [
        {
          "enum": [
            "ansible.builtin.sudo",
            "ansible.builtin.su",
            "community.general.pbrun",
            "community.general.pfexec",
            "ansible.builtin.runas",
            "community.general.dzdo",
            "community.general.ksu",
            "community.general.doas",
            "community.general.machinectl",
            "community.general.pmrun",
            "community.general.sesu",
            "community.general.sudosu"
          ],
          "type": "string"
        },
        {
          "$ref": "#/$defs/full-jinja"
        },
        {
          "pattern": "[A-Za-z0-9_\\.]+",
          "type": "string"
        }
      ],
      "markdownDescription": "See [become](https://docs.ansible.com/ansible/latest/user_guide/become.html)",
      "title": "Become Method"
    },
    "block": {
      "properties": {
        "always": {
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/task"
              },
              {
                "$ref": "#/$defs/block"
              }
            ]
          },
          "title": "Always",
          "type": "array"
        },
        "any_errors_fatal": {
          "$ref": "#/$defs/templated-boolean",
          "title": "Any Errors Fatal"
        },
        "become": {
          "$ref": "#/$defs/templated-boolean",
          "title": "Become"
        },
        "become_exe": {
          "title": "Become Exe",
          "type": "string"
        },
        "become_flags": {
          "title": "Become Flags",
          "type": "string"
        },
        "become_method": {
          "$ref": "#/$defs/become_method"
        },
        "become_user": {
          "title": "Become User",
          "type": "string"
        },
        "block": {
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/task"
              },
              {
                "$ref": "#/$defs/block"
              }
            ]
          },
          "markdownDescription": "Blocks create logical groups of tasks. Blocks also offer ways to handle task errors, similar to exception handling in many programming languages. See [blocks](https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html)",
          "title": "Block",
          "type": "array"
        },
        "check_mode": {
          "$ref": "#/$defs/complex_conditional",
          "title": "Check Mode"
        },
        "collections": {
          "items": {
            "type": "string"
          },
          "title": "Collections",
          "type": "array"
        },
        "connection": {
          "title": "Connection",
          "type": "string"
        },
        "debugger": {
          "title": "Debugger",
          "type": "string"
        },
        "delegate_facts": {
          "title": "Delegate Facts",
          "type": "boolean"
        },
        "delegate_to": {
          "title": "Delegate To",
          "type": "string"
        },
        "diff": {
          "$ref": "#/$defs/templated-boolean",
          "title": "Diff"
        },
        "environment": {
          "$ref": "#/$defs/environment"
        },
        "ignore_errors": {
          "$ref": "#/$defs/ignore_errors"
        },
        "ignore_unreachable": {
          "title": "Ignore Unreachable",
          "type": "boolean"
        },
        "module_defaults": {
          "title": "Module Defaults"
        },
        "name": {
          "title": "Name",
          "type": "string"
        },
        "no_log": {
          "$ref": "#/$defs/templated-boolean"
        },
        "port": {
          "$ref": "#/$defs/templated-integer"
        },
        "remote_user": {
          "title": "Remote User",
          "type": "string"
        },
        "rescue": {
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/task"
              },
              {
                "$ref": "#/$defs/block"
              }
            ]
          },
          "title": "Rescue",
          "type": "array"
        },
        "run_once": {
          "$ref": "#/$defs/templated-boolean",
          "title": "Run Once"
        },
        "tags": {
          "$ref": "#/$defs/tags",
          "title": "Tags"
        },
        "throttle": {
          "$ref": "#/$defs/templated-integer",
          "title": "Throttle"
        },
        "timeout": {
          "$ref": "#/$defs/templated-integer",
          "title": "Timeout"
        },
        "vars": {
          "title": "Vars",
          "type": "object"
        },
        "when": {
          "$ref": "#/$defs/complex_conditional",
          "title": "When"
        }
      },
      "required": [
        "block"
      ],
      "type": "object"
    },
    "complex_conditional": {
      "oneOf": [
        {
          "type": "boolean"
        },
        {
          "type": "string"
        },
        {
          "items": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "string"
              }
            ]
          },
          "type": "array"
        }
      ]
    },
    "environment": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        {
          "$ref": "#/$defs/full-jinja"
        }
      ],
      "title": "Environment"
    },
    "full-jinja": {
      "pattern": "^\\{[\\{%](.|[\r\n])*[\\}%]\\}$",
      "type": "string"
    },
    "ignore_errors": {
      "$ref": "#/$defs/templated-boolean",
      "markdownDescription": "See [ignore_errors](https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html#ignoring-failed-commands)",
      "title": "Ignore Errors"
    },
    "no_log": {
      "$ref": "#/$defs/templated-boolean",
      "markdownDescription": "Use for protecting sensitive data. See [no_log](https://docs.ansible.com/ansible/latest/reference_appendices/logging.html)",
      "title": "no_log"
    },
    "removed-include-module": {
      "markdownDescription": "See [include module](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/include_module.html)",
      "not": {},
      "title": "Replace 'include' with either 'ansible.builtin.include_tasks' or 'ansible.builtin.import_tasks'"
    },
    "tags": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      ],
      "title": "Tags"
    },
    "task": {
      "additionalProperties": true,
      "allOf": [
        {
          "not": {
            "required": [
              "hosts"
            ]
          }
        },
        {
          "not": {
            "required": [
              "tasks"
            ]
          }
        },
        {
          "not": {
            "required": [
              "import_playbook"
            ]
          }
        },
        {
          "not": {
            "required": [
              "block"
            ]
          }
        }
      ],
      "properties": {
        "action": {
          "title": "Action",
          "type": "string"
        },
        "ansible.builtin.include": {
          "$ref": "#/$defs/removed-include-module"
        },
        "ansible.legacy.include": {
          "$ref": "#/$defs/removed-include-module"
        },
        "any_errors_fatal": {
          "$ref": "#/$defs/templated-boolean",
          "title": "Any Errors Fatal"
        },
        "args": {
          "$ref": "#/$defs/templated-object",
          "title": "Args"
        },
        "async": {
          "$ref": "#/$defs/templated-integer",
          "title": "Async"
        },
        "become": {
          "$ref": "#/$defs/templated-boolean",
          "title": "Become"
        },
        "become_exe": {
          "title": "Become Exe",
          "type": "string"
        },
        "become_flags": {
          "title": "Become Flags",
          "type": "string"
        },
        "become_method": {
          "$ref": "#/$defs/become_method"
        },
        "become_user": {
          "title": "Become User",
          "type": "string"
        },
        "changed_when": {
          "$ref": "#/$defs/complex_conditional",
          "markdownDescription": "See [changed_when](https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html#defining-changed)",
          "title": "Changed When"
        },
        "check_mode": {
          "$ref": "#/$defs/complex_conditional",
          "title": "Check Mode"
        },
        "collections": {
          "items": {
            "type": "string"
          },
          "title": "Collections",
          "type": "array"
        },
        "connection": {
          "title": "Connection",
          "type": "string"
        },
        "debugger": {
          "title": "Debugger",
          "type": "string"
        },
        "delay": {
          "$ref": "#/$defs/templated-integer",
          "title": "Delay"
        },
        "delegate_facts": {
          "title": "Delegate Facts",
          "type": "boolean"
        },
        "delegate_to": {
          "title": "Delegate To",
          "type": "string"
        },
        "diff": {
          "$ref": "#/$defs/templated-boolean",
          "title": "Diff"
        },
        "environment": {
          "$ref": "#/$defs/environment"
        },
        "failed_when": {
          "$ref": "#/$defs/complex_conditional",
          "title": "Failed When"
        },
        "ignore_errors": {
          "$ref": "#/$defs/ignore_errors"
        },
        "ignore_unreachable": {
          "title": "Ignore Unreachable",
          "type": "boolean"
        },
        "include": {
          "$ref": "#/$defs/removed-include-module"
        },
        "listen": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          ],
          "markdownDescription": "Applies only to handlers. See [listen](https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_handlers.html)",
          "title": "Listen"
        },
        "local_action": {
          "title": "Local Action",
          "type": [
            "string",
            "object"
          ]
        },
        "loop": {
          "title": "Loop",
          "type": [
            "string",
            "array"
          ]
        },
        "loop_control": {
          "title": "Loop Control"
        },
        "module_defaults": {
          "title": "Module Defaults"
        },
        "name": {
          "title": "Name",
          "type": "string"
        },
        "no_log": {
          "$ref": "#/$defs/no_log"
        },
        "notify": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          ],
          "title": "Notify"
        },
        "poll": {
          "$ref": "#/$defs/templated-integer",
          "title": "Poll"
        },
        "port": {
          "$ref": "#/$defs/templated-integer",
          "title": "Port"
        },
        "register": {
          "title": "Register",
          "type": "string"
        },
        "remote_user": {
          "title": "Remote User",
          "type": "string"
        },
        "retries": {
          "$ref": "#/$defs/templated-integer",
          "title": "Retries"
        },
        "run_once": {
          "$ref": "#/$defs/templated-boolean",
          "title": "Run Once"
        },
        "tags": {
          "$ref": "#/$defs/tags",
          "title": "Tags"
        },
        "throttle": {
          "$ref": "#/$defs/templated-integer",
          "title": "Throttle"
        },
        "timeout": {
          "$ref": "#/$defs/templated-integer",
          "title": "Timeout"
        },
        "until": {
          "$ref": "#/$defs/complex_conditional",
          "title": "Until"
        },
        "vars": {
          "title": "Vars",
          "type": "object"
        },
        "when": {
          "$ref": "#/$defs/complex_conditional",
          "title": "When"
        },
        "with_dict": {
          "title": "With Dict"
        },
        "with_fileglob": {
          "title": "With Fileglob"
        },
        "with_filetree": {
          "title": "With Filetree"
        },
        "with_first_found": {
          "title": "With First Found"
        },
        "with_indexed_items": {
          "title": "With Indexed Items"
        },
        "with_ini": {
          "title": "With Ini"
        },
        "with_inventory_hostnames": {
          "title": "With Inventory Hostnames"
        },
        "with_items": {
          "anyOf": [
            {
              "$ref": "#/$defs/full-jinja"
            },
            {
              "type": "array"
            }
          ],
          "markdownDescription": "See [loops](https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#loops)",
          "title": "With Items"
        },
        "with_lines": {
          "title": "With Lines"
        },
        "with_random_choice": {
          "title": "With Random Choice"
        },
        "with_sequence": {
          "title": "With Sequence"
        },
        "with_subelements": {
          "title": "With Subelements"
        },
        "with_together": {
          "title": "With Together"
        }
      },
      "title": "task",
      "type": "object"
    },
    "templated-boolean": {
      "oneOf": [
        {
          "type": "boolean"
        },
        {
          "$ref": "#/$defs/full-jinja",
          "type": "string"
        }
      ]
    },
    "templated-integer": {
      "oneOf": [
        {
          "type": "integer"
        },
        {
          "$ref": "#/$defs/full-jinja",
          "type": "string"
        }
      ]
    },
    "templated-object": {
      "oneOf": [
        {
          "type": "object"
        },
        {
          "$ref": "#/$defs/full-jinja",
          "type": "string"
        }
      ]
    }
  },
  "$id": "https://raw.githubusercontent.com/ansible/ansible-lint/main/src/ansiblelint/schemas/tasks.json",
  "$schema": "http://json-schema.org/draft-07/schema",
  "examples": [
    "tasks/*.yml",
    "handlers/*.yml"
  ],
  "items": {
    "anyOf": [
      {
        "$ref": "#/$defs/block"
      },
      {
        "$ref": "#/$defs/task"
      }
    ]
  },
  "title": "Ansible Tasks Schema",
  "type": [
    "array",
    "null"
  ]
}
