gpt4 book ai didi

ansible:如何检查 shell 输出

转载 作者:行者123 更新时间:2023-12-01 10:37:15 24 4
gpt4 key购买 nike

我是 Ansible(1.9.2)的新手。我想检查当前的 zlib 版本。如果它不是 1.2.8,那么 Ansible 需要从源代码安装它。

检查当前 zlib 版本的命令是

root@node2 zlib-1.2.8]# cat /usr/local/include/zlib.h | grep "#define ZLIB_VERSION" | awk '{print $3}'
"1.2.8

我的 Ansible 代码
 - name: "Check zlib version "
shell: "cat /usr/local/include/zlib.h | grep \"#define ZLIB_VERSION\" | awk '{print $3}'"
register: zlib_version
- name: "Debug result"
debug: result
- name: "Build zlib "
command: "{{ item }} chdir=/home/zlib-1.2.8"
with_items:
- "./configure --prefix=/usr/local --shared"
- make
- make install
when: "zlib_version!=1.2.8"

调试打印“hello world”!!!
TASK: [Debug result] ********************************************************** 
ok: [192.168.111.81] => {
"msg": "Hello world!"
}

如何检查 shell 输出并相应地运行命令。

我改了 debug: var=zlib_version.stdout .它打印
TASK: [Debug result] ********************************************************** 
ok: [192.168.111.81] => {
"var": {
"zlib_version.stdout": "\"1.2.8\""
}
}

但是,现在我需要写 zlib_version.stdout.find ("\"1.2.8\"") == -1 ,两次。是否有一种简单的方法可以让 Ansible 在匹配 zlib_version.stdout.find ("\"1.2.8\"") == -1 时跳过所有命令、shell 和取消归档? ?
 - name: "Check zlib version "
shell: "cat /usr/local/include/zlib.h | grep \"#define ZLIB_VERSION\" | awk '{print $3}'"
ignore_errors: true
register: zlib_version
- unarchive: src=/home/files/nigex/zlib-1.2.8.tar.gz dest=/home/
when: zlib_version.stdout.find ("\"1.2.8\"") == -1

- name: "Debug result"
debug: var=zlib_version.stdout
- name: "Build zlib "
command: "{{ item }} chdir=/home/zlib-1.2.8"
with_items:
- "./configure --prefix=/usr/local --shared"
- make
- make install
when: zlib_version.stdout.find ("\"1.2.8\"") == -1

最佳答案

shell 命令的输出可通过 stdout 获得属性(property)。所以zlib_version.stdout会给你命令的输出。

- name: "Debug result"
debug: var=zlib_version.stdout

一个简单的 role可以创建以避免两次写入条件。像这样的东西:
# file roles/zlib/tasks/main.yml
---
- unarchive: src=/home/files/nigex/zlib-1.2.8.tar.gz dest=/home/

- name: "Build zlib "
command: "{{ item }} chdir=/home/zlib-1.2.8"
with_items:
- "./configure --prefix=/usr/local --shared"
- make
- make install

然后仅当条件为真时才包含角色。
# pre_tasks is needed instead of tasks since this needs to be run before the role is included

pre_tasks:
- name: "Check zlib version "
shell: "cat /usr/local/include/zlib.h | grep \"#define ZLIB_VERSION\" | awk '{print $3}'"
ignore_errors: true
register: zlib_version

roles:
- { role: zlib, when: "zlib_version.stdout.find ('\"1.2.8\"') == -1" }

关于ansible:如何检查 shell 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33094929/

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