Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Molecule 3.2.0a0 fails when /bin/bash does not exist #2944

Closed
sio opened this issue Nov 2, 2020 · 2 comments
Closed

Molecule 3.2.0a0 fails when /bin/bash does not exist #2944

sio opened this issue Nov 2, 2020 · 2 comments
Labels

Comments

@sio
Copy link
Contributor

sio commented Nov 2, 2020

Issue Type

  • Bug report

Molecule and Ansible details

molecule 3.2.0a0
    ansible:2.10.2 python:3.8
    delegated:3.2.0a0 from molecule
    docker:0.3.3 from molecule_docker
    vagrant:0.5 from molecule_vagrant
/builds/sio/server_common/venv/bin/ansible --version
ansible 2.10.2
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /builds/sio/server_common/venv/lib/python3.8/site-packages/ansible
  executable location = /builds/sio/server_common/venv/bin/ansible
  python version = 3.8.5 (default, Jul 20 2020, 23:11:29) [GCC 9.3.0]

Molecule installation method (one of):

  • pip

Ansible installation method (one of):

  • pip

Detail any linters or test runners used:

set -e
yamllint .
ansible-lint

Desired Behavior

Molecule does not crash when /bin/bash is not installed. /bin/sh should be good enough.

Actual Behaviour

Molecule (with docker plugin) crashes in docker sanity check stage. It tries to execute /bin/bash even when it's not installed, which results in an unhandled FileNotFoundError:

--> Sanity checks: 'docker'
Traceback (most recent call last):
  File "/builds/sio/server_common/venv/bin/molecule", line 8, in <module>
    sys.exit(main())
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/molecule/command/test.py", line 148, in test
    base.execute_cmdline_scenarios(scenario_name, args, command_args)
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/molecule/command/base.py", line 104, in execute_cmdline_scenarios
    execute_scenario(scenario)
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/molecule/command/base.py", line 146, in execute_scenario
    execute_subcommand(scenario.config, action)
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/molecule/command/base.py", line 135, in execute_subcommand
    return command(config).execute()
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/molecule/command/destroy.py", line 108, in execute
    self._config.provisioner.destroy()
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/molecule/provisioner/ansible.py", line 702, in destroy
    pb.execute()
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/molecule/provisioner/ansible_playbook.py", line 107, in execute
    result = util.run_command(self._ansible_command, debug=self._config.debug)
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/molecule/util.py", line 151, in run_command
    return run(args, env=env, stdout=stdout, stderr=stderr, echo=echo or debug)
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/subprocess_tee/__init__.py", line 88, in run
    result = loop.run_until_complete(_stream_subprocess(cmd, **kwargs))
  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/builds/sio/server_common/venv/lib/python3.8/site-packages/subprocess_tee/__init__.py", line 32, in _stream_subprocess
    process = await asyncio.create_subprocess_shell(
  File "/usr/lib/python3.8/asyncio/subprocess.py", line 216, in create_subprocess_shell
    transport, protocol = await loop.subprocess_shell(
  File "/usr/lib/python3.8/asyncio/base_events.py", line 1597, in subprocess_shell
    transport = await self._make_subprocess_transport(
  File "/usr/lib/python3.8/asyncio/unix_events.py", line 197, in _make_subprocess_transport
    transp = _UnixSubprocessTransport(self, protocol, args, shell,
  File "/usr/lib/python3.8/asyncio/base_subprocess.py", line 36, in __init__
    self._start(args=args, shell=shell, stdin=stdin, stdout=stdout,
  File "/usr/lib/python3.8/asyncio/unix_events.py", line 789, in _start
    self._proc = subprocess.Popen(
  File "/usr/lib/python3.8/subprocess.py", line 854, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.8/subprocess.py", line 1702, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: '/bin/bash'

Full log: https://gitlab.com/sio/server_common/-/jobs/823643538

Molecule 3.1.5 worked fine on the same runner (without /bin/bash).

@sio sio added the bug label Nov 2, 2020
@ssbarnea
Copy link
Member

ssbarnea commented Nov 2, 2020

What changed in-between was switching from sh to subprocess_tee library and considering that molecule does not specify any shell itself, this is an upstream bug. Please raise it at https://github.com/pycontribs/subprocess-tee/issues and as soon we fix it I will update molecule to require a version of subprocess-tee that has the fix in it.

It is not unreasonable to assume that some platforms may not have bash as default shell.

@sio
Copy link
Contributor Author

sio commented Nov 2, 2020

subprocess-tee >= 0.1.3 works fine! Thank you very much!

@ssbarnea ssbarnea closed this as completed Nov 8, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants