Implantar o pacote local na máquina existente

1

No meu modelo atual de juju, tenho uma máquina com alguns contêineres

Machine    State 
14         started 
14/lxd/2   started 
14/lxd/20  started 

Desejo implantar um pacote local com dois encantos locais. Meu bundle.yaml é assim:

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"

Agora quero meu encanto elasticsearch em um contêiner LXD na máquina 14, mas quando executo juju deploy ~/elastic5-bundle , recebo o seguinte erro:

ERROR the provided bundle has the following errors:
placement "lxd:14" refers to a machine not defined in this bundle

Mas quando eu adiciono a máquina 14 no meu bundle.yaml, uma nova máquina é criada em vez do charme ser implantado na máquina 14. Qualquer solução possível para implantar um encanto em um pacote para uma máquina existente?

    
por SebastienPattyn 14.12.2016 / 17:22

2 respostas

1

Na versão mais recente do Juju (2.3), notei que agora há um sinalizador que você pode usar ao implantar um pacote. Eu encontrei a documentação aqui :

Para que um pacote use as máquinas existentes de um modelo, em vez de criar novas máquinas, a opção --map-machines=existing é usada. Além disso, para especificar máquinas específicas para o mapeamento, os valores separados por vírgula do formulário 'bundle-id = existente-id' podem ser passados onde o id do pacote e o ID existente se referem a IDs de máquina de nível superior.

Por exemplo, considere um pacote cujo arquivo YAML está configurado com as máquinas 1, 2, 3 e 4 e um modelo contendo as máquinas 1, 2, 3, 4 e 5. A implantação a seguir usaria as máquinas existentes 1 e 2 para máquinas de pacote 1 e 2, mas use a máquina 4 existente para a máquina de pacote 3 e a máquina 5 existente para a máquina de pacote 4:

juju deploy some-bundle --map-machines=existing,3=4,4=5

    
por SebastienPattyn 15.12.2017 / 10:28
2

Você não pode implantar os encantos em máquinas existentes usando o comando juju deploy. As máquinas devem ser definidas no pacote para que isso funcione.

Seu pacote deve ficar assim:

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"

Provavelmente, é possível usar juju-deployer . Instale o juju-deployer adicionando este repositório:

$ sudo add-apt-repository ppa:tvansteenburgh/ppa

Defina o pacote como:

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"

Agora, implante executando o seguinte comando:

$ juju-deployer -c bundle.yaml phase1
    
por Junaid 18.12.2016 / 07:33