Ansible:使用动态创建的字典跟踪更改

时间:2020-12-29 20:07:35

标签: ansible

我有一个角色要对 Oracle 数据库软件运行修补程序。 role/patchrole/main.yml 中的 main.yml 看起来像这样。我想跟踪修补进度的状态,并在此角色针对同一个 Oracle 主目录运行的情况下跳过这些状态。说前3个通过了,第4个失败了。所以当我下次跑步时,前三个会被跳过,我会继续第四个,依此类推。

这是我的角色 ma​​in.xml 用于演示目的:

[oracle@anstrlsrv tasks]$ cat main.yml
---
- name: Setting oh and ver Facts 
  set_fact:
    oh: "{{ oracle_home|regex_replace('/','_') }}"
    ver: "{{ oracle_home|basename }}"

- name: Setting opatchzip, patch_top, rblist, and aplist Facts
  set_fact:
    opatchzip: "{{ opatch[ver].filename }}"
    patch_top: "{{ patch_loc[ver] }}"
    rblist: "{{ oneoff_patches_rollback[ver] | default([]) }}"
    aplist: "{{ oneoff_patches_apply[ver] | default([]) }}" 
    trkfile: "{{ tracklocn }}_{{ oh }}_{{ patch_cycle }}.trk"

- name: Oracle Home being patched
  debug: msg={{ oracle_home }}
- name: Version of Oracle Home being patched
  debug: msg={{ ver }}
- name: One-Off Patches to be rolled back
  debug: msg={{ rblist }}
- name: One-Off Patches to be applied
  debug: msg={{ aplist }}
- name: Status Tracker File
  debug: msg={{ trkfile }}
[oracle@anstrlsrv tasks]$ 

[oracle@anstrlsrv tasks]$ 

输出如下:

[oracle@anstrlsrv dbpatching]$ ansible-playbook test.yml -e "host=dbsrv1.localdomain dbname=awrwrd"

PLAY [dbsrv1.localdomain] **********************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************************
ok: [dbsrv1.localdomain]

TASK [Get database home] ****************************************************************************************************************************************************************************************************************
ok: [dbsrv1.localdomain]

TASK [Save active database homes list] **************************************************************************************************************************************************************************************************
ok: [dbsrv1.localdomain]

TASK [set_fact] *************************************************************************************************************************************************************************************************************************
ok: [dbsrv1.localdomain]

TASK [Patch Oracle Homes Main] **********************************************************************************************************************************************************************************************************

TASK [oracle-patch : Setting oh and ver Facts] ******************************************************************************************************************************************************************************************
ok: [dbsrv1.localdomain]

TASK [oracle-patch : Setting opatchzip, patch_top, rblist, and aplist Facts] ************************************************************************************************************************************************************
ok: [dbsrv1.localdomain]

TASK [oracle-patch : Oracle Home being patched] *****************************************************************************************************************************************************************************************
ok: [dbsrv1.localdomain] => {
    "msg": "/oracle/db/19.0.0"
}

TASK [oracle-patch : Version of Oracle Home being patched] ******************************************************************************************************************************************************************************
ok: [dbsrv1.localdomain] => {
    "msg": "19.0.0"
}

TASK [oracle-patch : One-Off Patches to be rolled back] *********************************************************************************************************************************************************************************
ok: [dbsrv1.localdomain] => {
    "msg": [
        30621255, 
        29213893, 
        29867728, 
        29802382, 
        28318139
    ]
}

TASK [oracle-patch : One-Off Patches to be applied] *************************************************************************************************************************************************************************************
ok: [dbsrv1.localdomain] => {
    "msg": [
        28318139, 
        29213893, 
        28788272, 
        31431771, 
        32044280
    ]
}

TASK [oracle-patch : Status Tracker File] ***********************************************************************************************************************************************************************************************
ok: [dbsrv1.localdomain] => {
    "msg": "logs/track/dbsrv1__oracle_db_19.0.0_oct_2020.trk"
}

PLAY RECAP ******************************************************************************************************************************************************************************************************************************
dbsrv1.localdomain    : ok=11   changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[oracle@anstrlsrv dbpatching]$ 

我的想法是动态构建此文件 logs/track/dbsrv1__oracle_db_19.0.0_oct_2020.trk 并跟踪状态。所以我希望这个文件最初创建如下,然后我会不断更新状态。

所需的初始文件:

/oracle/db/19.0.0:
  30621255: 
    action: rollback
    status:
  29213893: 
    action: rollback
    status:
  29867728
    action: rollback
    status:
  29802382
    action: rollback
    status:
  28318139
    action: rollback
    status:

  28318139
    action: apply
    status:
  29213893
    action: apply
    status:
  28788272
    action: apply
    status:
  31431771
    action: apply
    status:
  32044280
    action: apply
    status:

随着补丁的进行,我会不断更新状态。我认为 abt jinja2 模板是这样的。我还没有尝试过这个,但只是想进入这一行:

cat tracker.yml.j2 
---
{{ ver }}:
  {{ type | to_nice_yaml(width=80, indent=2) | indent(2) }}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

谢谢大家,我用测试手册解决了这个问题。将尽快尝试将其整合到我的角色等中。但我很好。再次感谢您的调查。

[oracle@anstrlsrv lib]$ cat tmpl1.yml 
---
- hosts: localhost
  vars:
    oracle_home: /oracle/db/19.0.0
    rblist: [30621255, 29213893, 29867728, 29802382, 28318139]
    aplist: [28318139, 29213893, 28788272, 31431771, 32044280]
  tasks:
    - name: Write list for tracking
      local_action: template src=tracker.j2 dest=output.txt mode=0777
[oracle@anstrlsrv lib]$ 
[oracle@anstrlsrv lib]$ cat templates/tracker.j2 
#jinja2: lstrip_blocks: "True"
{{ oracle_home }}:
  {% for item in rblist %}
  {{ item }}: 
    action: rollback
    status:
  {% endfor %}
  {% for item in aplist %}
  {{ item }}: 
    action: apply
    status:
  {% endfor %}

MARKER FOR NEXT HOME
[oracle@anstrlsrv lib]$ 
[oracle@anstrlsrv lib]$ ansible-playbook tmpl1.yml

PLAY [localhost] ************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Write list for tracking] **********************************************************************************************************************************************************************************************************
changed: [localhost]

PLAY RECAP ******************************************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[oracle@anstrlsrv lib]$ 
[oracle@anstrlsrv lib]$ cat output.txt 
/oracle/db/19.0.0:
  30621255: 
    action: rollback
    status:
  29213893: 
    action: rollback
    status:
  29867728: 
    action: rollback
    status:
  29802382: 
    action: rollback
    status:
  28318139: 
    action: rollback
    status:
  28318139: 
    action: apply
    status:
  29213893: 
    action: apply
    status:
  28788272: 
    action: apply
    status:
  31431771: 
    action: apply
    status:
  32044280: 
    action: apply
    status:

MARKER FOR NEXT HOME
[oracle@anstrlsrv lib]$ 
相关问题