1
votes

Je veux remplacer une chaîne entre les délimiteurs en recherchant dans le fichier de propriétés en utilisant ansible

Je veux remplacer une chaîne entre deux caractères @

Quelque chose comme ça

Salut, je suis @ Something.great @ d'une planète @ planet.outside.earth @

à partir d'un fichier de propriétés où les valeurs sont

Something.great = Niel Armstrong planet.outside.earth = Mars

Cela devrait donc convertir le texte ci-dessus en

Salut, je suis Niel Armstrong d'une planète Mars

Je dois y parvenir en utilisant Ansible

En utilisant la recherche et le remplacement

EDIT 1:

Non Pour les deux réponses ci-dessous. Je n'ai aucune idée des clés que j'ai entre N nombre de fichiers. Je dois rechercher une expression régulière dans un dossier contenant 100 fichiers pouvant contenir 1000 clés entre @ myKey @.

Je dois donc rechercher d'abord quelle est la valeur du fichier dans ce cas, myKey qui doit provenir de certains recherche regex, puis recherche cette valeur de recherche dans un fichier de propriétés de recherche où la valeur de myKey est présente.

Mon fichier de propriétés ressemble à ceci.

myKey=Ankit
YourKey=Kevin
OtherKey=Vladimir

p >


0 commentaires

3 Réponses :


1
votes

Réponse :

 TASK [debug] 
 "msg": "Hi I am Niel Armstrong from a planet Mars"

Sortie :

---
- hosts: local_test # local_test
  vars:
    string: "Hi I am @Something.great@ from a planet @planet.outside.earth@"
    something:
      great: "Niel Armstrong"
    planet:
      outside:
        earth: "Mars"
  gather_facts: false
  tasks:
    - debug:
        msg: "{{ string | replace('@Something.great@', something.great) | replace ('@planet.outside.earth@', planet.outside.earth) }}"


0 commentaires

2
votes

Utilisez replace le module, si la chaîne est dans un fichier

- template:
    src: test.j2
    dest: "{{ path_to_file_with_the_substituted_text }}"

, ou utilise regex_replace filtre si la chaîne est disponible dans une variable

$ cat test.j2 
Hi I am {{ Something.great }} from a planet {{ planet.outside.earth }}


Si vous remplacez les marqueurs «@@» par «{{}}», les variables seront remplacées. Par exemple

  vars:
    string: "Hi I am {{ Something.great }} from a planet {{ planet.outside.earth }}"
    Something:
      great: "Niel Armstrong"
    planet:
      outside:
        earth: "Mars"
  tasks:
    - debug:
        var: string

, ou avec le modèle

- set_fact:
    string: "{{ string | regex_replace( item.regexp, item.replace) }}"
  loop:
    - regexp: '@Something.great@'
      replace: 'Niel Armstrong'
    - regexp: '@planet.outside.earth@'
      replace: 'Mars'

et la tâche ci-dessous

- replace:
    path: "{{ path_to_template }}"
    regexp: "{{ item.regexp }}"
    replace: "{{ item.replace }}"
  loop:
    - regexp: '@Something.great@'
      replace: 'Niel Armstrong'
    - regexp: '@planet.outside.earth@'
      replace: 'Mars'


0 commentaires

1
votes

J'ai trouvé la solution.

Je vais d'abord chercher dans le répertoire le regex spécifique et le stocker dans Register.

  1.  - debug:
            msg="{{lookup('file', '{{file}}')}}"
          register: fileContent
    
        - name: Storing the content of the file
          set_fact:
            fileString: "{{fileContent.msg}}"
    
     - name: Find the tokens (@----@) in the fileString
          set_fact:
            tokens: "{{ fileString | regex_findall(regexp)}}"
          vars:
            regexp: '\@.*?\@'
    
        - name: Print Token Objects
          debug:
            var: tokens
    
        - debug:
            msg="{{ lookup('ini', '{{item}} type=properties file=/lookup.properties') }}"
          with_items:
           - "{{tokens}}"
          register: myresult
    
        - debug:
            var : myresult
    
    
       - name: Replace the token in the configuration files
          replace:
            path: {{file}}
            regexp: '{{token}}' 
            replace: "{{ lookup('ini', '{{token}} type=properties file=/lookup.properties')}}"
          with_items: "{{tokens}}"
          loop_control:
            loop_var: token
    
    
  2. Je vais écrire la liste des fichiers dans un fichier texte séparé config.txt

 - name: Loop through the tasks
      include_tasks: read-replace.yaml
      with_items: "{{ lookup('file', '/config.txt').splitlines() }}"
      loop_control:
        loop_var: file
  1. Je vais maintenant parcourir le fichier de configuration pour chaque fichier dans read-replaceyaml
  - name: Write list of files to be read for tokens
      lineinfile: 
        path: /config.txt 
        line: "{{item.file.path}}"
        create: yes 
        state: present
      with_items: 
        - "{{filesname}}"
  1. Dans read-replace.yml

Je vais lire le contenu du fichier et remplacer le jeton en même temps

  - name: Search Tokens
        find:
          paths: "{{ HOME_DIR }}"
          hidden: yes
          contains: "^.*(@.*@).*$"
          recurse: no
          use_regex: yes
          file_type: file
          patterns: "^(?!.*pattern\\.sh).*$"
        register: filesname


0 commentaires