我如何通过 Ansible 在气隙系统上安装 snap 包

how could I install a snap package via Ansible on an air-gapped system

在连接到互联网的系统上通过 Ansible 安装 snap 包非常简单。例如:

  - name: Install microk8s
    become: yes
    snap:
      name: microk8s
      classic: yes
      channel: "{{ microk8s_version }}"

现在我需要在一组气隙节点(没有直接连接到互联网)上执行相同的操作。 我可以为所需的包执行 'snap download',并将它们移动到目标机器。 但是如何在 Ansible 中做到这一点呢?对此有任何支持吗?还是我必须使用 shell/command 模块?

感谢

如果您可以将包放到 Ansible 服务器上,则以下代码会将文件复制到目标。类似于以下代码的东西应该可以工作。

  - name: copy files/local/microk8s.deb
    copy: 
      src: "files/local/microk8s.deb"
      dest: "~/microk8s.deb"
      remote_src: no

其中files/与剧本处于同一水平。

我没有测试过这个,但是这个方法适用于其他模块。

  - name: install microk8s, file on local disk
    become: yes
    snap:
      name: /path/to/file

使用@Kevin C 的提示,我能够使用以下剧本解决问题

  - name: copy microk8s snap to remote
    copy: 
      src: "{{ item }}"
      dest: "~/microk8s/"
      remote_src: no
    with_fileglob: 
      - "../files/microk8s/*"

  - name: snap ack the new package
    become: yes
    shell: |
       snap ack ~/microk8s/microk8s_1910.assert
       snap ack ~/microk8s/core_10583.assert

  - name: install microk8s, file on local disk
    become: yes
    snap:
      name: "~/microk8s/core_10583.snap"

  - name: install microk8s, file on local disk
    become: yes
    snap:
      name: "~/microk8s/microk8s_1910.snap"
      classic: yes

我希望这对其他人也有帮助。 很高兴看到这个记录。