让 Ansible 使用非空 shell 环境

Making Ansible use non-empty shell environment

在执行临时命令或剧本时,我 运行 遇到这样一种情况,需要为临时命令或剧本读取来自 /home/user-that-sudoed/.bashrc 的环境变量在目标清单主机上工作。在 .bashrc 文件中,我们设置了 LD_LIBRARY_PATH(我们正在使用的一些 Python 函数是必需的)。

/home/local-user/.ansible.cfg中是否有一个参数可以有效地将“/bin/sh -c”变成“/bin/sh”而没有“-c”? “-c”(命令 运行 在下方)。

ssh -q -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/tmp/.ansible/sockets/5c2164546a zlpv1229 '/bin/sh -c '"'"'sudo -H -S -n -u atg /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-cyhlvtntyqmbkkmcpkhhkspusdirgwlk; /sites/utils/bin/python'"'"'"'"'"'"'"'"' && sleep 0'"'"'' 

连接为“user@controlleruser@inventory_host,然后user@inventory_host变成'user-that-sudoed'

Ansible 允许为单个任务使用 environment 关键字设置环境变量

例子

- hosts: all

  tasks:
    - shell: /opt/local/my-binary
      environment:
        LD_LIBRARY_PATH: /opt/my/dir/

或者这也可以为剧本设置environment

- hosts: all

  environment:
    LD_LIBRARY_PATH: /opt/my/dir/

  tasks:
    …

所以这比尝试按照您建议的方式做更好。

希望对您有所帮助

官方文档:https://docs.ansible.com/ansible/2.6/user_guide/playbooks_environment.html