Ошибка "dest должно быть существующим каталогом" в Ansible - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь автоматизировать установку grafana apache_exporter, используя ansible в AWS ec2 экземплярах. При попытке запустить ansible playbook я получаю сообщение об ошибке: "dest должен быть существующим каталогом". Может кто-нибудь, пожалуйста, помогите мне решить эти проблемы.

enter image description here

---
- hosts: webservers
  remote_user: ubuntu
  become: yes
  vars:
    apache_exporter_version: 0.8.0
  tasks:
    - name: create group
      group:
        name: apache_exporter
        state: present
    - name: create user
      user:
        name: apache_exporter
        group: apache_exporter
        createhome: no
        system: yes
        state: present
    - name: create opt directory for prometheus
      file:
        path: /opt/apache_exporter
        state: directory
    - name: download apache exporter
      get_url:
         url: https://github.com/Lusitaniae/apache_exporter/releases/download/v{{ apache_exporter_version }}/apache_exporter-{{ apache_exporter_version }}.linux-amd64.tar.gz
        dest: /opt/apache_exporter
    - name: unarchive apache exporter
      unarchive:
        remote_src: yes
        src: /opt/apache_exporter/apache_exporter-{{ apache_exporter_version }}.linux-amd64.tar.gz
        dest: /opt/apache_exporter
        creates: /opt/apache_exporter/apache_exporter-{{ apache_exporter_version }}.linux-amd64  
    - name: create symlink to apache exporter
       file:
        path: /usr/local/bin/apache_exporter
        state: link
        src: /opt/apache_exporter/apache_exporter-{{ apache_exporter_version }}.linux-amd64/apache_exporter
    - name: install unit file to systemd
      template:
        src: apache_exporter.service
        dest: /etc/systemd/system/apache_exporter.service
    - name: configure systemd to use service
      systemd:
        daemon_reload: yes
        enabled: yes
        state: started
        name: apache_exporter.service

Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

Проблема возникает из-за того, что я запускаю dry, запустите тест с параметром "ansible -playbook --check", очевидно, из-за того, что файловый модуль не создает каталог в удаленной системе. Также решена проблема в разделе «скачать apache экспортер», как это было сказано @ sakibmoon

---
- hosts: webservers
  remote_user: ubuntu
  become: yes
  vars:
    apache_exporter_version: 0.8.0
  tasks:
    - name: create group
      group:
        name: apache_exporter
        state: present
    - name: create user
      user:
        name: apache_exporter
        group: apache_exporter
        createhome: no
        system: yes
        state: present
    - name: create opt directory for prometheus
      file:
        path: /opt/apache_exporter
        state: directory
    - name: download apache exporter
      get_url:
        url: https://github.com/Lusitaniae/apache_exporter/releases/download/v{{ apache_exporter_version }}/apache_exporter-{{ apache_exporter_version }}.linux-amd64.tar.gz
        dest: /opt/apache_exporter/apache_exporter-{{ apache_exporter_version }}.linux-amd64.tar.gz
    - name: unarchive apache exporter
      unarchive:
        remote_src: yes
        src: /opt/apache_exporter/apache_exporter-{{ apache_exporter_version }}.linux-amd64.tar.gz
        dest: /opt/apache_exporter
    - name: create symlink to apache exporter
      file:
        path: /usr/local/bin/apache_exporter
        state: link
        src: /opt/apache_exporter/apache_exporter-{{ apache_exporter_version }}.linux-amd64/apache_exporter
    - name: install unit file to systemd
      template:
        src: apache_exporter.service
        dest: /etc/systemd/system/apache_exporter.service
    - name: configure systemd to use service
      systemd:
        daemon_reload: yes
        enabled: yes
        state: started
        name: apache_exporter.service
0 голосов
/ 18 апреля 2020

Как говорит ошибка, в модуле Ansible unarchive должен существовать путь, заданный параметром dest. Вам нужно создать его, если он не существует.

Другая проблема в вашей задаче download apache exporter, вы загружаете файл в /opt/apache_exporter, который является файлом, но по тому же пути, что и dest для unarchive задача.

Вам необходимо использовать отдельное имя для этих путей и заранее создать каталог. Следующая книга должна решить вашу проблему.

- name: download apache exporter
  get_url:
    url: https://github.com/Lusitaniae/apache_exporter/releases/download/v{{ apache_exporter_version }}/apache_exporter-{{ apache_exporter_version }}.linux-amd64.tar.gz
    dest: /opt/apache_exporter.tar.gz
- name: create /opt/apache_exporter directory for unarchiving
  file:
    path: /opt/apache_exporter
    state: directory
- name: unarchive apache exporter
  unarchive:
    remote_src: yes
    src: /opt/apache_exporter/apache_exporter-{{ apache_exporter_version }}.linux-amd64.tar.gz
    dest: /opt/apache_exporter
    creates: /opt/apache_exporter/apache_exporter-{{ apache_exporter_version }}.linux-amd64
...