Source code for cloudmesh_client.deployer.ansible.role



import os.path
# import shutil
# import tempfile

# import yaml


[docs]class AnsibleRole(object): def __init__(self, uri, hosts='all', become=True, variables=None, group='all'): assert uri is not None self.uri = uri self.path = self._materialize_uri(self.uri) self.name = os.path.basename(self.path) self.hosts = hosts self.directory = os.path.dirname(self.path) self.become = become self.variables = variables or {} self.group = group def _materialize_uri(self, uri): if os.path.exists(uri): return uri elif uri.startswith('file://'): return uri.lstrip('file://') else: raise NotImplementedError(uri)
# def run(self, inventory, user=None): # tempdir = tempfile.mkdtemp() # playbook = [{ # 'name': 'Cloudmesh Role: ' + self.path, # 'hosts': 'all', # 'become': True if self.become else False, # 'roles': [dict(role=self.path, # **self.variables)] # }] # y = yaml.dump(playbook, default_flow_style=False) # play = os.path.join(tempdir, 'playbook.yml') # with open(play, 'w') as fd: # fd.write(y) # inventory_file = os.path.join(tempdir, 'inventory.txt') # with open(inventory_file, 'w') as fd: # fd.write(inventory) # runner = AnsiblePlaybookRunner(inventory_file, play, user=user, modifyKnownHosts=False) # runner.set_cwd(tempdir) # # don't hide ansible's stderr/stdout # runner.set_stderr(None) # runner.set_stdout(None) # runner() # shutil.rmtree(tempdir)