调用子剧本的ansible剧本

问题描述 投票:0回答:1

我正在尝试在 Ansible 中进行多个 playbook 调用,但我似乎无法使其与 import_playbook、include_task 或 include 一起使用(我相信 include 已被弃用)。

这就是我正在尝试做的事情:

我有一个 Python 文件,提示用户在两个 YAML 文件之间进行选择,然后调用 scene1.yml,该文件根据用户的选择重定向到 local_deployment.yml 或 aws_deployment.yml。

这是scenario1.yml内容:

- hosts: localhost
  tasks:
    - name: "Deployment in local mode"
      include_task: local_deployement.yml
      when: mode == "local"
- hosts: all
  tasks:
    - name: "Deployment in non-local mode"
      import_playbook: aws_deployement.yml
      when: mode == "nonlocal"

接下来,local_deployment.yml 负责调用每个本地 Ansible 脚本:

# local_deployement.yml

- hosts: localhost
  tasks:
    - name: "Inclusion of tasks for local mode deployment"
      include_tasks: local_bdd_server.yml
      when: mode == "local"
    - include_tasks: local_ftp_server.yml
      when: mode == "local"

最后,local_bdd_server.yml 的示例如下:`

# local_bdd_server.yml

- hosts: localhost
  vars:
    ansible_python_interpreter: /usr/bin/python3
  tasks:
    - name: Install Docker and Docker-compose
      become: yes
      apt:
        update_cache: yes
        name: "{{ item }}"
        state: present
      with_items:
        - apt-transport-https
        - ca-certificates
        - curl
        - lsb-release
        - gnupg2
        - python3-pip

不幸的是,由于参数的原因,它在 playbook 调用期间卡住了,但我不明白为什么。

我正在寻找 include_task 和 import_tasks 之间的区别。我认为 include_task 应该用于任务列表,所以也许这就是问题所在,因为我的数据库部署不是任务列表,而是常规剧本。但是,我不确定应该如何修改它。

就个人而言,一切似乎都很顺利。只有当所有东西结合在一起时它才会停止工作。

因此,如果您有任何想法,那将非常有帮助,谢谢!

ansible yaml
1个回答
0
投票

好的,您有多个设计问题,最好先解决这些问题,然后再继续:

  1. import_playbook
    不能作为任务使用,并且 在文档中特别提到

  2. 我有一个 Python 文件,提示用户在两个 YAML 文件之间进行选择,然后调用 scene1.yml,该文件根据用户的选择重定向到 local_deployment.yml 或 aws_deployment.yml。

    这是不必要的。只需创建一个清单并使用内置的

    --limit
    CLI 参数:

    # inventory
    ---
    all:
      hosts:
        aws:
          ansible_host: 'your_aws_api_url_goes_here'    
    
    # deployment.yaml
    ---
    - name: Deploy something
      hosts: all
      connection: local
      tasks:
        - name: Use AWS modules with ansible_host
          # ...
    

    这样,剧本将默认在您的 AWS 环境中运行。如果有人想在本地运行相同的内容,他们所需要做的就是使用

    --limit localhost
    参数运行此剧本。

  3. 如果您将包列表直接传递给
  4. apt

    而不是在循环中调用它,

    name
    模块的工作速度会更快,这也在文档中提到过:

    # local_bdd_server.yml
    - hosts: localhost
      vars:
        ansible_python_interpreter: /usr/bin/python3
      tasks:
        - name: Install Docker and Docker-compose
          become: yes
          apt:
            update_cache: yes
            name:
              - apt-transport-https
              - ca-certificates
              - curl
              - lsb-release
              - gnupg2
              - python3-pip
            state: present
    
© www.soinside.com 2019 - 2024. All rights reserved.