web-dev-qa-db-fra.com

Déployer un bundle local sur une machine existante

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?

1
SebastienPattyn

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

1
SebastienPattyn

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
2
Junaid