首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用命令而不是路径设置java可选方案

使用命令而不是路径设置java可选方案
EN

Server Fault用户
提问于 2023-05-23 03:02:55
回答 1查看 30关注 0票数 1

我正在尝试应用salt.states.alternatives将默认的java设置为java 11。然而,我需要为openjdk设置完整的路径,其中包括每次版本更改时更改的版本号(这意味着我必须经常更新salt状态):

代码语言:javascript
复制
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,我可以看到路径被绑定到一个命令和一个选择号。

代码语言:javascript
复制
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而不引用完整路径(例如引用选择号或命令)

EN

回答 1

Server Fault用户

发布于 2023-05-23 11:22:24

选择的数字是不可预测的,所以这是行不通的。

您可以做的是调整salt状态,这样您就不必每次手动更改路径:

代码语言:javascript
复制
{% 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 %}

不幸的是,插槽无法直接使用,因为无法将文本预先添加到结果中。但是,您可以通过编写一个简单的自定义模块来完成然后可以在一个插槽中使用的操作:

代码语言:javascript
复制
def java_path():
  return "/usr/lib/jvm/" + __salt__["cmd.run"]("rpm -q java-11-openjdk") + "/bin/java"
代码语言:javascript
复制
set-java-11:
  alternatives.set:
    - name: java
    - path: __slot__:salt:myutils.java_path()
    - require:
      - pkg: java-11-openjdk
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1131706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档