github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/acceptancetests/repository/charms/mediawiki/hooks/cache-relation-changed (about)

     1  #!/usr/bin/env python
     2  import subprocess
     3  import os
     4  import tempfile
     5  import pprint
     6  import json
     7  
     8  from socket import getaddrinfo
     9  
    10  # all changes mean we should regen the file
    11  memcached_ips = []
    12  rl = subprocess.Popen("relation-list",stdout=subprocess.PIPE)
    13  for memcached_unit in rl.stdout:
    14      p = subprocess.Popen(["relation-get", "--format", "json", "-", memcached_unit.strip()],
    15              stdout=subprocess.PIPE, close_fds=True)
    16      settings = json.loads(p.stdout.read().strip())
    17      try:
    18          if 'private-address' in settings and 'port' in settings:
    19              memcached_ips.append("'%s:%d'" % getaddrinfo(settings['private-address'],int(settings['port']))[0][4][0:2])
    20      except KeyError:
    21          print memcached_unit + " has no settings. ["+str(settings)+"]"
    22  
    23  rl.wait()
    24  
    25  pprint.pprint(memcached_ips)
    26  
    27  memcache_template = """<?php
    28  $wgMainCacheType = CACHE_MEMCACHED;
    29  $wgMemCachedServers = array(%s);
    30  $wgSessionsInMemcached = true;
    31  """
    32  
    33  with tempfile.NamedTemporaryFile(dir='/etc/mediawiki',delete=False) as settings:
    34      subprocess.call(["chmod","0644",settings.name])
    35      if len(memcached_ips):
    36          settings.write(memcache_template % ','.join(memcached_ips))
    37      else:
    38          settings.write("<?php\n#No Memcached Servers\n")
    39  
    40      try:
    41          os.unlink('/etc/mediawiki/memcached_settings.php.old')
    42      except:
    43          pass
    44      os.rename('/etc/mediawiki/memcached_settings.php','/etc/mediawiki/memcached_settings.php.old')
    45      os.rename(settings.name, '/etc/mediawiki/memcached_settings.php')