В cl-setup добавлен ключ -r - серверы репликации.

Ключ действует при установке сервиса LDAP.

git-svn-id: http://svn.calculate.ru/calculate2/calculate-server/trunk@857 c91db197-33c1-4113-bf15-f8a5c547ca64
develop
asamoukin 16 years ago
parent ff157b8348
commit 2eafee845e

@ -203,3 +203,96 @@ class fillVars(object, cl_base.glob_attr):
"""DN ветки хранения последнего посещенного сервера"""
return "ou=%s,%s" %(self.Get('ld_repl_worked_login'),
self.Get('ld_repl_dn'))
def get_ld_repl_ids(self):
"""id серверов репликации"""
replServers = self.Get("ld_repl_servers")
rids = ""
if not replServers:
return rids
replServers = replServers.split(",")
rid = 0
for replServer in replServers:
if replServer:
rid += 1
rids += "%s," %hex(rid)[2:]
if rids and rids[-1] == ",":
rids = rids[:-1]
return rids
def get_ld_repl_id(self):
"""id текущего сервера репликации"""
replServers = self.Get("ld_repl_servers")
if not replServers:
return ""
replServers = replServers.split(",")
replIds = self.Get("ld_repl_ids")
replIds = replIds.split(",")
if len(replServers)!=len(replIds):
return ""
hostName = self.Get('os_net_hostname')
domain = self.Get('os_net_domain')
fullHostName = "%s.%s"%(hostName,domain)
i = 0
repl_id = ""
for replServer in replServers:
elemReplServer = replServer.split(".")
if len(elemReplServer)==1:
if replServer == hostName:
repl_id = replIds[i]
break
else:
if replServer == fullHostName:
repl_id = replIds[i]
break
i += 1
return repl_id
def get_ld_repl_servers_ref(self):
"""Текст в slapd.conf, ссылки на серверы репликации"""
repl_id = self.Get("ld_repl_id")
if not repl_id:
return ""
servers_ref = ""
replServers = self.Get("ld_repl_servers")
replServers = replServers.split(",")
replIds = self.Get("ld_repl_ids")
replIds = replIds.split(",")
i = 0
for replServer in replServers:
if replIds[i]!= repl_id:
servers_ref += "updateref ldap://%s:389\n" %replServer
i += 1
return servers_ref
def get_ld_repl_servers_info(self):
"""Текст в slapd.conf,
в котором находится информация о серверах репликации"""
repl_id = self.Get("ld_repl_id")
if not repl_id:
return ""
servers_info = ""
replServers = self.Get("ld_repl_servers")
replServers = replServers.split(",")
replIds = self.Get("ld_repl_ids")
replIds = replIds.split(",")
i = 0
for replServer in replServers:
if replIds[i]!= repl_id:
servers_info += """syncrepl rid=%s
provider=ldap://%s
type=refreshAndPersist
retry="5 5 300 +"
filter="(|(|(ou:dn:=Samba)(ou:dn:=Unix))(ou:dn:=Replication))"
searchbase="%s"
attrs="*,+"
bindmethod=simple
binddn="%s"
credentials=%s\n""" %(replIds[i],
replServer,
self.Get("ld_services_dn"),
self.Get("ld_repl_dn"),
self.Get("ld_repl_pw"))
i += 1
return servers_info

@ -5557,19 +5557,17 @@ outdated. If the backup is obsolete, use cl-backup."))
self.clVars.Set("sr_ldap_set","on")
# Установка репликации
if options.has_key("r"):
if options['r'] == "on":
# Устанавливаем объект для хранения переменных
self.servReplObj.clVars = self.clVars
if not self.servReplObj.setupReplServer({}):
return False
ldapParser.setVar("replication",
{"DN":self.clVars.Get("ld_repl_dn"),
"PASS":self.clVars.Get("ld_repl_pw")})
self.clVars.Write("ld_repl_set", "on")
else:
self.clVars.Write("ld_repl_set", "off")
#if not self.servReplObj.addReplWorkedUser("alex74"):
#return False
optionsRepl = {'r':options['r']}
# Устанавливаем объект для хранения переменных
self.servReplObj.clVars = self.clVars
if not self.servReplObj.setupReplServer(optionsRepl):
return False
ldapParser.setVar("replication",
{"DN":self.clVars.Get("ld_repl_dn"),
"PASS":self.clVars.Get("ld_repl_pw")})
self.clVars.Write("ld_repl_set", "on")
else:
self.clVars.Write("ld_repl_set", "off")
self.clVars.Write("sr_ldap_set","on")
self.printOK(_("LDAP service configured") + " ...")
return True
@ -6340,11 +6338,12 @@ the password will be changed only for Samba account")
},
{'progAccess':(6,),
'shortOption':"r",
'optVal':"CONDITION",
'longOption':"repl",
'optVal':"R_HOSTS",
'longOption':"rhosts",
'helpChapter':_("LDAP service options"),
'help':_("enabled or disabled replication, default disable.\
(on/off)")
'help':_("servers replication (comma delimited). If you use this\
option and is configured Samba service will replicate LDAP branches Samba\
and Unix.")
},
# Опции cl-passwd
# LDAP пользователь
@ -7262,6 +7261,27 @@ class servRepl(shareLdap):
self.relWorkedDN = False
# Файл для определения выхода пользователя.
self.logOutFile = ".logout"
#repl_text = """
#rootdn "cn=ldaproot,dc=calculate"
#syncrepl rid=001
#provider=ldap://newserver
#type=refreshAndPersist
#retry="5 5 300 +"
#searchbase="ou=Unix,ou=Services,dc=calculate"
#attrs="*,+"
#bindmethod=simple
#binddn="ou=Unix,ou=Services,dc=calculate"
#credentials=UCwZO73Y1
#updateref ldap://newserver:389
#overlay syncprov
#syncprov-checkpoint 100 10
#syncprov-sessionlog 100
#mirrormode on
#serverID 2"""
@adminConnectLdap
def isSysDNExists(self):
@ -7525,6 +7545,42 @@ class servRepl(shareLdap):
# Cоздаем объект переменные
if not self.clVars:
self.createClVars()
if not options.has_key('r') or not options['r']:
self.printERROR(\
_("Not specified replication servers\
(command line option '-r')") + " ...")
return False
# Находим текущий сервер в серверах репликации
# и удаляем его из списка
replServers = options['r'].split(',')
hostName = self.clVars.Get('os_net_hostname')
domain = self.clVars.Get('os_net_domain')
fullHostName = "%s.%s"%(hostName,domain)
replServers = list(set(replServers))
lenRelpServers = len(replServers)
i=0
while(i<lenRelpServers):
replServer = replServers[i]
elemReplServer = replServer.split(".")
if len(elemReplServer)==1:
if replServer == hostName or not replServer.strip():
replServers.remove(replServer)
lenRelpServers -= 1
else:
i+=1
else:
if replServer == fullHostName:
replServers.remove(fullHostName)
lenRelpServers -= 1
else:
i+=1
# Если серверы отсуствуют - ошибка
if not replServers:
self.printERROR(\
_("Not a valid list of servers replication") + " ...")
return False
# Добавляем текущий сервер в серверы репликации
replServers.insert(0,fullHostName)
# В случае если сервер установлен
if self.clVars.Get("sr_ldap_set") != "on":
self.printERROR(\
@ -7537,8 +7593,16 @@ class servRepl(shareLdap):
return False
#Cоединение с Ldap (администратор)
shareLdap.getLdapObjInFile(self)
# Добавляем ветку репликации
if not self.addReplDN():
return False
#запишем переменные для сервера
# в /etc/calculate.env
self.clVars.Write("ld_repl_pw",
self.clVars.Get("ld_repl_pw"),True)
# в /var/calculate/calculate.env
self.clVars.Write("ld_repl_servers",
",".join(replServers),True,"local")
self.printOK(_("Replication setuped") + " ...")
return True

Loading…
Cancel
Save