l'automatisation telnet avec Groovy
Question
Je suis en train de faire un gradle / build OSGi.
J'ai la construction OSGi bundle bien, mais à automatiser le déploiement bundle. Je ne pense pas qu'il y ait une tâche gradle pour cela, donc cela devient une question groovy. Pour déployer un conteneur OSGi vous procédez comme suit:
- telnet au port de conteneur OSGi
- Envoyer commande ss à la liste des paquets
- analyser le paquet en question
- Désinstaller le paquet via une commande "Désinstaller [ID]"
- installer le paquet via un "fichier d'installation: /// chemin de paquet" url
- parse les résultats
- exit session telnet.
Y at-il un moyen de telnet à un port en utilisant les commandes Groovy et envoyer et de lire la sortie?
Merci pour toute aide, phil
La solution
Je ne sais pas telnet, mais je travaille avec Groovy et SSH en utilisant la AntBuilder et la tâche sshexec comme ceci:
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")
Vous aurez besoin des fourmis jsch.jar et jsch-0.1.33.jar ou plus dans votre classpath.
Autres conseils
Cela devrait être tout simplement faisable avec une prise normale et lecteurs / Writer Stream. Telnet est juste un frontend pour simple prise i / o qui sont des protocoles à base de texte.
Alors, pour faire vos étapes:
- Créer une douille normale à l'hôte de destination / port
- Ecrire "ss"
- Créer un InputStreamReader
- Consommez tout disponible
- Parse pour trouver votre identifiant paquet
- Envoyer "désinstaller" + BundleID
- Consommez le flux jusqu'à ce que l'invite de commande arrive / désinstallation terminée
- Envoyer "fichier d'installation: // chemin /"
- Consommez le flux jusqu'à ce que l'invite de commande arrive / INSTALL terminé
- Socket.close ()
Ouais, je sais que cela ressemble les étapes que vous avez déjà écrit, mais comme telnet est pas un vrai protocole, mais juste un frontend à des prises de texte, cela devrait être facilement réalisable pour vous.