AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1091169
Accepted
J. Gregory Wright
J. Gregory Wright
Asked: 2022-01-26 17:22:00 +0800 CST2022-01-26 17:22:00 +0800 CST 2022-01-26 17:22:00 +0800 CST

仅仅为了设置事实而创建 Ansible 角色是不是很糟糕?

  • 772

我有一种情况,我可以编写一个三任务角色来查找、排序和提取一组值,例如:

- name: Lookup available AMI instances
  amazon.aws.ec2_ami_info:
    filters: ...
  register: _ami_info
    
- name: Sort by creation date to get latest
  ansible.builtin.set_fact:
    _amis: '{{ _ami_info.images | sort(attribute="creation_date", reverse=True) }}'
    
- name: Set my facts for the latest AMI
    latest_ami_id: '{{ _amis[0].image_id }}
    ...

我需要在几个不同的剧本中做这种事情,所以我想要代码重用。实现一个 Lookup 插件似乎更酷、更类似于 Anible 的是,但那是更多的 Python 行,调用 Boto3 来有效地做同样的事情(除了将细节作为 dict 返回)。

似乎在涵盖此内容的角色的最佳实践中找不到任何东西,或者我很可能遗漏了一些东西。

best-practices ansible
  • 1 1 个回答
  • 35 Views

1 个回答

  • Voted
  1. Best Answer
    Vladimir Botka
    2022-01-26T19:43:10+08:002022-01-26T19:43:10+08:00

    问:仅仅为了设置事实而创建 Ansible 角色是不是很糟糕?

    答:不,不是。你说你'want code reuse'。将任务放入一个文件,例如tasks/get_latest_ami_id.yml,并创建一个角色,例如roles/my_lib

    shell> cat roles/my_lib/tasks/get_latest_ami_id.yml
    - name: Lookup available AMI instances
      amazon.aws.ec2_ami_info:
        filters: ...
      register: _ami_info
        
    - name: Sort by creation date to get latest
      ansible.builtin.set_fact:
        _amis: '{{ _ami_info.images | sort(attribute="creation_date", reverse=True) }}'
        
    - name: Set my facts for the latest AMI
      ansible.builtin.set_fact:
        latest_ami_id: '{{ _amis[0].image_id }}
        ...
    

    然后使用include_role或import_role并运行你的剧本中的任务,例如

    - import_role:
        name: my_lib
        tasks_from: get_latest_ami_id.yml
    
    • 请参阅重用 Ansible 工件以了解包含和导入之间的区别。

    • 您可以将此角色用作可重复使用的其他任务的库。

    • 如果您运行此角色,则不会发生任何事情,因为缺少tasks/main.yml。您可以将其创建为提醒,例如

    shell> cat roles/my_lib/tasks/main.yml
    - debug:
        msg: Do not run this role. It is a library of standalone tasks.
    
    • 2

相关问题

  • 购买浮动许可证的最佳做法?

  • 合作伙伴想要一份我们书面 IT 安全政策的副本,但我不知道该怎么做 [关闭]

  • 专用网络的顶级域/域后缀?

  • 备份检查的最佳实践?

  • 电缆管理政策

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve