该产品是Windows服务器上的webapp。部署(高级)需要执行以下步骤:
安装javajdk
安装tomcat
安装win_service
配置Java regkes
配置tomcat
安装webapp
启动服务
我使用静态清单进行生产和暂存,group_vars和角色(使用ansible-galaxy创建),因此存在某种结构。
解决方案1
将所有内容都放入一个巨大的剧本中。听起来不太好,但是它的优点是您可以知道以前安装的变量,例如
tomcat
需要知道JAVA_HOME
的位置...在javajdk
的安装位置,由于计算机上有多个Java,因此没有全局JAVA_HOME
...解决方案2 />用小角色全力以赴。听起来不错,但角色应该彼此独立。我没有找到解耦任务的方法。单一角色例如
install_tomcat
,config_tomcat
并依次设置一个具有上述角色的剧本? 但是一个角色怎么知道的,例如下一个角色所需的路径名。 ->安装设置路径,配置需要知道。.我真的不确定要使角色独立。
解决方案3
解决方案2。有一个主要的剧本仅包含角色,并尽可能地划分为多个角色。在
./roles/vars/main.yml
中具有独立的变量名Somehow(?)在所有需要的
var
定义所在的剧本的变量优先级中找到更高的位置。在内部将变量传递给角色,或者简单地否决角色变量。 例如。产品具有服务,该服务名称通常是
tomcat
的路径名的一部分。 tomcat
的名称不应取决于服务,因此角色中应该有tomcat_install_path
,但产品中也应该有service_name
。因此,如果将产品的手册称为服务名称应该是名称的一部分,则以完全不同的部署调用tomcat_install
时,就不应摆弄服务名称。我会采用解决方案3,但尚未找到一种方法来进行设置。专家的意见是,解决方案3可行,是另一个更好的解决方案,还是有第四个解决方案?
#1 楼
我建议按照Ansible Best Practices文档中的结构来构建代码:,并遵循geerlingguy等对ansible星系平台做出主要贡献的结构。
如果一个人将采用一种截然不同的结构,那么将来真的很难重用这个可折叠星系社区中的角色,而一个人必须重新发明轮子。
#2 楼
简短的答案:您在这里进行编程。考虑像“按功能打包”之类的编程标准(cleancode)并构建可重复使用的角色并表达角色原因。例如
roles:
- role: jdk
- role: tomcat
(contains tasks with 'install tomcat', 'configure tomcat' )
(requires jdk)
- role: the_wepapp
(requires tomcat)
Futhermore:潜在角色,例如jdk永远不应该知道tomcat角色等等...
评论
谢谢。关于我的问题的具体做法:您将如何解耦和重复使用,例如javajdk安装和它在tomcat安装中的重用?当它们比变量解耦时,例如拍拍javaddk将需要“扮演”角色。在tomcat安装中如何在不更改变量的情况下如何处理呢?有使用可变优先级的通用概念吗?是这样的吗?
– Michael Hoeller
17年11月26日在15:40
我将检查ansible星系并安装jdk和tomcat角色。除非角色不可用,否则我不会自己写角色。例如,github.com/silpion/ansible-tomcat和ansiblebit.oracle-java
– 030
18年1月4日在21:46
请注意,我没有测试tomcat角色。您可以在本地测试tomcat角色。如果这样不起作用,则可以使用来自银河系的另一个tomcat角色。
– 030
18年1月4日在21:52