автоматизация telnet с помощью Groovy

Я делаю сборку gradle/OSGi.

У меня есть сборка пакетов OSGi, но я хочу автоматизировать развертывание пакетов. Я не думаю, что для этого есть задача gradle, поэтому это становится классным вопросом. Чтобы выполнить развертывание в контейнере osgi, выполните следующие действия:

  1. telnet к порту контейнера OSGi
  2. отправьте команду ss, чтобы получить список пакетов
  3. разобрать рассматриваемый пакет
  4. удалить пакет с помощью команды «удалить [ID]»
  5. установить пакет с помощью URL-адреса «установочный файл: ///путь к пакету»
  6. анализировать результаты
  7. выйти из сеанса телнета.

Есть ли способ подключиться к порту с помощью Groovy, отправить команды и прочитать вывод?

Спасибо за любую помощь, Фил


person phil swenson    schedule 14.08.2010    source источник


Ответы (2)


Я не знаю насчет telnet, но я работал с Groovy и SSH, используя AntBuilder и задачу sshexec следующим образом:

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 или выше в пути к классам.

person Christoph Metzendorf    schedule 14.08.2010
comment
Очень интересно. Можете ли вы выполнить несколько команд через один сеанс ssh? - person tinny; 19.05.2011
comment
Да, вы можете: либо разделяя команды внутри командной строки с помощью точки с запятой, либо используя свойство commandResource вместо свойства команды и указывая на файл, содержащий команды, которые должны быть выполнены. - person Christoph Metzendorf; 19.05.2011

Это должно быть просто выполнимо с обычным сокетом и Stream Readers/Writer. Telnet — это просто интерфейс для простого ввода-вывода сокетов, которые являются текстовыми протоколами.

Итак, чтобы сделать ваши шаги:

  • Создайте обычный сокет для хоста/порта назначения
  • Напиши "сс"
  • Создайте считыватель входного потока
  • Потребляйте все доступное
  • Проанализируйте, чтобы найти идентификатор вашего пакета
  • Отправить «удалить» + bundleId
  • Использовать поток до тех пор, пока не появится командная строка / удаление не будет завершено
  • Отправить "установочный файл://путь/"
  • Использовать поток до тех пор, пока не появится командная строка / установка не будет завершена
  • сокет.закрыть()

Да, я знаю, что это похоже на шаги, которые вы уже написали, но поскольку telnet — это не настоящий протокол, а просто внешний интерфейс для текстовых сокетов, это должно быть легко выполнимо для вас.

person ZeissS    schedule 16.08.2010