début de réplication
This commit is contained in:
parent
6377ccb9e7
commit
74ee60e86c
3 changed files with 63 additions and 2 deletions
25
cpasswords/clientlib.py
Normal file
25
cpasswords/clientlib.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
"""Client class definition for cpasswords protocol.
|
||||||
|
|
||||||
|
(WIP)
|
||||||
|
"""
|
||||||
|
|
||||||
|
from cpasswords import client as _old_client
|
||||||
|
|
||||||
|
class Client(object):
|
||||||
|
"""A client connection."""
|
||||||
|
|
||||||
|
verbose = False
|
||||||
|
|
||||||
|
def __init__(self, serverdata):
|
||||||
|
"""
|
||||||
|
serverdata should be a classic dict object (from eg a clientconfig
|
||||||
|
module)
|
||||||
|
"""
|
||||||
|
self.serverdata = serverdata
|
||||||
|
|
||||||
|
def put_file(self, data):
|
||||||
|
"""Send file to server"""
|
||||||
|
# TODO put code here
|
||||||
|
_old_client.put_files(self, [data])
|
28
server.py
28
server.py
|
@ -17,10 +17,19 @@ import itertools
|
||||||
from email.mime.text import MIMEText
|
from email.mime.text import MIMEText
|
||||||
from email.mime.multipart import MIMEMultipart
|
from email.mime.multipart import MIMEMultipart
|
||||||
|
|
||||||
|
try:
|
||||||
|
from cpasswords import clientlib
|
||||||
|
except ImportError:
|
||||||
|
print("Couldn't import clientlib. Remote sync may not work")
|
||||||
|
|
||||||
# Même problème que pour le client, il faut bootstraper le nom de la commande
|
# Même problème que pour le client, il faut bootstraper le nom de la commande
|
||||||
# Pour accéder à la config
|
# Pour accéder à la config
|
||||||
cmd_name = os.path.split(sys.argv[0])[1].replace("-server", "")
|
conf_path = os.getenv('CRANSPASSWORDS_SERVER_CONFIG_DIR', None)
|
||||||
sys.path.append("/etc/%s/" % (cmd_name,))
|
if not conf_path:
|
||||||
|
cmd_name = os.path.split(sys.argv[0])[1].replace("-server", "")
|
||||||
|
conf_path = "/etc/%s/" % (cmd_name,)
|
||||||
|
|
||||||
|
sys.path.append(conf_path)
|
||||||
import serverconfig
|
import serverconfig
|
||||||
|
|
||||||
MYUID = pwd.getpwuid(os.getuid())[0]
|
MYUID = pwd.getpwuid(os.getuid())[0]
|
||||||
|
@ -190,6 +199,11 @@ def _putfile(filename, roles, contents):
|
||||||
# Or fuck yourself
|
# Or fuck yourself
|
||||||
|
|
||||||
writefile(filepath, json.dumps({'roles': roles, 'contents': contents}))
|
writefile(filepath, json.dumps({'roles': roles, 'contents': contents}))
|
||||||
|
|
||||||
|
data = {'filename': filename, 'roles': roles, 'contents': contents}
|
||||||
|
for client in _list_to_replicate(data):
|
||||||
|
client.put_file(data)
|
||||||
|
|
||||||
return [True, u"Modification effectuée."]
|
return [True, u"Modification effectuée."]
|
||||||
|
|
||||||
@server_command('putfile', stdin_input=True, write=True)
|
@server_command('putfile', stdin_input=True, write=True)
|
||||||
|
@ -245,6 +259,16 @@ def backup(corps, fname, old):
|
||||||
back.write((u'* %s: %s\n' % (str(datetime.datetime.now()), corps)).encode("utf-8"))
|
back.write((u'* %s: %s\n' % (str(datetime.datetime.now()), corps)).encode("utf-8"))
|
||||||
back.close()
|
back.close()
|
||||||
|
|
||||||
|
def _list_to_replicate(data):
|
||||||
|
"""Renvoie une liste d'options clients sur lesquels appliquer relancer
|
||||||
|
la procédure (pour réplication auto)"""
|
||||||
|
roles = data.get('roles', [])
|
||||||
|
backups = getattr(serverconfig, 'BACKUP_ROLES', {})
|
||||||
|
servers = getattr(serverconfig, 'BACKUP_SERVERS', {})
|
||||||
|
|
||||||
|
configs = set(name for role in roles for name in backups.get(role, []))
|
||||||
|
return [ clientlib.Client(servers[name]) for name in configs ]
|
||||||
|
|
||||||
_notif_todo = []
|
_notif_todo = []
|
||||||
def notification(action, fname, actor):
|
def notification(action, fname, actor):
|
||||||
"""Enregistre une notification"""
|
"""Enregistre une notification"""
|
||||||
|
|
|
@ -37,3 +37,15 @@ ROLES = {
|
||||||
'moi': _ME,
|
'moi': _ME,
|
||||||
'moi-w': _ME,
|
'moi-w': _ME,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BACKUP_SERVERS = {
|
||||||
|
'gladys': {
|
||||||
|
'server_cmd': ['/usr/bin/ssh', 'home.b2moo.fr', '/home/dstan/cranspasswords/serverconfigs/tudor/cpasswords-server', ],
|
||||||
|
'keep-alive': True,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BACKUP_ROLES = {
|
||||||
|
'moi': ['gladys'],
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue