热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

同时在ansible中包含另一本剧本时出现问题?

如何解决《同时在ansible中包含另一本剧本时出现问题?》经验,为你挑选了1个好方法。

我写了一个master.yaml如下定义的剧本

- hosts: master
  remote_user: "{{ ansible_user }}"

  tasks:
    - name: Get env
      command: id -g -n {{  lookup('env', '$USER') }}
      register: group_user
      vars:
        is_done: "false"

    - include: slave.yaml
      vars:
        sethostname: "{{ group_user }}"
        worker: worker
      when: is_dOne== "true"
      where: inventory_hostname in groups['worker']

slave.yaml在满足某些条件后,我正在尝试运行另一本名为以下定义的剧本。

- hosts: worker
  remote_user: "{{ ansible_user }}"

  tasks:
    - name: Write to a file for deamon setup
      copy:
        content: "{{ sethostname }}"
        dest: "/home/ubuntu/test.text"

现在我有两个问题:

我无法设置var的值isDone。slave.yaml仅在isDone为true 时才起作用。

2. salve.yaml如何访问价值工作者。我在inventory.yaml中定义了小组工作人员

Romain.. 5

我不知道这是否是实现目标的正确方法。但是,我试图通过尽可能多地保持逻辑来使本手册发挥作用。希望能帮助到你。

关键是您不能import_playbook在剧本内部使用。查看模块文档以获取更多信息。因此,我建议使用角色而不是剧本来共享代码。您将能够slavemaster剧本和另一个剧本(slave例如,一个剧本)之间共享角色。

ansible文件夹结构如下。

??? hosts
??? master.yml
??? roles
    ??? slave
        ??? tasks
            ??? main.yml

Master.yml

---
- name: 'Master Playbook'
  # Using the serial keyword to run the playbook for each host one by one
  hosts: master
  serial: 1
  remote_user: "{{ ansible_user }}"

  tasks:
    - name: 'Get env'
      command: id -g -n {{ lookup('env', '$USER') }}
      register: group_user

    - name: 'Calling the slave role'
      import_role:
        name: 'slave'
      # The return value of the command is stored in stdout
      vars:
        sethostname: "{{ group_user.stdout }}"
      # Only run when the task get env has been done (state changed)
      when: group_user.changed
      # Delegate the call to the worker host(s) -> don't know if it's the expected behavior
      delegate_to: 'worker'

从站main.yml

---
- name: 'Write to a file for deamon setup'
  copy:
    content: "{{ sethostname }}"
    dest: "/tmp/test.text"

最后/tmp/test.text包含有效的用户组名称。



1> Romain..:

我不知道这是否是实现目标的正确方法。但是,我试图通过尽可能多地保持逻辑来使本手册发挥作用。希望能帮助到你。

关键是您不能import_playbook在剧本内部使用。查看模块文档以获取更多信息。因此,我建议使用角色而不是剧本来共享代码。您将能够slavemaster剧本和另一个剧本(slave例如,一个剧本)之间共享角色。

ansible文件夹结构如下。

??? hosts
??? master.yml
??? roles
    ??? slave
        ??? tasks
            ??? main.yml

Master.yml

---
- name: 'Master Playbook'
  # Using the serial keyword to run the playbook for each host one by one
  hosts: master
  serial: 1
  remote_user: "{{ ansible_user }}"

  tasks:
    - name: 'Get env'
      command: id -g -n {{ lookup('env', '$USER') }}
      register: group_user

    - name: 'Calling the slave role'
      import_role:
        name: 'slave'
      # The return value of the command is stored in stdout
      vars:
        sethostname: "{{ group_user.stdout }}"
      # Only run when the task get env has been done (state changed)
      when: group_user.changed
      # Delegate the call to the worker host(s) -> don't know if it's the expected behavior
      delegate_to: 'worker'

从站main.yml

---
- name: 'Write to a file for deamon setup'
  copy:
    content: "{{ sethostname }}"
    dest: "/tmp/test.text"

最后/tmp/test.text包含有效的用户组名称。


推荐阅读
author-avatar
mobiledu2502923977
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有