Compare commits

..
79 Commits
Author SHA1 Message Date
sandwich 9c4a86c0ec style(cleanup): drop redundant comments from the power-off tasks 2026-07-15 00:09:44 +02:00
sandwich 723f0516da fix(cleanup): wait for the guest shutdown before forcing the VM off 2026-07-15 00:05:38 +02:00
sandwich 975384661e docs(content): correct the family default to rhel=dvd, not EL=dvd 2026-07-14 21:14:41 +02:00
sandwich ad25bec9fd fix(cleanup): force-stop the vmware VM before booting the installed OS 2026-07-14 06:48:25 +02:00
sandwich 6240217318 feat(system_check): preflight boot media and datastore placement 2026-07-14 01:48:26 +02:00
sandwich 1c00ec9370 fix(configuration): grant the platform sudo group only when sudo is set 2026-07-14 01:48:26 +02:00
sandwich 371d5a0acd fix(configuration): deploy sudoers rules for bool-or-string sudo values 2026-07-14 01:48:26 +02:00
sandwich 41ccf2a5b9 fix(configuration): allow guest-exec RPCs for EL golden cloning 2026-05-29 22:43:14 +02:00
sandwich 8f9cfe3b2f fix(cleanup): force-stop then start the proxmox VM after install 2026-05-29 22:40:02 +02:00
sandwich 6a75237197 fix(environment): pick the largest cdrom as the RHEL install DVD 2026-05-28 17:52:44 +02:00
sandwich b04aad12fb fix(satellite): drop auto-attach (mutually exclusive with activation key) 2026-05-26 01:08:09 +02:00
sandwich 4fff9f8d80 fix(virtualization): create vmware target folder before vm deploy 2026-06-04 18:17:50 +02:00
sandwich 7f12a0f3d8 feat: accept proxmox API-token auth alongside password 2026-05-31 12:40:31 +02:00
sandwich ceb2237bbb fix(encryption): add tpm2-tss dracut module explicitly for TPM2 LUKS 2026-05-31 12:39:24 +02:00
sandwich 477c8379c4 fix(configuration): enable per-family time-sync and skip sudo-rs lecture 2026-05-31 12:30:26 +02:00
sandwich 579c499c02 feat(configuration): multi-backend networking, bind by match not MAC 2026-05-31 12:25:53 +02:00
sandwich 89e366d0f0 fix: EL10 PAM and crypto readiness via authselect profile and DEFAULT policy 2026-05-28 17:30:57 +02:00
sandwich 6fe843355e fix(bootstrap): keep package cache off the 2 GiB CIS /var during install 2026-05-28 17:26:25 +02:00
sandwich 441876fab9 refactor(global_defaults): single source of truth for family-default resolution 2026-05-28 17:25:23 +02:00
sandwich 00acd4d200 refactor(configuration): consolidate firewall into one phase-aware path 2026-05-27 05:28:00 +02:00
sandwich d922efd2e4 feat: uniform system.content source schema across installers and repositories 2026-05-27 05:15:32 +02:00
sandwich 939c5c741f feat: golden-image build support (cloud-init on EL, selinux relabel, SSH wait) 2026-05-27 05:05:55 +02:00
sandwich 2c35409519 feat(cis): add selectable profile and per-rule hardening toggles 2026-05-25 04:37:33 +02:00
sandwich d2a19cfd5c feat(hardware): auto-detect audio, bluetooth, camera with declarative override 2026-05-25 04:36:21 +02:00
sandwich 44f5adc682 feat(bootstrap): per-os desktop apps, KDE plasma-login-manager and DM resolution 2026-05-25 04:30:53 +02:00
sandwich 0185797af9 fix(environment): co-upgrade soname closure when installing installer tools 2026-05-25 03:54:12 +02:00
sandwich e0ecf628cd fix(bootstrap): deploy all non-EOL core distros (keyrings, repos, versions) 2026-05-25 03:52:44 +02:00
sandwich 37df881daa docs: refresh bootstrap examples and README 2026-05-30 18:05:14 +02:00
sandwich 55b21eae5d fix: encryption, partitioning, cis and virtualization hardening 2026-05-30 18:05:14 +02:00
sandwich b1e938b7f0 fix(users): accept plaintext or pre-hashed passwords uniformly 2026-05-30 18:05:05 +02:00
sandwich c843f5289b feat: hardware/firmware/gpu/peripherals detection and packages 2026-05-30 18:05:05 +02:00
sandwich 9757ed3785 feat: complete wayland desktop deployment (gnome/kde/sway/hyprland) 2026-05-30 18:05:05 +02:00
sandwich 876e90ce2b refactor: trim bootstrap OS support to core three distro families 2026-05-30 18:04:00 +02:00
sandwich 7c44cb1ff0 docs(bootstrap): fix users dict format in examples, sync schema defaults, document secure_boot/rhel_repo 2026-05-30 09:25:34 +02:00
sandwich 5d0630a386 refactor(global_defaults): drop orphan luks.urandom/verify and aur feature, bump fedora to 45 2026-05-30 09:25:34 +02:00
sandwich 3eaf918a53 fix(lint): convert sshd restart to handler, add pipefail to btrfs subvol set 2026-05-30 09:25:34 +02:00
sandwich 382e82ff85 fix(configuration): tolerate missing units, gate Secure Boot to supported OSes, fix clevis install per family 2026-05-30 09:25:34 +02:00
sandwich db7dc53bd7 docs(bootstrap): document firmware/gpu/peripherals/hardware features 2026-05-30 09:25:34 +02:00
sandwich 7d45f25a7e feat(bootstrap): install vendor-matched hardware packages 2026-05-30 09:25:34 +02:00
sandwich 3880b8f41e feat(environment): detect cpu/gpu/wireless/fingerprint hardware 2026-05-30 09:25:34 +02:00
sandwich dc3c4a901f feat(global_defaults): firmware/gpu/peripherals/hardware schema 2026-05-30 09:25:34 +02:00
sandwich 6bfaa0aa2b fix(configuration): guard user keys access to avoid dict.keys() method collision 2026-04-16 15:37:13 +02:00
sandwich 5dc0424acb feat(cleanup): enroll Secure Boot keys in VM NVRAM after OS installation 2026-04-16 15:37:13 +02:00
sandwich c12332a853 feat(virtualization): enable TPM2 emulation for Secure Boot VMs 2026-04-16 15:37:13 +02:00
sandwich 5ace4577a2 feat(configuration): auto-bind PCR 7 when Secure Boot and FDE are both enabled 2026-04-16 15:37:13 +02:00
sandwich c0ff01ef40 feat(configuration): add Secure Boot tasks for shim and sbctl 2026-04-16 15:37:13 +02:00
sandwich 57417514e3 feat(configuration): override EFI loader to shim when Secure Boot enabled 2026-04-02 04:34:47 +02:00
sandwich 0928588c1f feat(bootstrap): add Secure Boot conditional packages for Debian, Ubuntu, and Arch 2026-04-02 04:34:16 +02:00
sandwich 6d622f2db4 feat(global_defaults): add secure_boot feature toggle with normalization 2026-04-02 04:33:07 +02:00
sandwich b11d65a6f3 docs(bootstrap): document desktop, initramfs, and FDE features with SSH keepalive config 2026-04-01 15:07:58 +02:00
sandwich 3623fc292c feat(configuration): generic FDE with systemd-cryptenroll, clevis fallback, and configurable initramfs 2026-04-01 15:07:58 +02:00
sandwich dfca7ec94b fix(configuration): RedHat EFI grub wrapper with btrfs subvol prefix and boot order 2026-04-01 15:07:58 +02:00
sandwich e8be84bf49 fix(partitioning): set btrfs default subvolume and restrict @pkg to Arch 2026-04-01 15:07:58 +02:00
sandwich 322cc0b1ce fix(bootstrap): resolve interface-only network, sshd penalties, dnf scriptlets, and EFI cleanup 2026-04-01 15:07:58 +02:00
sandwich 4b38754f8b feat(bootstrap): add desktop environment support with configurable DE, DM, and display target 2026-04-01 15:07:58 +02:00
sandwich a6bc7ffe04 fix(configuration): use /boot/grub2/grub.cfg for RedHat EFI grub config 2026-03-25 16:03:39 +01:00
sandwich c529e71ebc feat(packages): add needrestart to Debian and Ubuntu package lists 2026-03-20 18:06:14 +01:00
sandwich cb46de2b6d feat(bootstrap): add full package upgrade step for Debian and Ubuntu 2026-03-20 18:05:04 +01:00
sandwich 9169117b25 fix(vim): use vimscript comment syntax for blockinfile markers in vimrc 2026-03-20 18:00:12 +01:00
sandwich 6c94c519fb fix(sudo): use explicit string check instead of bool conditional for sudo field 2026-03-20 17:31:49 +01:00
sandwich efd96a42b8 fix(connection): set ansible_port explicitly at every connection transition 2026-03-20 17:31:49 +01:00
sandwich 68661c3cca fix(vmware): use primary ansible_* vars for vmware_tools connection plugin precedence 2026-03-20 17:31:49 +01:00
sandwich 1db20c7ac0 fix(vmware): use empty password for vmware_tools during live ISO bootstrap 2026-03-20 17:31:49 +01:00
sandwich 7b155b427b fix(users): update cloud-init template and input validation for dict users 2026-03-20 17:31:49 +01:00
sandwich ca8721e98f refactor(prompts): remove vars_prompt, require users defined in inventory 2026-03-20 17:31:49 +01:00
sandwich cdb2559d8f fix(prompts): add default values to vars_prompt to skip in non-interactive mode 2026-03-20 17:31:49 +01:00
sandwich 443f6623df refactor(users): change system.users from list to dict keyed by username 2026-03-20 17:31:49 +01:00
sandwich 6cf418fe00 fix(configuration): make root password, user keys, and sudo all optional 2026-03-20 17:31:49 +01:00
sandwich 47ec5fe621 fix(cloud-init): handle missing keys and make sudo conditional 2026-03-20 17:31:49 +01:00
sandwich 240f945cce fix(cleanup): remove ansible_become override that blocks swapoff/umount 2026-03-20 17:31:49 +01:00
sandwich 663a04556f feat(global_defaults): add system.features.aur schema for validation passthrough 2026-03-20 17:31:49 +01:00
sandwich 6febd1acf1 refactor(virtualization): extract shared Xen disk definitions 2026-03-12 12:27:18 +01:00
sandwich 008187860c refactor: remove unnecessary changed_when from set_fact tasks 2026-03-12 12:25:45 +01:00
sandwich cd1be6b5e1 refactor(partitioning): remove redundant blockdev --rereadpt calls 2026-03-12 12:25:15 +01:00
sandwich 15be6149fd refactor(partitioning): remove unused register variables 2026-03-12 12:24:59 +01:00
sandwich ca29ad200d chore: suppress args[module] false positives from variable-based module_defaults 2026-03-12 12:12:27 +01:00
sandwich 8079099cee fix(cleanup): add no_log to Proxmox VM restart task 2026-03-12 12:12:27 +01:00
sandwich 9e79185b07 fix(virtualization): add missing changed_when to Xen VM stop task 2026-03-12 12:12:27 +01:00
sandwich b88bf2860f fix(configuration): replace fail+ignore_errors with debug for TPM2 fallback warning 2026-03-12 12:12:27 +01:00
14 changed files with 30 additions and 148 deletions
-2
View File
@@ -538,8 +538,6 @@ When `hypervisor.type: vmware` uses the `vmware_tools` connection:
`system.disks[0]` is the OS disk (no `mount.path`). Additional entries define data disks.
On VMware, `device` is resolved on the target from the SCSI address instead: entry N is the disk at target N on the first SCSI controller (N+1 from index 7 on, since unit 7 is reserved). The kernel's `sdX` order is not stable between the install environment and the installed system, so a letter-derived path can point at another disk.
| Key | Type | Description |
| ------------- | ------ | ------------------------------------------------------ |
| `size` | number | Disk size in GB (required for virtual) |
+1 -1
View File
@@ -9,7 +9,7 @@ bootstrap_hardware_packages:
amd: [amd-ucode]
firmware_base: []
firmware:
intel: [linux-firmware-intel] # iwlwifi (WiFi) + i915/xe (GPU) + ibt (BT) firmware live here
intel: [linux-firmware-other] # iwlwifi + i915 firmware live here
amd: [linux-firmware-amdgpu]
nvidia: [linux-firmware-nvidia]
atheros: [linux-firmware-atheros]
-2
View File
@@ -206,7 +206,6 @@ bootstrap_debian:
- openssh-server
- python3
- xfsprogs
- xz-utils
extra:
- bat
- curl
@@ -259,7 +258,6 @@ bootstrap_ubuntu:
- openssh-server
- python3
- xfsprogs
- xz-utils
extra:
- bash-completion
- bat
+15 -27
View File
@@ -18,24 +18,13 @@
register: configuration_bootloader_result
changed_when: configuration_bootloader_result.rc == 0
- name: Remove stale EFI boot entries for this OS
# UEFI NVRAM entries survive a disk wipe (they live in firmware, not on disk).
# A prior install leaves a dead entry, and a case-insensitive duplicate label
# ("ArchLinux" vs "archlinux") would otherwise win the boot order - the firmware
# then falls through to removable media. Delete every entry carrying our label,
# then recreate exactly one clean entry.
ansible.builtin.shell:
cmd: >-
set -o pipefail;
efibootmgr | grep -iP '^Boot[0-9A-F]{4}\*?\s+{{ _efi_vendor }}\s*$'
| grep -oP '^Boot\K[0-9A-F]{4}'
| xargs -r -I{} efibootmgr -b {} -B
executable: /bin/bash
register: _efi_gc_result
changed_when: _efi_gc_result.stdout | length > 0
failed_when: false
- name: Check existing EFI boot entries
ansible.builtin.command: efibootmgr
register: configuration_efi_entries
changed_when: false
- name: Create EFI boot entry (efibootmgr -c prepends it to BootOrder)
- name: Ensure EFI boot entry exists
when: ('* ' + _efi_vendor) not in configuration_efi_entries.stdout
ansible.builtin.command: >-
efibootmgr -c
-L '{{ _efi_vendor }}'
@@ -45,16 +34,15 @@
register: configuration_efi_entry_result
changed_when: configuration_efi_entry_result.rc == 0
- name: Install removable EFI fallback loader
# Firmware-agnostic fallback (\EFI\BOOT\BOOTX64.EFI): many consumer firmwares
# ignore or reset custom NVRAM entries and boot only the removable path.
when: _configuration_platform.grub_install
ansible.builtin.command: >-
{{ chroot_command }} /usr/bin/install -Dm644
{{ partitioning_efi_mountpoint }}/EFI/{{ _efi_vendor }}/{{ _efi_loader }}
{{ partitioning_efi_mountpoint }}/EFI/BOOT/BOOTX64.EFI
register: _efi_fallback_result
changed_when: _efi_fallback_result.rc == 0
- name: Set installed OS as first EFI boot entry
ansible.builtin.shell:
cmd: >-
set -o pipefail &&
efibootmgr | grep -i '{{ _efi_vendor }}' | grep -oP 'Boot\K[0-9A-F]+' | head -1
| xargs -I{} efibootmgr -o {}
executable: /bin/bash
register: _efi_bootorder_result
changed_when: _efi_bootorder_result.rc == 0
- name: Ensure lvm2 for non btrfs filesystems
when: os == "archlinux" and system_cfg.filesystem != "btrfs"
-15
View File
@@ -12,21 +12,6 @@
and 'No such file or directory' not in (_firewall_enable.stderr | default(''))
and 'does not exist' not in (_firewall_enable.stderr | default(''))
# Distro base sets ship the daemon preset-enabled (RHEL @core pulls firewalld in),
# so opting out has to disable the unit, not merely skip enabling it.
- name: Disable the firewall daemon in the install chroot
when:
- firewall_phase == 'install'
- _configuration_platform.init_system == 'systemd'
- not system_cfg.features.firewall.enabled | bool
ansible.builtin.command: "{{ chroot_command }} systemctl disable {{ system_cfg.features.firewall.backend }}"
register: _firewall_disable
changed_when: "'Removed' in (_firewall_disable.stderr | default(''))"
failed_when: >-
_firewall_disable.rc != 0
and 'No such file or directory' not in (_firewall_disable.stderr | default(''))
and 'does not exist' not in (_firewall_disable.stderr | default(''))
# ufw's CLI needs a running kernel and is a no-op in the chroot (leaves ENABLED=no),
# so its activation and SSH rule are applied here, after reboot.
- name: Allow SSH through ufw before enabling
+1 -5
View File
@@ -43,14 +43,11 @@
}}
grub_root_flags: >-
{{ ['rootflags=subvol=@'] if system_cfg.filesystem == 'btrfs' else [] }}
grub_selinux_args: >-
{{ [] if system_cfg.features.selinux.enabled | bool else ['selinux=0'] }}
# String-concat (not list-concat like grub_kernel_cmdline_base below): ansible-lint's
# jinja render trips on list+list when grub_lvm_args leads the expression here.
grub_cmdline_linux_base: >-
{{
((grub_lvm_args | join(' ')) ~ ' ' ~ (grub_selinux_args | join(' ')) ~ ' '
~ (_hardware_profile_kernel_params | default([]) | join(' '))) | trim
((grub_lvm_args | join(' ')) ~ ' ' ~ (_hardware_profile_kernel_params | default([]) | join(' '))) | trim
}}
grub_kernel_cmdline_base: >-
{{
@@ -60,7 +57,6 @@
+ ['ro']
+ grub_lvm_args
+ grub_root_flags
+ grub_selinux_args
+ (_hardware_profile_kernel_params | default([]))
)
| join(' ')
+3 -5
View File
@@ -22,12 +22,10 @@
mode: "0644"
# Fedora: setfiles segfaults during bootstrap chroot relabeling, so SELinux
# is left permissive and expected to relabel on first boot. Opting out writes
# disabled here and selinux=0 on the kernel cmdline (grub.yml), the only form
# EL9 honours.
- name: Set the SELinux mode
# is left permissive and expected to relabel on first boot.
- name: Disable SELinux
when: os == "fedora" or not system_cfg.features.selinux.enabled | bool
ansible.builtin.lineinfile:
path: /mnt/etc/selinux/config
regexp: ^SELINUX=
line: "SELINUX={{ 'permissive' if system_cfg.features.selinux.enabled | bool else 'disabled' }}"
line: SELINUX=permissive
@@ -94,7 +94,6 @@
- name: Set install_drive from primary disk
when:
- install_drive is not defined
- system_disks_cfg | length > 0
- system_disks_cfg[0].device | string | length > 0
ansible.builtin.set_fact:
+4 -4
View File
@@ -35,12 +35,10 @@
}, recursive=True)
}}
# Keyed on os, not hostname: inventories set hostname themselves, and doing so
# would otherwise skip enrichment and leave os undefined for validation.
- name: Check if pre-computed system_cfg needs enrichment
when: system_cfg is defined
ansible.builtin.set_fact:
_bootstrap_needs_enrichment: "{{ os is not defined }}"
_bootstrap_needs_enrichment: "{{ hostname is not defined }}"
- name: Merge pre-computed system_cfg with bootstrap system_defaults
when:
@@ -81,7 +79,9 @@
os_version: "{{ system_cfg.version | default('') | string }}"
- name: Normalize disk configuration (pre-computed system_cfg)
when: system_cfg is defined
when:
- system_cfg is defined
- install_drive is not defined
ansible.builtin.include_tasks: _normalize_disks.yml
# Runs on every path before validation, so an empty firewall.backend / content.source
+6 -4
View File
@@ -317,7 +317,7 @@
_autologin: "{{ system_cfg.features.desktop.autologin | default(false) }}"
ansible.builtin.assert:
that:
- _autologin is boolean and not _autologin or (_autologin is string and _autologin | length > 0 and _autologin in system_cfg.users | map(attribute='name'))
- _autologin is boolean and not _autologin or (_autologin is string and _autologin | length > 0 and _autologin in system_cfg.users)
fail_msg: >-
desktop.autologin must be false or a username string present in
system.users; got '{{ _autologin }}'. Bool true is not accepted - the
@@ -355,12 +355,14 @@
- name: Validate at least one user with a password is defined
vars:
_pw_users: "{{ system_cfg.users | selectattr('password', 'defined') | map(attribute='password') | map('string') | reject('equalto', '') | list }}"
_pw_users: "{{ system_cfg.users | dict2items | selectattr('value.password', 'defined') | list }}"
ansible.builtin.assert:
that:
- system_cfg.users | default([]) | length > 0
- system_cfg.users | default({}) | length > 0
- _pw_users | length > 0
fail_msg: "At least one user with a non-empty password must be defined in system.users."
- _pw_users[0].key | string | length > 0
- _pw_users[0].value.password | string | length > 0
fail_msg: "At least one user with a password must be defined in system.users."
quiet: true
no_log: true
@@ -1,61 +0,0 @@
---
# The virtualization role attaches system.disks to SCSI controller 0 in list order, and
# vSphere never gives a disk unit 7 (the controller's own address). The kernel's sdX order
# is not that order and differs between the install environment and the installed OS, so
# a disk derived as /dev/sd<letter of its index> can be the wrong one. Resolve by target.
- name: List disks with their SCSI address
ansible.builtin.command: lsblk -dnpo NAME,TYPE,HCTL
register: partitioning_vmware_lsblk
changed_when: false
- name: Map SCSI targets to devices
vars:
_scsi: >-
{%- set out = [] -%}
{%- for line in partitioning_vmware_lsblk.stdout_lines -%}
{%- set p = line.split() -%}
{%- if (p | length) == 3 and p[1] == 'disk' and p[2] is match('^\d+:0:\d+:0$') -%}
{%- set _ = out.append({'name': p[0], 'host': p[2].split(':')[0], 'target': p[2].split(':')[2]}) -%}
{%- endif -%}
{%- endfor -%}
{{ out }}
ansible.builtin.set_fact:
partitioning_vmware_hosts: "{{ _scsi | map(attribute='host') | unique | list }}"
partitioning_vmware_targets: "{{ _scsi | items2dict(key_name='target', value_name='name') }}"
partitioning_vmware_target_count: "{{ _scsi | length }}"
- name: Assert the system disks sit on one SCSI controller with unique targets
ansible.builtin.assert:
that:
- partitioning_vmware_hosts | length == 1
- partitioning_vmware_targets | length == partitioning_vmware_target_count | int
fail_msg: >-
Expected every disk on one SCSI controller with unique targets, got
{{ partitioning_vmware_lsblk.stdout_lines | select('search', ' disk ') | list }}.
quiet: true
- name: Assert each system disk has a device at its SCSI target
vars:
_target: "{{ (idx if idx < 7 else idx + 1) | string }}"
ansible.builtin.assert:
that:
- _target in partitioning_vmware_targets
fail_msg: "system.disks[{{ idx }}] ({{ item.size }} GB) expects a disk at SCSI target {{ _target }}, none found."
quiet: true
loop: "{{ system_cfg.disks }}"
loop_control:
index_var: idx
label: "{{ idx }}"
- name: Point system disks and install_drive at the resolved devices
vars:
_disks: >-
{%- set out = [] -%}
{%- for d in system_cfg.disks -%}
{%- set dev = partitioning_vmware_targets[(loop.index0 if loop.index0 < 7 else loop.index0 + 1) | string] -%}
{%- set _ = out.append(d | combine({'device': dev, 'partition': dev ~ '1'})) -%}
{%- endfor -%}
{{ out }}
ansible.builtin.set_fact:
system_cfg: "{{ system_cfg | combine({'disks': _disks}) }}"
install_drive: "{{ _disks[0].device }}"
-6
View File
@@ -1,10 +1,4 @@
---
- name: Resolve VMware disks by SCSI target
when:
- hypervisor_type == "vmware"
- system_cfg.type == "virtual"
ansible.builtin.include_tasks: _resolve_vmware_disks.yml
- name: Detect system sizing
ansible.builtin.include_tasks: _detect_sizing.yml
-10
View File
@@ -50,9 +50,6 @@
esxi_hostname: "{{ hypervisor_cfg.node }}"
register: system_check_esxi
delegate_facts: true
until: system_check_esxi.ansible_facts is defined
retries: 3
delay: 10
failed_when: false
changed_when: false
no_log: true
@@ -87,9 +84,6 @@
community.vmware.vmware_datastore_info:
cluster: "{{ hypervisor_cfg.cluster }}"
register: system_check_cluster
until: system_check_cluster.datastores is defined
retries: 3
delay: 10
failed_when: false
changed_when: false
no_log: true
@@ -138,10 +132,6 @@
path: "{{ item.path }}"
state: file
register: system_check_media_files
# A missing file fails with status 404; a dropped vCenter connection fails with status None.
until: system_check_media_files is not failed or system_check_media_files.status is not none
retries: 3
delay: 10
failed_when: false
changed_when: false
loop: "{{ system_check_datastores_needed | rejectattr('source', 'equalto', 'hypervisor.storage') | list }}"
-5
View File
@@ -82,11 +82,6 @@
name: "{{ hostname }}"
folder: "{{ system_cfg.path if system_cfg.path | length > 0 else omit }}"
register: system_check_vmware_check_result
until: >-
not system_check_vmware_check_result.failed
or (system_check_vmware_check_result.msg is search('non-existing VM'))
retries: 3
delay: 10
failed_when: false
changed_when: false
no_log: true