我正在尝试应用salt.states.alternatives将默认的java设置为java 11。然而,我需要为openjdk设置完整的路径,其中包括每次版本更改时更改的版本号(这意味着我必须经常更新salt状态):
set-java-11:
alternatives.set:
- name: java
- path: /usr/lib/jvm/java-11-openjdk-11.0.19.0.7-1.el7_9.x86_64/bin/java如果我执行alternatives --config java,我可以看到路径被绑定到一个命令和一个选择号。
There are 3 programs which provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.372.b07-1.el7_9.x86_64/jre/bin/java)
2 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.19.0.7-1.el7_9.x86_64/bin/java)因此,我的问题是:是否有一种方法可以将salt状态设置为使用选择2而不引用完整路径(例如引用选择号或命令)
发布于 2023-05-23 11:22:24
选择的数字是不可预测的,所以这是行不通的。
您可以做的是调整salt状态,这样您就不必每次手动更改路径:
{% if salt["pkg.version"]("java-11-openjdk") %}
set-java-11:
alternatives.set:
- name: java
- path: /usr/lib/jvm/{{ salt["cmd.run"]("rpm -q java-11-openjdk") }}/bin/java
{% endif %}不幸的是,插槽无法直接使用,因为无法将文本预先添加到结果中。但是,您可以通过编写一个简单的自定义模块来完成然后可以在一个插槽中使用的操作:
def java_path():
return "/usr/lib/jvm/" + __salt__["cmd.run"]("rpm -q java-11-openjdk") + "/bin/java"set-java-11:
alternatives.set:
- name: java
- path: __slot__:salt:myutils.java_path()
- require:
- pkg: java-11-openjdkhttps://serverfault.com/questions/1131706
复制相似问题