~hloeung/landscape-client-charm/show-charm-source-version

« back to all changes in this revision

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

  • Committer: 🤖 Landscape Builder
  • Author(s): Simon Poirier
  • Date: 2019-07-02 21:01:24 UTC
  • mfrom: (68.1.1 trunk)
  • Revision ID: _landscape_builder-20190702210124-2dc3cv9djsqnx5gt
Merge sync-charmhelpers-and-keys [f=1834223] [r=roadmr,landscape-builder] [a=Simon Poirier]
Sync charmhelpers to avoid key errors on refresh.

Show diffs side-by-side

added added

removed removed

Lines of Context:
307
307
    """
308
308
    def __call__(self, manager, service_name, event_name):
309
309
        service = manager.get_service(service_name)
310
 
        new_ports = service.get('ports', [])
 
310
        # turn this generator into a list,
 
311
        # as we'll be going over it multiple times
 
312
        new_ports = list(service.get('ports', []))
311
313
        port_file = os.path.join(hookenv.charm_dir(), '.{}.ports'.format(service_name))
312
314
        if os.path.exists(port_file):
313
315
            with open(port_file) as fp:
314
316
                old_ports = fp.read().split(',')
315
317
            for old_port in old_ports:
316
 
                if bool(old_port):
317
 
                    old_port = int(old_port)
318
 
                    if old_port not in new_ports:
319
 
                        hookenv.close_port(old_port)
 
318
                if bool(old_port) and not self.ports_contains(old_port, new_ports):
 
319
                    hookenv.close_port(old_port)
320
320
        with open(port_file, 'w') as fp:
321
321
            fp.write(','.join(str(port) for port in new_ports))
322
322
        for port in new_ports:
 
323
            # A port is either a number or 'ICMP'
 
324
            protocol = 'TCP'
 
325
            if str(port).upper() == 'ICMP':
 
326
                protocol = 'ICMP'
323
327
            if event_name == 'start':
324
 
                hookenv.open_port(port)
 
328
                hookenv.open_port(port, protocol)
325
329
            elif event_name == 'stop':
326
 
                hookenv.close_port(port)
 
330
                hookenv.close_port(port, protocol)
 
331
 
 
332
    def ports_contains(self, port, ports):
 
333
        if not bool(port):
 
334
            return False
 
335
        if str(port).upper() != 'ICMP':
 
336
            port = int(port)
 
337
        return port in ports
327
338
 
328
339
 
329
340
def service_stop(service_name):