"dest must be an existing dir " Ansible 中的错误
"dest must be an existing dir " error in Ansible
我正在尝试在 AWS ec2 实例中使用 ansible 自动安装 grafana apache_exporter。在尝试 运行 ansible 剧本时,我收到错误:"dest must be an existing dir "。谁能帮我解决这些问题。
---
- 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
如错误所说,在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
问题出现是因为我正在 运行宁干 运行 测试 "ansible-playbook --check" 参数,显然是因为文件模块没有在远程系统中创建目录。还解决了@sakibmoon
提到的 "download apache exporter" 部分中的问题
---
- 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
我正在尝试在 AWS ec2 实例中使用 ansible 自动安装 grafana apache_exporter。在尝试 运行 ansible 剧本时,我收到错误:"dest must be an existing dir "。谁能帮我解决这些问题。
---
- 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
如错误所说,在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
问题出现是因为我正在 运行宁干 运行 测试 "ansible-playbook --check" 参数,显然是因为文件模块没有在远程系统中创建目录。还解决了@sakibmoon
提到的 "download apache exporter" 部分中的问题---
- 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