我正在编写一个需要 mysql 数据库的 charm,通过查看其他 charm,我发现这是我获取有关数据库的信息的方式(如下):
user=`relation-get user`
password=`relation-get password`
mysqlhost=`relation-get private-address`
但是我刚刚发现,通过阅读 wordpress charm 示例,有没有办法显示我可以使用的所有关系变量?
另外,在调试 db-relation-changed 脚本时,我想通过 ssh 进入我的主机并以交互方式运行这些命令,例如关系获取用户,但它不起作用。我不得不重新启动一切并使用 juju log 将它们打印出来。这浪费了很多时间。有没有办法打印出这些关系,无论是从我的开发箱还是从运行我的 charm 的实例中?(以下是我尝试以交互方式运行 relationship-get 时发生的情况):
ubuntu@mfisch-local-tracks-0:~$ relation-get user
usage: relation-get [-h] [-o OUTPUT] [-s SOCKET] [--client-id CLIENT_ID]
[--format FORMAT] [--log-file FILE]
[--log-level CRITICAL|DEBUG|INFO|ERROR|WARNING]
[-r RELATION ID]
[settings_name] [unit_name]
No JUJU_AGENT_SOCKET/-s option found
我尝试过juju debug-hooks tracks/0 -e local
,但是却陷入了困境,并且关系仍然失败。
答案1
以交互方式调试 Charm 的一种方法是使用调试钩子 (https://jujucharms.com/docs/stable/developer-debugging):
例如:
juju deploy wordpress
(假设上述命令部署 wordpress/0 )
juju debug-hooks wordpress/0
这将打开一个 tmux 会话,可以在其中手动运行钩子。它还设置了环境,以便可以运行 relationship-*(relation-get、relation-list 等)
尝试运行relation-get
...它应该为您提供该特定魅力/关系的所有可用变量。
注意:一旦启动 juju 调试钩子,您实际上必须触发钩子。因此,此时添加/修改关系。(我通常只是删除关系,然后立即将其添加回来。)这将在 tmux 中创建其他特定于钩子的窗口,这些窗口确实具有 JUJU_ 设置上下文,并将响应 relationship-get relationship-set 命令。
答案2
我在 juju 单元上使用 config-get 时遇到了这种情况。我发现,如果我从部署器机器设置配置值,那么我将不再收到 JUJU_AGENT_SOCKET 错误消息:
juju bootstrap
juju deploy local:wordress # local:$charm
juju get wordpress # $charm, gets config.yaml
juju set wordpress name=value # set any $charm name
juju debug-hooks wordpress/0 # $charm/$int
$charm-$int: config-get # get config.yaml
如果未在部署机器上执行“juju set”,config-get 将返回 JUJU_AGENT_SOCKET 错误。之后,您将获得所有当前值。
这不是答案,而是一种解决方法。当我对关系了解更多时,也许一种变体也可以解决这个问题。
答案3
尝试这个:
juju ssh 服务名称/实例 ID sudo apt-get install juju-jitsu juju ssh 服务名称/instance_id sudo grep -R JUJU_ENV_UUID /etc # 获取结果并导出 ubuntu@ip-10-204-237-189:~$ jitsu run-as-hook lamp/0 config-get database-user juju-用户
还,
# 我将 collectd 附加到此实例 jitsu run-as-hook lamp/0 关系 ID collectd 服务器 $ 回显 $? 0
它没有返回任何东西,因为我还没有关联它,请注意它也没有爆炸。希望这能有所帮助。
答案4
当您执行 时juju debug-hooks service/#
,它会通过 juju ssh 进入 tmux 会话。但是,tmux 会话的第一个窗口(类似于屏幕)没有 JUJU 会话信息。(您可以通过执行来演示这一点,set|grep JUJU
并且您不应该看到返回任何设置。)最初 TMUX 中只会有一个 0:~ 窗口。
一旦通过类似以下方式添加了关系(从另一个窗口/终端):
juju add-relation wordpress mysql
应创建并激活一个附加 tmux 窗口。正在调试的钩子的名称将嵌入在 TMUX 标题中(位于屏幕底部),如下所示:
1: db-relation-changed
您现在可以运行 relationship-get 或更好的方法:
set|grep JUJU
JUJU_AGENT_SOCKET=/var/lib/juju/units/rsetter-1/.juju.hookcli.sock
JUJU_CLIENT_ID=constant
JUJU_DEBUG=/tmp/tmp.ZiobnuyhQh
JUJU_ENV_UUID=b4123455644323333333336d6f8383d
JUJU_PYTHONPATH=:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/dist-packages:/usr/lib/pymodules/python2.7
JUJU_RELATION=rtest
JUJU_RELATION_ID=rtest:12
JUJU_REMOTE_UNIT=rgetter/1
JUJU_UNIT_NAME=rsetter/1
_JUJU_CHARM_FORMAT=1
(这是与 rgetter 相关的 rsetter charm,而不是 wordpress/mysql)
然后,您可以进行调试(包括执行通常会启动的钩子,因为您应该位于 charm 的父目录中,因此 hooks/HOOKNAME)