Как я могу развернуть свой локальный Juju Charm с фреймворком Amulet?

Я использую амулет в качестве основы тестирования для талисманов, которые мы разрабатываем. Я уже пытался воспроизвести пример, представленный на https://jujucharms.com/docs/stable/tools-amulet и он работает нормально. Но сейчас я пытаюсь выполнить ту же базовую настройку для charm, которая была разработана и сохранена на жестком диске (брелок 'cf-nats' был клонирован из github). Вот список моих действий (я использую локальную среду для развертывания):

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()

И я получил следующий вывод:

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

Я также попытался развернуть тот же самый мануал с интерфейсом командной строки juju, и это работает.

Вот вывод из 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']]}}

Что не так в моем коде? Как я могу развернуть свое очарование с помощью амулета? Какие пакеты Python должны быть установлены?

Заранее спасибо.

1 ответ

Я верю, что вижу твою проблему. Итак, вы вытащили этот брелок из GitHub, что хорошо. Тем не менее, тесты обычно пишутся и запускаются из tests каталог. Таким образом, амулет применяет немного магии для развертывания с использованием шарма на диске, поэтому вам не нужно явно помещать charm= в d.add линия. Однако, поскольку вы работаете с интерактивной оболочкой, для вас имеет смысл сделать это. Проблема в том, что это не филиал Bazaar, который ожидает Juju Deployer.

Как правило, что происходит, когда вы просто делаете d.add('cf-nats') в тесте очарования дерево очарования копируется во временную папку и создается репозиторий bzr (если он еще не существует). Затем это новое временное местоположение подается на развертывание. Тем не менее, поскольку вы указали точный путь к файлу, эта часть не выполняется (по замыслу), и это предполагает, что у вас есть брелок с репозиторием bzr, и он просто будет его использовать.

Способ обойти это либо бежать export JUJU_TEST_CHARM="cf-nats" (и переменная окружения, которую устанавливает плагин juju test) до запуска оболочки Python3 из $CHARM_DIR (/home/ubuntu/cf-charms/charms/trusty/cf-nats) или после создания d = amulet.Deployment() задавать d.charm_name = 'cf-nats', Тогда просто делай d.add('cf-nats'), amulet увидит, что базовое имя getcwd совпадает с именем charm, и прозрачно выполнит его немного магии.

Это должно сделать это. В идеале, добавление поддержки чудовищ на основе git для juju deployer разрешит все это, но попробуйте и дайте мне знать, если это не сработает для вас.

Другие вопросы по тегам