【ルール説明・basic】schema

こちらの記事は[Ansible lint Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ansible-lint) 12日目の記事になります。


今回はルール[schema](https://ansible-lint.readthedocs.io/rules/schema/)について説明します。

### schema

[schema](https://ansible-lint.readthedocs.io/rules/schema/)はAnsibleコンテンツのmetaデータがJSONスキーマに対して妥当かどうかを検証します。[schema](https://ansible-lint.readthedocs.io/rules/schema/)はAnsible lintの全てのルールの中で一番最初に検査が実行されます。Ansible lintでは必ず守るべきルールの１つになります。

#### JSONスキーマ

若干分かりにくい概念ですが簡単に言えばmetaデータに記述すべき要素が記述されているか、余分な要素が記述されていないかを検証します。

例えばAnsible roleのmetaデータである [meta/main.yml](https://galaxy.ansible.com/docs/contributing/creating_role.html) は以下のような要素が指定できます。

```yaml
galaxy_info:
  role_name: foo
  author: your name
  description: your description
  company: your company (optional)
  license: license (GPLv2, CC-BY, etc)
  min_ansible_version: 1.2
  platforms:
   - name: Fedora
     versions:
     - all
     - 25
   - name: SomePlatform
     versions:
     - all
     - 1.0
  galaxy_tags: []
dependencies: []
```

この中で`galaxy_info.role_name`は必ず記述する必要があります。`galaxy_info.company`はオプションなので記述しなくても検査はパスします。

また例えば`galaxy_info.platforms.release`のように独自の要素を記述するとエラーになります。

この定義ファイルは[schemas/f at main · ansible/schemas](https://github.com/ansible/schemas/tree/main/f)の`ansible-meta.json`で確認できます。

<details><summary>長いです</summary><div>



```json
{
  "$defs": {
    "AIXPlatformModel": {
      "properties": {
        "name": {
          "const": "AIX",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["6.1", "7.1", "7.2", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "AIXPlatformModel",
      "type": "object"
    },
    "AlpinePlatformModel": {
      "properties": {
        "name": {
          "const": "Alpine",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "AlpinePlatformModel",
      "type": "object"
    },
    "AmazonPlatformModel": {
      "properties": {
        "name": {
          "const": "Amazon",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": [
              "2013.03",
              "2013.09",
              "2014.03",
              "2014.09",
              "2015.03",
              "2015.09",
              "2016.03",
              "2016.09",
              "2017.03",
              "2017.09",
              "2017.12",
              "2018.03",
              "Candidate",
              "all"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "AmazonPlatformModel",
      "type": "object"
    },
    "Amazon_Linux_2PlatformModel": {
      "properties": {
        "name": {
          "const": "Amazon Linux 2",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "Amazon Linux 2PlatformModel",
      "type": "object"
    },
    "ArchLinuxPlatformModel": {
      "properties": {
        "name": {
          "const": "ArchLinux",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "ArchLinuxPlatformModel",
      "type": "object"
    },
    "ClearLinuxPlatformModel": {
      "properties": {
        "name": {
          "const": "ClearLinux",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "ClearLinuxPlatformModel",
      "type": "object"
    },
    "CumulusPlatformModel": {
      "properties": {
        "name": {
          "const": "Cumulus",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["2.5", "3.0", "3.1", "3.2", "3.3", "3.4", "3.5", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "CumulusPlatformModel",
      "type": "object"
    },
    "DebianPlatformModel": {
      "properties": {
        "name": {
          "const": "Debian",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": [
              "bookworm",
              "bullseye",
              "buster",
              "etch",
              "jessie",
              "lenny",
              "sid",
              "squeeze",
              "stretch",
              "wheezy",
              "all"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "DebianPlatformModel",
      "type": "object"
    },
    "DellOSPlatformModel": {
      "properties": {
        "name": {
          "const": "DellOS",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["10", "6", "9", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "DellOSPlatformModel",
      "type": "object"
    },
    "DependencyModel": {
      "additionalProperties": true,
      "anyOf": [
        {
          "required": ["role"]
        },
        {
          "required": ["src"]
        },
        {
          "required": ["name"]
        }
      ],
      "markdownDescription": "See https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html#role-dependencies and https://github.com/ansible/ansible/blob/devel/lib/ansible/playbook/role/metadata.py#L79\n\nOther keys are treated as role [parameters](https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html#passing-different-parameters).",
      "properties": {
        "become": {
          "title": "Become",
          "type": "boolean"
        },
        "name": {
          "title": "Name",
          "type": "string"
        },
        "role": {
          "title": "Role",
          "type": "string"
        },
        "scm": {
          "enum": ["hg", "git"],
          "title": "Scm",
          "type": "string"
        },
        "src": {
          "title": "Src",
          "type": "string"
        },
        "tags": {
          "items": {
            "type": "string"
          },
          "title": "Tags",
          "type": ["array", "string"]
        },
        "vars": {
          "title": "Vars",
          "type": "object"
        },
        "version": {
          "title": "Version",
          "type": "string"
        },
        "when": {
          "$ref": "#/$defs/complex_conditional",
          "title": "When"
        }
      },
      "title": "Dependency entry",
      "type": "object"
    },
    "DevuanPlatformModel": {
      "properties": {
        "name": {
          "const": "Devuan",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["ascii", "beowulf", "ceres", "jessie", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "DevuanPlatformModel",
      "type": "object"
    },
    "DragonFlyBSDPlatformModel": {
      "properties": {
        "name": {
          "const": "DragonFlyBSD",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["5.2", "5.4", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "DragonFlyBSDPlatformModel",
      "type": "object"
    },
    "ELPlatformModel": {
      "properties": {
        "name": {
          "const": "EL",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["5", "6", "7", "8", "9", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "ELPlatformModel",
      "type": "object"
    },
    "FedoraPlatformModel": {
      "properties": {
        "name": {
          "const": "Fedora",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": [
              "16",
              "17",
              "18",
              "19",
              "20",
              "21",
              "22",
              "23",
              "24",
              "25",
              "26",
              "27",
              "28",
              "29",
              "30",
              "31",
              "32",
              "33",
              "34",
              "35",
              "36",
              "37",
              "all"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "FedoraPlatformModel",
      "type": "object"
    },
    "FreeBSDPlatformModel": {
      "properties": {
        "name": {
          "const": "FreeBSD",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": [
              "10.0",
              "10.1",
              "10.2",
              "10.3",
              "10.4",
              "11.0",
              "11.1",
              "11.2",
              "11.3",
              "11.4",
              "12.0",
              "12.1",
              "12.2",
              "13.0",
              "8.0",
              "8.1",
              "8.2",
              "8.3",
              "8.4",
              "9.0",
              "9.1",
              "9.2",
              "9.3",
              "all"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "FreeBSDPlatformModel",
      "type": "object"
    },
    "GalaxyInfoModel": {
      "additionalProperties": false,
      "allOf": [
        {
          "if": {
            "properties": {
              "standalone": {
                "const": true
              }
            }
          },
          "then": {
            "$comment": "Standalone role, so we require several fields.",
            "required": [
              "author",
              "description",
              "license",
              "min_ansible_version"
            ]
          }
        },
        {
          "if": {
            "properties": {
              "standalone": {
                "const": false
              }
            }
          },
          "then": {
            "$comment": "Collection roles do not use most galaxy fields.",
            "not": {
              "required": [
                "cloud_platforms",
                "galaxy_tags",
                "min_ansible_version",
                "namespace",
                "platforms",
                "role_name"
              ]
            },
            "required": ["description"]
          }
        }
      ],
      "else": {
        "$comment": "If standalone is false, then we have a collection role and only description is required",
        "required": ["description"]
      },
      "properties": {
        "author": {
          "title": "Author",
          "type": "string"
        },
        "company": {
          "title": "Company",
          "type": "string"
        },
        "description": {
          "title": "Description",
          "type": "string"
        },
        "galaxy_tags": {
          "items": {
            "type": "string"
          },
          "markdownDescription": "See https://galaxy.ansible.com/docs/contributing/creating_role.html",
          "title": "Galaxy Tags",
          "type": "array"
        },
        "issue_tracker_url": {
          "title": "Issue Tracker Url",
          "type": "string"
        },
        "license": {
          "title": "License",
          "type": "string"
        },
        "min_ansible_container_version": {
          "title": "Min Ansible Container Version",
          "type": "string"
        },
        "min_ansible_version": {
          "title": "Min Ansible Version",
          "type": "string"
        },
        "namespace": {
          "markdownDescription": "Used by molecule and ansible-lint to compute FQRN for roles outside collections",
          "minLength": 2,
          "pattern": "^[a-z][a-z0-9_]+$",
          "title": "Namespace Name",
          "type": "string"
        },
        "platforms": {
          "$ref": "#/$defs/platforms"
        },
        "role_name": {
          "minLength": 2,
          "pattern": "^[a-z][a-z0-9_]+$",
          "title": "Role Name",
          "type": "string"
        },
        "standalone": {
          "description:": "Set to true for old standalone roles, or false for new collection roles.",
          "title": "Standalone",
          "type": "boolean"
        }
      },
      "title": "GalaxyInfoModel",
      "type": "object"
    },
    "GenericBSDPlatformModel": {
      "properties": {
        "name": {
          "const": "GenericBSD",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "GenericBSDPlatformModel",
      "type": "object"
    },
    "GenericLinuxPlatformModel": {
      "properties": {
        "name": {
          "const": "GenericLinux",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "GenericLinuxPlatformModel",
      "type": "object"
    },
    "GenericUNIXPlatformModel": {
      "properties": {
        "name": {
          "const": "GenericUNIX",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "GenericUNIXPlatformModel",
      "type": "object"
    },
    "GentooPlatformModel": {
      "properties": {
        "name": {
          "const": "Gentoo",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "GentooPlatformModel",
      "type": "object"
    },
    "HardenedBSDPlatformModel": {
      "properties": {
        "name": {
          "const": "HardenedBSD",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["10", "11", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "HardenedBSDPlatformModel",
      "type": "object"
    },
    "IOSPlatformModel": {
      "properties": {
        "name": {
          "const": "IOS",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "IOSPlatformModel",
      "type": "object"
    },
    "JunosPlatformModel": {
      "properties": {
        "name": {
          "const": "Junos",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "JunosPlatformModel",
      "type": "object"
    },
    "MacOSXPlatformModel": {
      "properties": {
        "name": {
          "const": "MacOSX",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": [
              "10.10",
              "10.11",
              "10.12",
              "10.13",
              "10.14",
              "10.15",
              "10.7",
              "10.8",
              "10.9",
              "all"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "MacOSXPlatformModel",
      "type": "object"
    },
    "MageiaPlatformModel": {
      "properties": {
        "name": {
          "const": "Mageia",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["7", "8", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "MageiaPlatformModel",
      "type": "object"
    },
    "NXOSPlatformModel": {
      "properties": {
        "name": {
          "const": "NXOS",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "NXOSPlatformModel",
      "type": "object"
    },
    "OpenBSDPlatformModel": {
      "properties": {
        "name": {
          "const": "OpenBSD",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": [
              "5.6",
              "5.7",
              "5.8",
              "5.9",
              "6.0",
              "6.1",
              "6.2",
              "6.3",
              "6.4",
              "6.5",
              "6.6",
              "6.7",
              "6.8",
              "6.9",
              "7.0",
              "all"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "OpenBSDPlatformModel",
      "type": "object"
    },
    "OpenWRTPlatformModel": {
      "properties": {
        "name": {
          "const": "OpenWRT",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["17.01", "18.06", "19.07", "21.02", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "OpenWRTPlatformModel",
      "type": "object"
    },
    "OracleLinuxPlatformModel": {
      "properties": {
        "name": {
          "const": "OracleLinux",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": [
              "8.0",
              "8.1",
              "8.2",
              "8.3",
              "8.4",
              "8.5",
              "8.6",
              "9.0",
              "all"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "OracleLinuxPlatformModel",
      "type": "object"
    },
    "PAN-OSPlatformModel": {
      "properties": {
        "name": {
          "const": "PAN-OS",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["7.1", "8.0", "8.1", "9.0", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "PAN-OSPlatformModel",
      "type": "object"
    },
    "SLESPlatformModel": {
      "properties": {
        "name": {
          "const": "SLES",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": [
              "10SP3",
              "10SP4",
              "11",
              "11SP1",
              "11SP2",
              "11SP3",
              "11SP4",
              "12",
              "12SP1",
              "12SP2",
              "12SP3",
              "12SP4",
              "12SP5",
              "15",
              "15SP1",
              "15SP2",
              "15SP3",
              "all"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "SLESPlatformModel",
      "type": "object"
    },
    "SmartOSPlatformModel": {
      "properties": {
        "name": {
          "const": "SmartOS",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "SmartOSPlatformModel",
      "type": "object"
    },
    "SolarisPlatformModel": {
      "properties": {
        "name": {
          "const": "Solaris",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["10", "11.0", "11.1", "11.2", "11.3", "11.4", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "SolarisPlatformModel",
      "type": "object"
    },
    "SynologyPlatformModel": {
      "properties": {
        "name": {
          "const": "Synology",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["6.0", "6.1", "6.2", "7.0", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "SynologyPlatformModel",
      "type": "object"
    },
    "TMOSPlatformModel": {
      "properties": {
        "name": {
          "const": "TMOS",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["12.1", "13.0", "13.1", "14.0", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "TMOSPlatformModel",
      "type": "object"
    },
    "UbuntuPlatformModel": {
      "properties": {
        "name": {
          "const": "Ubuntu",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": [
              "artful",
              "bionic",
              "cosmic",
              "cuttlefish",
              "disco",
              "eoan",
              "focal",
              "groovy",
              "hirsute",
              "impish",
              "jammy",
              "lucid",
              "maverick",
              "natty",
              "oneiric",
              "precise",
              "quantal",
              "raring",
              "saucy",
              "trusty",
              "utopic",
              "vivid",
              "wily",
              "xenial",
              "yakkety",
              "zesty",
              "all"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "UbuntuPlatformModel",
      "type": "object"
    },
    "Void_LinuxPlatformModel": {
      "properties": {
        "name": {
          "const": "Void Linux",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "Void LinuxPlatformModel",
      "type": "object"
    },
    "WindowsPlatformModel": {
      "properties": {
        "name": {
          "const": "Windows",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": [
              "2008R2",
              "2008x64",
              "2008x86",
              "2012",
              "2012R2",
              "2016",
              "2019",
              "2022",
              "all"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "WindowsPlatformModel",
      "type": "object"
    },
    "aosPlatformModel": {
      "properties": {
        "name": {
          "const": "aos",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "aosPlatformModel",
      "type": "object"
    },
    "collections": {
      "items": {
        "markdownDescription": "See [Using collections in roles](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#using-collections-in-roles) and [collection naming conventions](https://docs.ansible.com/ansible/latest/dev_guide/developing_modules_in_groups.html#naming-conventions)",
        "pattern": "^[a-z_]+\\.[a-z_]+$",
        "type": "string"
      },
      "title": "Collections",
      "type": "array"
    },
    "complex_conditional": {
      "oneOf": [
        {
          "type": "boolean"
        },
        {
          "type": "string"
        },
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      ]
    },
    "eosPlatformModel": {
      "properties": {
        "name": {
          "const": "eos",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "eosPlatformModel",
      "type": "object"
    },
    "macOSPlatformModel": {
      "properties": {
        "name": {
          "const": "macOS",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": [
              "Big-Sur",
              "Catalina",
              "High-Sierra",
              "Mojave",
              "Monterey",
              "Sierra",
              "all"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "macOSPlatformModel",
      "type": "object"
    },
    "opensusePlatformModel": {
      "properties": {
        "name": {
          "const": "opensuse",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": [
              "12.1",
              "12.2",
              "12.3",
              "13.1",
              "13.2",
              "15.0",
              "15.1",
              "15.2",
              "15.3",
              "15.4",
              "42.1",
              "42.2",
              "42.3",
              "all"
            ],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "opensusePlatformModel",
      "type": "object"
    },
    "os10PlatformModel": {
      "properties": {
        "name": {
          "const": "os10",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "os10PlatformModel",
      "type": "object"
    },
    "platforms": {
      "items": {
        "anyOf": [
          {
            "$ref": "#/$defs/AIXPlatformModel"
          },
          {
            "$ref": "#/$defs/AlpinePlatformModel"
          },
          {
            "$ref": "#/$defs/AmazonPlatformModel"
          },
          {
            "$ref": "#/$defs/Amazon_Linux_2PlatformModel"
          },
          {
            "$ref": "#/$defs/aosPlatformModel"
          },
          {
            "$ref": "#/$defs/ArchLinuxPlatformModel"
          },
          {
            "$ref": "#/$defs/ClearLinuxPlatformModel"
          },
          {
            "$ref": "#/$defs/CumulusPlatformModel"
          },
          {
            "$ref": "#/$defs/DebianPlatformModel"
          },
          {
            "$ref": "#/$defs/DellOSPlatformModel"
          },
          {
            "$ref": "#/$defs/DevuanPlatformModel"
          },
          {
            "$ref": "#/$defs/DragonFlyBSDPlatformModel"
          },
          {
            "$ref": "#/$defs/ELPlatformModel"
          },
          {
            "$ref": "#/$defs/eosPlatformModel"
          },
          {
            "$ref": "#/$defs/FedoraPlatformModel"
          },
          {
            "$ref": "#/$defs/FreeBSDPlatformModel"
          },
          {
            "$ref": "#/$defs/GenericBSDPlatformModel"
          },
          {
            "$ref": "#/$defs/GenericLinuxPlatformModel"
          },
          {
            "$ref": "#/$defs/GenericUNIXPlatformModel"
          },
          {
            "$ref": "#/$defs/GentooPlatformModel"
          },
          {
            "$ref": "#/$defs/HardenedBSDPlatformModel"
          },
          {
            "$ref": "#/$defs/IOSPlatformModel"
          },
          {
            "$ref": "#/$defs/JunosPlatformModel"
          },
          {
            "$ref": "#/$defs/macOSPlatformModel"
          },
          {
            "$ref": "#/$defs/MacOSXPlatformModel"
          },
          {
            "$ref": "#/$defs/MageiaPlatformModel"
          },
          {
            "$ref": "#/$defs/NXOSPlatformModel"
          },
          {
            "$ref": "#/$defs/OpenBSDPlatformModel"
          },
          {
            "$ref": "#/$defs/opensusePlatformModel"
          },
          {
            "$ref": "#/$defs/OpenWRTPlatformModel"
          },
          {
            "$ref": "#/$defs/os10PlatformModel"
          },
          {
            "$ref": "#/$defs/PAN-OSPlatformModel"
          },
          {
            "$ref": "#/$defs/SLESPlatformModel"
          },
          {
            "$ref": "#/$defs/SmartOSPlatformModel"
          },
          {
            "$ref": "#/$defs/SolarisPlatformModel"
          },
          {
            "$ref": "#/$defs/SynologyPlatformModel"
          },
          {
            "$ref": "#/$defs/TMOSPlatformModel"
          },
          {
            "$ref": "#/$defs/UbuntuPlatformModel"
          },
          {
            "$ref": "#/$defs/vCenterPlatformModel"
          },
          {
            "$ref": "#/$defs/Void_LinuxPlatformModel"
          },
          {
            "$ref": "#/$defs/vSpherePlatformModel"
          },
          {
            "$ref": "#/$defs/WindowsPlatformModel"
          }
        ]
      },
      "title": "Platforms",
      "type": "array"
    },
    "vCenterPlatformModel": {
      "properties": {
        "name": {
          "const": "vCenter",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["5.5", "6.0", "6.5", "6.7", "7.0", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "vCenterPlatformModel",
      "type": "object"
    },
    "vSpherePlatformModel": {
      "properties": {
        "name": {
          "const": "vSphere",
          "title": "Name",
          "type": "string"
        },
        "versions": {
          "default": "all",
          "items": {
            "enum": ["5.5", "6.0", "6.5", "6.7", "7.0", "all"],
            "type": "string"
          },
          "type": "array"
        }
      },
      "title": "vSpherePlatformModel",
      "type": "object"
    }
  },
  "$id": "https://raw.githubusercontent.com/ansible/schemas/main/f/ansible-meta.json",
  "$schema": "http://json-schema.org/draft-07/schema",
  "examples": ["meta/main.yml"],
  "properties": {
    "additionalProperties": false,
    "allow_duplicates": {
      "title": "Allow Duplicates",
      "type": "boolean"
    },
    "collections": {
      "$ref": "#/$defs/collections"
    },
    "dependencies": {
      "items": {
        "$ref": "#/$defs/DependencyModel"
      },
      "title": "Dependencies",
      "type": "array"
    },
    "galaxy_info": {
      "$ref": "#/$defs/GalaxyInfoModel"
    }
  },
  "title": "Ansible Meta Schema v1/v2",
  "type": ["object", "null"]
}
```

</div></details>



で417行目あたりからどのキーが必要か確認できます。

```json
.
.
.
            "required": [
              "author",
              "description",
              "license",
              "min_ansible_version"
.
.
.
```

またAnsibleのmetaデータでは`あらかじめ決められた要素以外は利用できません`。

```yaml
galaxy_info:
  role_name: foo
  author: your name
  description: your description
  company: your company (optional)
  license: license (GPLv2, CC-BY, etc)
  min_ansible_version: 1.2
  platforms:
   - name: Fedora
     release: # <- releaseは定義できない
     - all
     - 25
   - name: SomePlatform
     versions:
     - all
     - 1.0
  galaxy_tags: []
dependencies: []
```

#### schemaで検証できるmetaデータ

以下のmetaデータの妥当性を検証できます。

| metaデータ | 概要 |
| --- | --- |
| schema[ansible-lint-config] | [ansible-lint configuration](https://ansible-lint.readthedocs.io/configuring/) |
| schema[ansible-navigator] | [ansible-navigator configuration](https://ansible-navigator.readthedocs.io/en/latest/settings/) |
| schema[arg_specs] | [module argument specs](https://docs.ansible.com/ansible/latest/dev_guide/developing_program_flow_modules.html) |
| schema[execution-environment] | [execution environments](https://docs.ansible.com/automation-controller/4.1.1/html_ja/userguide/ee_reference.html) |
| schema[galaxy] | [collection metadata](https://docs.ansible.com/ansible/latest/dev_guide/collections_galaxy_meta.html) |
| schema[inventory] | inventory files that match [inventory/*.yml](https://docs.ansible.com/ansible/latest//inventory_guide/intro_inventory.html#inventory-basics-formats-hosts-and-groups) |
| schema[meta-runtime] | runtime information that matches [meta/runtime.yml](https://docs.ansible.com/ansible/latest/dev_guide/developing_collections_structure.html#meta-directory-and-runtime-yml) |
| schema[meta] | metadata for roles that match [meta/main.yml](https://galaxy.ansible.com/docs/contributing/creating_role.html) |
| schema[playbook] | Ansible playbooks |
| schema[requirements] | Ansible requirements files that match [requirements.yml](https://docs.ansible.com/ansible/latest//inventory_guide/intro_inventory.html#inventory-basics-formats-hosts-and-groups) |
| schema[tasks] | Ansible task files that match tasks/**/*.yml |
| schema[vars] | Ansible variables that match vars/*.yml and defaults/*.yml |

[schema](https://ansible-lint.readthedocs.io/rules/schema/)で何かエラーが出たら`定義できない要素を定義している`か`定義されるべき要素が定義されていない`かのどちらかなのでAnsibleのマニュアルを良く調べるか[定義ファイル]((https://github.com/ansible/schemas/tree/main/f))を良くめば解決できるかと思います。

### 参考サイト

* [schema — Ansible Lint Documentation](https://ansible-lint.readthedocs.io/rules/schema/)
* [schemas/f at main · ansible/schemas | Ansible lintがmetaデータのバリデーションに利用するJSONファイル](https://github.com/ansible/schemas/tree/main/f)