gpt4 book ai didi

ansible - ansible 中操作系统特定的 pre_task

转载 作者:行者123 更新时间:2023-12-04 02:35:52 27 4
gpt4 key购买 nike

如果给定的话,我想运行一组原始命令(以安装 python)目标主机上的操作系统是OpenBSD

我必须将这些检查作为 pre_tasks 运行(因为要将任何东西作为任务运行,Python 必须已经存在于目标系统上)

我不明白的是pre_task阶段有没有OS特性变量(比如ansible_os_family)

- name: Check for Python 
raw: test -e /usr/bin/python
changed_when: false
failed_when: false
register: check_python


- name: Install Python on OpenBSD
# raw: test -e /usr/bin/apt && (apt -y update && apt install -y python-minimal) || (yum -y install python libselinux-python)
raw: pkg_add -r python%3
when: check_python.rc != 0
when: ansible_os_family == "OpenBSD" # <-- problem here

我在尝试使用 ansible_os_family 时似乎遇到了问题

有没有办法在我不编写自己的操作系统系列检查的情况下启用 pre_tasks?

附言。我使用了上面的python安装代码,这里推荐如下:[1] https://relativkreativ.at/articles/how-to-install-python-with-ansible

最佳答案

根据您的最新评论,正如@Vladimir 和我自己之前所说,您将无法使用 ansible 的事实变量来检测没有 python 的主机上的操作系统,因为无法收集事实(即播放 setup 模块)。第一步,您需要自己完成这项工作。

我没有可以访问的 BSD 系统。因此,以下内容完全没有针对您的平台进行测试。但我相信它应该有效,或者至少让你走上正轨。检查系统上 /etc/os-release 的内容以根据需要调整正则表达式。我写的那个在 Ubuntu、Debian、Centos、RHEL 以及 RedHat UBI 和 Alpine docker 镜像上给出了正确的结果。

---
- name: Fix hosts with no python at all
hosts: all
gather_facts: false

tasks:
- name: Perform a dirty OS detection if python is not installed
raw: |-
if which python > /dev/null || which python3 > /dev/null; then
echo installed
else
sed -n "s/^NAME=\"\(.*\)\"/\\1/p" /etc/os-release
fi
changed_when: false
register: dirty_detect

- name: Print message when already installed
debug:
msg: Host {{ inventory_hostname }} already has python. Next will skip.
when: dirty_detect.stdout_lines[0] == 'installed'

- name: Install python on openbsd if needed
raw: |-
pkg_add -r python%3
become: true
when: dirty_detect.stdout_lines[0] == 'OpenBSD'

- name: Install python on Ubuntu if needed
raw: |-
apt install -y python3
become: true
when: dirty_detect.stdout_lines[0] == 'Ubuntu'

- name: Back to normal life with ansible
hosts: all

tasks:
- name: Now we gathered facts and we can use all facts vars
debug:
msg: Host {{ inventory_hostname }} is running {{ ansible_os_familly }}

- name: We might have left hosts with python 2.7 only above, make sure python3 is installed
package:
name: python3
become: true

关于ansible - ansible 中操作系统特定的 pre_task,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61902095/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com