Client CLI pour l'administration
Le client CLI (« Command Line Interface » = Interface de lignes de commandes) permet d'effectuer des tâches d'administration de la plateforme BlueMind en ligne de commande, sans avoir à créer de scripts pour cela.
Couplé au système de monitoring bm-tick, il permet notamment des tâches d'administration de celui-ci. Pour plus d'informations, voir Découvrir et installer bm-tick.
Installation
Le client bm-cli
est installé par défaut lors de l'installation de BlueMind.
Des composants additionnels peuvent être installés pour étendre les capacités de l'outil :
bm-plugin-cli-mapi
: ajoute des commandes de gestion de MAPI pour Outlook
NB : ce paquet est installé automatiquement lors de l'installation des paquets mapi.bm-plugin-cli-setup
: ajoute des commandes pour l'installation et la mise à jour de BlueMind
Usage
Lancer une commande
Pour utiliser l'outil en ligne de commande, se connecter au serveur en ssh et utiliser la commande bm-cli
suivi de la commande et ses options.
Par exemple, pour lister les utilisateurs du domaine :
bm-cli user get bluemind.loc
Les commandes peuvent être couplées, entre elles ou avec d'autres commandes habituelles. Elle peuvent aussi être incluses dans des scripts afin d'effectuer plusieurs opérations en une seule fois.
Lister les commandes existantes
La commande bm-cli -h
permet de lister l'intégralité des commandes disponibles :
bm-cli -h
auditlog
auditlog create create audit log datastream
auditlog acl get access control entries
auditlog get get auditlog data
auditlog calendar get calendar data
auditlog dir get directory data
auditlog global get global auditlog data
auditlog login get login data
auditlog mail get mail data
auditlog mailfilter get mail filter rule data
auditlog get-retention Get retention duration (days) for datastream
auditlog sysconf get system configuration and global setting data
auditlog set-retention set retention duration (days) for datastream
auth
auth reconfigure Delete & recreate keycloak realms for existing domains
auth get-conf Get domain authentication configurations
auth set-conf Set domain authentication configuration
auth-provider
auth-provider openid-list-provider List registered OpenId provider systems
auth-provider openid-register-provider Register an OpenID provider system
calendar
calendar log Pretty-Print an auditlog file
calendar delete-events-by-organizer Delete all events having a specific organizer
calendar export Export a calendar to an ICS file
calendar import import an ICS File
calendar list List user or whole domain calendars
calendar list-event-details-by-organizer List event details
calendar reset Reset a calendar
calendar resync Resync an event
calendar touch Increment the version of a calendar event
...
Les commandes sont enrichies au fur et à mesure des versions de BlueMind. Il se peut donc que plus (ou moins) de commandes et options soient disponibles selon la version de BlueMind installée.
Il est donc important de se référer à la commande bm-cli -h
du serveur.
Le paramètre supplémentaire v
permet d'ajouter au listing l'aide complète de chaque commande :
bm-cli -hv
auditlog -h, --help
Affiche l'arbre complet des commandes.
-v, --verbose
Affiche aussi les arguments pour chaque commande de l'arbre.
[...]
calendar -h, --help
Affiche l'arbre complet des commandes.
-v, --verbose
Affiche aussi les arguments pour chaque commande de l'arbre.
calendar log Pretty-Print an auditlog file
--dataShow data
--show-ro
Show read-only data
--data-by-date
Show data only on a specific date (yyyy-MM-ddThh:mm:ss).
Matching also works with substrings of this pattern
--event-query
Event query string (Columns Action and Event)
--event-uid
Event UID query string
--calendar-query
Calendar query string (Column Calendar)
--filtered-actions
Comma-separated list of actions which should not appear
in the output
<file>Path to the auditlog file
calendar delete-events-by-organizer Delete all events having a specific organizer
--domain
domain
--dry
list events without deleting them
<email>
Organizer email
calendar export Export a calendar to an ICS file
--direntry-uid
Directory entry UID
--all-domains
All domains except global.virt
--workers
run with X workers (default: 1)
--match
regex that entity must match, for example : [a-c].*
--progress
display progress messages
--output-directory
The output directory path, files will be save in an email
named subdirectory
--dry Dry-run (do nothing)
--calendarUid
calendar uid, export all calendars if not specified
<target>
email address or domain name
[...]
setup -h, --help
Affiche l'arbre complet des commandes.
-v, --verbose
Affiche aussi les arguments pour chaque commande de l'arbre.
setup enable-mailapp Activate MailApp
--direntry-uid
Directory entry UID
--all-domains
All domains except global.virt
--workers
run with X workers (default: 1)
--match
regex that entity must match, for example : [a-c].*
--progress
display progress messages
--group
Adds the necessary role to this group (defaults to 'user')
<target>
email address or domain name
setup check-subscription Check subscription
setup install Install BlueMind
--domain
Set the default domain name.
--external-url
Set the External Url. Ex: bluemind.domain.tld
--sw-pass
Set setup wizard password.
--domain-admin-pass
Set domain administrator password.
--admin0-pass
Set admin0 password.
--reinstall
Force installation even if installed.
--set-contact
Set a subscription contact
--shard-ip
Provided shard server IP (deprecated, please use the
servers-map feature)
--server-map
Assign tags on the selected servers, can be
specified multiple times.
(List of tags in TagDescriptor from net.bluemind.server.
api)
Exemple:
* elasticsearch on 192.168.1.2
* storage servers on 192.168.1.3, 192.168.1.4
--server-map 192.168.1.2=bm/es \
--server-map 192.168.1.3=bm/pgsql-data,mail/imap \
--server-map 192.168.1.4=bm/pgsql-data,mail/imap
--lang Set admin0 language. (default 'fr')
setup upgrade_history Shows the Bluemind upgrade history
setup upgrade Upgrade BlueMind
-f, --force
force update, even if core reports the correct version
--backup
Backup Bluemind databases (pg-dump), may be very long.
--lang
Set admin0 language (en, fr...).
Aide sur une commande
À tout moment, il est possible d'obtenir de l'aide sur une commande particulière au moyen de --help
ou -h
.
Par exemple, maintenance -h
présente la commande maintenance
et ses diverses actions possibles :
bm-cli maintenance -h
consolidateIndex Consolidate a mailbox index
dump-cache Dump core caches to a json file
flush-cache Flush bm-core caches
list List directory entries
orphan-body-repair delete orphan mail bodies
orphan-check check and delete orphan mailbox records
read-cyrus-index Read a cyrus index file
repair Run repair maintenance operation
ops List available maintenance operations
schema check database schema
sentry sentry setup
update-fw Update firewall rules
Pour obtenir plus de détails sur une sous-commande, il suffit de taper la sous-commande à son tour, ici pour obtenir l'aide concernant l'opération de consolidation d'index :
bm-cli maintenance consolidateIndex -h
Usage: bm-cli maintenance consolidateIndex [--progress] [--reset]
[--match=<match>] [--workers=<workers>] (<target> |
--direntry-uid=<dirEntryUid> | --all-domains)
Consolidate a mailbox index
<target> email address or domain name
--all-domains All domains except global.virt
--direntry-uid=<dirEntryUid>
Directory entry UID
--match=<match> regex that entity must match, for example : [a-c].*
--progress display progress messages
--reset Reset the index (only the data belonging to the
target)
--workers=<workers> run with X workers (default: 1)
Gestion des entités
Obtenir l'UID d'une entité
Les différentes commandes concernant les entités (user, contact, calendar)
Trouver l'UID d'un utilisateur
Pour obtenir l'UID d'un utilisateur, utiliser la commande bm-cli user get
en précisant comme caractère de recherche son adresse email par défaut ou en couplant avec grep
pour filtrer sur un autre champ :
bm-cli user get bluemind.loc --match=jdoe@bluemind.loc --display uid
{"uid":"9236AE27-9C2D-4BA7-84D3-C2067D515195"}
bm-cli user get bluemind.loc --display "uid familyNames"|grep "Doe"
{"uid":"9236AE27-9C2D-4BA7-84D3-C2067D515195","familyNames":"Doe"}
Trouver l'UID d'un groupe
Pour obtenir l'UID d'un groupe, utiliser la commande bm-cli group get
en précisant le nom du groupe et le domaine de recherche :
bm-cli group get Direction@bluemind.loc
{"value":{"orgUnitUid":null,"emails":[{"address":"direction@bluemind.loc","allAliases":true,"isDefault":true}],"hidden":false,"archived":false,"system":false,"dataLocation":"bm-master","name":"Direction","description":null,"properties":{},"hiddenMembers":false,"mailArchived":true,"memberCount":2},"uid":"A48CF63E-C39F-46A9-9F85-3DF1459E8BDC","internalId":24,"version":53,"displayName":"Direction","externalId":null,"createdBy":"admin0_global.virt","updatedBy":"system","created":1758880480523,"updated":1758880493135,"flags":[]}
NB : contrairement à la commande pour les utilisateurs, il n'est ici pas possible de filtrer la sortie pour n'obtenir que l'UID.
Trouver l'UID d'un carnet d'adresse
L'UID d'un carnet peut être trouvé grâce à la commande bm-cli contact list
permettant de lister l'ensemble des carnets d'un utilisateur, d'un domaine ou de l'ensemble des domaines.
Pour le carnet d'un utilisateur on pourra récupérer la liste complète de ses carnets et éventuellement la filtrer grâce à d'autres commandes (grep
par exemple) :
bm-cli contact list jdoe@bluemind.loc
Pour un carnet de domaine, le paramètre --match
permet de filtrer facilement sur le nom :
bm-cli contact list --match=Clients --all-domains
{"owner":"FDF64CCE-E957-423E-BB93-25990B2B13C9","uid":"FDF64CCE-E957-423E-BB93-25990B2B13C9","name":"Clients"}
Trouver l'UID d'un calendrier
L'UID d'un calendrier peut être trouvé grâce à la commande bm-cli calendar list
permettant de lister l'ensemble des calendriers d'un utilisateur, d'un domaine ou de l'ensemble des domaines.
Pour le calendrier d'un utilisateur on pourra récupérer la liste complète de ses calendrier et éventuellement la filtrer grâce à d'autres commandes (grep
par exemple) :
bm-cli calendar list jdoe@bluemind.loc
{"owner":"9236AE27-9C2D-4BA7-84D3-C2067D515195","uid":"calendar:Default:9236AE27-9C2D-4BA7-84D3-C2067D515195","name":"John Doe"}
Pour un calendrier de domaine, le param ètre --match
permet de filtrer facilement sur le nom :
bm-cli calendar list --all-domains --match=Evenementiel
{"owner":"B835E391-FB8E-4879-A763-883C5489C0CA","uid":"B835E391-FB8E-4879-A763-883C5489C0CA","name":"Evenementiel"}
Trouver l'UID d'une entité, quelle qu'elle soit
La commande maintenance list
permet de lister l'ensemble des entités d'une domaine ou d'une installation, quelle que soit leur type. Cela permet de trouver les informations, dont l'UID, sans connaitre son type ou si son type n'a pas de commande propre :
# rechercher l'UID d'une entité de l'installation, sans connaître son type ou son domaine, grâce à grep
bm-cli maintenance list --all-domains | grep contact
{"displayName":"contact","entryUid":"8D2FCA19-798A-4ACE-A88F-9E5693172FD9","accountType":null,"kind":"MAILSHARE","path":"7bbaaa6d.internal/mailshares/8D2FCA19-798A-4ACE-A88F-9E5693172FD9","email":"contact@bluemind.loc","hidden":false,"system":false,"archived":false,"emails":null,"orgUnitUid":null,"orgUnitPath":null,"dataLocation":"bm-master","minId":13}
# rechercher l'UID de la boîte partagée "contact" du domaine bluemind.loc
bm-cli maintenance list contact@bluemind.loc
{"displayName":"contact","entryUid":"8D2FCA19-798A-4ACE-A88F-9E5693172FD9","accountType":null,"kind":"MAILSHARE","path":"7bbaaa6d.internal/mailshares/8D2FCA19-798A-4ACE-A88F-9E5693172FD9","email":"contact@bluemind.loc","hidden":false,"system":false,"archived":false,"emails":null,"orgUnitUid":null,"orgUnitPath":null,"dataLocation":"bm-master","minId":13}
NB : l'UID est ici retourné dans le champ entryUid
.
Gestion des utilisateurs
Abonner tous les utilisateurs à un carnet ou un calendrier
Cas d'usage : on souhaite que tous les utilisateurs soient abonnés à un carnet d'adresse de domaine. Pour éviter les erreurs/oublis et simplifier la procédure, il est possible pour un administrateur de faire cela facilement grâce au CLI.
Dans un premier temps, il faut récupérer l'UID du carnet ou du calendrier souhaité (voir ci-dessus).
Ensuite, il suffit d'utiliser la commande user subscribe
avec le paramètre --users-all
pour abonner l'ensemble des utilisateurs à l'entité voulue :
# abonnement des utilisateurs au carnet "Clients"
bm-cli user subscribe --subscribe-to "FDF64CCE-E957-423E-BB93-25990B2B13C9" --users-all --domain "bluemind.loc"
1/3:SUCCESS:user UID 9236AE27-9C2D-4BA7-84D3-C2067D515195 subscribed
2/3:SUCCESS:user UID D44D1825-E4DF-44FB-99CD-3E8AF564AED1 subscribed
3/3:SUCCESS:user UID 678D2A6D-D573-41A2-B73D-C32DEA1C4BC1 subscribed
---
Subscribe to 'FDF64CCE-E957-423E-BB93-25990B2B13C9' ending
0 subscriber(s) not found
0/3 subscription(s) in error
3/3 subscription(s) success
# abonnement des utilisateurs au calendrier "Evenementiel"
bm-cli user subscribe --subscribe-to "B835E391-FB8E-4879-A763-883C5489C0CA" --users-all --domain "bluemind.loc"
1/3:SUCCESS:user UID 9236AE27-9C2D-4BA7-84D3-C2067D515195 subscribed
2/3:SUCCESS:user UID D44D1825-E4DF-44FB-99CD-3E8AF564AED1 subscribed
3/3:SUCCESS:user UID 678D2A6D-D573-41A2-B73D-C32DEA1C4BC1 subscribed
---
Subscribe to 'B835E391-FB8E-4879-A763-883C5489C0CA' ending
0 subscriber(s) not found
0/3 subscription(s) in error
3/3 subscription(s) success
Supprimer les utilisateurs archivés (suspendus) du domaine
La commande ci-dessous recherche les adresses de messagerie des utilisateurs suspendus :
bm-cli user get bluemind.loc --archived --display "email"
Il est alors possible de coupler le retour avec une boucle et une commande delete
afin de supprimer les utilisateurs retournés :
bm-cli user get bluemind.loc --display "email" | jq -r '.[].email' > /tmp/archived.txt
while read account ; do
bm-cli user delete --dry "$account"
done < /tmp/archived.txt
Appliquer un quota à tous les utilisateurs qui n'en ont pas
Cette opération se fait à l'aide de plusieurs commandes bm-cli
et jq
qui sont regroupées en une seule :
-
Récupérer la liste des utilisateurs avec leur quota :
bm-cli user get bluemind.loc --display 'email quota'
-
Filtrer cette même commande sur les utilisateurs ayant un quota
null
:bm-cli user get bluemind.loc --display 'email quota' | grep null
-
L'outil
jq
permet ensuite d'extraire l'email de chaque ligne retournée :jq -r '.email'
-
Enfin, la commande de mise à jour du quota (ici un quota de 80 Mo) :
bm-cli user update --quota "81920" username@bluemind.loc
Ainsi, la commande finale pour réaliser cela en une seule ligne :
bm-cli user get bluemind.loc --display 'email quota' | grep null | jq -r '.email' | xargs -n1 bm-cli user update --quota "81920"
Opérations sur les calendriers
Exporter/importer l'ensemble des calendriers d'un utilisateur
Cas d'usage : Dans le cadre d'un départ, en vue de pouvoir les réimporter chez d'autres utilisateurs, on veut exporter l'ensemble des calendriers d'un utilisateur.
-
Exporter l'ensemble des calendriers de l'utilisateur John Doe (identifiant jdoe@bluemind.loc) dans le dossier
/home/user/export/cals
:bm-cli calendar export --output-directory /home/user/export/cals jdoe@bluemind.loc
-
Importer le calendrier souhaité chez un autre utilisateur :
bm-cli calendar import --calendarUid calendar:Default:A1B2C3D4E5F6Z --ics-file-path /home/user/export/cals/jdoe_default.ics hannibal@bluemind.loc
💡 Pour importer l'ensemble des calendriers (exportés comme ci-dessus, ou provenant d'une autre source) on peut inclure cette commande dans une boucle parcourant le dossier d'export et les calendriers de l'utilisateur cible.
Exporter les calendriers de tous les utilisateurs
Cas d'usage : Dans une optique de migration ou de sauvegarde, on souhaite exporter et sauvegarder tous les calendriers de tous les utilisateurs au format ICS.
Pour cela, on réalise une boucle parcourant l'ensemble des utilisateurs et réalisant un export tel que ci-dessus :
bm-cli user get bluemind.loc --display 'email' | grep -v null | jq -r '.email' > /tmp/allUser.bluemind.loc
while read account ; do
bm-cli calendar export --output-directory /tmp/export/cals "$account"
done < /tmp/allUser.bluemind.loc
Cette boucle exporte l'ensemble des calendriers en créant un dossier par utilisateur :
/tmp/export/cals/
./admin@bluemind.loc
- admin.ics
./hannibal@bluemind.loc
- John+Smith.ics
./jdoe@bluemind.loc
- John+Doe.ics
- Reunions.ics
./patreides@bluemind.loc
- children.ics
- on-call+duty.ics
- Paul+Atreides.ics
Opérations sur les contacts
Importer les contacts d'un carnet d'adresse dans un autre
Cas d'usage : un utilisateur souhaite récupérer ses contacts collectés dans son carnet d'adresses personnel.
Pour cela, on va dans un premier temps éliminer les éventuels doublons du carnet des collectés de l'utilisateur, puis on transfèrera les contacts vers son carnet personnel (en testant au préalable l'import) :
# recherche de l'uid des carnets de l'utilisateur
bm-cli contact list jdoe@bluemind.loc
{"owner":"05E25C2C-3643-4ED2-997C-4A4F39933D18","uid":"book:Contacts_05E25C2C-3643-4ED2-997C-4A4F39933D18","name":"My contacts"}
{"owner":"05E25C2C-3643-4ED2-997C-4A4F39933D18","uid":"book:CollectedContacts_05E25C2C-3643-4ED2-997C-4A4F39933D18","name":"Collected contacts"}
{"owner":"05E25C2C-3643-4ED2-997C-4A4F39933D18","uid":"408C741B-3FDC-44B6-B1FD-19E79404BFCF","name":"Perso"}
# nettoyage du carnet "Collected contacts"
bm-cli contact deduplicate jdoe@bluemind.loc --addressbook-uid book:CollectedContacts_05E25C2C-3643-4ED2-997C-4A4F39933D18
2 were removed out of 35
# export au format VCF
bm-cli contact export jdoe@bluemind.loc --vcf-file-path /tmp/jdoe-collected.vcf --addressbook-uid book:CollectedContacts_05E25C2C-3643-4ED2-997C-4A4F39933D18
addressbook book:CollectedContacts_05E25C2C-3643-4ED2-997C-4A4F39933D18 of jdoe@bluemind.loc was exported
# import du carnet au format VCF dans le carnet personnel
## test grâce à l'option "dry"
bm-cli contact import jdoe@bluemind.loc --vcf-file-path /tmp/jdoe-collected.vcf --addressbook-uid 408C741B-3FDC-44B6-B1FD-19E79404BFCF --dry
DRY : AddressBook 408C741B-3FDC-44B6-B1FD-19E79404BFCF of jdoe@bluemind.loc was imported
## réalisation de l'import
bm-cli contact import jdoe@bluemind.loc --vcf-file-path /tmp/jdoe-collected.vcf --addressbook-uid 408C741B-3FDC-44B6-B1FD-19E79404BFCF
AddressBook 408C741B-3FDC-44B6-B1FD-19E79404BFCF of jdoe@bluemind.loc was imported
# réinitialisation du carnet "Collected contacts"
bm-cli contact reset jdoe@bluemind.loc --addressbook-uid book:CollectedContacts_05E25C2C-3643-4ED2-997C-4A4F39933D18
Addressbook book:CollectedContacts_05E25C2C-3643-4ED2-997C-4A4F39933D18 of jdoe@bluemind.loc was reset