我正在努力学习如何使用Ansible事实作为变量,我不明白.当我跑...
$ ansible localhost -m setup
Run Code Online (Sandbox Code Playgroud)
...它列出了我系统的所有事实.我随机选择了一个来尝试使用它,ansible_facts.ansible_date_time.date,但我无法弄清楚如何使用它.当我跑...
$ ansible localhost -m setup -a "filter=ansible_date_time"
localhost | success >> {
"ansible_facts": {
"ansible_date_time": {
"date": "2015-07-09",
"day": "09",
"epoch": "1436460014",
"hour": "10",
"iso8601": "2015-07-09T16:40:14Z",
"iso8601_micro": "2015-07-09T16:40:14.795637Z",
"minute": "40",
"month": "07",
"second": "14",
"time": "10:40:14",
"tz": "MDT",
"tz_offset": "-0600",
"weekday": "Thursday",
"year": "2015"
}
},
"changed": false
}
Run Code Online (Sandbox Code Playgroud)
所以,那里很清楚.但是当我跑...
$ ansible localhost -a "echo {{ ansible_facts.ansible_date_time.date }}"
localhost | FAILED => One or more undefined variables: 'ansible_facts' is undefined
$ ansible localhost -a "echo {{ ansible_date_time.date }}"
localhost | FAILED => One or more undefined variables: 'ansible_date_time' is undefined
$ ansible localhost -a "echo {{ date }}"
localhost | FAILED => One or more undefined variables: 'date' is undefined
Run Code Online (Sandbox Code Playgroud)
我没有到这里来的是什么?我如何使用Facts作为变量?
Bru*_*e P 75
该命令ansible localhost -m setup基本上表示"对localhost运行安装模块",安装模块收集您在输出中看到的事实.
运行该echo命令时,由于未运行安装模块,因此这些事实不存在.测试这样的事情的更好方法是使用ansible-playbook来运行看起来像这样的剧本:
- hosts: localhost
tasks:
- debug: var=ansible_date_time
- debug: msg="the current date is {{ ansible_date_time.date }}"
Run Code Online (Sandbox Code Playgroud)
因为这是一个playbook,所以在运行任务之前会收集localhost的事实.上面的剧本的输出将是这样的:
PLAY [localhost] **************************************************
GATHERING FACTS ***************************************************************
ok: [localhost]
TASK: [debug var=ansible_date_time] *******************************************
ok: [localhost] => {
"ansible_date_time": {
"date": "2015-07-09",
"day": "09",
"epoch": "1436461166",
"hour": "16",
"iso8601": "2015-07-09T16:59:26Z",
"iso8601_micro": "2015-07-09T16:59:26.896629Z",
"minute": "59",
"month": "07",
"second": "26",
"time": "16:59:26",
"tz": "UTC",
"tz_offset": "+0000",
"weekday": "Thursday",
"year": "2015"
}
}
TASK: [debug msg="the current date is {{ ansible_date_time.date }}"] **********
ok: [localhost] => {
"msg": "the current date is 2015-07-09"
}
PLAY RECAP ********************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0
Run Code Online (Sandbox Code Playgroud)
小智 10
ansible的查找模块对我来说很好.yml是:
__CODE__
您可以使用date替换任何命令以获取命令的结果.
小智 5
请注意,该ansible命令不会收集事实,但该ansible-playbook命令会收集事实。运行时ansible -m setup,安装模块碰巧运行事实集合,以便您获取事实,但运行ansible -m command不会。因此,事实不可用。这就是为什么其他答案包括剧本 YAML 文件并表明查找有效的原因。
| 归档时间: |
|
| 查看次数: |
84851 次 |
| 最近记录: |