AnsibleはINIローカルとリモートを比較します。

AnsibleはINIローカルとリモートを比較します。

私のAnsibleサーバーとリモートシステムにJavaプロパティファイルがあります。

サーバー: /opt/deployment/application/build.properties

app=application
build=1.0.15
etc=etc

最新バージョンまたは以前のバージョンを含むことができるリモートシステム(インストールされている場合)で同じファイルを使用できます。

リモート:/opt/application/build.properties

app=application
build=1.0.13
config1=config
etc=etc

ansible.buildin.ini を使用して、リモート・システムのビルド番号をサーバーと比較できます。

if server > remote - do my upgrade block

if remote == "" (file does not exist) - do my install block

otherwise do nothing

ansible.buildin.iniがローカルサーバー用であるかリモートシステム用であるかはわかりません(何かが欠けている可能性があります)。違いがある場合は、両方のシステムがUbuntu Linuxです。

答え1

私の意見の後ろに大きな写真を提供するためです。ファイルをコピーし、変更が発生した場合はハンドラに通知します。あるいは、タスクに変数を登録して確認することもできますが、when : <registered_var>.changed通常はハンドラが優先されます。

---
- hosts: my_remote_group
  
  tasks:
    - name: Make sure remote ini file is aligned with controller
      copy:
        src: /opt/deployment/application/build.properties
        dest: /opt/application/build.properties
        owner: some_relevant_user
        group: some_relevant_group
        mode: 0660
      notify: upgrade_my_package

  handlers:
    - name: Upgrade my package
      listen: upgrade_my_package
      debug:
        msg: "Do whatever is needed to upgrade my package if ini files are different. Use an include_task module if needed"

答え2

最後にこれを行うことができたので、私が使用したコードを共有したかったのですが…

- name: Check if App is installed
  stat:
    path: "{{ app_buildfile }}"
  register: APPbuildfile

- name: Get Build Number
  shell: grep build {{ APP_buildfile }}  | awk -F'=' ' { print $2 } ' | tr -d ' '
  when: APPbuildfile.stat.exists
  register: APP_currentbuild

- debug:
    msg: Current version {{ APP_currentbuild.stdout }}, Deployment Version {{ APP_deployment_version }}

- name: New Installation
  block:
    - Install Actions....
    - name: Set actioned fact
      set_fact:
        actioned: 1

  when: APP_currentbuild is not defined


- name: Upgrade Installation
  block:
    - Upgrade Actions...

    - name: Set actioned fact
      set_fact:
        actioned: 2
  when: APP_currentbuild.stdout|length == 0 or APP_currentbuild.stdout is version(APP_deployment_version,'lt')
  
- name: Post Install Tasks
  block:
    - Post install actions...

  when: actioned is defined

関連情報