首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过ansible-playbook运行本地命令

如何通过ansible-playbook运行本地命令
EN

Stack Overflow用户
提问于 2017-05-16 22:47:16
回答 3查看 29.1K关注 0票数 10

我正在尝试运行一些本地命令,迭代清单文件,并将每个主机名作为本地命令的参数。

例如:我想在我的本地机器(笔记本电脑)上运行一条命令“wanted node create {{ hostname }}”。行动手册是:

代码语言:javascript
复制
- name: Prep node
  hosts: 127.0.0.1
  connection: local
  gather_facts: no
  tasks:
  - name: node create
    command: "knife node create {{ hostname | quote }}"

我的清单文件看起来像这样:

代码语言:javascript
复制
[qa-hosts]
10.10.10.11 hostname=example-server-1

当然,它不会工作,因为库存有'qa-hosts‘,播放是'127.0.0.1',因为我想从我的本地机器上运行播放。

有没有人能帮我出个主意。基本上,我想获取变量'hostname‘并将其传递给上面的play块。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-16 23:28:20

您可以使用下面的play访问主机名,因为清单信息可以作为hostvars使用。

代码语言:javascript
复制
- hosts: 127.0.0.1   
  connection: local
  gather_facts: no

  tasks:
    - debug: var=hostvars

    - name: node create
      command: "knife node create {{ hostvars[item]['hostname'] }}"
      with_items:
        - "{{ groups['qa-hosts'] }}"
票数 6
EN

Stack Overflow用户

发布于 2017-05-20 03:06:43

我喜欢delegate_to。下面是一个示例,在本地主机上,为每个主机运行getent hosts

代码语言:javascript
复制
---
- hosts: all
  connection: ssh
  gather_facts: true
  tasks:
  - name: Lookup ansible_hostname in getent database
    command: getent hosts {{ ansible_hostname }}
    delegate_to: localhost
    register: result

  - name: Show results
    debug:
      var: result.stdout
    delegate_to: localhost
票数 10
EN

Stack Overflow用户

发布于 2019-11-28 10:23:45

另一种选择是local_action

delegate_tolocal_action的情况下,请注意,如果使用become = yes,则Ansible当然会隐式尝试使用sudo调用操作,然后可能会失败,因为本地sudo的密码将不同于您为远程sudo输入的任何密码。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44004727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档