J’essaie depuis ce soir de prendre en main waarp-gateway et notamment les règles post-transfert. J’ai fait plusieurs scénarios et je butte sur un :
Je souhaite initier un transfert avec la commande waarp-gateway transfert add pour aller récupérer un fichier sur un serveur distant.
Une fois récupéré, y appliquer une première règle pour déplacer le fichier du dossier in vers le dossier out ; puis une seconde règle de transfert pour envoyer le fichier sur un autre serveur distant.
J’ai donc mes deux serveurs distants ajoutés en tant que partenaires, deux règles de transferts « send_to_client » et « default ».
Sauf qu’au moment du deuxième transfert, j’ai une erreur « Error on remote partner: file does not exist » dont je ne parviens pas à me débarrasser puisque je n’arrive pas à changer l’instruction 'remote full path".
Voici mes configurations et messages d’erreurs :
Règles :
# waarp-gateway -a 'http://admin@localhost:8080' rule list
Rules:
● Rule default (send)
Comment:
Path: default
Local directory:
Remote directory: ~ => peu importe ce que je paramètre ici, se rajoute devant /var/lib/waarp... cf erreurs
Temp receive directory:
Pre tasks:
Post tasks:
Error tasks:
Authorized agents: <all>
● Rule send_to_client (receive)
Comment:
Path: client_send
Local directory:
Remote directory:
Temp receive directory:
Pre tasks:
Post tasks:
├─Command MOVERENAME with args: {"path":"#OUTPATH#/#ORIGINALFILENAME#"}
└─Command TRANSFER with args: {"file":"#OUTPATH#/#ORIGINALFILENAME#","to":"distant_client","as":"root","rule":"default"}
Error tasks:
Authorized agents: <all>
Transfert :
# waarp-gateway -a 'http://admin@localhost:8080' transfer add -f 'test.txt' -w 'receive' -p 'distant_server' -l 'root' -r 'send_to_client'
The transfer of file test.txt was successfully added.
Erreurs
● Transfer 48 (receive as client) [DONE]
Remote ID: 1761206342862766080
Protocol: sftp
File to retrieve: test.txt
File saved as: test.txt
Rule: send_to_client
Requested by: root
Requested to: distant_server
Full local path: /var/lib/waarp-gateway/out/test.txt
Full remote path: test.txt
File size: 16
Start date: 2024-02-24 02:48:08.427057 +0100 CET
End date: 2024-02-24 02:48:11.601458 +0100 CET
Bytes transferred: 16
● Transfer 49 (send as client) [ERROR]
Remote ID: 1761206356171292672
Protocol: sftp
File to send: /var/lib/waarp-gateway/out/test.txt
Rule: default
Requested by: root
Requested to: distant_client
Full local path: /var/lib/waarp-gateway/out/test.txt
Full remote path: ~/var/lib/waarp-gateway/out/test.txt => avec le "~" qui se rajoute
File size: 16
Start date: 2024-02-24 02:48:11.600065 +0100 CET
End date: N/A
Step: StepSetup
Bytes transferred: 0
Error code: TeUnknownRemote
Error message: Error on remote partner: file does not exist
Au final, quoi que je mette dans le Remote directory de default, ça vient se rajouter devant /var/lib/waarp-gateway/out/test.txt
Je bloque depuis un moment sans avancer, est-ce que quelqu’un aurait la solution ? ça me parait tout bête mais ça m’échappe.
C’est le Local Directory qui doit être utiliser.
Dans le cadre d’un transfert en envoie le fichier est lu dans le Local Directory et écrit sur le partenaire dans le Remote Directory.
Pour un transfert en réception le fichier est lu dans le Remote Directory du partenaire distant et est écrit dans le Local Directory de la machine hôte.
Par conséquent le message « Error on remote partner: file does not exist » indique que le dossier ~/var/lib/waarp-gateway/out/ n’existe pas.
Si vous supprimez le RemoteDirectory de la règle default le transfert devrait se dérouler normalement.
Bonjour ! Merci pour votre retour et vos explications
Si je reprends, ma règle default est bien en send, donc c’est le remote path qui est utilisé.
Ce que je trouve étonnant c’est que le remote path par défaut est ‹ /var/lib/waarp-gateway/out/ ›, et que quoi que je mette dans default, ça s’ajoute en amont de cette valeur.
Voici ce qu’il se passe si j’enlève le remote directory de default :
# waarp-gateway -a 'https://admin@waarp-gateway.XXX.fr:8080' transfer add -f 'test.txt' -w 'receive' -p 'distant_server' -l 'root' -r 'send_to_client'
Password:
The transfer of file test.txt was successfully added.
# waarp-gateway -a "https://admin@waarp-gateway.XXX.fr:8080" rule list
Password:
Rules:
● Rule default (send)
Comment:
Path: default
Local directory:
Remote directory:
Temp receive directory:
Pre tasks:
Post tasks:
Error tasks:
Authorized agents: <all>
● Rule send_to_client (receive)
Comment:
Path: client_send
Local directory:
Remote directory:
Temp receive directory:
Pre tasks:
Post tasks:
├─Command MOVERENAME with args: {"path":"#OUTPATH#/#ORIGINALFILENAME#"}
└─Command TRANSFER with args: {"file":"#OUTPATH#/#ORIGINALFILENAME#","to":"distant_client","as":"root","rule":"default"}
Error tasks:
Authorized agents: <all>
# waarp-gateway -a 'https://admin@waarp-gateway.XXX.fr:8080' transfer get 52
Password:
● Transfer 52 (send as client) [ERROR]
Remote ID: 1762058844315320320
Protocol: sftp
File to send: /var/lib/waarp-gateway/out/test.txt
Rule: default
Requested by: root
Requested to: distant_client
Full local path: /var/lib/waarp-gateway/out/test.txt
Full remote path: /var/lib/waarp-gateway/out/test.txt
File size: 16
Start date: 2024-02-26 11:15:40.612214 +0100 CET
End date: N/A
Step: StepSetup
Bytes transferred: 0
Error code: TeUnknownRemote
Error message: Error on remote partner: file does not exist
Pour information, si je créé le /var/lib … sur le partenaire distant_client, le transfert se termine comme attendu, dans le répertoire de destination indiqué
Par défaut, dans le fichier de configuration, le GatewayHome est effectivement égal à /var/lib/waarp-gateway
Ce qui semble correspondre à comment la gateway renvoie son fichier dans mes exemples au dessus.
Mais je ne comprends pas la praticité de ce fonctionnement, est-il plutôt possible tout simplement de paramétrer une règle pour envoyer dans le dossier racine de l’utilisateur utilisé pour la connexion SFTP ? @Marakiis Est-ce qu’un tel paramètre existe ? Mes tests en ce sens ne sont pas concluants.
Vous voulez simplement déposer le fichier dans le dossier racine de l’utilisateur SFTP ?
Dans ce cas il suffit de laisser le remote directory de la règle vide.
Le remote directory de la règle définit le dossier dans lequel le fichier sera déposé (récupéré dans le cas d’un transfert receive).
à tête bien reposé, il a été plus clair pour moi de voir ce qui n’allait pas.
Le paramètre TRANSFER with args: {« file »:« #OUTPATH#/#ORIGINALFILENAME# » …
faisait que le client SFTP essayait d’envoyer le fichier dans un répertoire /var/lib/waarp-gateway/out/ qui correspond à #OUTPATH#
En laissant uniquement #ORIGINALFILENAME# cela fonctionne comme attendu, à savoir le fichier est déposé dans le dossier racine de l’utilisateur