# Déployer une configuration UCI personnalisée sur un agent Via la spécification [`uci.emissary.cadoles.com`](../../../internal/spec/uci/schema.json) 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 1. 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 1. Se connecter en SSH sur votre agent Emissary: ``` ssh root@ ``` 2. 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](https://openwrt.org/fr/doc/howto/luci.essentials) est disponible sur votre agent. Vous pouvez y accéder via l'URL `http:///`. > > 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 ! 3. 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 - [`jq`](https://stedolan.github.io/jq/) - [`sponge`](https://linux.die.net/man/1/sponge) (paquet `moreutils` sur Ubuntu) #### Étapes 1. 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écification [`uci.emissary.cadoles.com`](../../../internal/spec/uci/schema.json): ```bash # Créer la structure de base de la spécification UCI cat >> my-uci-spec.json < **Astuce** > > En utilisant la commande `grep -C 10 hostname my-uci-spec.json`, on peut voir que la valeur de configuration `hostname` a bien été mise à jour dans notre spécification. 2. Mettre à jour la configuration de l'agent: ```bash cat my-uci-spec.json | emissary client agent spec update -a ${AGENT_ID} --no-patch --spec-data - --spec-name uci.emissary.cadoles.com ``` 3. 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.