Как я могу развернуть свой локальный 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 разрешит все это, но попробуйте и дайте мне знать, если это не сработает для вас.