【问题标题】:Script Karaf shell commands?脚本 Karaf shell 命令?
【发布时间】:2014-12-13 14:07:24
【问题描述】:

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

【问题讨论】:

    标签: shell scripting apache-karaf karaf


    【解决方案1】:

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

    【讨论】:

    • 这在处理 karaf 时可能通常是有用的信息,但它不是问题的答案(如何以非交互方式向 karaf 发出命令)
    【解决方案2】:

    使用 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
    

    【讨论】:

    • 我看到 Failed to get the session 错误,但这可能是另一个问题。感谢您的信息!
    • 看起来您需要一个带有客户端的用户。在这种情况下,请尝试使用 -u 'user'。虽然不知道 ODL 使用的是哪个用户,但可以在 etc 文件夹中的 users.properties 文件中轻松找到。
    • karaf = karaf,_g_:admingroup 似乎是相关行。仍在使用./bin/client -u karaf list 看到Failed to get the session.
    • 这是一个“有点”迟到的回应,但我认为其他人会发现这个答案很有用。即使使用“-u karaf”,我也会弹出相同的错误,为我解决的问题是添加“-h localhost”
    • 也是一个迟到的回应......只是想提一下,以确保在连接到客户端之前您正在调用 bin/start。之后,有时需要 10 秒(或更长时间)才能启动。
    【解决方案3】:

    如果密码保密不重要,可以使用 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 中的工作示例。

    【讨论】:

      【解决方案4】:

      另一种选择是使用 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】:

        要以非交互方式发出 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 脚本中使用它)。

        【讨论】:

          【解决方案6】:

          迟到了,但这个问题可以使用位于etc/org.apache.karaf.features.cfg 文件中的功能启动配置轻松解决。

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

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

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

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

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

          【讨论】:

            猜你喜欢
            • 2017-10-08
            • 2020-11-30
            • 2016-11-28
            • 1970-01-01
            • 1970-01-01
            • 2014-11-21
            • 2016-11-14
            • 2013-02-17
            • 2015-03-30
            相关资源
            最近更新 更多