Isso é realmente um bug. Eu corri para esta semana enquanto reescrevia um charme usando o framework Services. Estou trabalhando em uma correção para isso, mas, enquanto isso, tenho uma solução alternativa.
Na configuração do ServiceManager, passe a chave = valor que deseja enviar pelo fio da relação e não passe nada para a relação required_data.
def manage():
manager = ServiceManager([
{
'service': 'example',
'ports': [80], # ports to after start
'provided_data': [
RabbitMQRelation(username='example', vhost='/')
],
'required_data': [
RabbitMQRelation(),
],
'data_ready': [
configure_rabbitmq,
],
'data_lost': [
],
},
])
manager.manage()
A classe Relation basicamente faz um curto-circuito nas required_keys, definindo-as apenas se não houver dados fornecidos para manipular.
class RabbitMQRelation(helpers.RelationContext):
name = 'amqp'
interface = 'rabbitmq'
vhost = None
username = None
required_keys = []
def __init__(self, username=None, vhost=None):
"""
This works around a bug with the RelationContext class that expects
the required keys to be set before it will call provide_data.
"""
if username and vhost:
self.username = username
self.vhost = vhost
else:
self.required_keys = ['private-address', 'hostname', 'password']
super(RabbitMQRelation, self).__init__(self.name)