我正在尝试应用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)
所以我的问题是:有没有办法可以设置盐状态以使用选择 2 而不引用完整路径(例如引用选择编号或命令)
答案1
选择的数字是不可预测的,因此这是行不通的。
您可以做的是调整盐状态,这样您就不必每次都手动更改路径:
{% 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-openjdk