質問
私はGradle/OSGIビルドをやっています。
OSGIバンドルビルは問題ありませんが、バンドルの展開を自動化したいと考えています。これにはグラードルタスクがあるとは思わないので、これはグルーヴィーな質問になります。 OSGIコンテナに展開するには、次のことを行います。
- OSGIコンテナポートへのtelnet
- SSコマンドを送信してバンドルをリストします
- 問題のバンドルを解析します
- 「アンインストール[ID]」コマンドを介してバンドルをアンインストールする
- 「インストールファイル:///バンドルへのパス」URLを介してバンドルをインストールする
- 結果を解析します
- Telnetセッションを終了します。
Groovyを使用してポートにTelnetを送信してコマンドを送信して出力を読む方法はありますか?
助けてくれてありがとう、フィル
解決
Telnetについては知りませんが、AntbuilderとこのようなSSHEXECタスクを使用してGroovyとSSHと仕事をしました。
class SshClient {
def host
def username
def password
def execute (def command) {
def ant = new AntBuilder()
ant.sshexec(host : host,
username : username,
password : password,
command : command,
trust : "true",
outputproperty : "result")
return ant.project.properties."result"
}
}
def ssh = new SshClient ( host: "myhost",
username : "myuser",
password : "secret")
println ssh.execute("ls")
クラスパスには、ant-jsch.jarとjsch-0.1.33.jar以上が必要です。
他のヒント
これは、通常のソケットとストリームリーダー /ライターを使用すると、単純に実行可能である必要があります。 Telnetは、テキストベースのプロトコルである単純なソケットI/Oのフロントエンドにすぎません。
だから、あなたのステップを行うために:
- 宛先ホスト/ポートに通常のソケットを作成する
- 「ss」を書く
- inputStreamReaderを作成します
- 利用可能なすべてを消費します
- バンドルIDを見つけるために解析します
- 「アンインストール」 + bundleidを送信します
- コマンドプロンプトが到着するまでストリームを消費 /アンインストール終了
- 「file:// path/」を送信します
- コマンドプロンプトが到着 /インストールが完了するまでストリームを消費します
- socket.close()
ええ、これはあなたがすでに書いた手順に似ていることを知っていますが、Telnetは実際のプロトコルではなく、テキストソケットのフロントエンドであるため、これは簡単に実行できるはずです。
所属していません StackOverflow