我不确定我是否以正确的方式使用它。我有一个类为相同的关系定义required_keys
和provide_data
。以下代码provide_data
在关系加入/更改时执行,但不执行关系集namenode_sshkey
。如果我删除该required_keys
行,代码突然工作(但我不能使用此类来指定关系所需的数据)。
[...]
{
'service': 'namenode',
'ports': [9000, 50070], # ports to open after start
'provided_data': [
NamenodeRelation()
],
'required_data': [
NamenodeRelation(),
{'role' : 'namenode', 'command' : 'hadoop-daemon.sh'}
],
'data_ready': [
configure_namenode,
helpers.render_template(
source='upstart.conf',
target='/etc/init/namenode.conf')
],
},
[...]
class NamenodeRelation(RelationContext):
name = 'namenode'
interface = 'dfs'
def __init__(self, *args, **kwargs):
self.required_keys = ['slave_IP', 'private-address']
RelationContext.__init__(self,name=self.name, *args, **kwargs)
def provide_data(self):
return {'namenode_sshkey' : get_ssh_key() }
这种行为是故意的还是错误?
这确实是一个错误。这周我在使用服务框架重写 charm 时遇到了这个问题。我正在努力修复它,但与此同时,我确实有一个解决方法。
在 ServiceManager 设置中,传递要通过关系线发送的 key=value,不要传递 required_data 关系的任何内容。
Relation 类基本上通过仅在没有提供的数据要处理时设置它来短路 required_keys。