2016-03-14 39 views
0

我想要获取在debian ec2实例上安装的服务列表及其版本。Ansible可以获取aws实例软件列表

我无法理解如何获取dpkg --list显示的软件包列表,因为我想通过我的小型服务器场上的ansible获取此列表。

回答

0

最简单的将是简单地运行shell的任务:

- shell: dpkg --list 
    register: packages 

现在,你必须存储在packages.stdout_lines结果。

如果你只是想包名,运行像这样

dpkg --get-selections | grep -v "deinstall" | cut -f1 

你需要委派任务Ansible控制主机上运行任务:

- shell: dpkg --list 
    register: packages 
    delegate_to: localhost 

现在命令在控制主机(本地主机)上执行,结果存储在packages.stdout_lines

+0

非常感谢您的回答。这让我在学习Ansible方面取得了很好的进展。但是我无法在任何地方找到packages.stdout_lines文件。我在playbook中添加了shell:dpkg --list >> somelog.txt,但它在远程主机上创建了输出文件,而不是在服务器上创建。基本上我想在Ansible服务器上获得所有实例的软件包列表 –

+0

在我上面的任务中,结果被注册为变量'packages'。执行的shell命令的stdout存储在属性'stdout_lines'中。因此你可以通过'packages.stdout_lines'来访问stdout。这不是一个文件,而是一个可变的文件。 – udondan

+0

尝试这样一个任务:' - debug:msg =“{{packages.stdout_lines}}”' – udondan

0
--- 
- hosts: hostblockname 
    tasks: 
    - name: Get Packages List 
    shell: dpkg --list > packageslist 
    register: packages 
    - fetch: src=/root/packageslist dest=/root/packagesdirectory/ 

我添加了上述帮助服务我的目的的剧本。有可能有优化的空间,但不知何故,我能够为我完成它。

我想要获得以适当格式安装在所有云实例上的所有软件包的列表。然后我想要在我的Ansible服务器上的文件中获得所有软件包的列表。 本剧本首先在远程实例上生成已安装软件包的列表,然后将这些文件提交回主Ansible主机。

运行剧本的命令是: ansible-剧本-i hostslistfile myplaybook.yml

myplaybook.yml如上。

hostslistfile是简单的文件,该文件是如下: [hostblockname] 192.168.0.144:22

相关问题