Como posso implantar meu framework local Juju Charm with Amulet?

5

Eu uso o amuleto como estrutura de teste para os encantos que estamos desenvolvendo. Já tentei reproduzir um exemplo, fornecido no link e funciona bem. Mas agora estou tentando fazer a mesma configuração básica de charme, que foi desenvolvida e armazenada no disco rígido (o encanto 'cf-nats' foi clonado do github). Aqui a lista das minhas ações (eu uso o ambiente local para implantação):

Python 3.2.3 (default, Feb 27 2014, 21:31:18) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import amulet
>>> import requests
>>> d = amulet.Deployment(series='trusty')
>>> d.add('cf-nats', charm = '/home/ubuntu/cf-charms/charms/trusty/cf-nats')
>>> d.setup()

E recebi a próxima saída:

2014-03-10 10:56:09 Starting deployment of local
Traceback (most recent call last):
  File "/usr/bin/juju-deployer", line 9, in <module>
    load_entry_point('juju-deployer==0.2.5', 'console_scripts', 'juju-deployer')()
  File "/usr/lib/python2.7/dist-packages/deployer/cli.py", line 118, in main
    run()
  File "/usr/lib/python2.7/dist-packages/deployer/cli.py", line 204, in run
    importer.Importer(env, deployment, options).run()
  File "/usr/lib/python2.7/dist-packages/deployer/action/importer.py", line 142, in run
    self.get_charms()
  File "/usr/lib/python2.7/dist-packages/deployer/action/importer.py", line 47, in get_charms
    no_local_mods=self.options.no_local_mods)
  File "/usr/lib/python2.7/dist-packages/deployer/deployment.py", line 112, in fetch_charms
    charm.fetch()
  File "/usr/lib/python2.7/dist-packages/deployer/charm.py", line 98, in fetch
    self.vcs.branch()
AttributeError: 'NoneType' object has no attribute 'branch'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/amulet/deployer.py", line 175, in setup
    self.juju_env], cwd=self.deployer_dir)
  File "/usr/lib/python3.2/subprocess.py", line 489, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['juju-deployer', '-W', '-c', '/tmp/amulet-juju-deployer-myb41r.json', '-e', 'local', 'local']' returned non-zero exit status 1

Eu também tentei implantar o mesmo charme manualmente com a interface de linha de comando do juju e seu trabalho.

Aqui está a saída de d.schema()

>>> d.schema()
{'local': {'services': {'cf-nats-sentry': {'_has_sentry': True, 'expose': True, 'branch': '/tmp/sentry-sub_16ocg4/cf-nats-sentry'}, 'cf-nats': {'_has_sentry': True, 'branch': '/home/ubuntu/cf-charms/charms/trusty/cf-nats'}, 'relation-sentry': {'expose': True, 'branch': '/tmp/sentry_5cdg4t/relation-sentry'}}, 'series': 'trusty', 'relations': [['cf-nats:juju-info', 'cf-nats-sentry:juju-info']]}}

O que está errado no meu código? Como posso implantar meu charme local com o framework amulet? Que tipo de pacotes python devem ser instalados?

Obrigado antecipadamente.

    
por DmitryTrofimov 10.03.2014 / 12:14

1 resposta

3

Eu acredito que vejo o seu problema. Então, você puxou esse charme do github, o que é bom. No entanto, os testes geralmente são gravados e executados no diretório tests . Assim, o amuleto aplica um pouco de mágica para implantar usando o charme no disco, para que você não tenha que colocar explicitamente charm= na linha d.add . No entanto, desde que você está correndo de shell interativo, faz sentido para você fazer isso. O problema é que não é um ramo do Bazaar que é o que o Juju Deployer está esperando.

Normalmente, o que acontece, quando você faz apenas d.add('cf-nats') em um teste de charme, a árvore de charutos é copiada para um local temporário e um repositório bzr é criado (se ainda não existir um). Em seguida, esse novo local temporário é fornecido ao implementador. No entanto, desde que você deu a ele um caminho de arquivo firme, essa parte não está acontecendo (por design) e assume que você tem um charme que tem um repositório bzr e ele apenas usará isso.

A maneira de contornar isso é executar export JUJU_TEST_CHARM="cf-nats" (e variável de ambiente os conjuntos de plug-ins de teste juju) antes de lançar o shell Python3 a partir do $CHARM_DIR ( /home/ubuntu/cf-charms/charms/trusty/cf-nats ) ou depois de criar d = amulet.Deployment() set d.charm_name = 'cf-nats' . Em seguida, basta fazer d.add('cf-nats') , o amuleto verá que o nome de base de getcwd é o mesmo que o nome do encanto e executará de forma transparente um pouco de mágica.

Isso deve ser feito. Idealmente, adicionar suporte para os charms baseados em git para o implementador de juju resolverá tudo isso, mas tente isso e deixe-me saber se ele não funciona para você.

    
por Marco Ceppi 11.03.2014 / 14:35