遍历目录中的 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 }}"