Skip to content

Commit

Permalink
Allow lists of lists of strings for vars_files (#3561)
Browse files Browse the repository at this point in the history
  • Loading branch information
audgirka authored Jun 14, 2023
1 parent b36daf6 commit 99cadc6
Show file tree
Hide file tree
Showing 6 changed files with 216 additions and 3 deletions.
12 changes: 11 additions & 1 deletion src/ansiblelint/schemas/ansible.json
Original file line number Diff line number Diff line change
Expand Up @@ -627,7 +627,17 @@
},
"vars_files": {
"items": {
"type": "string"
"oneOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
]
},
"title": "Vars Files",
"type": ["array", "string", "null"]
Expand Down
12 changes: 11 additions & 1 deletion src/ansiblelint/schemas/playbook.json
Original file line number Diff line number Diff line change
Expand Up @@ -642,7 +642,17 @@
},
"vars_files": {
"items": {
"type": "string"
"oneOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
}
]
},
"title": "Vars Files",
"type": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,25 @@
"params": {
"type": "string"
},
"schemaPath": "#/properties/vars_files/items/type"
"schemaPath": "#/properties/vars_files/items/oneOf/0/type"
},
{
"instancePath": "/0/vars_files/0",
"keyword": "type",
"message": "must be array",
"params": {
"type": "array"
},
"schemaPath": "#/properties/vars_files/items/oneOf/1/type"
},
{
"instancePath": "/0/vars_files/0",
"keyword": "oneOf",
"message": "must match exactly one schema in oneOf",
"params": {
"passingSchemas": null
},
"schemaPath": "#/properties/vars_files/items/oneOf"
},
{
"instancePath": "/0",
Expand Down Expand Up @@ -106,9 +124,17 @@ stdout:
"path": "$[0].vars_files",
"message": "[0] is not of type 'object'"
},
{
"path": "$[0].vars_files[0]",
"message": "0 is not valid under any of the given schemas"
},
{
"path": "$[0].vars_files[0]",
"message": "0 is not of type 'string'"
},
{
"path": "$[0].vars_files[0]",
"message": "0 is not of type 'array'"
}
]
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
- name: var_files should not accept array[number]
hosts: localhost
vars_files:
- [0, 1]
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
# ajv errors

```json
[
{
"instancePath": "/0",
"keyword": "required",
"message": "must have required property 'ansible.builtin.import_playbook'",
"params": {
"missingProperty": "ansible.builtin.import_playbook"
},
"schemaPath": "#/oneOf/0/required"
},
{
"instancePath": "/0",
"keyword": "required",
"message": "must have required property 'import_playbook'",
"params": {
"missingProperty": "import_playbook"
},
"schemaPath": "#/oneOf/1/required"
},
{
"instancePath": "/0",
"keyword": "oneOf",
"message": "must match exactly one schema in oneOf",
"params": {
"passingSchemas": null
},
"schemaPath": "#/oneOf"
},
{
"instancePath": "/0",
"keyword": "additionalProperties",
"message": "must NOT have additional properties",
"params": {
"additionalProperty": "hosts"
},
"schemaPath": "#/additionalProperties"
},
{
"instancePath": "/0/vars_files",
"keyword": "type",
"message": "must be object",
"params": {
"type": "object"
},
"schemaPath": "#/patternProperties/vars/type"
},
{
"instancePath": "/0/vars_files/0",
"keyword": "type",
"message": "must be string",
"params": {
"type": "string"
},
"schemaPath": "#/properties/vars_files/items/oneOf/0/type"
},
{
"instancePath": "/0/vars_files/0/0",
"keyword": "type",
"message": "must be string",
"params": {
"type": "string"
},
"schemaPath": "#/properties/vars_files/items/oneOf/1/items/type"
},
{
"instancePath": "/0/vars_files/0/1",
"keyword": "type",
"message": "must be string",
"params": {
"type": "string"
},
"schemaPath": "#/properties/vars_files/items/oneOf/1/items/type"
},
{
"instancePath": "/0/vars_files/0",
"keyword": "oneOf",
"message": "must match exactly one schema in oneOf",
"params": {
"passingSchemas": null
},
"schemaPath": "#/properties/vars_files/items/oneOf"
},
{
"instancePath": "/0",
"keyword": "oneOf",
"message": "must match exactly one schema in oneOf",
"params": {
"passingSchemas": null
},
"schemaPath": "#/items/oneOf"
}
]
```

# check-jsonschema

stdout:

```json
{
"status": "fail",
"errors": [
{
"filename": "negative_test/playbooks/var_files_list_of_list_number.yml",
"path": "$[0]",
"message": "{'name': 'var_files should not accept array[number]', 'hosts': 'localhost', 'vars_files': [[0, 1]]} is not valid under any of the given schemas",
"has_sub_errors": true,
"best_match": {
"path": "$[0]",
"message": "'hosts' does not match any of the regexes: '^(ansible\\\\.builtin\\\\.)?import_playbook$', 'name', 'tags', 'vars', 'when'"
},
"sub_errors": [
{
"path": "$[0]",
"message": "'hosts' does not match any of the regexes: '^(ansible\\\\.builtin\\\\.)?import_playbook$', 'name', 'tags', 'vars', 'when'"
},
{
"path": "$[0]",
"message": "{'name': 'var_files should not accept array[number]', 'hosts': 'localhost', 'vars_files': [[0, 1]]} is not valid under any of the given schemas"
},
{
"path": "$[0]",
"message": "'ansible.builtin.import_playbook' is a required property"
},
{
"path": "$[0]",
"message": "'import_playbook' is a required property"
},
{
"path": "$[0].vars_files",
"message": "[[0, 1]] is not of type 'object'"
},
{
"path": "$[0].vars_files[0]",
"message": "[0, 1] is not valid under any of the given schemas"
},
{
"path": "$[0].vars_files[0]",
"message": "[0, 1] is not of type 'string'"
},
{
"path": "$[0].vars_files[0][0]",
"message": "0 is not of type 'string'"
},
{
"path": "$[0].vars_files[0][1]",
"message": "1 is not of type 'string'"
}
]
}
],
"parse_errors": []
}
```
5 changes: 5 additions & 0 deletions test/schemas/test/playbooks/var_files.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,8 @@
hosts: localhost
vars_files:
- /dev/null

- name: var_files should accept array of array[string]
hosts: localhost
vars_files:
- ["/dev/null"]

0 comments on commit 99cadc6

Please sign in to comment.