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 # Make paths puppet 4 compatible
- file: path=/etc/puppetlabs/code/ state=directory - file: path=/etc/puppetlabs/code/ state=directory
- file: src=/etc/puppet/hiera.yaml dest=/etc/puppetlabs/code/hiera.yaml state=link - 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.log import log
from solar.core.handlers.base import TempFileHandler from solar.core.handlers.base import TempFileHandler
from solar.core.provider import GitProvider
from solar import errors 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: # NOTE: We assume that:
# - puppet and hiera are installed # - puppet is 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)
class Puppet(TempFileHandler): class Puppet(TempFileHandler):
def action(self, resource, action_name): def action(self, resource, action_name):
log.debug('Executing Puppet manifest %s %s', action_name, resource) log.debug('Executing Puppet manifest %s %s', action_name, resource)
@ -101,9 +32,8 @@ class Puppet(TempFileHandler):
self.upload_hiera_resource(resource) self.upload_hiera_resource(resource)
self.upload_manifests(resource)
action_file_name = '/tmp/{}.pp'.format(resource.name) action_file_name = '/tmp/{}.pp'.format(resource.name)
self.prepare_templates_and_scripts(resource, action_file, '') self.prepare_templates_and_scripts(resource, action_file, '')
self.transport_sync.copy(resource, action_file, action_file_name) self.transport_sync.copy(resource, action_file, action_file_name)
self.transport_sync.sync_all() self.transport_sync.sync_all()
@ -131,12 +61,6 @@ class Puppet(TempFileHandler):
resource.name, cmd.return_code)) resource.name, cmd.return_code))
return cmd 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): def _make_args(self, resource):
return {resource.name: resource.to_dict()} return {resource.name: resource.to_dict()}
@ -152,68 +76,8 @@ class Puppet(TempFileHandler):
) )
self.transport_sync.sync_all() 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): class PuppetV2(Puppet):
def _make_args(self, resource): def _make_args(self, resource):
return resource.args return resource.args