大家好,我是 create17,见字如面。
今天给大家分享一个 Ambari 集成第三方服务的经典知识点,Ambari 如何根据配置开关量去判断是否增加新配置。
以集成 Kyuubi 为例:
需求如下:
Ambari 在集成 Kyuubi 时,如何实现点击开关量配置则实现 kyuubi.ha.client.class = org.apache.kyuubi.ha.client.zookeeper.ZookeeperDiscoveryClient,不选择则配置为空,并渲染到配置文件中。
逻辑分析与改造:
先在 kyuubi-defaults.xml 里面添加开关属性:
<property>
<name>kyuubi.ha.enabled</name>
<value>true</value>
<value-attributes>
<type>boolean</type>
</value-attributes>
<on-ambari-upgrade add="false"/>
<description>是否启用 Kyuubi 高可用</description>
</property>
然后在 param.py 文件中,编写逻辑:
kyuubi_ha_enabled = config['configurations']['kyuubi-defaults']['kyuubi.ha.enabled']
if kyuubi_ha_enabled:
kyuubi_ha_client_class = "org.apache.kyuubi.ha.client.zookeeper.ZookeeperDiscoveryClient"
else:
kyuubi_ha_client_class = ""
然后在 .j2 模板文件中,引用变量就好了。在 KYUUBI/package 目录下,创建 templates 目录,用来放置 .j2 模板文件,比如名叫 kyuubi-defaults.conf.j2。
kyuubi.ha.client.class = {{ kyuubi_ha_client_class }}
...省略其余配置
然后在服务生命周期 .py 文件,添加 j2 文件渲染逻辑,即:将 kyuubi-defaults.conf.j2 内容渲染到 kyuubi-defaults.conf 中:
File(format("{kyuubi_conf_dir}/kyuubi-defaults.conf"),
owner=params.kyuubi_user,
group=params.kyuubi_group,
mode=0644,
content=Template("kyuubi-defaults.conf.j2")
)