mirror of
https://github.com/thegeeklab/ansible-later.git
synced 2024-11-14 01:00:39 +00:00
fix linting
This commit is contained in:
parent
d2eb295bd6
commit
f3646adf15
@ -191,7 +191,7 @@ class Candidate:
|
|||||||
if sid:
|
if sid:
|
||||||
standard_id = f"[{sid}] "
|
standard_id = f"[{sid}] "
|
||||||
|
|
||||||
return standard_id # noqa
|
return standard_id
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"{type(self).__name__} ({self.path})"
|
return f"{type(self).__name__} ({self.path})"
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -7,7 +9,7 @@ class CheckBecomeUser(StandardBase):
|
|||||||
description = "Become should be combined with become_user"
|
description = "Become should be combined with become_user"
|
||||||
helptext = "the task has `become` enabled but `become_user` is missing"
|
helptext = "the task has `become` enabled but `become_user` is missing"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import re
|
import re
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
from ansiblelater.utils import count_spaces
|
from ansiblelater.utils import count_spaces
|
||||||
@ -10,7 +11,9 @@ class CheckBracesSpaces(StandardBase):
|
|||||||
description = "YAML should use consistent number of spaces around variables"
|
description = "YAML should use consistent number of spaces around variables"
|
||||||
helptext = "no suitable numbers of spaces (min: {min} max: {max})"
|
helptext = "no suitable numbers of spaces (min: {min} max: {max})"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"]
|
types: ClassVar[list[str]] = [
|
||||||
|
"playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"
|
||||||
|
]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
# THE SOFTWARE.
|
# THE SOFTWARE.
|
||||||
|
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -27,7 +29,7 @@ class CheckChangedInWhen(StandardBase):
|
|||||||
description = "Use handlers instead of `when: changed`"
|
description = "Use handlers instead of `when: changed`"
|
||||||
helptext = "tasks using `when: result.changed` setting are effectively acting as a handler"
|
helptext = "tasks using `when: result.changed` setting are effectively acting as a handler"
|
||||||
version = "0.2"
|
version = "0.2"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -10,7 +12,7 @@ class CheckCommandHasChanges(StandardBase):
|
|||||||
"idempotent while using controls like `creates`, `removes` or `when`"
|
"idempotent while using controls like `creates`, `removes` or `when`"
|
||||||
)
|
)
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task"]
|
types: ClassVar[list[str]] = ["playbook", "task"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
# THE SOFTWARE.
|
# THE SOFTWARE.
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
@ -29,7 +30,7 @@ class CheckCommandInsteadOfArgument(StandardBase):
|
|||||||
description = "Commands should not be used in place of module arguments"
|
description = "Commands should not be used in place of module arguments"
|
||||||
helptext = "{exec} used in place of file modules argument {arg}"
|
helptext = "{exec} used in place of file modules argument {arg}"
|
||||||
version = "0.2"
|
version = "0.2"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
@ -9,7 +10,7 @@ class CheckCommandInsteadOfModule(StandardBase):
|
|||||||
description = "Commands should not be used in place of modules"
|
description = "Commands should not be used in place of modules"
|
||||||
helptext = "{exec} command used in place of {module} module"
|
helptext = "{exec} command used in place of {module} module"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import re
|
import re
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.candidate import Template
|
from ansiblelater.candidate import Template
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
@ -10,7 +11,7 @@ class CheckCompareToEmptyString(StandardBase):
|
|||||||
description = "Don't compare to empty string \"\""
|
description = "Don't compare to empty string \"\""
|
||||||
helptext = ("use `when: var` rather than `when: var !=` (or conversely `when: not var`)")
|
helptext = ("use `when: var` rather than `when: var !=` (or conversely `when: not var`)")
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler", "template"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler", "template"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import re
|
import re
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.candidate import Template
|
from ansiblelater.candidate import Template
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
@ -10,7 +11,7 @@ class CheckCompareToLiteralBool(StandardBase):
|
|||||||
description = "Don't compare to True or False"
|
description = "Don't compare to True or False"
|
||||||
helptext = ("use `when: var` rather than `when: var == True` (or conversely `when: not var`)")
|
helptext = ("use `when: var` rather than `when: var == True` (or conversely `when: not var`)")
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -7,7 +9,7 @@ class CheckDeprecated(StandardBase):
|
|||||||
description = "Deprecated features should not be used"
|
description = "Deprecated features should not be used"
|
||||||
helptext = "'{old}' is deprecated and should not be used anymore. Use '{new}' instead."
|
helptext = "'{old}' is deprecated and should not be used anymore. Use '{new}' instead."
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings, full=True)
|
tasks, errors = self.get_normalized_tasks(candidate, settings, full=True)
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
# THE SOFTWARE.
|
# THE SOFTWARE.
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
from ansiblelater.utils import has_glob, has_jinja
|
from ansiblelater.utils import has_glob, has_jinja
|
||||||
@ -33,7 +34,7 @@ class CheckDeprecatedBareVars(StandardBase):
|
|||||||
"or be converted to a list"
|
"or be converted to a list"
|
||||||
)
|
)
|
||||||
version = "0.3"
|
version = "0.3"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, self.errors = self.get_normalized_tasks(candidate, settings)
|
tasks, self.errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
# THE SOFTWARE.
|
# THE SOFTWARE.
|
||||||
import re
|
import re
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
@ -31,9 +32,9 @@ class CheckFilePermissionMissing(StandardBase):
|
|||||||
"to avoid unexpected file permissions"
|
"to avoid unexpected file permissions"
|
||||||
)
|
)
|
||||||
version = "0.2"
|
version = "0.2"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
_modules = {
|
_modules: ClassVar[dict] = {
|
||||||
"archive",
|
"archive",
|
||||||
"assemble",
|
"assemble",
|
||||||
"copy",
|
"copy",
|
||||||
@ -41,7 +42,7 @@ class CheckFilePermissionMissing(StandardBase):
|
|||||||
"replace",
|
"replace",
|
||||||
"template",
|
"template",
|
||||||
}
|
}
|
||||||
_create_modules = {
|
_create_modules: ClassVar[dict[str, bool]] = {
|
||||||
"blockinfile": False,
|
"blockinfile": False,
|
||||||
"htpasswd": True,
|
"htpasswd": True,
|
||||||
"ini_file": True,
|
"ini_file": True,
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
# THE SOFTWARE.
|
# THE SOFTWARE.
|
||||||
|
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -27,7 +29,7 @@ class CheckFilePermissionOctal(StandardBase):
|
|||||||
description = "Octal file permissions must contain leading zero or be a string"
|
description = "Octal file permissions must contain leading zero or be a string"
|
||||||
helptext = "numeric file permissions without leading zero can behave in unexpected ways"
|
helptext = "numeric file permissions without leading zero can behave in unexpected ways"
|
||||||
version = "0.2"
|
version = "0.2"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import re
|
import re
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
@ -9,7 +10,8 @@ class CheckFilterSeparation(StandardBase):
|
|||||||
description = "Jinja2 filters should be separated with spaces"
|
description = "Jinja2 filters should be separated with spaces"
|
||||||
helptext = "no suitable numbers of spaces (required: 1)"
|
helptext = "no suitable numbers of spaces (required: 1)"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler", "rolevars", "hostvars", "groupvars"]
|
types: ClassVar[list[str]
|
||||||
|
] = ["playbook", "task", "handler", "rolevars", "hostvars", "groupvars"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
# THE SOFTWARE.
|
# THE SOFTWARE.
|
||||||
|
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -27,7 +29,7 @@ class CheckGitHasVersion(StandardBase):
|
|||||||
description = "Git checkouts should use explicit version"
|
description = "Git checkouts should use explicit version"
|
||||||
helptext = "git checkouts should point to an explicit commit or tag, not `latest`"
|
helptext = "git checkouts should point to an explicit commit or tag, not `latest`"
|
||||||
version = "0.2"
|
version = "0.2"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -7,7 +9,7 @@ class CheckInstallUseLatest(StandardBase):
|
|||||||
description = "Package installs should use present, not latest"
|
description = "Package installs should use present, not latest"
|
||||||
helptext = "package installs should use `state=present` with or without a version"
|
helptext = "package installs should use `state=present` with or without a version"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import re
|
import re
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
@ -9,7 +10,8 @@ class CheckLiteralBoolFormat(StandardBase):
|
|||||||
description = "Literal bools should be consistent"
|
description = "Literal bools should be consistent"
|
||||||
helptext = "literal bools should be written as `{bools}`"
|
helptext = "literal bools should be written as `{bools}`"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler", "rolevars", "hostvars", "groupvars"]
|
types: ClassVar[list[str]
|
||||||
|
] = ["playbook", "task", "handler", "rolevars", "hostvars", "groupvars"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
# Copyright (c) 2016, Tsukinowa Inc. <info@tsukinowa.jp>
|
# Copyright (c) 2016, Tsukinowa Inc. <info@tsukinowa.jp>
|
||||||
# Copyright (c) 2018, Ansible Project
|
# Copyright (c) 2018, Ansible Project
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -9,7 +11,7 @@ class CheckLocalAction(StandardBase):
|
|||||||
description = "Don't use local_action"
|
description = "Don't use local_action"
|
||||||
helptext = ("`delegate_to: localhost` should be used instead of `local_action`")
|
helptext = ("`delegate_to: localhost` should be used instead of `local_action`")
|
||||||
version = "0.2"
|
version = "0.2"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
# Copyright (c) 2018, Ansible Project
|
# Copyright (c) 2018, Ansible Project
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from nested_lookup import nested_lookup
|
from nested_lookup import nested_lookup
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
@ -10,7 +12,7 @@ class CheckMetaChangeFromDefault(StandardBase):
|
|||||||
description = "Roles meta/main.yml default values should be changed"
|
description = "Roles meta/main.yml default values should be changed"
|
||||||
helptext = "meta/main.yml default values should be changed for: `{field}`"
|
helptext = "meta/main.yml default values should be changed for: `{field}`"
|
||||||
version = "0.2"
|
version = "0.2"
|
||||||
types = ["meta"]
|
types: ClassVar[list[str]] = ["meta"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
content, errors = self.get_raw_yaml(candidate, settings)
|
content, errors = self.get_raw_yaml(candidate, settings)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from nested_lookup import nested_lookup
|
from nested_lookup import nested_lookup
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
@ -9,7 +11,7 @@ class CheckMetaMain(StandardBase):
|
|||||||
description = "Roles must contain suitable meta/main.yml"
|
description = "Roles must contain suitable meta/main.yml"
|
||||||
helptext = "file should contain `{key}` key"
|
helptext = "file should contain `{key}` key"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["meta"]
|
types: ClassVar[list[str]] = ["meta"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
content, errors = self.get_raw_yaml(candidate, settings)
|
content, errors = self.get_raw_yaml(candidate, settings)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
@ -9,7 +10,7 @@ class CheckNameFormat(StandardBase):
|
|||||||
description = "Name of tasks and handlers must be formatted"
|
description = "Name of tasks and handlers must be formatted"
|
||||||
helptext = "name '{name}' should start with uppercase"
|
helptext = "name '{name}' should start with uppercase"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -7,7 +9,7 @@ class CheckNamedTask(StandardBase):
|
|||||||
description = "Tasks and handlers must be named"
|
description = "Tasks and handlers must be named"
|
||||||
helptext = "module '{module}' used without or empty `name` attribute"
|
helptext = "module '{module}' used without or empty `name` attribute"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -7,7 +9,7 @@ class CheckNativeYaml(StandardBase):
|
|||||||
description = "Use YAML format for tasks and handlers rather than key=value"
|
description = "Use YAML format for tasks and handlers rather than key=value"
|
||||||
helptext = "task arguments appear to be in key value rather than YAML format"
|
helptext = "task arguments appear to be in key value rather than YAML format"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_action_tasks(candidate, settings)
|
tasks, errors = self.get_action_tasks(candidate, settings)
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
# THE SOFTWARE.
|
# THE SOFTWARE.
|
||||||
import re
|
import re
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
@ -33,7 +34,8 @@ class CheckNestedJinja(StandardBase):
|
|||||||
"like `{{ list_one + {{ list_two | max }} }}`"
|
"like `{{ list_one + {{ list_two | max }} }}`"
|
||||||
)
|
)
|
||||||
version = "0.2"
|
version = "0.2"
|
||||||
types = ["playbook", "task", "handler", "rolevars", "hostvars", "groupvars"]
|
types: ClassVar[list[str]
|
||||||
|
] = ["playbook", "task", "handler", "rolevars", "hostvars", "groupvars"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
# Copyright (c) 2016, Tsukinowa Inc. <info@tsukinowa.jp>
|
# Copyright (c) 2016, Tsukinowa Inc. <info@tsukinowa.jp>
|
||||||
# Copyright (c) 2018, Ansible Project
|
# Copyright (c) 2018, Ansible Project
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -9,7 +11,7 @@ class CheckRelativeRolePaths(StandardBase):
|
|||||||
description = "Don't use a relative path in a role"
|
description = "Don't use a relative path in a role"
|
||||||
helptext = "`copy` and `template` modules don't need relative path for `src`"
|
helptext = "`copy` and `template` modules don't need relative path for `src`"
|
||||||
version = "0.2"
|
version = "0.2"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansible.parsing.yaml.objects import AnsibleMapping
|
from ansible.parsing.yaml.objects import AnsibleMapping
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
@ -9,7 +11,7 @@ class CheckScmInSrc(StandardBase):
|
|||||||
description = "Use `scm:` key rather than `src: scm+url`"
|
description = "Use `scm:` key rather than `src: scm+url`"
|
||||||
helptext = "usage of `src: scm+url` not recommended"
|
helptext = "usage of `src: scm+url` not recommended"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["rolesfile"]
|
types: ClassVar[list[str]] = ["rolesfile"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
roles, errors = self.get_tasks(candidate, settings)
|
roles, errors = self.get_tasks(candidate, settings)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -7,7 +9,7 @@ class CheckShellInsteadCommand(StandardBase):
|
|||||||
description = "Shell should only be used when essential"
|
description = "Shell should only be used when essential"
|
||||||
helptext = "shell should only be used when piping, redirecting or chaining commands"
|
helptext = "shell should only be used when piping, redirecting or chaining commands"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import re
|
import re
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
@ -10,7 +11,7 @@ class CheckTaskSeparation(StandardBase):
|
|||||||
description = "Single tasks should be separated by empty line"
|
description = "Single tasks should be separated by empty line"
|
||||||
helptext = "missing task separation (required: 1 empty line)"
|
helptext = "missing task separation (required: 1 empty line)"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
options = defaultdict(dict)
|
options = defaultdict(dict)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
@ -9,7 +10,7 @@ class CheckUniqueNamedTask(StandardBase):
|
|||||||
description = "Tasks and handlers must be uniquely named within a single file"
|
description = "Tasks and handlers must be uniquely named within a single file"
|
||||||
helptext = "name '{name}' appears multiple times"
|
helptext = "name '{name}' appears multiple times"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -6,7 +8,8 @@ class CheckVersion(StandardBase):
|
|||||||
sid = "ANSIBLE9998"
|
sid = "ANSIBLE9998"
|
||||||
description = "Standards version should be pinned"
|
description = "Standards version should be pinned"
|
||||||
helptext = "Standards version not set. Using latest standards version {version}"
|
helptext = "Standards version not set. Using latest standards version {version}"
|
||||||
types = ["task", "handler", "rolevars", "meta", "template", "file", "playbook"]
|
types: ClassVar[list[str]
|
||||||
|
] = ["task", "handler", "rolevars", "meta", "template", "file", "playbook"]
|
||||||
|
|
||||||
def check(self, candidate, settings): # noqa
|
def check(self, candidate, settings): # noqa
|
||||||
errors = []
|
errors = []
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -10,7 +12,7 @@ class CheckWhenFormat(StandardBase):
|
|||||||
"should be removed from variable(s)"
|
"should be removed from variable(s)"
|
||||||
)
|
)
|
||||||
version = "0.2"
|
version = "0.2"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
tasks, errors = self.get_normalized_tasks(candidate, settings)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -6,7 +8,9 @@ class CheckYamlColons(StandardBase):
|
|||||||
sid = "LINT0005"
|
sid = "LINT0005"
|
||||||
description = "YAML should use consistent number of spaces around colons"
|
description = "YAML should use consistent number of spaces around colons"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"]
|
types: ClassVar[list[str]] = [
|
||||||
|
"playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"
|
||||||
|
]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
options = f"rules: {{colons: {settings['yamllint']['colons']}}}"
|
options = f"rules: {{colons: {settings['yamllint']['colons']}}}"
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -6,7 +8,9 @@ class CheckYamlDocumentEnd(StandardBase):
|
|||||||
sid = "LINT0009"
|
sid = "LINT0009"
|
||||||
description = "YAML should contain document end marker"
|
description = "YAML should contain document end marker"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"]
|
types: ClassVar[list[str]] = [
|
||||||
|
"playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"
|
||||||
|
]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
options = f"rules: {{document-end: {settings['yamllint']['document-end']}}}"
|
options = f"rules: {{document-end: {settings['yamllint']['document-end']}}}"
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -6,7 +8,9 @@ class CheckYamlDocumentStart(StandardBase):
|
|||||||
sid = "LINT0004"
|
sid = "LINT0004"
|
||||||
description = "YAML should contain document start marker"
|
description = "YAML should contain document start marker"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"]
|
types: ClassVar[list[str]] = [
|
||||||
|
"playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"
|
||||||
|
]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
options = f"rules: {{document-start: {settings['yamllint']['document-start']}}}"
|
options = f"rules: {{document-start: {settings['yamllint']['document-start']}}}"
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -6,7 +8,9 @@ class CheckYamlEmptyLines(StandardBase):
|
|||||||
sid = "LINT0001"
|
sid = "LINT0001"
|
||||||
description = "YAML should not contain unnecessarily empty lines"
|
description = "YAML should not contain unnecessarily empty lines"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"]
|
types: ClassVar[list[str]] = [
|
||||||
|
"playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"
|
||||||
|
]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
options = f"rules: {{empty-lines: {settings['yamllint']['empty-lines']}}}"
|
options = f"rules: {{empty-lines: {settings['yamllint']['empty-lines']}}}"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
@ -9,7 +10,7 @@ class CheckYamlFile(StandardBase):
|
|||||||
description = "Roles file should be in yaml format"
|
description = "Roles file should be in yaml format"
|
||||||
helptext = "file does not have a .yml extension"
|
helptext = "file does not have a .yml extension"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
errors = []
|
errors = []
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -7,7 +9,7 @@ class CheckYamlHasContent(StandardBase):
|
|||||||
description = "Files should contain useful content"
|
description = "Files should contain useful content"
|
||||||
helptext = "the file appears to have no useful content"
|
helptext = "the file appears to have no useful content"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler", "rolevars", "defaults", "meta"]
|
types: ClassVar[list[str]] = ["playbook", "task", "handler", "rolevars", "defaults", "meta"]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
yamllines, errors = self.get_normalized_yaml(candidate, settings)
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -6,7 +8,9 @@ class CheckYamlHyphens(StandardBase):
|
|||||||
sid = "LINT0003"
|
sid = "LINT0003"
|
||||||
description = "YAML should use consistent number of spaces after hyphens"
|
description = "YAML should use consistent number of spaces after hyphens"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"]
|
types: ClassVar[list[str]] = [
|
||||||
|
"playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"
|
||||||
|
]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
options = f"rules: {{hyphens: {settings['yamllint']['hyphens']}}}"
|
options = f"rules: {{hyphens: {settings['yamllint']['hyphens']}}}"
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
from ansiblelater.standard import StandardBase
|
from ansiblelater.standard import StandardBase
|
||||||
|
|
||||||
|
|
||||||
@ -6,7 +8,9 @@ class CheckYamlIndent(StandardBase):
|
|||||||
sid = "LINT0002"
|
sid = "LINT0002"
|
||||||
description = "YAML should not contain unnecessarily empty lines"
|
description = "YAML should not contain unnecessarily empty lines"
|
||||||
version = "0.1"
|
version = "0.1"
|
||||||
types = ["playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"]
|
types: ClassVar[list[str]] = [
|
||||||
|
"playbook", "task", "handler", "rolevars", "hostvars", "groupvars", "meta"
|
||||||
|
]
|
||||||
|
|
||||||
def check(self, candidate, settings):
|
def check(self, candidate, settings):
|
||||||
options = f"rules: {{document-start: {settings['yamllint']['document-start']}}}"
|
options = f"rules: {{document-start: {settings['yamllint']['document-start']}}}"
|
||||||
|
@ -304,7 +304,7 @@ class StandardBase(metaclass=StandardExtendedMeta):
|
|||||||
return "\n".join([f"{self.candidate}:{error}" for error in self.errors])
|
return "\n".join([f"{self.candidate}:{error}" for error in self.errors])
|
||||||
|
|
||||||
|
|
||||||
class StandardLoader():
|
class StandardLoader:
|
||||||
|
|
||||||
def __init__(self, source):
|
def __init__(self, source):
|
||||||
self.rules = []
|
self.rules = []
|
||||||
|
@ -5,6 +5,7 @@ import re
|
|||||||
import sys
|
import sys
|
||||||
from contextlib import suppress
|
from contextlib import suppress
|
||||||
from distutils.version import LooseVersion
|
from distutils.version import LooseVersion
|
||||||
|
from typing import ClassVar
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
@ -114,7 +115,7 @@ def sysexit_with_message(msg, code=1):
|
|||||||
class Singleton(type):
|
class Singleton(type):
|
||||||
"""Meta singleton class."""
|
"""Meta singleton class."""
|
||||||
|
|
||||||
_instances = {}
|
_instances: ClassVar[dict] = {}
|
||||||
|
|
||||||
def __call__(cls, *args, **kwargs):
|
def __call__(cls, *args, **kwargs):
|
||||||
if cls not in cls._instances:
|
if cls not in cls._instances:
|
||||||
|
@ -209,11 +209,10 @@ def template(basedir, value, variables, fail_on_undefined=False, **kwargs):
|
|||||||
# Hack to skip the following exception when using to_json filter on a variable.
|
# Hack to skip the following exception when using to_json filter on a variable.
|
||||||
# I guess the filter doesn't like empty vars...
|
# I guess the filter doesn't like empty vars...
|
||||||
with suppress(AnsibleError, ValueError):
|
with suppress(AnsibleError, ValueError):
|
||||||
value = ansible_template(
|
return ansible_template(
|
||||||
os.path.abspath(basedir), value, variables,
|
os.path.abspath(basedir), value, variables,
|
||||||
**dict(kwargs, fail_on_undefined=fail_on_undefined)
|
**dict(kwargs, fail_on_undefined=fail_on_undefined)
|
||||||
)
|
)
|
||||||
return value
|
|
||||||
|
|
||||||
|
|
||||||
def play_children(basedir, item, parent_type):
|
def play_children(basedir, item, parent_type):
|
||||||
@ -373,8 +372,7 @@ def rolename(filepath):
|
|||||||
if idx < 0:
|
if idx < 0:
|
||||||
return ""
|
return ""
|
||||||
role = filepath[idx + 6:]
|
role = filepath[idx + 6:]
|
||||||
role = role[:role.find("/")]
|
return role[:role.find("/")]
|
||||||
return role
|
|
||||||
|
|
||||||
|
|
||||||
def _kv_to_dict(v):
|
def _kv_to_dict(v):
|
||||||
|
Loading…
Reference in New Issue
Block a user