Ansible:如何从另一个调用剧本?

rɑː*_*dʒɑ 13 ansible

我编写了一个简单的playbook来打印java进程ID和该PID的其他信息

[root@server thebigone]# cat check_java_pid.yaml
---
- hosts: all
  gather_facts: no

  tasks:
    - name: Check PID of existing Java process
      shell: "ps -ef | grep [j]ava"
      register: java_status

    - debug: var=java_status.stdout
Run Code Online (Sandbox Code Playgroud)

而当我打电话给它时ansible-playbook check_java_pid.yaml它工作正常.

现在我试图从另一个上面调用上面的剧本,但只针对一个特定的主持人.所以我写了第二部剧本如下

    [root@server thebigone]# cat instance_restart.yaml
    ---
    - hosts: instance_1
      gather_facts: no

      tasks:
        - include: check_java_pid.yaml
Run Code Online (Sandbox Code Playgroud)

但在做的时候ansible-playbook instance_restart.yaml,我遇到了错误

    ERROR! no action detected in task. This often indicates a misspelled 
    module name, or incorrect module path.

    The error appears to have been in 
    '/home/root/ansible/thebigone/check_java_pid.yaml': line 2, column 3, but 
    may be elsewhere in the file depending on the exact syntax problem.

    The offending line appears to be:

     ---
     - hosts: all
       ^ here


      The error appears to have been in 
      '/home/root/ansible/thebigone/check_java_pid.yaml': line 2, column 3, 
      but may be elsewhere in the file depending on the exact syntax problem.

     The offending line appears to be:

      ---
      - hosts: all
        ^ here
Run Code Online (Sandbox Code Playgroud)

它说语法错误,但没有一个真正的AFAIK,因为我已经执行了Playbook check_java_pid.yaml没有任何问题.

请求您帮助理解此问题.

Qki*_*kiZ 19

这里有官方文档中的示例。

https://docs.ansible.com/ansible/2.4/playbooks_reuse_includes.html

应用批准的答案后,我遇到了与您相同的错误。我通过创建这样的主剧本解决了问题:

---
- import_playbook: master-okd.yml
- import_playbook: infra-okd.yml
- import_playbook: compute-okd.yml
Run Code Online (Sandbox Code Playgroud)


tec*_*raf 15

随着include 在任务级别 Ansible愿与任务的文件而已,不是一个完整的剧本.然而,你提供了一个完整的剧本作为论据.

你可以在游戏关卡中做到(包括),但它不会让你实现你想要的.

hosts: all定义的游戏将始终针对所有目标运行(除非您在命令调用或库存中限制它).

此外,您将无法访问java_status其他剧本的价值(如果这是您的目标).


您需要重新考虑您的结构,例如,您可以提取任务并从两个剧中包含它们:

my_tasks.yml

- name: Check PID of existing Java process
  shell: "ps -ef | grep [j]ava"
  register: java_status

  - debug: var=java_status.stdout
Run Code Online (Sandbox Code Playgroud)

check_java_pid.yml

---
- hosts: all
  gather_facts: no

  tasks:
    - include my_tasks.yml
Run Code Online (Sandbox Code Playgroud)

instance_restart.yml

---
- hosts: instance_1
  gather_facts: no

  tasks:
    - include: my_tasks.yml
Run Code Online (Sandbox Code Playgroud)