~bbaqar/charms/trusty/neutron-api-plumgrid/temp

« back to all changes in this revision

Viewing changes to hooks/charmhelpers/core/services/helpers.py

  • Committer: bbaqar at plumgrid
  • Date: 2016-04-25 09:05:55 UTC
  • mfrom: (18.1.7 neutron-api-plumgrid)
  • Revision ID: bbaqar@plumgrid.com-20160425090555-yl82ba6bhwjqkwr9
Merge: Liberty/Mitaka support

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
import os
18
18
import yaml
 
19
 
19
20
from charmhelpers.core import hookenv
 
21
from charmhelpers.core import host
20
22
from charmhelpers.core import templating
21
23
 
22
24
from charmhelpers.core.services.base import ManagerCallback
240
242
 
241
243
    :param str source: The template source file, relative to
242
244
        `$CHARM_DIR/templates`
243
 
    :param str target: The target to write the rendered template to
 
245
 
 
246
    :param str target: The target to write the rendered template to (or None)
244
247
    :param str owner: The owner of the rendered file
245
248
    :param str group: The group of the rendered file
246
249
    :param int perms: The permissions of the rendered file
 
250
    :param partial on_change_action: functools partial to be executed when
 
251
                                     rendered file changes
 
252
    :param jinja2 loader template_loader: A jinja2 template loader
247
253
 
 
254
    :return str: The rendered template
248
255
    """
249
256
    def __init__(self, source, target,
250
 
                 owner='root', group='root', perms=0o444):
 
257
                 owner='root', group='root', perms=0o444,
 
258
                 on_change_action=None, template_loader=None):
251
259
        self.source = source
252
260
        self.target = target
253
261
        self.owner = owner
254
262
        self.group = group
255
263
        self.perms = perms
 
264
        self.on_change_action = on_change_action
 
265
        self.template_loader = template_loader
256
266
 
257
267
    def __call__(self, manager, service_name, event_name):
 
268
        pre_checksum = ''
 
269
        if self.on_change_action and os.path.isfile(self.target):
 
270
            pre_checksum = host.file_hash(self.target)
258
271
        service = manager.get_service(service_name)
259
 
        context = {}
 
272
        context = {'ctx': {}}
260
273
        for ctx in service.get('required_data', []):
261
274
            context.update(ctx)
262
 
        templating.render(self.source, self.target, context,
263
 
                          self.owner, self.group, self.perms)
 
275
            context['ctx'].update(ctx)
 
276
 
 
277
        result = templating.render(self.source, self.target, context,
 
278
                                   self.owner, self.group, self.perms,
 
279
                                   template_loader=self.template_loader)
 
280
        if self.on_change_action:
 
281
            if pre_checksum == host.file_hash(self.target):
 
282
                hookenv.log(
 
283
                    'No change detected: {}'.format(self.target),
 
284
                    hookenv.DEBUG)
 
285
            else:
 
286
                self.on_change_action()
 
287
 
 
288
        return result
264
289
 
265
290
 
266
291
# Convenience aliases for templates