私の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