Commit 24d22025 by James Cammarata

Make sure role parsing can handle a few more types in includes/defs

parent aa53212a
...@@ -55,8 +55,12 @@ class RoleDefinition(Base, Become, Conditional, Taggable): ...@@ -55,8 +55,12 @@ class RoleDefinition(Base, Become, Conditional, Taggable):
raise AnsibleError("not implemented") raise AnsibleError("not implemented")
def preprocess_data(self, ds): def preprocess_data(self, ds):
# role names that are simply numbers can be parsed by PyYAML
# as integers even when quoted, so turn it into a string type
if isinstance(ds, int):
ds = "%s" % ds
assert isinstance(ds, dict) or isinstance(ds, string_types) assert isinstance(ds, dict) or isinstance(ds, string_types) or isinstance(ds, AnsibleBaseYAMLObject)
if isinstance(ds, dict): if isinstance(ds, dict):
ds = super(RoleDefinition, self).preprocess_data(ds) ds = super(RoleDefinition, self).preprocess_data(ds)
......
...@@ -24,6 +24,7 @@ from six import iteritems, string_types ...@@ -24,6 +24,7 @@ from six import iteritems, string_types
import os import os
from ansible.errors import AnsibleError, AnsibleParserError from ansible.errors import AnsibleError, AnsibleParserError
from ansible.parsing.yaml.objects import AnsibleBaseYAMLObject
from ansible.playbook.attribute import Attribute, FieldAttribute from ansible.playbook.attribute import Attribute, FieldAttribute
from ansible.playbook.role.definition import RoleDefinition from ansible.playbook.role.definition import RoleDefinition
...@@ -42,7 +43,8 @@ class RoleInclude(RoleDefinition): ...@@ -42,7 +43,8 @@ class RoleInclude(RoleDefinition):
@staticmethod @staticmethod
def load(data, current_role_path=None, parent_role=None, variable_manager=None, loader=None): def load(data, current_role_path=None, parent_role=None, variable_manager=None, loader=None):
assert isinstance(data, string_types) or isinstance(data, dict)
assert isinstance(data, string_types) or isinstance(data, dict) or isinstance(data, AnsibleBaseYAMLObject)
ri = RoleInclude(role_basedir=current_role_path) ri = RoleInclude(role_basedir=current_role_path)
return ri.load_data(data, variable_manager=variable_manager, loader=loader) return ri.load_data(data, variable_manager=variable_manager, loader=loader)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment