mirror of
https://pagure.io/fedora-infra/ansible.git
synced 2026-05-04 14:03:32 +08:00
Alias generation script: retry on connection error
Signed-off-by: Aurélien Bompard <aurelien@bompard.org>
This commit is contained in:
@@ -1,18 +1,35 @@
|
||||
#!/usr/bin/python3
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import tempfile
|
||||
import subprocess
|
||||
from functools import wraps
|
||||
|
||||
from fasjson_client import Client, errors
|
||||
|
||||
fasjson_url = "{{ fasjson_url }}"
|
||||
aliases_static_file = "/etc/aliases.static"
|
||||
aliases_file = "/etc/aliases"
|
||||
max_retries = 3
|
||||
|
||||
|
||||
def retry(func):
|
||||
@wraps(func)
|
||||
def wrapper(*args, **kwargs):
|
||||
for attempt in range(max_retries):
|
||||
try:
|
||||
return func(*args, **kwargs)
|
||||
except ConnectionError:
|
||||
if attempt < max_retries - 1:
|
||||
time.sleep(1)
|
||||
else:
|
||||
raise
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
def gen_all_aliases():
|
||||
|
||||
# API query
|
||||
try:
|
||||
client = Client(url=fasjson_url)
|
||||
@@ -30,7 +47,7 @@ def gen_all_aliases():
|
||||
temp.write(line)
|
||||
for user in users:
|
||||
username = user['username']
|
||||
userinfo = client.get_user(username=username).result
|
||||
userinfo = retry(client.get_user)(username=username).result
|
||||
email = userinfo['emails'][0]
|
||||
|
||||
temp.write(f'{username}: {email} \n')
|
||||
@@ -41,7 +58,8 @@ def gen_all_aliases():
|
||||
sponsor_list = ','.join(
|
||||
sponsor['username']
|
||||
for sponsor in client.list_group_sponsors(
|
||||
groupname=groupname).result
|
||||
groupname=groupname
|
||||
).result
|
||||
)
|
||||
if sponsor_list:
|
||||
temp.write(
|
||||
@@ -51,8 +69,9 @@ def gen_all_aliases():
|
||||
|
||||
member_list = ','.join(
|
||||
member['username']
|
||||
for member in client.list_group_members(
|
||||
groupname=groupname).result
|
||||
for member in retry(client.list_group_members)(
|
||||
groupname=groupname
|
||||
).result
|
||||
)
|
||||
|
||||
if member_list:
|
||||
@@ -60,7 +79,9 @@ def gen_all_aliases():
|
||||
|
||||
rename(temporary_file.name, aliases_file)
|
||||
except errors.APIError as e:
|
||||
print(f"Something went wrong querying the fasjson API. {e}", file=sys.stderr)
|
||||
print(
|
||||
f"Something went wrong querying the fasjson API. {e}", file=sys.stderr
|
||||
)
|
||||
raise
|
||||
except IOError as e:
|
||||
print(e, file=sys.stderr)
|
||||
@@ -102,18 +123,20 @@ def update_user(username):
|
||||
def rename(filename, aliases_file):
|
||||
try:
|
||||
os.rename(filename, aliases_file)
|
||||
if (os.path.exists(filename)):
|
||||
if os.path.exists(filename):
|
||||
os.remove(filename)
|
||||
except IOError as e:
|
||||
print(f"Error updating aliases file {e}", file=sys.stderr)
|
||||
raise
|
||||
|
||||
|
||||
def selinux():
|
||||
try:
|
||||
subprocess.check_call(['/usr/sbin/restorecon', '-R', aliases_file])
|
||||
except IOError as e:
|
||||
print(f"Error restoring file context {e}", file=sys.stderr)
|
||||
|
||||
|
||||
def main():
|
||||
args = sys.argv[1:]
|
||||
|
||||
@@ -121,10 +144,10 @@ def main():
|
||||
os.environ["KRB5_CLIENT_KTNAME"] = "/etc/krb5.keytab"
|
||||
|
||||
if not args:
|
||||
gen_all_aliases()
|
||||
selinux()
|
||||
# call newaliases script so postfix gets updated
|
||||
subprocess.check_call(['/usr/bin/newaliases'])
|
||||
gen_all_aliases()
|
||||
selinux()
|
||||
# call newaliases script so postfix gets updated
|
||||
subprocess.check_call(['/usr/bin/newaliases'])
|
||||
elif len(args) == 2 and args[0] == "update":
|
||||
update_user(args[1])
|
||||
# call newaliases script so postfix gets updated
|
||||
|
||||
Reference in New Issue
Block a user