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')