J'ai un fichier .yml présent sur un serveur distant, je veux y apporter des modifications en utilisant le tissu python. Si cela peut être fait avec d'autres bibliothèques python, n'hésitez pas à partager. Je vous remercie

1
Harpreet Singh 7 mars 2019 à 15:51

2 réponses

Meilleure réponse

Vous essayez de modifier une ligne au milieu d'un fichier qui est imo n'est pas possible. Ce que vous pouvez faire, c'est de faire une copie du fichier distant sur votre ordinateur local avec les valeurs souhaitées que vous souhaitez modifier, puis de le renvoyer au serveur distant.

from fabric import Connection as connection, task

@task
def executeTask(ctx):
    with connection(host=dev_server, user=myuser) as c:
         c.put('PATH_TO_YOUR_YML_FILE_LOCALLY', 'PATH_TO_YOUR_REMOTE_YML_FILE')

N'oubliez pas de:

  1. Remplacez dev_server et myuser par l'IP et le nom d'utilisateur du serveur distant dessus
  2. mettez le code ci-dessus dans un fichier appelé fabfile.py et vous exécutez à partir de votre ligne de commande fab executeTask

Le code ci-dessus est compatible avec fabric 2.4

MODIFIER: En raison d'un problème d'autorisations, vous pouvez effectuer les opérations suivantes:

@task
def executeTask(ctx):
    with connection(host=dev_server, user=myuser) as c:
         c.put("PATH_TO_YOUR_YML_FILE_LOCALLY") # implicit to remote $HOME
         c.sudo("mv YOUR_FILE_NAME YOUR_DESIRED_LOCATION") # again implicitly with a CWD of $HOME 
         c.sudo("chown root:root YOUR_REMOTE_FILE") 

Référence : https://github.com/fabric/fabric/issues/1750#issuecomment- 406043571

0
Peshmerge 8 avril 2019 à 13:57

Si vous avez juste besoin de changer le numéro de port, vous pouvez utiliser sed comme ceci

def change_port(filename):
    with cd('/location'):
         run('sed -i "s/old_port_number/new_port_number/g" ' +filename)
1
oshaiken 7 mars 2019 à 16:24