class Host(Object): name = String( required=True ) ansible_host = String( serialize_when=SERIALIZE_WHEN_PRESENT ) ansible_user = String( serialize_when=SERIALIZE_WHEN_PRESENT ) ansible_password = String( serialize_when=SERIALIZE_WHEN_PRESENT, aliases=('ansible_ssh_pass',) ) ansible_network_os = String( serialize_when=SERIALIZE_WHEN_PRESENT, validators=(NETWORK_OS_VALIDATOR,) ) vars = Dict( serialize_when=SERIALIZE_WHEN_NEVER ) def __init__(self, **kwargs): hostvars = {} for item in set(kwargs).difference(self._attributes): hostvars[item] = kwargs[item] kwargs.pop(item) if 'vars' not in kwargs: kwargs['vars'] = {} kwargs['vars'].update(hostvars) super(Host, self).__init__(**kwargs) def serialize(self): obj = super(Host, self).serialize() obj['name'] = self.name obj.update(self.vars) return obj def deserialize(self, ds): assert isinstance(ds, dict) obj = {} for name in self._attributes: obj[name] = ds.pop(name, None) super(Host, self).deserialize(obj) self.vars.update(ds)
class Play(Base, Object): name = String( serialize_when=SERIALIZE_WHEN_PRESENT ) hosts = String( default='all' ) gather_facts = Boolean( serialize_when=SERIALIZE_WHEN_PRESENT ) tasks = TypedList( item_class=Task )
class Task(Base, Object): name = String( serialize_when=SERIALIZE_WHEN_PRESENT ) action = String( required=True ) args = Dict() vars = Dict( serialize_when=SERIALIZE_WHEN_PRESENT ) when = String( serialize_when=SERIALIZE_WHEN_PRESENT )
class Child(Object): name = String(serialize_when=SERIALIZE_WHEN_NEVER) hosts = TypedDict(item_class=Host, item_key='name') vars = Dict() def __init__(self, **kwargs): childvars = {} for item in set(kwargs).difference(self._attributes): childvars[item] = kwargs[item] kwargs.pop(item) if 'vars' not in kwargs: kwargs['vars'] = {} kwargs['vars'].update(childvars) super(Child, self).__init__(**kwargs)
class DictItem(Object): name = String() value = String()
class ListItem(Object): name = String()
class Base(object): connection = String( serialize_when=SERIALIZE_WHEN_PRESENT )