Aller au contenu

Haproxy 1.5.dev25-13


Messages recommandés

bon dernière tentative si on veut bien : c'est à la meme place :

original :

    def check(self):
        with open(os.devnull, 'w') as devnull:
            error = subprocess.check_output([self.start_stop_status, 'check'], stderr=subprocess.STDOUT)
        return error

modification (dernière ligne)

    def check(self):
        with open(os.devnull, 'w') as devnull:
            error = subprocess.check_output([self.start_stop_status, 'check'], stderr=subprocess.STDOUT)
        return error.decode('string_escape')
Lien vers le commentaire
Partager sur d’autres sites

A chaque fois que j'ai fait une modification, j'ai laissé la ligne import re à la fin des imports comme dans le message


ajouter cette ligne après les ligne "import":

import re

Donc à chaque test que j'ai fait, j'ai laissé cette ligne import re. Il ne fallait pas ?

Donc quand j'ai testé "return error.decode('string_escape')", il y avait toujours la ligne import re.

Désolé si j'ai mal compris.

Modifié par CHILLY996
Lien vers le commentaire
Partager sur d’autres sites

Ou alors la chaine de caractère contient des caractères particulier, dans le lien que j'ai donnée plus haut on voit cette chaine de caractère "←7←[r←[999;999H←[6n"

Si ca peut être utile, l'affichage de cette chaîne de caractères est le résultat de la commande "resize" qui à été ajoutée dans "/etc/profile" depuis DSM 5.1.

Modifié par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

donc, à l'écriture du fichier, dans tous les cas, la chaine suivante est ajoutée au retour de l'erreur :

←7←[r←[999;999H←[6n

on se trouve donc apparemment dans le fichier direct.py à la ligne suivante (78):

error = subprocess.check_output([self.start_stop_status, 'check'], stderr=subprocess.STDOUT)

selon cool raoul, ca proviendrai de l'ajout de la commande resize dans le /etc.profile

j'aurait bien tester quelque truc avec cette fonction, mais en 5.0, la commande est semble inconnue

Lien vers le commentaire
Partager sur d’autres sites

Si c'est le cas n'importe quelle commande lancée de cette manière devrait être impactée, y compris :

import subprocess


subprocess.check_output(['exit 0'], stderr=subprocess.STDOUT)
Quelqu'un peut tester ça sur son NAS en lançant un Python avec /usr/local/python/bin/python ?

$ /usr/local/bin/python foo.py
Traceback (most recent call last):
  File "foo.py", line 3, in <module>
    subprocess.check_output(['exit 0'], stderr=subprocess.STDOUT)
  File "/usr/lib/python2.7/subprocess.py", line 566, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
**EDIT**

Meme erreur avec "/usr/local/python/bin/python"

**EDIT#2**

plus d'erreur en remplacant "exit 0" par "ls"

et que le "resize" de /etc/profile soit commenté ou pas ne change rien

Modifié par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

Ha ça doit être ['exit', '0'] et non ['exit 0'].

Meme erreur: je pense que subprocess.check_output essaie de forker directement la commande ("exit" ici) et pas un sous-shell ("sh -c 'exit 0"") et donc il cherche un binaire "exit" dans le PATH et ne le trouve pas.

Edit: Donc ça fonctionne, pas de caractères bizarres dans l'output?

Avec "ls" je n'en ai pas, mais c'est pas si étonnant vu qu’apparemment si il n'y a pas d'exécution de shell en login (sh -i). A noter que le stdout de "ls" ne s'affiche pas non plus (suis pas un spécialiste de python pour expliquer)

En utilisant (pour forcer l'exécution des profiles):

subprocess.check_output(['sh', '-l', '-c', 'pwd'], stderr=subprocess.STDOUT) 

Je n'ai toujours pas de caractères de contrôle ni d'erreur, par contre c'est plus long lorsque le "resize" est décommenté.

Modifié par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

Ca doit être du au fait qu'on lance le script via un shell en passant par le start-stop-status de HAProxy. Si tu édites le start stop status de HAProxy pour mettre un "ls" à la place d'un appel à haproxy pour faire un check de config tu auras aussi les caractères bizares.

Je n'ai pas haproxy installé. Mais en attendant mieux, ne peut-on pas suggérer à ceux qui rencontrent le problème de simplement commenter le "resize" de "/etc/profile"?

Lien vers le commentaire
Partager sur d’autres sites

Si ca peut être utile, l'affichage de cette chaîne de caractères est le résultat de la commande "resize" qui à été ajoutée dans "/etc/profile" depuis DSM 5.1.

Pour cette solution j'y est pensé mais PS1 ne contient pas la chaine 7[....

(Ps je n'ai pas encore fait la maj)

Bn : je viens de voir ton commentaire dans le sujet plink, il y a donc une variable resize dans le fichier profile ^^

Cette customisation de prompt est tout de même problématique

Modifié par devildant
Lien vers le commentaire
Partager sur d’autres sites

Pour cette solution j'y est pensé mais PS1 ne contient pas la chaine 7[....

(Ps je n'ai pas encore fait la maj)

Pourquoi parles-tu de PS1? Sur mon NAS, après login, je ne trouve pas de caracteres de controle dans PS1: dans le "/etc/profile" par défaut c'est simplement "`hostname`> " qui est mis dans cette variable)

Lien vers le commentaire
Partager sur d’autres sites

Bon ben c'est réglé, il faut juste lancer la commande ici : https://github.com/SynoCommunity/spksrc/blob/develop/spk/haproxy/src/dsm-control.sh#L25

Depuis python directement ici : https://github.com/SynoCommunity/spksrc/blob/develop/spk/haproxy/src/app/application/direct.py#L79

C'est pas terrible de dupliquer le code donc à la limite ce serait mieux de faire un check_call avec un block try/except : https://docs.python.org/2/library/subprocess.html#subprocess.check_call

Si quelqu'un peut fixer ça et faire une PR je veux bien, je n'aurai pas le temps avant plusieurs jours.

Modifié par Diaoul
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.