Remove Librarian part from handler

It will be moved to resource now
This commit is contained in:
Łukasz Oleś 2015-10-12 09:00:14 +02:00
parent d4085e4c52
commit 01f9e3a70d
2 changed files with 2 additions and 146 deletions

View File

@ -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

View File

@ -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