向 Ansible 脚本提供变量以升级 Payara

向 Ansible 脚本提供变量以升级 Payara

我正在尝试编写一个 Ansible 脚本来将 Payara 实例升级到较新的实例,方法是备份当前安装中的域,删除它,安装新版本的 Payara,然后恢复刚刚对其进行的备份。这似乎是升级 Payara 的推荐方法。

我在这方面取得了相当大的进展,部分是来自我已经编写的用于运行全新安装的 Payara 的代码,部分是我为这个脚本编写的新代码,但在最后一部分遇到了障碍。因为给定的 Payara 实例可能有多个域,所以我不得不弄清楚如何在 Ansible 中使用循环,但我仍然不完全理解它们的工作原理。我已经成功地完成了该过程的前半部分(提取所有域的备份),方法是找到 Payara 存储域的目录并对其进行循环,但恢复带来了麻烦,因为文件名每次都是唯一的——它将是该文件夹中唯一的文件,但即使分析了一段时间后,我也不明白如何引用实际上同时是两个循环的文件。

到目前为止我的代码(为了相关性而删减):

    - name: Get list of Payara domains
      find:
        paths: /opt/{{ payara_folder }}/glassfish/domains
        file_type: directory
      register: result_of_find

    - name: Run backup-domain on each of the Payara domains
      command: "/opt/{{ payara_folder }}/bin/asadmin backup-domain --backupDir /tmp/payara_backup {{ item.path | basename }}"
      with_items: "{{ result_of_find.files }}"

    - name: Run restore-domain on each of the Payara domains
      command: "/opt/{{ payara_folder }}/bin/asadmin restore-domain --fileName /tmp/payara_backup/{{ item.path | basename }}/**NAME OF BACKUP FILE HERE** --backupDir /tmp/payara_backup {{ item.path | basename }}"
      with_items: "{{ result_of_find.files }}"

如上所述,任务 1 和 2 运行良好,但我在任务 3 上遇到了困难:Payara 的备份提取会弹出一个类似的名称domain_yyyy_mm_dd_v00001.zip。我考虑添加一个任务,将所有备份重命名为类似于backup.zip步骤 2 和步骤 3 之间的名称,因为它们都在单独的子目录中,但 a) 我不知道 Payara 是否会接受具有不同命名布局的文件(我不明白为什么它不会接受?)并且 b) 这只会将识别文件名的问题转移到另一个任务。

对于我该如何处理此事有什么建议吗?

答案1

为什么不将您的command任务替换为shell任务和通配符?

- name: Run restore-domain on each of the Payara domains
  shell: >-
    /opt/{{ payara_folder }}/bin/asadmin restore-domain
    --fileName /tmp/payara_backup/{{ item.path | basename }}/*.zip
    --backupDir /tmp/payara_backup {{ item.path | basename }}
  with_items: "{{ result_of_find.files }}"

由于每个目录仅包含一个文件,我们可以写入/tmp/payara_backup/{{ item.path | basename }}/*.zip,然后 shell 将*.zip用适当的文件名替换我们的通配符 ( )。

请注意,我已经重新格式化了任务以提高可读性,但除了从到command的变化shell和在路径中使用通配符之外,它在语法上仍然与原始任务相同。

相关内容