Как получить ответ, чтобы посмотреть в контейнере, с которого он работает, вместо серверов, представленных в инвентаре - PullRequest
0 голосов
/ 04 января 2019

Настройка: Ansible инициализируется и запускается из контейнера докера. В этот контейнер загружено git-репо, содержащее книги с книгами и инвентарь.

Что делает playbook: Конкретный playbook, над которым я работаю, запускает простой findmnt на всех хостах, перечисленных в инвентаре, и записывает вывод в плоский текстовый файл, который я затем извлекаю.

Фактическая проблема: ANSIBLE контейнер не работает в отдельном режиме, и поэтому, когда запуск завершен, нет способа получить эти текстовые файлы результатов. Поскольку в контейнере находится git-репо, я попытался спрятать их в него, но команда снова выполняется на хостах-инвентаре, а не в контейнере, из которого работает Ansible. Я попробовал несколько методов, чтобы сделать то же самое, но не могу найти способ, чтобы ansible делал набор операций внутри контейнера, из которого он выполняется. Как мне справиться с этой ситуацией.

Playbook:

---
      - name: get the nfs mounts reports 
        hosts: 2017_CI
        become: true
        vars :
        nfs_results: "/tmp/{{ host_name }}.txt"
        host_name: "{{ inventory_hostname }}"


        tasks:
           - name: "get the list of nfs mounts on {{ host_name }} "
           #shell: 'findmnt -lo source,target,fstype,label,options,used -t  nfs'
           #AIX  nfsstat -m
           shell: 'mount -l -t nfs'
           register: nfs_output
           failed_when: "'FAILED' in nfs_output.stderr"    

           - name: Store the nfs report ouput file  
             copy:
             content: "{{ nfs_output.stdout }}\n"
             dest: "{{ nfs_results }}"
             owner: root
             group: root
             mode: 0777
             force: yes
             register: nfs_results 

             - name:  Fetching the output to ansible host
               fetch:
                src: "/tmp/{{ inventory_hostname }}.txt"
               dest: "/tmp/"
               flat: yes
             - pause:
               minutes: 2


             - name:  copying file with  permissions
               copy:
                src: "/tmp/{{ inventory_hostname }}.txt"
               dest: "/data/web/nfsmountInfo/"
              owner: root
              group: root
               mode: 0777 




          # - name: Transfer file from ServerA to ServerB
                 #   synchronize:
      #     src: "/tmp/{{ inventory_hostname }}.txt"
      #     dest: "/data/web/nfsmountInfo/"
      #     mode: push
      #   delegate_to: "localhost"
      #   become: yes
      #   become_user: root


      # - pause:
      #     minutes: 1

      # - name: git configuration fo email setup
      #   git_config:
      #     name: user.email
      #     scope: global
      #     value: 'xxxx@x.com'
      # - name: git configuration fo email setup
      #   git_config:
      #     name: user.name
      #     scope: global
      #     value: 'myUser'

      # - name: Add the files into staging workspace
      #   shell: git add .
      #   args:
      #       chdir: '/home/jenkins/workspace/TestPipelines/NFSTestAnsible/nfsmountInfo/'

      # - name: Commit the changes
      #   shell: git commit -m "Update the nfsmount reports"
      #   args:
      #       chdir: '/home/jenkins/workspace/TestSaddamPipelines/NFSTestAnsible/nfsmountInfo/'

      # - name: Set origin to include username and password.
      #   shell: "git remote set-url origin https://user@http://<gitServer>/inf-build-ansible.git"
      # - name: Push to origin.
      #   shell: "git push origin nfs-mnt-testing"

1 Ответ

0 голосов
/ 30 января 2019

Вы можете delegate_to: 127.0.0.1 или использовать сокращение local_action для каждой задачи (ссылка https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html), например:

---
- hosts: all
  tasks:
  - name: run task on inventory hosts
    debug: 
      msg: 'this task will execute on all hosts'

  - name: delegate task to 127.0.0.1
    debug: 
      msg: 'this task is delegated to the ansible control server'
    delegate_to: 127.0.0.1

  - name: use the local_action syntax for delegation
    local_action:
      module: debug
      msg: 'executing on the control server'
...