Il s'agit d'un exemple de playbook Ansible qui installe la base de connaissances d'Ansible vers Windows2012ServerR2 à l'aide de fichiers MSU. Je pense que vous pouvez faire quelque chose de similaire avec Chef.
Ce message est une version mise à jour du précédent Post.
Le fichier MSU sous le répertoire patch est acquis dynamiquement par la commande ls et mis à jour pour être installé en bouclant le fichier MSU (block loop with_itmes * include / items / c03e7cbce8608b1c55f1), filtre jinja2 regex_replace etc.)
De plus, bien qu'il n'y en ait pas eu auparavant, nous avons ajouté une vérification d'installation de la base de connaissances avant et après le processus blook et l'installation de la base de connaissances.
Dans le cas de KB qui n'est pas reflété sans redémarrage? Est
Commentez la partie de la commande de vérification après l'installation (lignes 17 à 20 de win_patch_child.yml
), ou
Pour la vérification après l'installation, veuillez utiliser un autre playbook ou vérifier avec Serverspec etc.
Ce qui suit est inchangé par rapport à la fois précédente. C'est une méthode floue utilisant des modules bruts, mais il y a peu de cas liés à Windows, donc c'est juste pour référence. En fait, je pense qu'il est nécessaire d'augmenter ou de baisser le service, de redémarrer et de contrôler la LB supérieure, mais seule l'installation de KB est décrite simplement. En outre, j'utilise pkgmgr au lieu de DISM pour l'installation.
win_patch.yml
win_patch_child.yml
** qui effectue une boucle dynamique ( with_items
) pour les fichiers qui existent dans la variable de résultat de la commande ls et installe le fichier KB uniquement lorsque l'extension est un fichier MSU. Appelez (ʻinclude), traitez dynamiquement le nom de fichier MSU acquis avec une expression régulière par
regex_replace`, et définissez-le comme une variable telle que le numéro KBwin_patch_child.yml
win_patch.yml
---
- hosts: win
# Don't gather hosts facts for performance
gather_facts: no
# Setting the task
tasks:
- name: "Get Win pacth name"
shell: ls patch
delegate_to: localhost
register: command_result
- name: "Install Win patch"
include: win_patch_child.yml kb_msu={{ item }}
with_items: "{{ command_result.stdout_lines }}"
when: "'.msu' in item"
vars:
kb_src_dr: "patch"
kb_dest_dr: "c:/work/"
kb_src: "{{ kb_src_dr }}/{{ kb_msu }}"
kb_dest: "{{ kb_dest_dr }}/{{ kb_msu }}"
kb_xml: "{{ kb_msu | regex_replace('.msu','.xml') }}"
kb_no: "{{ kb_msu | regex_replace('^.*-KB(\\d*)-.*msu$','\\1') }}"
check_command: "wmic qfe | findstr {{ kb_no }}"
# When I use wusa/pkgmagr as follows vars.
decompression_command: "wusa {{kb_dest}} /extract:{{ kb_dest_dr }}"
install_command: "pkgmgr /n:{{ kb_dest_dr }}{{ kb_xml }} /quiet /norestart"
uninstall_command: "wusa /uninstall /kb:{{ kb_no }} /quiet /norestart"
# When you use expand/Dism, you comment out a line of wusa/pkgmagr, and please use a variable as follows.
# kb_cab: "{{ kb_msu | regex_replace('.msu','.cab') }}"
# decompression_command: "expand -f:{{kb_cab}} {{ kb_dest_dr }}{{ kb_msu }} {{ kb_dest_dr }}KB{{ kb_no }}"
# install_command: "Dism /Online /Add-Package /PackagePath:{{ kb_dest_dr }}KB{{ kb_no }} /quiet /norestart"
# uninstall_command: "wusa /uninstall /kb:{{ kb_no }} /quiet /norestart"
win_patch_child.yml
---
- name: Check KB
raw: "{{ check_command }}"
register: command1_result
failed_when: command1_result.rc not in [ 0 , 1 ]
- block:
- debug: msg="Block START ----------------------"
- name: create directory
win_file: path={{ kb_dest_dr }} state=directory
- name: copy the file
win_copy: src={{ kb_src }} dest={{ kb_dest }} mode=0755
- name: decompression the msu file
raw: "{{ decompression_command }}"
- name: install KB
raw: "{{ install_command }}"
- name: Check KB
raw: "{{ check_command }}"
register: command2_result
failed_when: "'KB{{ kb_no }}' not in command2_result.stdout"
- debug: msg="Block END ------------------------"
when: "'KB{{ kb_no }}' not in command1_result.stdout"
rescue:
- debug: msg="Rescue START ---------------------"
- debug: msg="install {{ kb_no }} is error"
- name: uninstall KB
raw: "{{ uninstall_command }}"
- debug: msg="Rescue END -----------------------"
always:
- debug: msg="Always START ---------------------"
- debug: msg="before '{{ check_command }}' {{ command1_result.stdout_lines }}"
when: command1_result is defined
- debug: msg="after '{{ check_command }}' {{ command2_result.stdout_lines }}"
when: command2_result is defined
- debug: msg="Always END -----------------------"
- debug: msg="Because KB{{ kb_no }} had been already installed, I skipped installation.
This is result of the check command '{{ check_command }}'
{{ command1_result.stdout_lines }}"
when: "'KB{{ kb_no }}' in command1_result.stdout"
Fichier d'inventaire hosts
[win]
win0[1:2]
[win:vars]
ansible_ssh_user=ansible
ansible_ssh_pass=ansibleansible
ansible_ssh_port=5985
ansible_connection=winrm
Sous le répertoire des correctifs
patch/
- Windows8.1-KB3079904-x64.msu
- Windows8.1-KB3140735-x64.msu
- openssl-1.0.1e-48.el6_8.1.x86_64.rpm
ansible --version
# ansible --version
ansible 2.2.0 (devel 394430a61e) last updated 2016/06/28 13:25:07 (GMT +900)
lib/ansible/modules/core: (detached HEAD 3c6f2c2db1) last updated 2016/06/28 13:25:30 (GMT +900)
lib/ansible/modules/extras: (detached HEAD 1c36665545) last updated 2016/06/28 13:25:37 (GMT +900)
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
Recommended Posts