我需要以非交互方式发出Karaf shell命令,最好是从脚本中发出。更具体地说,我需要以自动方式告诉Karaf feature:install
一组功能。
# 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功能),我不知道?
答案 0 :(得分:3)
使用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
答案 1 :(得分:2)
要非交互地发出Karaf shell命令(最好从脚本中发出),您也可以使用the Karaf client (scroll down to "Apache Karaf client")。要安装功能,请使用类似
的命令/opt/karaf/bin/client -r 7 "feature:install http; feature:install webconsole"
如果服务器尚未启动,-r
开关允许重试连接(我在Docker脚本中使用它)。
答案 2 :(得分:1)
如果保持密码分泌并不重要,可以使用sshpass发出非交互式Karaf shell命令。
sshpass -p karaf ssh -tt -p 8101 -o StrictHostKeyChecking=no karaf@localhost feature:install odl-l2switch-switch-ui
答案 3 :(得分:1)
迟到了,但使用位于 etc/org.apache.karaf.features.cfg
文件中的 Features Boot 配置可以轻松解决此问题。
根据以下链接https://karaf.apache.org/manual/latest/provisioning
<块引用>Apache Karaf 会自动安装启动功能,即使之前没有使用 feature:install 或 FeatureMBean 安装过。
此文件有两个主要属性,featuresRepositories
和 featuresBoot
。
请注意,一旦您更新此文件,Karaf 将在每次启动时尝试安装 featuresBoot
配置中列出的功能。因此,如果您希望自动化的只是安装功能(根据最初的问题),那么这是一个不错的选择。
答案 4 :(得分:0)
另一种选择是使用Expect。
This Expect script from OpenDaylight's CI安装并验证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
}}
}}
答案 5 :(得分:-1)
所以通常的做法是安装该功能,然后在bundle上循环:list | grep bundleName以查看是否已安装所需的软件包。然后继续测试用例。