ansible / ansible-runner

A tool and python library that helps when interfacing with Ansible directly or as part of another system whether that be through a container image interface, as a standalone tool, or as a Python module that can be imported. The goal is to provide a stable and consistent interface abstraction to Ansible.
Other
970 stars 358 forks source link

FileExistsError on rc.prepare() #407

Open jfmrm opened 4 years ago

jfmrm commented 4 years ago

when ansible_runner.run() is called it initiates a Runner instance, and on the prepare() method it creates a couple of files on the private dir, the thing is: when the ssh private key fille already exists it raises an uncaught exception

  File "/home/joao.moura/workspace/concierge/inloco_tower/test/test_installer.py", line 20, in test_installer
    result = self.installer.run(target_instance="localhost", user="root")
  File "/home/joao.moura/workspace/concierge/inloco_tower/app/installer.py", line 19, in run
    runner = ansible_runner.run(
  File "/home/joao.moura/workspace/concierge/inloco_tower/venv/lib/python3.8/site-packages/ansible_runner/interface.py", line 177, in run
    r = init_runner(**kwargs)
  File "/home/joao.moura/workspace/concierge/inloco_tower/venv/lib/python3.8/site-packages/ansible_runner/interface.py", line 65, in init_runner
    rc.prepare()
  File "/home/joao.moura/workspace/concierge/inloco_tower/venv/lib/python3.8/site-packages/ansible_runner/runner_config.py", line 186, in prepare
    open_fifo_write(self.ssh_key_path, self.ssh_key_data)
  File "/home/joao.moura/workspace/concierge/inloco_tower/venv/lib/python3.8/site-packages/ansible_runner/utils.py", line 362, in open_fifo_write
    os.mkfifo(path, stat.S_IRUSR | stat.S_IWUSR)
FileExistsError: [Errno 17] File exists

Testing locally I simply added:

try:
  os.mkfifo(path, stat.S_IRUSR | stat.S_IWUSR)
except:
  pass

and solved the issue.

matburt commented 4 years ago

If you can make a PR for that we can get it merged in and close this out. Add an info or debug logger statement to note the skip.

jfmrm commented 4 years ago

sure, gonna do it!

matburt commented 4 years ago

Circling back to this, the only way I could see hitting this situation is if you passed ssh key data into Runner as well as having the file on the filesystem. Is that what you were doing here?

jfmrm commented 4 years ago

Yes, actually because on the first run of it the runner creates a file with the ssh key on the filesystem

jfmrm commented 4 years ago

and I actually forgot about it, sorry for that. I'll make this week

AlanCoding commented 4 years ago

It may be possible to ignore the error in this particular case...

But I'm wondering if this is just one more consequence of https://github.com/ansible/ansible-runner/issues/493. I guess there's no way to avoid writing this file, so the same solution wouldn't be possible, so I guess it is a different issue.