5.0 KiB
Déployer une configuration UCI personnalisée sur un agent
Via la spécification uci.emissary.cadoles.com
il est possible de configurer un agent avec un système OpenWRT. Dans ce tutoriel nous verrons:
- Comment exporter une configuration UCI existante au format attendu par Emissary;
- Comment modifier la spécification d'un agent Emissary pour mettre à jour sa configuration via le serveur de pilotage.
Étapes
Identifier l'empreinte de votre agent
-
Sur la machine agent, utiliser la commande intégrée pour récupérer l'empreinte ("thumbprint") identifiant l'agent:
emissary agent show-thumbprint
Noter la valeur retournée. Elle sera utilisée dans les étapes suivantes.
Exporter la configuration UCI de votre agent au format Emissary
-
Se connecter en SSH sur votre agent Emissary:
ssh root@<agent_ip>
-
Sur la machine agent, utiliser la commande intégrée pour exporter la configuration UCI de votre agent au format Emissary:
uci export | emissary agent openwrt uci transform > my-agent-config.json
Astuce
Par défaut, l'outil LuCi est disponible sur votre agent. Vous pouvez y accéder via l'URL
http://<agent_ip>/
.Vous pouvez utiliser LuCi pour modifier la configuration de l'agent (par exemple, configurer le WiFi, créer des règles réseaux, etc) avant d'exporter la configuration.
De cette manière, il est possible de répliquer celle ci sur plusieurs agents via Emissary !
-
Transférer le fichier
my-agent-config.json
sur la machine hébergeant votre serveur de pilotage Emissary.
Transformer la configuration en spécification
Prérequis
Étapes
-
Sur la machine hébergeant le serveur de pilotage Emissary, utiliser l'outil
jq
pour créer un objet JSON correspondant au schéma attendu par la spécificationuci.emissary.cadoles.com
:# Créer la structure de base de la spécification UCI cat >> my-uci-spec.json <<EOF { "config": null, "postImportCommands": [ { "command": "uci", "args": ["commit"] }, { "command": "reload_config", "args": [] } ] } EOF # Injecter la configuration récupérée de notre agent dans la spécification cat my-uci-spec.json | jq --slurpfile config my-agent-config.json '.config = $config[0]' | sponge my-uci-spec.json
Notre spécification est prête à être assignée à notre agent !
Assigner la spécification à l'agent
-
Sur la machine hébergeant le serveur de pilotage Emissary, retrouver l'identifiant associé à l'agent:
# Déclarer une variable contenant l'empreinte de l'agent précédemment trouvée AGENT_THUMBPRINT="<empreinte agent>" # Récupérer l'identifiant de l'agent AGENT_ID=$(emissary api agent query -f json | jq -r --arg thumbprint "$AGENT_THUMBPRINT" '.[] | select(.thumbprint == $thumbprint) | .id')
-
Assigner la spécification à l'agent UCI:
cat my-uci-spec.json | emissary api agent spec update -a ${AGENT_ID} --no-patch --spec-data - --spec-name uci.emissary.cadoles.com
Bravo, vous avez déployé des spécifications UCI sur votre agent !
Exemple: modifier le hostname
de votre agent
En intervenant directement sur notre spécification, il est possible de modifier la configuration et appliquer ces changements à notre agent.
-
Sur la machine hébergeant le serveur de pilotage, faire:
# On créait une variable avec le nouveau hostname de notre agent MY_NEW_AGENT_HOSTNAME="MyEmissaryAgent" # On utilise jq afin de modifier la valeur de configuration dans notre spécification UCI cat my-uci-spec.json | jq --arg hostname "$MY_NEW_AGENT_HOSTNAME" '( .config.packages[] | select(.name == "system") | .configs[].options[] | select(.name == "hostname").value ) |= $hostname' | sponge my-uci-spec.json
Astuce
En utilisant la commande
grep -C 10 hostname my-uci-spec.json
, on peut voir que la valeur de configurationhostname
a bien été mise à jour dans notre spécification. -
Mettre à jour la configuration de l'agent:
cat my-uci-spec.json | emissary api agent spec update -a ${AGENT_ID} --no-patch --spec-data - --spec-name uci.emissary.cadoles.com
-
Sur l'agent, après quelques secondes (par défaut, la fréquence de mise à jour est de 1 fois par minute) l'agent devrait avoir son
hostname
mis à jour:uci show system.@system[].hostname
Un message de ce type devrait s'afficher:
system.cfg01e48a.hostname='MyEmissaryAgent'
La modification devrait être également visible dans le prompt du shell de l'agent.