脚本Karaf shell命令?

时间:2014-10-17 22:38:40

标签: shell scripting apache-karaf karaf

我需要以非交互方式发出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功能),我不知道?

6 个答案:

答案 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

OpenDaylight's Vagrant-based L2Switch Tutorial中的工作示例。

答案 3 :(得分:1)

迟到了,但使用位于 etc/org.apache.karaf.features.cfg 文件中的 Features Boot 配置可以轻松解决此问题。

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

<块引用>

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

此文件有两个主要属性,featuresRepositoriesfeaturesBoot

<块引用>
  • featuresRepositories 包含功能存储库(功能 XML)网址的列表(以逗号分隔)。
  • 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以查看是否已安装所需的软件包。然后继续测试用例。