python - 使 Ansible 使用非空 shell 环境
问题描述
在执行临时命令或剧本时,我遇到了一种情况,即/home/user-that-sudoed/.bashrc
需要读取 ENV Vars,以便临时命令或剧本在目标清单主机上工作。在该.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@controller
到” user@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
推荐阅读
- html - Bootstrap:当我们点击时导航栏没有关闭,响应问题
- emacs - Emacs yank 行为改变了 - 如何恢复旧行为?
- javascript - CKEditor V4 带bb插件和视频插件,不能改变值
- python - 如何在 Python 中格式化从表中检索的日期?
- docker - docker-compose 一个反向代理后面的应用程序,它也可以访问外部服务
- javascript - 如何将 php 变量传递给模式引导程序 4
- python - Pycharm 错误 - OSError: [WinError 126] 找不到指定的模块
- processing - 如何在处理中启动 exe 文件?
- ocaml - 在 Windows 上通过 Opam 为 Coq 安装库
- python - 如何在Python中从我的x轴上的csv文件中获取所有单词