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

관련 정보