Ansible Tower - 如何获取环境变量列表

问题描述 投票:0回答:2

在Tower中,有很多选项可以在执行之前添加环境变量。我已经设置了一些变量,这些变量被放入python库存脚本中。但是脚本响应时出错。我认为python代码没有获取值或值不正确的格式。

我想看看如何将环境变量暴露给python脚本。有没有办法将这些添加到作业日志中的调试输出中?

python ansible ansible-awx
2个回答
0
投票

只需使用debug和'env'lookup.Below home是环境变量。

- name: Show env variable
  debug:
    msg: "{{ lookup('env','HOME') }}"

https://docs.ansible.com/ansible/latest/plugins/lookup/env.html


0
投票

问题是我没有执行剧本。我正在执行一个自定义python库存脚本,我需要能够看到Ansible如何加载变量,以便能够解决为什么脚本不会加载变量。我在python脚本中添加了一些代码,向我发送一封包含环境变量列表的电子邮件。您也可以将其写入驱动器上的文件,但如果您使用的是塔,则必须在管理设置 - >作业 - >路径下公开文件夹位置以进行公开。我决定在测试时收到一封电子邮件会更容易。

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('[email protected]','[email protected]',output)

这是变量的图片

tower environmental variables

然后是脚本的图片。

bad script

但这没效果。这是有效的代码。

good code

问题是,当您在python中查询环境变量时,如果它是一个字典,它将返回单引号,您必须将其转换为双引号,并且json.loads将其作为字典加载。

这解决了多个问题。我希望这可以帮助其他人用Python解决Ansible问题。

© www.soinside.com 2019 - 2024. All rights reserved.