如何根据Ansible剧本中的arch做出决定?

时间:2017-06-23 05:45:04

标签: ansible

我一直在努力编写剧本,我可以根据剧本运行的拱门(即amd64,arm,ppc64le)运行不同的任务。我无法弄清楚如何获得我正在运行它的系统的拱门。

请你帮我解决Ansible剧本中的系统拱形。

4 个答案:

答案 0 :(得分:3)

获取系统架构

在命令行:

ansible HOST -m setup -a 'filter=ansible_architecture'

对于x86架构主机,这将返回:

HOST | SUCCESS => {
    "ansible_facts": {
        "ansible_architecture": "x86_64"
    }, 
    "changed": false
}

这是一个示例手册,将打印出您广告资源中所有主机的架构:

- name: print out hosts architectures
  hosts: all
  gather_facts: True
  tasks:
  - debug: var= ansible_architecture

根据体系结构运行任务

使用when子句:

- name: task to run for x86 architecture
  shell: echo "x86 arch found here"
  when: ansible_architecture == "x86_64"

答案 1 :(得分:2)

Ansible从目标主机收集适当的信息并将其存储为事实,例如:ansible_architectureansible_os_family

如果您有疑问,可以使用debug模块显示所有事实,并选择最适合您的事实。

您可以在ansible_architecture条件中使用when个事实,并使用它来包含不同的任务文件(an example to customise)。

答案 2 :(得分:2)

@Pensu,这可能就是您想要的:

- name: Get DEB architecture
  shell: dpkg --print-architecture
  register: deb_architecture

- name: Print DEB architecture
  debug:
    msg: "deb_architecture.stdout: {{ deb_architecture.stdout }}"

答案 3 :(得分:1)

虽然我找不到在docs.ansible.com上任何地方记录的ansible_architecture,但这是在grepping ansible source code时找到的已编译可能值的列表:

x86_64  # <-- guaranteed to work
aarch64  # <-- found on https://git.e1e0.net/ansible-playbooks/file/roles/node-exporter/vars/main.yml.html
ia64
ppc64le
s390x

# found some matches like:
armv.*
aarch.*
ppc.*