내 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