Dans mon modèle actuel de juju, j'ai une machine avec quelques conteneurs
Machine State
14 started
14/lxd/2 started
14/lxd/20 started
Je souhaite déployer un bundle local avec 2 charmes locaux. Ma bundle.yaml
ressemble à ça:
services:
elasticsearch:
charm: /home/user/charms/trusty/elasticsearch
num_units: 1
to: ['lxd:14']
metricbeat:
charm: /home/user/charms/trusty/metricbeat
series: trusty
relations:
- - "elasticsearch:client"
- "metricbeat:elasticsearch"
Maintenant, je veux mon charme elasticsearch dans un conteneur LXD sur la machine 14 mais quand je lance juju deploy ~/elastic5-bundle
J'obtiens l'erreur suivante:
ERROR the provided bundle has the following errors:
placement "lxd:14" refers to a machine not defined in this bundle
Mais lorsque j'ajoute la machine 14 dans mon bundle.yaml, une nouvelle machine est créée au lieu du charme déployé sur la machine 14. Une solution possible pour déployer un charme dans un bundle sur une machine existante?
Dans la dernière version de Juju (2.3), j'ai remarqué qu'il y a maintenant un indicateur que vous pouvez utiliser lors du déploiement d'un bundle. J'ai trouvé la documentation ici :
Pour qu'un bundle utilise les machines existantes d'un modèle, par opposition à la création de nouvelles machines, l'option --map-machines=existing
Est utilisée. De plus, pour spécifier des machines particulières pour le mappage, des valeurs séparées par des virgules de la forme 'bundle-id = existing-id' peuvent être transmises, où le bundle-id et l'existant-id se réfèrent aux ID de machine de niveau supérieur.
Par exemple, considérons un bundle dont le fichier YAML est configuré avec les machines 1, 2, 3 et 4 et un modèle contenant les machines 1, 2, 3, 4 et 5. Le déploiement suivant utiliserait les machines 1 et 2 existantes pour le bundle les machines 1 et 2 mais utilisent la machine existante 4 pour la machine groupée 3 et la machine existante 5 pour la machine groupée 4:
juju deploy some-bundle --map-machines=existing,3=4,4=5
Vous ne pouvez pas déployer de charmes sur des machines existantes à l'aide de la commande juju deploy. Les machines doivent être définies dans le bundle pour que cela fonctionne.
Votre forfait devrait ressembler à ceci:
machines:
'14':
constraints: <any constraint for example tags=machine14 or mem=3048 or Arch=AMD64>
services:
elasticsearch:
charm: /home/user/charms/trusty/elasticsearch
num_units: 1
to: ['lxd:14']
metricbeat:
charm: /home/user/charms/trusty/metricbeat
series: trusty
relations:
- - "elasticsearch:client"
- "metricbeat:elasticsearch"
Il est probablement possible d'utiliser juju-deployer. Installez juju-deployer en ajoutant ce dépôt:
$ Sudo add-apt-repository ppa:tvansteenburgh/ppa
Définissez le bundle comme:
phase1:
services:
elasticsearch:
charm: /home/user/charms/trusty/elasticsearch
num_units: 1
to: ['lxd:14']
metricbeat:
charm: /home/user/charms/trusty/metricbeat
series: trusty
relations:
- - "elasticsearch:client"
- "metricbeat:elasticsearch"
Maintenant, déployez en exécutant la commande suivante:
$ juju-deployer -c bundle.yaml phase1