merge toodego scripts from misc-fred

This commit is contained in:
Nicolas Roche 2024-02-22 11:49:37 +01:00
parent 001681b70a
commit 048e3b0673
5 changed files with 28 additions and 24 deletions

View File

@ -20,7 +20,7 @@ else:
orig_site = 'portail-agent-%s.guichet-recette.grandlyon.com' % slug_orig_city
dest_site = 'portail-agent-%s.guichet-recette.grandlyon.com' % slug_dest_city
site_export_orig = subprocess.check_output(['sudo', '-u', 'combo', 'combo-manage', 'tenant_command', 'export_site', '--format-json', '-d', orig_site])
site_export_orig = subprocess.check_output(['sudo', '-u', 'combo', 'combo-manage', 'tenant_command', 'export_site', '-d', orig_site, '--format-json'])
site_export_orig = site_export_orig.decode('utf-8')
site_export = site_export_orig.replace(orig_city, dest_city)

View File

@ -20,7 +20,7 @@ else:
orig_site = 'portail-citoyen-%s.guichet-recette.grandlyon.com' % slug_orig_city
dest_site = 'portail-citoyen-%s.guichet-recette.grandlyon.com' % slug_dest_city
site_export_orig = subprocess.check_output(['sudo', '-u', 'combo', 'combo-manage', 'tenant_command', 'export_site', '--format-json', '-d', orig_site])
site_export_orig = subprocess.check_output(['sudo', '-u', 'combo', 'combo-manage', 'tenant_command', 'export_site', '-d', orig_site, '--format-json'])
site_export_orig = site_export_orig.decode('utf-8')
site_export = site_export_orig.replace(orig_city, dest_city)
@ -31,6 +31,6 @@ open('/tmp/site-export.json', 'w').write(site_export)
subprocess.call(['sudo', '-u', 'combo', 'combo-manage', 'tenant_command', 'import_site', '-d', dest_site, '/tmp/site-export.json'])
subprocess.call(['sudo', '-u', 'combo', 'combo-manage', 'tenant_command', 'runscript', '-d', dest_site, 'fsck-combo.py'])
orig_media_dir = '/var/lib/combo/tenants/%s/media/*' % orig_site
orig_media_dir = '/var/lib/combo/tenants/%s/media' % orig_site
if os.path.exists(orig_media_dir) and os.listdir(orig_media_dir):
subprocess.call(['sudo', '-u', 'combo', 'cp', '-ar', orig_media_dir, '/var/lib/combo/tenants/%s/' % dest_site])

View File

@ -2,18 +2,15 @@ import os
import json
import sys
from django_rbac.utils import get_role_model, get_ou_model
Ou = get_ou_model()
Role = get_role_model()
from authentic2.a2_rbac.models import OrganizationalUnit, Role
mapping = {}
name_src = sys.argv[1]
name_dst = sys.argv[2]
ou_src = Ou.objects.get(name=name_src)
ou = Ou.objects.get(name=name_dst)
ou_src = OrganizationalUnit.objects.get(name=name_src)
ou = OrganizationalUnit.objects.get(name=name_dst)
agent_role = None
@ -23,7 +20,10 @@ for role in Role.objects.filter(ou=ou_src):
if role.slug.startswith('_'):
continue
new_name = role.name.replace(name_src, name_dst).replace(name_src.lower(), name_dst.lower())
new_role, created = Role.objects.get_or_create(ou=ou, name=new_name)
kwargs = {'ou': ou, 'name': new_name}
if name_dst.lower() not in new_name.lower():
kwargs['slug'] = role.slug
new_role, created = Role.objects.get_or_create(**kwargs)
mapping[role.uuid] = {name_dst: new_role.uuid}
if new_name == 'Agent':
agent_role = new_role

View File

@ -2,8 +2,8 @@
# usage: sudo -u wcs /usr/bin/wcsctl -f /etc/wcs/wcs-au-quotidien.cfg runscript --vhost=demarches-<...>.guichet-recette.grandlyon.com copy-wcs.py Oullins Genay
from quixote import get_publisher
from wcs.formdef import FormDef
from wcs.carddef import CardDef
from wcs.formdef import FormDef
import json
import os
@ -42,12 +42,20 @@ def copy(orig, dest, dest_city):
# $ git grep -A1 XmlStorableObject wcs | grep '_names ='
# models: les modèles de documents
# puis faire un ls sur le tenant de la souce pour voir les répertoires à copier
for object_type in (
# 'apiaccess', 'models', 'blockdefs' # jamais testé
'formdefs', 'carddefs', 'workflows', 'categories', 'datasources', 'wscalls', 'mail-templates',
'workflow_categories', 'carddef_categories'):
orig_dir = os.path.join('/var/lib/wcs/%s/%s/' % (orig_site, object_type))
dest_dir = os.path.join('/var/lib/wcs/tenants/%s/%s/' % (dest_site, object_type))
# 'apiaccess', 'blockdefs' # jamais testé
for object_type in ('carddefs', 'formdefs', 'workflows', 'categories', 'datasources', 'models', 'wscalls', 'mail-templates',
'carddef_categories', 'workflow_categories', 'block_categories', 'mail_template_categories',
'data_source_categories'):
if os.path.exists('/var/lib/wcs/%s' % orig_site):
orig_base_dir = '/var/lib/wcs/%s' % orig_site
elif os.path.exists('/var/lib/wcs/tenants/%s' % orig_site):
orig_base_dir = '/var/lib/wcs/tenants/%s' % orig_site
else:
print('missing source tenant')
sys.exit(1)
dest_base_dir = get_publisher().app_dir
orig_dir = os.path.join('%s/%s/' % (orig_base_dir, object_type))
dest_dir = os.path.join('%s/%s/' % (dest_base_dir, object_type))
if not os.path.exists(orig_dir):
continue
if not os.path.exists(dest_dir):
@ -62,9 +70,7 @@ for formdef in FormDef.select():
if orig_city in formdef.name:
formdef.name = formdef.name.replace(orig_city, dest_city)
formdef.store()
# add explicite update_storage()
for formdef in FormDef.select():
formdef.update_storage()
for carddef in CardDef.select():
carddef.update_storage()

View File

@ -8,13 +8,11 @@ import sys
from django.db.models.query import Q
from django_rbac.utils import get_role_model, get_ou_model
from authentic2.a2_rbac.models import OrganizationalUnit, Role
Ou = get_ou_model()
Role = get_role_model()
name_dst = sys.argv[1]
ou = Ou.objects.get(name=name_dst)
ou = OrganizationalUnit.objects.get(name=name_dst)
role = Role.objects.get(name=u'Administrateur %s' % name_dst, ou=ou)
for subrole in Role.objects.filter(Q(slug='_a2-hobo-superuser', ou=ou) |