遍历目录中的 debian 文件并使用 ansible 按顺序安装
Loop over debian files in a directory and install sequentially using ansible
我在目录 /home/emgda/del/ 中有大约 250 个 Debian 文件,这些文件会定期更改并且必须在每天结束前安装。
所以我正在尝试编写一个 Ansible 脚本来循环此目录,将文件名保存在一个数组中,然后使用命令 sudo dpkg -i file_name
按顺序安装所有 Debian
到目前为止,下面是我列出目录中文件的代码,只需要添加 command:
以某种方式执行上面的命令,
---
- hosts: local
gather_facts: false
tasks:
- command: "ls /home/emgda/del/"
register: dir_out
- debug: var={{item}}
with_items: dir_out.stdout_lines
输出是
PLAY [local] ***********************************************************************************************************
TASK [command] ************************************************************************************************************************
changed: [localhost]
TASK [debug] ************************************************************************************************************************
ok: [localhost] => (item=dir_out.stdout_lines) => {
"dir_out.stdout_lines": [
"a.deb"
],
"item": "dir_out.stdout_lines"
}
PLAY RECAP ************************************************************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0
任何帮助将不胜感激。
Q: "I have Debian files in a directory /home/emgda/del/ which periodically changes and must be installed."
答:find the packages and install them in the loop with apt
- find:
path: '/home/emgda/del/'
patterns: '*.deb'
register: result
- apt:
deb: '{{ item.path }}'
loop: '{{ result.files }}'
可以 query plugin fileglob 并在一个任务中安装包
- apt:
deb: "{{ item }}"
loop: "{{ query('fileglob', '/home/emgda/del/*.deb') }}"
好吧,我使用以下技术解决了它。
---
- hosts: local
gather_facts: false
tasks:
- name: Making a list of files
shell: "ls /home/emgda/packages/"
register: command_result
- name: Installing Debian sequentially.
become: yes
shell: "dpkg -i /home/emgda/packages/{{item}}"
with_items:
- "{{ command_result.stdout_lines }}"
我在目录 /home/emgda/del/ 中有大约 250 个 Debian 文件,这些文件会定期更改并且必须在每天结束前安装。
所以我正在尝试编写一个 Ansible 脚本来循环此目录,将文件名保存在一个数组中,然后使用命令 sudo dpkg -i file_name
到目前为止,下面是我列出目录中文件的代码,只需要添加 command:
以某种方式执行上面的命令,
---
- hosts: local
gather_facts: false
tasks:
- command: "ls /home/emgda/del/"
register: dir_out
- debug: var={{item}}
with_items: dir_out.stdout_lines
输出是
PLAY [local] ***********************************************************************************************************
TASK [command] ************************************************************************************************************************
changed: [localhost]
TASK [debug] ************************************************************************************************************************
ok: [localhost] => (item=dir_out.stdout_lines) => {
"dir_out.stdout_lines": [
"a.deb"
],
"item": "dir_out.stdout_lines"
}
PLAY RECAP ************************************************************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0
任何帮助将不胜感激。
Q: "I have Debian files in a directory /home/emgda/del/ which periodically changes and must be installed."
答:find the packages and install them in the loop with apt
- find:
path: '/home/emgda/del/'
patterns: '*.deb'
register: result
- apt:
deb: '{{ item.path }}'
loop: '{{ result.files }}'
可以 query plugin fileglob 并在一个任务中安装包
- apt:
deb: "{{ item }}"
loop: "{{ query('fileglob', '/home/emgda/del/*.deb') }}"
好吧,我使用以下技术解决了它。
---
- hosts: local
gather_facts: false
tasks:
- name: Making a list of files
shell: "ls /home/emgda/packages/"
register: command_result
- name: Installing Debian sequentially.
become: yes
shell: "dpkg -i /home/emgda/packages/{{item}}"
with_items:
- "{{ command_result.stdout_lines }}"