Aller au contenu principal

Ordonnanceurs < Les incontournables < Autosys

Communiquer avec le RCS

Le Remote Commande Server est un composant, installé sur chaque agent, permettant de réaliser des opérations à distance. Communiquer avec lui permet de bénéficier d’un outil distant multi-plateforme.

E. Angenault

Maitriser ce composant permettra de bénéficier des mêmes fonctionnalités que les interfaces fournies par CA.

8 juillet 2008

 POPULARITE : 1439 visites

Installer OpenSSL

La communication se fait en SSL, la première étape consiste à télécharger OpenSSL pour disposer d’un client.

- Télécharger http://www.openssl.org/

L’installation est triviale et ne nécessite pas d’explication particulière, il n’est nul besoin de générer une clé ou quoi que ce soit pour pouvoir se connecter à l’agent.

Configuration de l’agent

Le RCS limite les connexions aux clients dument référencés dans le fichier validips.

Si vous souhaitez récupérer un fichier sur la machine distante, il faudra ajouter le répertoire dans le fichier valid_dirs.

Tout changement nécessite un arrêt/relance du RCS.

Connexion

Pour vous connecter a un agent host en utilisant le port host, vous devrez lancer la commande suivante :

openssl s_client -host {{host}} -port {{host}}

host machine avec laquelle vous souhaitez communiquer
port Port du RCS (par défaut : 4444

Les informations suivantes sont renvoyées :

Loading 'screen' into random state - done
CONNECTED(00000784)
depth=1 /C=US/ST=NY/L=Islandia/O=CA/OU=Unicenter/CN=AutoSys/emailAddress=ca.com
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
0 s:/C=US/ST=NY/L=Islandia/O=CA/OU=Unicenter/CN=AutoSys/emailAddress=ca.com
  i:/C=US/ST=NY/L=Islandia/O=CA/OU=Unicenter/CN=AutoSys/emailAddress=ca.com
1 s:/C=US/ST=NY/L=Islandia/O=CA/OU=Unicenter/CN=AutoSys/emailAddress=ca.com
  i:/C=US/ST=NY/L=Islandia/O=CA/OU=Unicenter/CN=AutoSys/emailAddress=ca.com
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDZDCCAs2gAwIBAgIBATANBgkqhkiG9w0BAQQFADB3MQswCQYDVQQGEwJVUzEL
MAkGA1UECBMCTlkxETAPBgNVBAcTCElzbGFuZGlhMQswCQYDVQQKEwJDQTESMBAG
A1UECxMJVW5pY2VudGVyMRAwDgYDVQQDEwdBdXRvU3lzMRUwEwYJKoZIhvcNAQkB
FgZjYS5jb20wHhcNMDMwNTI3MTgxODU3WhcNMTMwNTI0MTgxODU3WjB3MQswCQYD
VQQGEwJVUzELMAkGA1UECBMCTlkxETAPBgNVBAcTCElzbGFuZGlhMQswCQYDVQQK
EwJDQTESMBAGA1UECxMJVW5pY2VudGVyMRAwDgYDVQQDEwdBdXRvU3lzMRUwEwYJ
KoZIhvcNAQkBFgZjYS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK7V
90fAxujjKI/gqWjlPoP+Adczn0l0EIpxLifBtJWFVv3mE/FaAXKyhiRmTT08ZJuN
Cef7w89HuQrutRCxZ7yaYFdabzfq7rKGG8fqT9ApPJ9IFEBMZzwtSF1Ej6oj6BwB
5Mur5TAU9F0sJyU6UtveeRqAYcyHc9POGo0oJbmbAgMBAAGjgf8wgfwwCQYDVR0T
BAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNh
dGUwHQYDVR0OBBYEFBgGPCnYPdvYfy2kzhkJbjjvZQuDMIGhBgNVHSMEgZkwgZaA
FPj6i7X0hus6D7yqXLk7zQLbDj06oXukeTB3MQswCQYDVQQGEwJVUzELMAkGA1UE
CBMCTlkxETAPBgNVBAcTCElzbGFuZGlhMQswCQYDVQQKEwJDQTESMBAGA1UECxMJ
VW5pY2VudGVyMRAwDgYDVQQDEwdBdXRvU3lzMRUwEwYJKoZIhvcNAQkBFgZjYS5j
b22CAQAwDQYJKoZIhvcNAQEEBQADgYEArHm7EvV1oI2HHUxSg5w+cSwR80x/OWE0
iJY+ZqjU0BhchyoqXhQANddR5E2xq+l5P0kOAjUUwT5OSHwIo1eMwa0HLRjimcQt
Ae8CT38oLLQpuOFlty1RDCmD0g/V8pjyvRQ+VXt9mqnFj+vu3HlXEANZWAX92qRz
YPinGSA7DTw=
-----END CERTIFICATE-----
subject=/C=US/ST=NY/L=Islandia/O=CA/OU=Unicenter/CN=AutoSys/emailAddress=ca.com
issuer=/C=US/ST=NY/L=Islandia/O=CA/OU=Unicenter/CN=AutoSys/emailAddress=ca.com
---
No client certificate CA names sent
---
SSL handshake has read 2260 bytes and written 314 bytes
---
New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
   Protocol  : TLSv1
   Cipher    : EDH-RSA-DES-CBC3-SHA
   Session-ID: 4F9C7686A8A8A415D4AE628D54DC1823D50C00658EEF099C28AE750F4D4C6BF8

   Session-ID-ctx:
   Master-Key: 22528065ED3A01071F923146153781613DE2CED57FB72EC028BBA38836318C8A
A18EFE861886864F6D93AE417DFACC20
   Key-Arg   : None
   Start Time: 1213373927
   Timeout   : 300 (sec)
   Verify return code: 19 (self signed certificate in certificate chain)
---

La réponse de l’agent est la suivante :

4.5.1
Listener for UAJM AutoSysAdapter
EOS

Le EOS indique que l’agent est à l’écoute, il ne reste plus qu’à lui fournir les paramètres.

Pinger l’agent

Cette commande est simplement une garantie qu’on est correctement connecté, ce que l’on sait déjà puisque l’agent répond mais cela permet à l’interface Java de valider le bon fonctionnement.

Cette commande est la plus simple :

4.5.1
Listener for UAJM AutoSysAdapter
EOS

Envoyer PING puis Entrée

L’agent renvoit :

SUCCESS
EOS

Stopper la connexion

La communication peut être stoppée à tout moment par la commande SHUTDOWN.

Récupérer un fichier

Récupérer un fichier permet à l’interface d’obtenir la sortie standard ou la sortie d’erreur du traitement ainsi que le log de l’agent (si vous le supprimez pas en cas de SUCCESS de job).

Pour cela, on a besoin de quatre paramètres et de la commande fin :
- L’action : JOBLOG
- L’instance : INS (on prendra l’instance par défait d’Autosys : ACE)
- Le fichier et son répertoire (le répertoire doit obligatoirement être dans le fichier valid_dirs).
- Un timestamp au format posix (nombre de secondes depuis le 1er Janvier 1970) mais on peut mettre n’importe quel nombre
- La commande de fin : OVERANDOUT

Si l’on veut récupérer un fichier toto dans le répertoire %AUTOUSER%\out de l’instance ACE, on tapera les 4 commandes suivantes :

JOBLOG
ACE
%AUTOUSER%\out\toto
1
OVERANDOUT

L’agent répond :

FRESH
1213366831
26
?      ?++/+þÕ? m"¥+?   EOS

FRESH indique que tout va bien, si l’agent est incapable de répondre vous obtiendrez STALE, il faut alors réessayer plus tard.

Le chiffre correspond à l’heure actuelle au format Posix. 26 est la taille du message renvoyé. Le contenu du fichier est compressé au format gzip (sans entête). EOS indique que vous pouvez continuer le dialogue.

La communication est loggé dans le répertoire logfiles de l’agent, le résultat de la communication précédente est le suivant :

[18:31:37.3060]   1100  ACCEPTED connection from 184.0.105.19, [sock fd= 424]
[18:31:37.3060]   3040  Created new Thread id: 3040 this will handle ip: 184.0.105.19
[18:31:42.4620]   3040  socket: 424 DATA: JOBLOG
[18:31:42.4620]   3040  socket fd = 424, -- request is: JOBLOG
[18:31:44.6180]   3040  socket: 424 DATA: ACE
[18:32:11.9780]   3040  socket: 424 DATA: %AUTOUSER%\out\toto
[18:32:14.6030]   3040  socket: 424 DATA: 1
[18:32:19.2900]   3040  socket: 424 DATA: OVERANDOUT
[18:32:19.2900]   3040  Expanded env var AUTOUSER to value C:\Autosys\H02\autouser
[18:32:19.2900]   3040  New logfile path is C:\Autosys\H02\autouser\out\toto
[18:32:22.3060]   3040  The loop count = 1, for thread id 3040, socket number 424

On distingue les différents paramètres envoyés à l’agent et la manière dont celui ci résout la variable d’environnement pour retrouver le fichier.

Récupérer le log du demon

Pour récupérer le log du démon il faut dialoguer avec le RCS du serveur.

Les commandes snt un peut différentes :
- L’action devient EPLOG
- On indique toujours l’instance
- On indique ensuite de lignes que l’on veut récupérer
- Puis éventuellement la chaine de caractères que l’on veut trouver
- et enfin l’OVERANDOUT

Le format renvoyé est le même que pour le job log.

Exemple :

EPLOG
ACE
100
OVERANDOUT

L’agent journalise les informaitons suivantes :

[18:33:20.5710]   3040  socket: 424 DATA: EPLOG
[18:33:20.5710]   3040  socket fd = 424, -- request is: EPLOG
[18:33:24.4150]   3040  socket: 424 DATA: ACE
[18:33:29.9780]   3040  socket: 424 DATA: 100
[18:33:34.5090]   3040  socket: 424 DATA: OVERANDOUT
[18:33:34.5090]   3040  EPLOG request for instance: ACE lines = 100
[18:33:34.5090]   3040  Sending the eplog

Executer le JIL

Le RCS permet aussi d’exécuter un JIL sur l’agent, il est ainsi possible de créer, de modifier ou de supprimer des traitements à partir d’une machine qui ne dispose d’aucun exécutable autosys.

Par contre, il est impératif que les binaires soit sur la partie RCS car il ne fera ni plus ni moins qu’un appel à ces binaires.

Les paramètres doivent permettre de s’authentifier avec un compte :
- L’action est JIL
- On indique l’instance
- Puis un utilisateur *
- Le compte OS
- Le mot de passe correspond qui correspond au compte OS
- La machine ou le domaine
- Le jil (en une seule ligne)
- et enfin l’OVERANDOUT**

* L’utilisateur n’apparait ni dans le champ owner ni dans l’autotrack. ** La commande ’exit’

Exemple :

JIL
ACE
eric
autosys
{password}
domain
update_job: JOB1
job_type: c
command: echo test
machine: machine1
update_job: JOB2job_type: c
command: hostname
machine: machine1
exit
OVERANDOUT

Les logs Unix sont plus parlants que les logs windows :

[10:21:35.2207]      1  ACCEPTED connection from 184.12.17.163, [sock fd= 6]
[10:21:35.6124]     16  socket fd = 6, -- request is: JIL
[10:21:35.6719]     16  os_user: auto_ACE and tmp_os_user:auto_ACE
[10:21:35.6725]     16  update_job: JOB1
[10:21:35.6726]     16  job_type: c
[10:21:35.6727]     16  command: echo test
[10:21:35.6728]     16  machine: machine1
[10:21:35.6729]     16  update_job: JOB2
[10:21:35.6729]     16  job_type: c
[10:21:35.6730]     16  command: hostname
[10:21:35.6731]     16  machine: machine1
[10:21:35.6732]     16  exit
[10:21:35.6733]     16  request_type:JIL,tmp_os_user:autosys, and os_user:autosys
[10:21:36.1370]     16  Jil exit status = 0
[10:21:36.1375]     16  Jil success, on sock 6 to Web Interface.
[10:21:36.1379]     16  Sent 14 bytes of exit code = 0 to socket 6
[10:21:36.1384]     16  Jil failed and sent 480 bytes of standard output to socket 6
[10:21:36.1387]     16  The loop count = 1, for thread id 16, socket number 6
[10:21:36.1388]     16  socket fd = 6, -- request is: OVERANDOUT
[10:21:36.2702]     16  Shutdown received... closing socket 6

Modifier le calendrier

Le RCS peut modifier le calendrier en appelant directement l’autocal_asc, cette fonctionnalité est malheureusement limitée car il n’est pas possible d’afficher les dates et on ne peut pas utiliser les heures.

Pour l’affichage on pourra lister les dates par une requête SQL mais la non prise en compte des heures est plus génante.

Les paramètres seront les suivants :
- l’action : CALENDAR_UPDATE
- l’instance
- le compte OS
- le mot de passe
- le nom du calendrier
- l’offset (décalage par rapport à l’heure locale)
- l’action à effectuer : A (pour ADD) ou D (pour Delete)
- la liste des dates au format Posix (nombre de secondes depuis le 1 Janvier 1970)
- OVERANDOUT pour terminer

Envoyer un évènement

Un évènement peut être envoyé à travers le RCS en exécutant l’utilitaire sendevent.

Les paramètres sont :
- l’action : SENDEVENT
- l’instance
- le compte OS
- le mot de passe
- les arguments du sendevent
- OVERANDOUT pour terminer

Si tout va bien, on obtient un Exit Code = 0, sinon il n’y a aucun message (il faut alors voir le log du RCS).

Exemple :

CALENDAR_UPDATE
ACE
autosys
password
ERIC
7200
A
1215511980
OVERANDOUT

La réponse est l’exit code de l’exécutable :

Exit Code = 0
EOS

Le log permet de voir le fonctionnement :
- un fichier temporaire est créé et sauvegardé dans le tmp du RCS
- la date posix est décalé avec l’offset
- elle est converti avec le format attendu par l’autocal_asc
- le fichier temporaore est envoyé

[12:09:43.5288]     50  socket fd = 6, -- request is: CALENDAR_UPDATE
[12:13:19.6954]     50  Calendar_Update
[12:13:19.6955]     50  Instace = ACE
[12:13:19.6956]     50  User = autosys
[12:13:19.6957]     50  PW = ******
[12:13:19.6958]     50  Cal Name = ERIC
[12:13:19.6958]     50  Offset = 7200
[12:13:19.6959]     50  Cal Action = A
[12:13:19.6960]     50  Cal Dates = 1215511980
[12:13:19.6961]     50  Over and out? = OVERANDOUT
[12:13:19.6963]     50  Temp file for calendar items = /tmp/calIn50.tmp
[12:13:19.6965]     50  Entering while loop
[12:13:19.6966]     50  Date_token = 1215511980
[12:13:19.6967]     50  After atol conversion utc_tmp = 1215511980
[12:13:19.6968]     50  Calling timeConvert
[12:13:19.6971]     50  Writing the date to the temp file, date = 07/08/2008

[12:13:19.6972]     50  After fwrite
[12:13:19.6973]     50  Entered cal request function
[12:13:19.6974]     50  Got user handle ok
[12:13:19.6983]     50  Got autosys variable OK
[12:13:19.6984]     50  Command Line = /opt/autosys/autosys45/bin/autocal_asc
[12:13:20.0942]     50  Jil exit status = 0
[12:13:20.0947]     50  autocal_asc success, on sock 6 to user interface.
[12:13:20.0951]     50  Sent 14 bytes of exit code = 0 to socket 6
[12:13:20.0953]     50  Calendar return code = 1
[12:13:20.0954]     50  Successful completion of Calendar Request!
[12:13:20.0956]     50  The loop count = 4, for thread id 50, socket number 6
[12:13:20.0957]     50  socket fd = 6, -- request is: OVERANDOUT

Exemple :

SENDEVENT
ACE
autosys
password
-E SET_GLOBAL -G TEST=ERIC

Log du RCS :

[11:28:23.5728]     48  socket fd = 6, -- request is: SENDEVENT
[11:28:40.4396]     48  Jil exit status = 0
[11:28:40.4402]     48  sendevent success, on sock 6 to user interface.
[11:28:40.4406]     48  Sent 14 bytes of exit code = 0 to socket 6
[11:28:40.4408]     48  Successful completion of SendEvent Request!
[11:28:40.4410]     48  The loop count = 9, for thread id 48, socket number 6
[11:28:40.4411]     48  socket fd = 6, -- request is:
[11:28:40.4411]     48  Invalid request: ******
[11:28:40.4414]     48  The loop count = 10, for thread id 48, socket number 6
[11:28:40.4415]     48  Shutdown received... closing socket 6

En cas d’erreur, la sortie est directement renvoyée au client :

SENDEVENT
ACE
autosys
password
-E SET_GLOBAL -G TEST=ERIC
Exit Code = 1
The SET_GLOBAL syntax is:

       -G Global=Value, or
          Global=DELETE to Delete the Global.

EOS

Le log du RCS sera alors le suivant :

[11:13:10.8770]     48  socket fd = 6, -- request is: SENDEVENT
[11:13:30.3662]     48  Jil exit status = 256
[11:13:30.3671]     48  sendevent failed and sent 14 bytes of exit code = 1 to socket 6
[11:13:30.3674]     48  sendevent failed and sent 89 bytes of standard output to socket 6
[11:13:30.3675]     48  Output from sendevent being sent to user interface: The SET_GLOBAL syntax is:

       -G Global=Value, or
          Global=DELETE to Delete the Global.

[11:13:30.3677]     48  SendEvent request failed
[11:13:30.3679]     48  The loop count = 4, for thread id 48, socket number 6

Obtenir l’heure de l’agent

Cette fonctionnalité est très intéressante quand on dispose d’agent sur différents fuseaux horaires.

Les paramètres sont :

- l’action : ASCLOCKTIME
- l’instance
- l’heure au format Posix (utiliser time0 pour les tests
- OVERANDOUT

La réponse est un exit code suivi de l’heure au format de l’autocal_asc.

Exemple :

ASCLOCKTIME
ACE
1215511980
OVERANDOUT
Exit Code = 0
07/08/2008  12:13:00

Vérifier un compte à distance

La vérification permet d’authentifier un compte sur la machine distante, ce compte est utilisé dans

CheckUser
/bin/CheckUserLogon.exe autosys password
OVERANDOUT
true
28
EOS
[12:34:51.5166]     57  socket fd = 5, -- request is: CheckUser
[12:35:02.5515]     57  performing checkuser for user autosys
[12:35:04.3293]     57  Authorization is successful
[12:35:04.3294]     57  Checkuser passed for user autosys
[12:35:04.3298]     57  Exiting check user branch
[12:35:04.3300]     57  The loop count = 1, for thread id 57, socket number 5
[12:35:04.3301]     57  socket fd = 5, -- request is: OVERANDOUT

Message d’erreur si le mot de passe ne correspond pas au compte :

CheckUser
/bin/CheckUserLogon.exe autosys test
OVERANDOUT
false
-1
EOS

Log RCS :

[12:36:54.6335]     57  socket fd = 5, -- request is: CheckUser
[12:37:02.2652]     57  performing checkuser for user autosys
[12:37:02.9151]     57  CheckUser -- Invalid password
[12:37:02.9153]     57  Checkuser Failed for user autosys
[12:37:02.9153]     57  OS_encrypt from check user passing = -1
[12:37:02.9154]     57  encrypt form get_encrypt() call = 49
[12:37:02.9158]     57  Exiting check user branch
[12:37:02.9160]     57  The loop count = 2, for thread id 57, socket number 5
[12:37:02.9160]     57  socket fd = 5, -- request is: OVERANDOUT

Vérifier un groupe

Un autre exécutable permet de vérifier l’appartenance d’un compte à un groupe.

CheckUser
/bin/CheckUserGroup.exe auto_ACE autosys
OVERANDOUT
EOS

Si le compte appartient au groupe on n’obtient aucune réponse.

Log RCS :

[12:42:11.0450]     58  socket fd = 6, -- request is: CheckUser
[12:42:20.5044]     58  performing checkgroup  154 id2 =  154
[12:42:20.5045]     58  Checkgroup passed for user auto_ACE and autosys
[12:42:20.5047]     58  The loop count = 1, for thread id 58, socket number 6
[12:42:20.5048]     58  socket fd = 6, -- request is: OVERANDOUT

Par contre, si le compte n’appartient pas au groupe, un false suivi d’un -1 est renvoyé.

CheckUser
CheckUserGroup.exe auto_ACE test
OVERANDOUT
false
-1
EOS

Log RCS :

[12:42:33.1188]     58  socket fd = 6, -- request is: CheckUser
[12:42:42.1246]     58  performing checkuser for user auto_ACE
[12:42:42.1313]     58  CheckUser -- Invalid password
[12:42:42.1314]     58  Checkuser Failed for user auto_ACE
[12:42:42.1315]     58  OS_encrypt from check user passing = -1
[12:42:42.1316]     58  encrypt form get_encrypt() call = 82
[12:42:42.1319]     58  Exiting check user branch
[12:42:42.1320]     58  The loop count = 2, for thread id 58, socket number 6
[12:42:42.1321]     58  socket fd = 6, -- request is: OVERANDOUT

Thèmes
Au coeur du produit

Les articles "au coeur du produit" s’intéressent à des points techniques particuliers.

Voir aussi...

Le document issu de http://Ordonnancement.org est mis à disposition sous les termes de la licence Creative Commons, vous pouvez l'utilisez dans vos documents à condition de citer l'auteur E. Angenault, vous êtes aussi libre de le modifier. Par contre, vous devez le redistribuer dans les mêmes conditions et la commercialisation ne peut se faire qu'avec l'accord de l'auteur.