Remove Librarian part from handler
It will be moved to resource now
This commit is contained in:
parent
d4085e4c52
commit
01f9e3a70d
@ -11,11 +11,3 @@
|
||||
# Make paths puppet 4 compatible
|
||||
- file: path=/etc/puppetlabs/code/ state=directory
|
||||
- file: src=/etc/puppet/hiera.yaml dest=/etc/puppetlabs/code/hiera.yaml state=link
|
||||
- file: path=/var/tmp/puppet/modules state=directory owner=puppet
|
||||
- file: path=/var/tmp/puppet/Puppetfile state=touch owner=puppet
|
||||
- file: path=/etc/puppet/modules state=absent
|
||||
- file: path=/etc/puppetlabs/code/modules state=absent
|
||||
- file: path=/etc/puppetlabs/code/hieradata state=absent
|
||||
- file: src=/var/tmp/puppet/modules dest=/etc/puppet/modules state=link
|
||||
- file: src=/var/tmp/puppet/modules dest=/etc/puppetlabs/code/modules state=link
|
||||
- file: src=/etc/puppet/hieradata dest=/etc/puppetlabs/code/hieradata state=link
|
||||
|
@ -18,80 +18,11 @@ import yaml
|
||||
|
||||
from solar.core.log import log
|
||||
from solar.core.handlers.base import TempFileHandler
|
||||
from solar.core.provider import GitProvider
|
||||
from solar import errors
|
||||
|
||||
|
||||
class LibrarianPuppet(object):
|
||||
def __init__(self, resource, organization='openstack', transport_sync=None, transport_run=None):
|
||||
self.resource = resource
|
||||
self.organization = organization
|
||||
self.transport_sync = transport_sync
|
||||
self.transport_run = transport_run
|
||||
|
||||
def install(self):
|
||||
puppet_module = '{}-{}'.format(
|
||||
self.organization,
|
||||
self.resource.db_obj.puppet_module
|
||||
)
|
||||
|
||||
puppetlabs = self.transport_run.run(
|
||||
self.resource,
|
||||
'sudo', 'cat', '/var/tmp/puppet/Puppetfile'
|
||||
)
|
||||
log.debug('Puppetlabs file is: \n%s\n', puppetlabs)
|
||||
|
||||
git = self.resource.args['git']
|
||||
|
||||
definition = "mod '{module_name}', :git => '{repository}', :ref => '{branch}'".format(
|
||||
module_name=puppet_module,
|
||||
repository=git['repository'],
|
||||
branch=git['branch']
|
||||
)
|
||||
|
||||
modules = puppetlabs.stdout.split('\n')
|
||||
|
||||
# remove forge entry
|
||||
modules = [module for module in modules if not module.startswith('forge')]
|
||||
|
||||
idx = -1
|
||||
for i, module in enumerate(modules):
|
||||
if "mod '{}'".format(puppet_module) in module:
|
||||
log.debug('Module {} found in librarian Puppetfile, overwriting'.format(puppet_module))
|
||||
idx = i
|
||||
modules[i] = definition
|
||||
break
|
||||
|
||||
if idx == -1:
|
||||
log.debug('Adding module {} to librarian Puppetfile'.format(puppet_module))
|
||||
modules.append(definition)
|
||||
|
||||
with open('/tmp/Puppetfile', 'w') as f:
|
||||
f.write('\nforge "https://forge.puppetlabs.com"\n')
|
||||
f.write('\n'.join(modules))
|
||||
f.write('\n')
|
||||
|
||||
self.transport_sync.copy(
|
||||
self.resource,
|
||||
'/tmp/Puppetfile',
|
||||
'/var/tmp/puppet/Puppetfile',
|
||||
use_sudo=True
|
||||
)
|
||||
|
||||
self.transport_sync.sync_all()
|
||||
|
||||
self.transport_run.run(
|
||||
self.resource,
|
||||
'sudo', 'librarian-puppet', 'install',
|
||||
cwd='/var/tmp/puppet'
|
||||
)
|
||||
|
||||
|
||||
# NOTE: We assume that:
|
||||
# - puppet and hiera are installed
|
||||
# - hiera-redis is installed with the 2.0 fix (https://github.com/GGenie/hiera-redis)
|
||||
# - redis is installed and cluster set up with master (on slaves set up 'slaveof 10.0.0.2 6379')
|
||||
# - redis keys are separated by colon (same as in hiera-redis backend)
|
||||
# - puppet is installed
|
||||
class Puppet(TempFileHandler):
|
||||
def action(self, resource, action_name):
|
||||
log.debug('Executing Puppet manifest %s %s', action_name, resource)
|
||||
@ -101,9 +32,8 @@ class Puppet(TempFileHandler):
|
||||
|
||||
self.upload_hiera_resource(resource)
|
||||
|
||||
self.upload_manifests(resource)
|
||||
|
||||
action_file_name = '/tmp/{}.pp'.format(resource.name)
|
||||
|
||||
self.prepare_templates_and_scripts(resource, action_file, '')
|
||||
self.transport_sync.copy(resource, action_file, action_file_name)
|
||||
self.transport_sync.sync_all()
|
||||
@ -131,12 +61,6 @@ class Puppet(TempFileHandler):
|
||||
resource.name, cmd.return_code))
|
||||
return cmd
|
||||
|
||||
def clone_manifests(self, resource):
|
||||
git = resource.args['git']
|
||||
p = GitProvider(git['repository'], branch=git['branch'])
|
||||
|
||||
return p.directory
|
||||
|
||||
def _make_args(self, resource):
|
||||
return {resource.name: resource.to_dict()}
|
||||
|
||||
@ -152,68 +76,8 @@ class Puppet(TempFileHandler):
|
||||
)
|
||||
self.transport_sync.sync_all()
|
||||
|
||||
def upload_manifests(self, resource):
|
||||
if 'forge' in resource.args and resource.args['forge']:
|
||||
self.upload_manifests_forge(resource)
|
||||
elif 'git' in resource.args and resource.args['git']:
|
||||
self.upload_manifests_librarian(resource)
|
||||
|
||||
def upload_manifests_forge(self, resource):
|
||||
forge = resource.args['forge']
|
||||
|
||||
# Check if module already installed
|
||||
modules = self.transport_run.run(
|
||||
resource,
|
||||
'sudo', 'puppet', 'module', 'list'
|
||||
)
|
||||
|
||||
module_installed = False
|
||||
for module in modules.decode('utf-8').split('\n'):
|
||||
if forge in module:
|
||||
module_installed = True
|
||||
break
|
||||
|
||||
if not module_installed:
|
||||
self.transport_run.run(
|
||||
resource,
|
||||
'sudo', 'puppet', 'module', 'install', forge
|
||||
)
|
||||
else:
|
||||
log.debug('Skipping module installation, already installed')
|
||||
|
||||
def upload_manifests_librarian(self, resource):
|
||||
librarian = LibrarianPuppet(resource,
|
||||
transport_run=self.transport_run,
|
||||
transport_sync=self.transport_sync)
|
||||
librarian.install()
|
||||
|
||||
def upload_manifests_git(self, resource):
|
||||
manifests_path = self.clone_manifests(resource)
|
||||
|
||||
module_directory = '/etc/puppet/modules/{}'.format(
|
||||
resource.metadata['puppet_module']
|
||||
)
|
||||
self.transport_run.run(
|
||||
resource,
|
||||
'sudo', 'rm', '-Rf', module_directory
|
||||
)
|
||||
self.transport_run.run(
|
||||
resource, 'sudo', 'mkdir', '-p', module_directory
|
||||
)
|
||||
|
||||
self.transport_sync.copy(resource, manifests_path, '/tmp')
|
||||
self.transport_sync.sync_all()
|
||||
|
||||
self.transport_run.run(
|
||||
resource,
|
||||
'sudo', 'mv',
|
||||
'/tmp/{}/*'.format(os.path.split(manifests_path)[1]),
|
||||
module_directory
|
||||
)
|
||||
|
||||
|
||||
class PuppetV2(Puppet):
|
||||
|
||||
def _make_args(self, resource):
|
||||
return resource.args
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user