ansible - 基于不包含模式的字符串创建ansible变量?
问题描述
我正在尝试在 ansible 中创建一个变量,以验证另一个变量是否包含特定模式。
故事是,我需要在我的剧本中创建一个任务,以防止带有版本标签dev
的图像在生产中部署。我是 ansible 的新手,不知道该怎么做。
以前,我以另一种方式工作,创建一个仅在模式可用时才部署的变量。
vars:
archived_image_name: "{{ new_image.registry }}_{{ new_image.image | regex_replace('/', '_') }}_{{ new_image.version }}_image.tar"
archived_image_prod_name: "{{ archived_image_name | regex_search('.*-rev\\d.*')}}"
因此,这只适用-rev
于以他们的名义部署图像。我们能扭转这种局面吗?
解决方案
您可以使用search
过滤器来识别字符串是否包含子字符串。然后您可以使用not
运算符来否定结果。
检查此示例以了解如何使用它们:
- hosts: localhost
gather_facts: no
vars:
tests:
- dev
- prod
- something:dev
- something:prod
- something/dev:latest
- something/prod:latest
tasks:
- debug:
msg: String "{{ item }}" doesn't have the substring "dev"
when: item is not search("dev")
loop: "{{ tests }}"
- debug:
msg: String "{{ item }}" does have the substring "dev"
when: item is search("dev")
loop: "{{ tests }}"
你应该看到这个输出:
PLAY [localhost] ***************************************************************
Saturday 29 May 2021 16:11:03 -0300 (0:00:00.020) 0:00:00.020 **********
TASK [debug] *******************************************************************
ok: [localhost] => (item=prod) =>
msg: String "prod" doesn't have the substring "dev"
ok: [localhost] => (item=something:prod) =>
msg: String "something:prod" doesn't have the substring "dev"
ok: [localhost] => (item=something/prod:latest) =>
msg: String "something/prod:latest" doesn't have the substring "dev"
Saturday 29 May 2021 16:11:03 -0300 (0:00:00.079) 0:00:00.100 **********
TASK [debug] *******************************************************************
ok: [localhost] => (item=dev) =>
msg: String "dev" does have the substring "dev"
ok: [localhost] => (item=something:dev) =>
msg: String "something:dev" does have the substring "dev"
ok: [localhost] => (item=something/dev:latest) =>
msg: String "something/dev:latest" does have the substring "dev"
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
请查看以下链接以了解有关search
过滤器的更多信息:
https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html
推荐阅读
- android-service - 即使在停止工作管理器后,前台服务和工作管理器通知也会继续显示
- bash - 什么是 bash 脚本中的模棱两可的重定向
- android - FileNotFoundException - 无法使用 Room 实例导入 json
- python - KeyError 'R',定义一个函数
- c++ - 如何分隔循环中奇数的计数
- javascript - 当 onClick 处理程序中有阻塞代码时如何显示加载程序?
- javascript - 克隆对象的奇怪行为
- codeigniter - Autodesk Forge API 与 Codeigniter
- amazon-web-services - 我想将已经创建的 docker 图像推送到 aws ecr
- python - 如何在 django 中使用相同的列表视图进行搜索和类别查询集