Fabric: AttributeError: ์‚ฌ์šฉ์ž ์ง€์ • connect_kwargs ๋ฐ key_filename ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ 'str' ๊ฐœ์ฒด์— 'extend' ์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 08์›” 31์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: fabric/fabric

๋‹ค์Œ๊ณผ ๊ฐ™์ด key_filename ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ์ž ์ •์˜ connect_kwargs ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ:

    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์—์„œ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  6 ๋Œ“๊ธ€

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' ์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.
์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ ๋‚˜์—๊ฒŒ ํ•ด๊ฒฐ์ฑ…์„ ์ œ์•ˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด 2019๋…„ 9์›”์— ๋ฌธ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด PR์„ ํ–ˆ์ง€๋งŒ ์•„์ง ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(2020๋…„ 2์›”): #2014

๋‚˜์—๊ฒŒ๋„ ์ด๋Ÿฐ ์ผ์ด... ๊ทธ๋ฆฌ๊ณ  ssh_config ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์ œ๊ณต๋œ key_filename์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰