我正在寻求帮助,以解决从一个剧本中运行具有相同角色的应用程序的多个版本(不同变量)的问题。
我们有一个具有多个产品系列的应用程序,这些产品系列是不同的代码版本。每个版本都有单独的uWSGI附庸配置和Nginx虚拟主机配置(/api/v2,/api/v3,...).
理想的状态应该是运行剧本并用指定的所有版本配置服务器。
遗憾的是,ansible的< code > import _ role/import _ tasks 不能与< code>with_items一起使用,所以必须使用< code > include _ role/include _ tasks (有点可怜,因为它们不支持角色标签)。
include_role
方法不会是最大的问题,但是我们使用处理程序来通知uWSGI touch重新加载 - 在代码更改,链接更改,virtualenv更改,app_config更改等)。
但是,当使用循环 (with_items
) 时,从循环传递的变量不会正确传播到处理程序。
我试过这种场景
问题:处理程序仅在循环的第一次迭代中运行。
#!/usr/bin/env ansible-playbook
# HAndler is run only once, from first notifier
- hosts: localhost
gather_facts: no
vars:
app_root: "/tmp/test_ansible"
app_versions:
- app_product_family: 1
app_release: "v1.0.2"
- app_product_family: 3
app_release: "v4.0.7"
tasks:
- name: Deploy multiple versions of app
include_role:
name: app
with_items: "{{ app_versions }}"
loop_control:
loop_var: app_version
vars:
app_product_family: "{{ app_version.app_product_family }}"
app_release: "{{ app_version.app_release }}"
tags:
- app
- app_debug
问题:处理程序使用“默认值”中的默认值运行
#!/usr/bin/env ansible-playbook
- hosts: localhost
gather_facts: no
roles:
- app_v2
vars:
app_v2_root: "/tmp/test_ansible_v2"
app_v2_versions:
- app_v2_product_family: 1
app_v2_release: "v1.0.2"
- app_v2_product_family: 3
app_v2_release: "v4.0.7"
任务< code >角色/app_v2/main.yml
---
# Workaround because import_tasks can't be run with_items
- include_tasks: deploy.yml
when: app_v2_versions
with_items: "{{ app_v2_versions }}"
loop_control:
loop_var: app_v2
vars:
app_v2_product_family: "{{ app_v2.app_v2_product_family }}"
app_v2_release: "{{ app_v2.app_v2_release }}"
tags:
- app_v2
- app_v2_deploy
...
一个想法是为每个产品系列编写一个单独的角色,但是它们共享nginx和uWSGI,所以这将是大量的复制粘贴和共享任务(所以标签不能正常工作)。< br >目前,我用shell脚本包装器解决了这个问题,但这不是一个理想的解决方案,并且不能在Ansible tower上工作。
带有重现问题任务的示例报告(用ansible 2.4、2.5、2.6测试)
有什么想法吗
好吧,这是@George Shuklin发布的一个错误。
我将使用我的shell包装器,它读取group_vars yaml,然后根据可变列表长度多次运行剧本。
可悲的是,在过去的几周里,我在ansible中遇到了许多烦人的bug,有点失去了对它的信任):
可能每个人都在使用微服务和kubernetes,所以需要加快我们的迁移速度(:
对于Ansible中的includes,变量的重写顺序被破坏。例如,甚至包含角色中的< code>set_fact也会被角色默认值隐藏。
查看此错误:https://github.com/ansible/ansible/issues/22025
已经关了但是还没修好。我的建议是:非常小心地使用include和变量。
实际上,我从不在循环中使用角色包含。如果需要循环,请在该循环中包含一个任务列表(该任务列表反过来可以< code>import_role)。
问题内容: 基本上,我正在制作一款可以更新玩家位置的游戏,它使用以下线程: 效果很好,但是如果我删除System.out.println(),它将停止运行。我不知道为什么会这样,整个班级如下: 最后说明:传入布尔值upPresses和downPressed,我唯一要关注的是: 问题答案: 像这样的循环 会完全占用CPU。它开始表现更好的原因可能是因为您为I / O每次迭代产生了数百个周期。 我建议
当我执行这段代码时,输出是“140”,也就是“28*5”,但它应该是“150”,也就是“28+31+30+31+30”,它应该计算两个月“2月”和“7月”之间的天数...所以这意味着for循环不能正常工作还是怎么的?为什么会这样!你能帮我一下吗??PS:我试图将循环中的j++更改为j+1,但Android Studio说“这不是一个声明”
我有一个定义doTry-doCatch块的路由。当在doCatch块中处理异常时,我希望将其传播到错误处理程序,以确保在本地处理后将消息添加到死信队列中。问题是我无法让错误处理程序的传播工作(“defaultErrorHandler called!”未打印到控制台)。我也尝试过onException,但也没有成功。 任何提示都非常感谢。此致,奥利弗
我正在做简单的Spring批量工作。当我启动作业时,它在无限循环中运行。它不会停止。根据我的时间表,它应该每10秒运行一次。但当工作开始时,它不会停止。它只是分别从读卡器、处理器和写入器打印系统输出。我正在为读者、处理者和作者创造工作机会。我正在按注释进行所有配置。不是通过xml。 下面是批处理配置 PersonReader。JAVA 人Writer.java 个人处理器。JAVA
有人能帮我吗?
我试图了解gRPC中的异常处理机制是如何工作的。 除了try-catch块之外,还有其他方法来处理运行时异常,例如服务器端的IllegalArgumentException吗? 例如,我有一些gRPC流式客户端服务,当传递的参数不满足深层次的一些断言时(在某些库中,例如,com.google.common.base.Preconditions),方法onNext抛出IllegalArgumentE