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