ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ connect_kwargs
Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ key_filename
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
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:
Π― ΠΏΠΎΠ»ΡΡΠ°Ρ 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'
Π Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ key_filename
ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ, Π½ΠΎ Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ», ΡΡΠΎ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄Π°Π΄ΠΈΡΠ΅ Π΅ΠΌΡ ΡΠΏΠΈΡΠΎΠΊ:
with fabric.Connection(
host=instancePrivateIp,
user='ec2-user',
config=config,
connect_kwargs={
"key_filename": [keyFileName,],
}) as c_instance:
ΠΡΠ»ΠΈ ΡΡΠΎ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, Ρ ΠΌΠΎΠ³Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· PR (ΡΠΌ. Https://github.com/fabric/fabric/blob/2.0/fabric/connection.py#L234). Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ ΠΌΠΎΠ³ Π±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ fabric/connection.py
ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π΅ΡΡΡ Π»ΠΈ ΡΠΆΠ΅ Π·Π°ΠΏΠΈΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π΅Π΅ Π² ΡΠΏΠΈΡΠΎΠΊ.
Π― Π²ΠΈΠΆΡ ΡΡ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π° 2.5. ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
Π’Π° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄Π»Ρ ΠΌΠ΅Π½Ρ Π³Π»ΡΠΏΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π·Π°ΠΊΡΠ΅ΠΏΠΈΡΠ΅ Π΅Π΅ Π΄ΠΎ 2.4.0, ΠΏΠΎΠΊΠ° ΠΌΡ Π½Π΅ ΡΡΠ»ΡΡΠΈΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΡ Π°ΠΏΡΡΡΠΈΠΌΠ°.
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΠ³Π΄Π° Ρ
ΠΎΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π½Π° DNS-ΠΈΠΌΡ. ΠΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π½Π° IP ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
{'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] = Π»ΠΈΡΠ°
AttributeError: ΠΎΠ±ΡΠ΅ΠΊΡ 'str' Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π°ΡΡΠΈΠ±ΡΡΠ° 'stem'
Ρ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ. ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΠΌΠ½Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅
ΠΡΠΎ-ΡΠΎ Π΅ΡΠ΅ ΡΠ΄Π΅Π»Π°Π» PR Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π² ΡΠ΅Π½ΡΡΠ±ΡΠ΅ 2019 Π³ΠΎΠ΄Π°, Π½ΠΎ Π΅ΡΠ΅ Π½Π΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΠ»ΡΡ (ΡΠ΅Π²ΡΠ°Π»Ρ 2020 Π³ΠΎΠ΄Π°): # 2014
ΠΡΠΎ ΡΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈ ΡΠΎ ΠΌΠ½ΠΎΠΉ ... Π° ΡΠ°ΠΊΠΆΠ΅, Ρ Π΄ΡΠΌΠ°Ρ, Π±ΡΠ»ΠΎ Π±Ρ Π²Π°ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ, Π΅ΡΠ»ΠΈ Ρ Ρ ΠΎΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ key_filename, Π²ΠΌΠ΅ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ssh_config.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π― Π²ΠΈΠΆΡ ΡΡ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π° 2.5. ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.