Fabric: AttributeError: o objeto 'str' não tem o atributo 'extend' ao usar a opção custom connect_kwargs e key_filename

Criado em 31 ago. 2019  ·  6Comentários  ·  Fonte: fabric/fabric

Ao usar um connect_kwargs com uma opção key_filename , assim:

    config = fabric.config.Config()
    print("Connecting with ssh/config")
    with fabric.Connection(
        host=instancePrivateIp,
        user='ec2-user',
        config=config,
        connect_kwargs={
            "key_filename": keyFileName,
        }) as c_instance:

Eu recebo AttributeError :

  File "/home/dumontj/Projects/ami-builder/ami_builder/customization.py", line 26, in do_bash_customization
    "key_filename": keyFileName,
  File "/home/dumontj/.local/share/virtualenvs/ami-builder-jbdgQc96/lib/python3.7/site-packages/fabric/connection.py", line 450, in __init__
    self.connect_kwargs = self.resolve_connect_kwargs(connect_kwargs)
  File "/home/dumontj/.local/share/virtualenvs/ami-builder-jbdgQc96/lib/python3.7/site-packages/fabric/connection.py", line 490, in resolve_connect_kwargs
    connect_kwargs["key_filename"].extend(
AttributeError: 'str' object has no attribute 'extend'

A documentação especifica que key_filename deve ser fornecido como uma string, mas descobri que funciona se você realmente fornecer uma lista:

    with fabric.Connection(
        host=instancePrivateIp,
        user='ec2-user',
        config=config,
        connect_kwargs={
            "key_filename": [keyFileName,],
        }) as c_instance:

Se esta for a sintaxe desejada, posso atualizar a documentação por meio de um PR (consulte https://github.com/fabric/fabric/blob/2.0/fabric/connection.py#L234). Caso contrário, eu poderia alterar fabric/connection.py para verificar se já existe uma entrada e, em seguida, transformá-la em uma lista, se necessário.

Comentários muito úteis

Estou vendo o mesmo problema no 2.5. No entanto, usar uma lista funciona.

Todos 6 comentários

Estou vendo o mesmo problema no 2.5. No entanto, usar uma lista funciona.

Mesmo problema. Parece que pode ser um bug bobo para mim, então fixe em 2.4.0 até ouvirmos mais do upstream.

Eu tenho o mesmo problema quando o host é definido com um nome DNS. Quando definido para um IP, a exceção não ocorre.
Por exemplo:

{'host': '127.0.0.1', 'user': 'MyUser', 'connect_kwargs': {'key_filename': '/Users/MyUser/.ssh/MyPem.pem'}} # <- Works
{'host': 'some.dns.name', 'user': 'MyUser', 'connect_kwargs': {'key_filename': '/Users/MyUser/.ssh/MyPem.pem'}} # <- Doesn't work

face_caches [self.face_img_paths [i] .stem] = faces
AttributeError: o objeto 'str' não tem atributo 'stem'
eu tenho esse erro. Alguém pode me sugerir uma solução

Outra pessoa fez um RP para alterar os documentos em setembro de 2019, mas ainda não fundiu (fevereiro de 2020): # 2014

Isso também acontece comigo ... e também, acho que seria importante poder definir se eu só quero me conectar usando o key_filename fornecido, em vez de usar as informações de ssh_config.

Esta página foi útil?
0 / 5 - 0 avaliações