9

我需要以非交互方式发出 Karaf shell 命令,最好是从脚本中发出。更具体地说,我需要以feature:install自动化的方式告诉 Karaf 一组特性。

# Attempt to install a feature in a way I could script
bash> bin/karaf feature:install myFeature
# Drops me into Karaf shell
karaf> feature:uninstall myFeature
Error executing command: Feature named 'myFeature' is not installed
# Feature wasn't installed

这可能吗?是否有其他方法可以解决我缺少的这个问题(自动安装一组 Karaf 功能)?

4

6 回答 6

4

使用 bin/karaf 您可以使用登录提示启动 Karaf,如果您想启动 Karaf 以便发出命令,您首先需要在服务器模式下启动 Karaf。为此,请使用 bin/start shell 脚本。现在您可以使用 bin/client 或 bin/shell 命令以无头模式与 Karaf 通信。

例如:

./bin/client list
START LEVEL 100 , List Threshold: 50
ID | State  | Lvl | Version | Name
----------------------------------------------------------------------------------
72 | Active |  80 | 0       | mvn_org.ops4j.pax.web.samples_war_4.1.0-SNAPSHOT_war

这应该已经适用于所有版本的 Karaf(可能不是 2.2.x 行;-))
如果您使用的版本是 3.0.x 或更高版本,您可能需要将用户添加到命令中。

./bin/client -u karaf list
于 2014-10-19T09:18:07.823 回答
3

要以非交互方式发出 Karaf shell 命令,最好从脚本中发出,您也可以使用Karaf 客户端(向下滚动到“Apache Karaf 客户端”)。要安装功能,我使用类似的命令

/opt/karaf/bin/client -r 7 "feature:install http; feature:install webconsole"

-r如果服务器尚未启动,则该开关允许重试连接(我在 Docker 脚本中使用它)。

于 2018-07-11T07:00:59.713 回答
1

如果保持密码保密并不重要,则可以使用 sshpass 发出非交互式 Karaf shell 命令。

sshpass -p karaf ssh -tt -p 8101 -o StrictHostKeyChecking=no karaf@localhost feature:install odl-l2switch-switch-ui

OpenDaylight 的基于 Vagrant 的 L2Switch 教程中的工作示例。

于 2016-11-21T19:21:20.940 回答
1

迟到了,但这个问题可以很容易地使用etc/org.apache.karaf.features.cfg文件中的 Features Boot 配置来解决。

根据以下链接https://karaf.apache.org/manual/latest/provisioning

引导功能由 Apache Karaf 自动安装,即使之前没有使用 feature:install 或 FeatureMBean 安装过。

该文件有 2 个主要属性,featuresRepositoriesfeaturesBoot

  • featuresRepositories 包含功能存储库(功能 XML)URL 的列表(逗号分隔)。
  • featuresBoot 包含要在启动时安装的功能列表(以逗号分隔)。

featuresBoot请注意,一旦您更新此文件,Karaf 将在每次启动时尝试安装配置中列出的功能。因此,如果您想要自动化的只是安装功能(根据原始问题),那么这是一个不错的选择。

于 2021-02-09T23:18:02.247 回答
0

另一种选择是使用 Expect。

这个来自 OpenDaylight 的 CI 的 Expect 脚本安装并验证了一个 Karaf 功能。这是一段摘录:

# Install feature
expect "$prompt"
send "feature:install odl-netvirt-openstack\r"
expect {{
  "Error executing command: Can't install feature" {{
    send_user "\nFailed to install test feature\n"
    exit 1
  }}
}}
于 2018-07-10T18:09:16.300 回答
-1

所以一般的做法是安装该功能,然后在 bundle:list | 上循环。grep bundleName 查看是否安装了您需要的包。然后你继续你的测试用例。

于 2014-10-17T23:07:45.080 回答