在 Tower 中,有很多选项可以在执行之前添加环境变量。我已经设置了一些变量,这些变量会被拉入 python 库存脚本。但是脚本响应错误。我认为 python 代码没有获取值或值的格式不正确。
我想看看环境变量是如何暴露给 python 脚本的。有没有办法将这些添加到作业日志中的调试输出中?
在 Tower 中,有很多选项可以在执行之前添加环境变量。我已经设置了一些变量,这些变量会被拉入 python 库存脚本。但是脚本响应错误。我认为 python 代码没有获取值或值的格式不正确。
我想看看环境变量是如何暴露给 python 脚本的。有没有办法将这些添加到作业日志中的调试输出中?
问题是我没有执行剧本。我正在执行一个自定义 python 清单脚本,我需要能够查看 Ansible 如何加载变量,以便能够解决脚本无法加载变量的原因。我在 python 脚本中添加了一些代码,以便向我发送一封包含环境变量列表的电子邮件。您也可以将其写入驱动器上的文件,但如果您使用的是 Tower,则必须在管理设置 -> 工作 -> 路径下公开文件夹位置才能公开。我决定在测试时只收到一封电子邮件会更容易。
import smtplib
import datetime
import time
ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
output = ""
output +=('Time Start {} \r\n '.format(st))
for a in os.environ:
output +=('Var: {} Value: {} \r\n'.format(a, os.getenv(a)))
def send_email(addr_from, addr_to, contents):
svr = smtplib.SMTP('smtp.mail.local', 25)
msg = 'Subject: Subject goes here.\n\n{0}'.format(contents)
svr.sendmail(addr_from, addr_to, msg)
send_email('addr_from@mail.com','addr_to@mail.com',output)
这是变量的图片
然后这是脚本的图片。
但这没有用。这是有效的代码。
问题是,当您在 python 中查询环境变量时,如果它是字典,它将返回单引号,您必须将其转换为双引号并 json.loads 将其作为字典加载。
这解决了多个问题。我希望这可以帮助其他需要使用 Python 对 Ansible 进行故障排除的人。
只需将调试与“env”查找一起使用。下面home
是环境变量。
- name: Show env variable
debug:
msg: "{{ lookup('env','HOME') }}"
https://docs.ansible.com/ansible/latest/plugins/lookup/env.html