Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 检查redhat machine中是否已安装多个软件包如果不可用,则通过ansible playbook安装_Variables_Installation_Ansible_Conditional Statements - Fatal编程技术网

Variables 检查redhat machine中是否已安装多个软件包如果不可用,则通过ansible playbook安装

Variables 检查redhat machine中是否已安装多个软件包如果不可用,则通过ansible playbook安装,variables,installation,ansible,conditional-statements,Variables,Installation,Ansible,Conditional Statements,我想检查我的节点中是否安装了某些软件包。 如果没有,则通过ansible playbook安装这些软件包 以下是我提供给playbook作为输入的变量(要安装的节点IP和包): exec_服务器:“10.50.10.40,34.228.208.5” 包装: -拉链 -解压 -吉特 这是我写的剧本,看看是否安装了任何软件包,如果没有,就安装它们 -名称:检查软件包安装 主机:“{exec_server}}” 变成:是的 收集事实:不 任务: -名称:收集包装商事实 一揽子事实: 经理:“自动”

我想检查我的节点中是否安装了某些软件包。 如果没有,则通过ansible playbook安装这些软件包

以下是我提供给playbook作为输入的变量(要安装的节点IP和包):

exec_服务器:“10.50.10.40,34.228.208.5”
包装:
-拉链
-解压
-吉特
这是我写的剧本,看看是否安装了任何软件包,如果没有,就安装它们

-名称:检查软件包安装
主机:“{exec_server}}”
变成:是的
收集事实:不
任务:
-名称:收集包装商事实
一揽子事实:
经理:“自动”
-名称:包状态
调试:
msg:{{item}{{'installed'如果ansible_facts.packages中的item'not installed'}
循环:{pkgs | default([])}
寄存器:查找输出
-名称:安装未安装软件包的最新版本
百胜:
名称:“{%if pkgs在ansible_facts.packages%}-{{pkgs}{%endif%}”中未定义
国家:最新
我面临的错误是:

Identity added:/tmp/awx_2137_f_94gy2c/artifacts/2137/ssh_key_数据(/tmp/awx_2137_f_94gy2c/artifacts/2137/ssh_key_数据)
播放[检查软件包安装]**********************************************
任务[收集包装商事实]***********************************************
ok:[34.228.208.5]
好的:[10.50.10.40]
任务[程序包状态]**********************************************************
确定:[10.50.10.40]=>(项目=zip)=>{
“msg”:“zip已安装”
}
确定:[10.50.10.40]=>(项目=解压)=>{
“msg”:“解压缩已安装”
}
确定:[10.50.10.40]=>(item=git)=>{
“msg”:“git未安装”
}
确定:[10.50.10.40]=>(item=python-pip)=>{
“msg”:“未安装python pip”
}
确定:[10.50.10.40]=>(项目=gcc)=>{
“msg”:“未安装gcc”
}
确定:[34.228.208.5]=>(项目=zip)=>{
“msg”:“zip已安装”
}
确定:[34.228.208.5]=>(项目=解压)=>{
“msg”:“解压缩已安装”
}
确定:[34.228.208.5]=>(item=git)=>{
“msg”:“git未安装”
}
确定:[34.228.208.5]=>(item=python-pip)=>{
“msg”:“未安装python pip”
}
确定:[34.228.208.5]=>(项目=gcc)=>{
“msg”:“未安装gcc”
}
任务[安装已卸载软件包的最新版本]**********************
致命:[10.50.10.40]:失败!=>{“msg”:“模板化字符串时出现模板错误:应为标记‘语句块结尾’,获得‘ansible_facts’。字符串:{%if-pkgs在ansible_facts.packages%}-{{pkgs}}{%endif%}”
致命:[34.228.208.5]:失败!=>{“msg”:“模板化字符串时出现模板错误:应为标记‘语句块结尾’,获得‘ansible_facts’。字符串:{%if-pkgs在ansible_facts.packages%}-{{pkgs}}{%endif%}”
重演*********************************************************************
10.50.10.40:确定=2更改=0无法访问=0失败=1跳过=0获救=0忽略=0
34.228.208.5:确定=2更改=0不可访问=0失败=1跳过=0获救=0忽略=0

如何根据我的
pkgs
变量和Ansible收集的事实仅获取未安装的软件包?

在执行任何操作之前,无需检查软件包是否已安装,这就是
状态:present
的作用:

present
installed
将确保安装所需的软件包

资料来源:

所以你的剧本应该简单到

-名称:检查软件包安装
主机:“{exec_server}}”
变成:是的
收集事实:不
任务:
-名称:安装未安装软件包的最新版本
百胜:
名称:“{{pkgs}}”
国家:现在

现在,如果您想知道您的构造中有什么不正确,请使用
if

{%if-pkgs在ansible_facts.packages%}-{{pkgs}{%endif%}
不能在同一条指令中对同一变量运行两个测试(即,没有

在这里,您试图同时运行和测试

如前所述,如果您想保持该路线(这是次优路线),您可以做的是使用过滤器:

-名称:安装未安装软件包的最新版本
百胜:
名称:{{pkgs}差异(ansible_facts.packages)}”
国家:最新

感谢您的快速回复:)。我尝试了上述方法,除了pythonpip之外,所有的软件包都安装好了。我们需要提到安装python pip的任何其他模块吗?这是否回答了您的问题:?$pip-V pip 8.1.2 from/usr/lib/python2.7/site-packages(python 2.7)这是我在检查是否安装了pip时看到的,但当我通过playbook检查相同的模块时,它显示了}ok:[34.228.208.5]=>(item=python pip)=>{“msg”:“python-pip-not-installed”}好吧,这仅仅意味着pip不是通过rpm包安装的,而不是根本没有安装。
yum-list-installed | grep-pip
给了您什么?