Compare commits

..

No commits in common. "master" and "1.1.3" have entirely different histories.

26 changed files with 180 additions and 276 deletions

View file

@ -1,12 +1,6 @@
---
#
# Ansible managed
#
exclude_paths:
- ./meta/preferences.yml
- ./molecule/default/prepare.yml
- ./molecule/default/converge.yml
- ./molecule/default/verify.yml
- ./molecule/default/collections.yml
- ./.tox
- ./.cache

View file

@ -5,7 +5,6 @@ about: Create a report to help me improve
---
## Describe the bug
A clear and concise description of what the bug is.
## Playbook

View file

@ -5,4 +5,3 @@
repository:
description: Configure grub on your system.
homepage: https://robertdebock.nl/
topics: grub, ansible, molecule, tox, playbook, hacktoberfest

View file

@ -6,13 +6,17 @@
name: Release to Ansible Galaxy
on:
release:
types: [created, edited, published, released]
push:
tags:
- '*'
schedule:
- cron: '7 7 7 * *'
jobs:
release:
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
steps:
- name: galaxy
uses: robertdebock/galaxy-action@1.1.0
uses: robertdebock/galaxy-action@1.0.1
with:
galaxy_api_key: ${{ secrets.galaxy_api_key }}

View file

@ -11,48 +11,52 @@ on:
- '*'
pull_request:
schedule:
- cron: '13 7 7 * *'
- cron: '7 7 7 * *'
jobs:
lint:
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
with:
path: "${{ github.repository }}"
- name: molecule
uses: robertdebock/molecule-action@4.0.7
uses: robertdebock/molecule-action@2.6.1
with:
command: lint
test:
needs:
- lint
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
config:
- image: "alpine"
tag: "latest"
- image: "enterpriselinux"
- image: "alpine"
tag: "edge"
- image: "centos"
tag: "7"
- image: "centos"
tag: "latest"
- image: "debian"
tag: "latest"
- image: "debian"
tag: "bookworm"
tag: "bullseye"
- image: "fedora"
tag: "34"
tag: "31"
- image: "fedora"
tag: "latest"
- image: "fedora"
tag: "rawhide"
- image: "opensuse"
tag: "latest"
- image: "ubuntu"
tag: "latest"
- image: "ubuntu"
tag: "bionic"
- image: "ubuntu"
tag: "xenial"
steps:
- name: checkout
uses: actions/checkout@v2
@ -63,7 +67,10 @@ jobs:
- name: parse apparmor for mysql
run: sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
- name: molecule
uses: robertdebock/molecule-action@4.0.7
uses: robertdebock/molecule-action@2.6.1
with:
image: ${{ matrix.config.image }}
tag: ${{ matrix.config.tag }}
options: "--parallel all"
env:
TOX_PARALLEL_NO_SPINNER: 1

View file

@ -1,34 +0,0 @@
---
#
# Ansible managed
#
on:
- push
name: Ansible Graphviz
jobs:
build:
runs-on: ubuntu-20.04
steps:
- name: checkout
uses: actions/checkout@v2
with:
path: ${{ github.repository }}
- name: create png
uses: robertdebock/graphviz-action@1.0.7
- name: Commit files
run: |
cd ${{ github.repository }}
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add requirements.dot requirements.png
git commit -m "Add generated files"
- name: save to png branch
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
directory: ${{ github.repository }}
force: true
branch: png

View file

@ -1,20 +0,0 @@
---
#
# Ansible managed
#
name: "TODO 2 Issue"
on:
push:
jobs:
build:
runs-on: "ubuntu-20.04"
steps:
- uses: "actions/checkout@master"
- name: "TODO to Issue"
uses: "alstr/todo-to-issue-action@v2.3"
id: "todo"
with:
TOKEN: ${{ secrets.GITHUB_TOKEN }}

2
.gitignore vendored
View file

@ -2,5 +2,3 @@
*.log
*.swp
.tox
.cache
.DS_Store

View file

@ -1,44 +0,0 @@
---
image: "robertdebock/github-action-molecule:4.0.6"
services:
- docker:dind
variables:
DOCKER_HOST: "tcp://docker:2375"
PY_COLORS: 1
molecule:
script:
- image=${image} tag=${tag} molecule test
rules:
- if: $CI_COMMIT_REF_NAME == "master"
retry: 1
parallel:
matrix:
- image: "alpine"
tag: "latest"
- image: "enterpriselinux"
tag: "latest"
- image: "debian"
tag: "latest"
- image: "debian"
tag: "bookworm"
- image: "fedora"
tag: "34"
- image: "fedora"
tag: "latest"
- image: "fedora"
tag: "rawhide"
- image: "opensuse"
tag: "latest"
- image: "ubuntu"
tag: "latest"
- image: "ubuntu"
tag: "bionic"
galaxy:
script:
- ansible-galaxy role import --api-key ${GALAXY_API_KEY} ${CI_PROJECT_NAMESPACE} ${CI_PROJECT_NAME}
rules:
- if: $CI_COMMIT_TAG != null

View file

@ -1,24 +0,0 @@
---
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.0.1
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-added-large-files
- repo: https://github.com/adrienverge/yamllint
rev: v1.26.3
hooks:
- id: yamllint
args: [-c=.yamllint]
- repo: https://github.com/robertdebock/pre-commit
rev: v1.4.4
hooks:
- id: ansible_role_find_unused_variable
- id: ansible_role_find_empty_files
- id: ansible_role_find_empty_directories
- id: ansible_role_fix_readability
- id: ansible_role_find_undefined_handlers
- id: ansible_role_find_unquoted_values

View file

@ -4,26 +4,40 @@
#
language: python
os: linux
dist: xenial
python:
- "3.9"
- "3.8"
services:
- docker
env:
global:
namespace="robertdebock"
matrix:
- image="alpine" tag="latest"
- image="alpine" tag="edge"
- image="centos" tag="7"
- image="centos" tag="latest"
- image="debian" tag="latest"
- image="debian" tag="bullseye"
- image="fedora" tag="31"
- image="fedora" tag="latest"
- image="opensuse" tag="latest"
- image="ubuntu" tag="latest"
- image="ubuntu" tag="bionic"
- image="ubuntu" tag="xenial"
cache:
- pip
install:
- pip install --upgrade pip
- pip install ansible ansible-lint yamllint
- pip install tox
script:
- yamllint .
- ansible-lint
- function retry { counter=0 ; until "$@" ; do exit=$? ; counter=$(($counter + 1)) ; if [ $counter -ge 3 ] ; then return $exit ; fi ; done ; return 0; } ; retry tox --parallel all
notifications:
webhooks: https://galaxy.ansible.com/api/v1/notifications/
slack: "BEAf5JsdWsje2YBWtcq0xmdkz1MqCPN0essozaZjUJDSB2LH/DTzdihaakr4peeBdd9Xmus9aiMras8nNRgXHEw1zmm5cc7B95+zlDST82W/oTtA6kXo+mEdvWbQT9VPwZAB+5Vt9PLL3YgRjJ9lmBvGJ84yKm6sRkt5doykr3MGFJSgOtUTADjOh22GZESSXizQQyNOV8fvEEfez5TXEkwigyM1iKMeIkWCWDYHXdSUhAP6PVA+GghObI9/6gcJzieK6NqD7FNKPyOtDQk/y+cNC4xdOEKoCD7/OVmCm0iTkW1qjBkBo94bu08DfZn2Ee9/pAgNN/4PJz7KABAtDmBmSBWiLpvuQ9mzkBKQ08Qa9tyAiJiIgSYyvqjNf0mal3muzAn1cQIuwDSrYq8VklcF8zW0oYrw6GCqvVSe2uf9bAwLNBZylWIucdRYK5oScP8V+v19p0Mp/vz3uYJOeErf5QE7YORDsYGcUBokJmGWIqLtdbAUTq41FMTycqzUIdQLEqUZx0QcfoSPoF50/tQ+cuq9MxIORvc8kzO8v4KYHcE3Ji78M2UY/LhpnI5h+xFjmQ4YsTvOTX6N0+jprFUjhJZjdn7h2DJxinA1cTqoGxyrzvLIJKb5rEQr4uZkstGtx1UjGYMMZprK2MiJkqoJKrSHrF/p/RIxSTmeY0k="
email: false

View file

@ -10,7 +10,3 @@ rules:
level: error
line-length: disable
truthy: disable
ignore: |
.tox/
.cache/

View file

@ -187,7 +187,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2022 Robert de Bock (robert@meinit.nl)
Copyright 2020 Robert de Bock (robert@meinit.nl)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View file

@ -2,13 +2,13 @@
Configure grub on your system.
|GitHub|GitLab|Quality|Downloads|Version|
|Travis|GitHub|Quality|Downloads|Version|
|------|------|-------|---------|-------|
|[![github](https://github.com/robertdebock/ansible-role-grub/workflows/Ansible%20Molecule/badge.svg)](https://github.com/robertdebock/ansible-role-grub/actions)|[![gitlab](https://gitlab.com/robertdebock/ansible-role-grub/badges/master/pipeline.svg)](https://gitlab.com/robertdebock/ansible-role-grub)|[![quality](https://img.shields.io/ansible/quality/48762)](https://galaxy.ansible.com/robertdebock/grub)|[![downloads](https://img.shields.io/ansible/role/d/48762)](https://galaxy.ansible.com/robertdebock/grub)|[![Version](https://img.shields.io/github/release/robertdebock/ansible-role-grub.svg)](https://github.com/robertdebock/ansible-role-grub/releases/)|
|[![travis](https://travis-ci.com/robertdebock/ansible-role-grub.svg?branch=master)](https://travis-ci.com/robertdebock/ansible-role-grub)|[![github](https://github.com/robertdebock/ansible-role-grub/workflows/Ansible%20Molecule/badge.svg)](https://github.com/robertdebock/ansible-role-grub/actions)|[![quality](https://img.shields.io/ansible/quality/48762)](https://galaxy.ansible.com/robertdebock/grub)|[![downloads](https://img.shields.io/ansible/role/d/48762)](https://galaxy.ansible.com/robertdebock/grub)|[![Version](https://img.shields.io/github/release/robertdebock/ansible-role-grub.svg)](https://github.com/robertdebock/ansible-role-grub/releases/)|
## [Example Playbook](#example-playbook)
This example is taken from `molecule/default/converge.yml` and is tested on each push, pull request and release.
This example is taken from `molecule/resources/converge.yml` and is tested on each push, pull request and release.
```yaml
---
- name: Converge
@ -25,7 +25,7 @@ This example is taken from `molecule/default/converge.yml` and is tested on each
value: 0
```
The machine needs to be prepared. In CI this is done using `molecule/default/prepare.yml`:
The machine may need to be prepared using `molecule/resources/prepare.yml`:
```yaml
---
- name: prepare
@ -38,23 +38,36 @@ The machine needs to be prepared. In CI this is done using `molecule/default/pre
tasks:
- name: make /etc/default
ansible.builtin.file:
file:
path: /etc/default
state: directory
mode: "0755"
- name: place bogus /etc/default/grub
ansible.builtin.copy:
copy:
content: 'GRUB_CMDLINE_LINUX="a=1"'
dest: /etc/default/grub
mode: "0664"
```
For verification `molecule/resources/verify.yml` run after the role has been applied.
```yaml
---
- name: Verify
hosts: all
become: yes
gather_facts: yes
tasks:
- name: check that bogus options are in
command: grep 'a=1' /etc/default/grub
- name: check that selected option is in
command: grep 'cgroup_enable=memory' /etc/default/grub
```
Also see a [full explanation and example](https://robertdebock.nl/how-to-use-these-roles.html) on how to use these roles.
## [Role Variables](#role-variables)
The default values for the variables are set in `defaults/main.yml`:
These variables are set in `defaults/main.yml`:
```yaml
---
# defaults file for grub
@ -71,22 +84,23 @@ grub_recordfail_timeout: "{{ grub_timeout }}"
## [Requirements](#requirements)
- pip packages listed in [requirements.txt](https://github.com/robertdebock/ansible-role-grub/blob/master/requirements.txt).
- Access to a repository containing packages, likely on the internet.
- A recent version of Ansible. (Tests run on the current, previous and next release of Ansible.)
## [Status of used roles](#status-of-requirements)
The following roles can be installed to ensure all requirements are met, using `ansible-galaxy install -r requirements.yml`:
The following roles are used to prepare a system. You can prepare your system in another way.
```yaml
---
- robertdebock.bootstrap
| Requirement | GitHub | GitLab |
|-------------|--------|--------|
|[robertdebock.bootstrap](https://galaxy.ansible.com/robertdebock/bootstrap)|[![Build Status GitHub](https://github.com/robertdebock/ansible-role-bootstrap/workflows/Ansible%20Molecule/badge.svg)](https://github.com/robertdebock/ansible-role-bootstrap/actions)|[![Build Status GitLab ](https://gitlab.com/robertdebock/ansible-role-bootstrap/badges/master/pipeline.svg)](https://gitlab.com/robertdebock/ansible-role-bootstrap)|
```
## [Context](#context)
This role is a part of many compatible roles. Have a look at [the documentation of these roles](https://robertdebock.nl/) for further information.
Here is an overview of related roles:
![dependencies](https://raw.githubusercontent.com/robertdebock/ansible-role-grub/png/requirements.png "Dependencies")
![dependencies](https://raw.githubusercontent.com/robertdebock/drawings/artifacts/grub.png "Dependency")
## [Compatibility](#compatibility)
@ -95,26 +109,59 @@ This role has been tested on these [container images](https://hub.docker.com/u/r
|container|tags|
|---------|----|
|alpine|all|
|el|8|
|debian|all|
|fedora|all|
|el|7, 8|
|debian|buster, bullseye|
|fedora|31, 32|
|opensuse|all|
|ubuntu|all|
|ubuntu|focal, bionic, xenial|
The minimum version of Ansible required is 2.10, tests have been done to:
The minimum version of Ansible required is 2.8 but tests have been done to:
- The previous version.
- The previous version, on version lower.
- The current version.
- The development version.
## [Testing](#testing)
[Unit tests](https://travis-ci.com/robertdebock/ansible-role-grub) are done on every commit, pull request, release and periodically.
If you find issues, please register them in [GitHub](https://github.com/robertdebock/ansible-role-grub/issues)
Testing is done using [Tox](https://tox.readthedocs.io/en/latest/) and [Molecule](https://github.com/ansible/molecule):
[Tox](https://tox.readthedocs.io/en/latest/) tests multiple ansible versions.
[Molecule](https://github.com/ansible/molecule) tests multiple distributions.
To test using the defaults (any installed ansible version, namespace: `robertdebock`, image: `fedora`, tag: `latest`):
```
molecule test
# Or select a specific image:
image=ubuntu molecule test
# Or select a specific image and a specific tag:
image="debian" tag="stable" tox
```
Or you can test multiple versions of Ansible, and select images:
Tox allows multiple versions of Ansible to be tested. To run the default (namespace: `robertdebock`, image: `fedora`, tag: `latest`) tests:
```
tox
# To run CentOS (namespace: `robertdebock`, tag: `latest`)
image="centos" tox
# Or customize more:
image="debian" tag="stable" tox
```
## [License](#license)
Apache-2.0
## [Author Information](#author-information)
[Robert de Bock](https://robertdebock.nl/)

View file

@ -1,9 +1,9 @@
---
# defaults file for grub
#grub_timeout: 5
grub_timeout: 5
#grub_recordfail_timeout: "{{ grub_timeout }}"
grub_recordfail_timeout: "{{ grub_timeout }}"
# Add options here, for example:
# grub_options:

View file

@ -1,13 +1,11 @@
---
# handlers file for grub
- name: update grub
ansible.builtin.command:
cmd: "{{ grub_update_grub_command }}"
command: "{{ grub_update_grub_command }}"
when:
- ansible_connection not in [ "container", "docker", "community.docker.docker" ]
- ansible_connection != "docker"
notify:
- reboot
- name: reboot
ansible.builtin.reboot:
reboot:

View file

@ -1,12 +1,10 @@
---
galaxy_info:
author: Robert de Bock
namespace: robertdebock
role_name: grub
description: Configure grub on your system.
license: Apache-2.0
company: none
min_ansible_version: "2.10"
min_ansible_version: 2.8
platforms:
- name: Alpine
@ -14,21 +12,28 @@ galaxy_info:
- all
- name: EL
versions:
- 7
- 8
- name: Debian
versions:
- all
- buster
- bullseye
- name: Fedora
versions:
- all
- 31
- 32
- name: OpenSUSE
versions:
- all
- name: Ubuntu
versions:
- all
- focal
- bionic
- xenial
galaxy_tags:
- grub
- centos
- redhat
dependencies: []

View file

@ -6,11 +6,10 @@ dependency:
name: galaxy
options:
role-file: requirements.yml
requirements-file: requirements.yml
lint: |
set -e
yamllint .
ansible-lint
PATH=${PATH}
yamllint molecule/default/converge.yml
ansible-lint molecule/default/converge.yml
driver:
name: docker
platforms:
@ -23,5 +22,9 @@ platforms:
pre_build_image: yes
provisioner:
name: ansible
config_options:
defaults:
stdout_callback: yaml
bin_ansible_callbacks: yes
verifier:
name: ansible

View file

@ -9,13 +9,10 @@
tasks:
- name: make /etc/default
ansible.builtin.file:
file:
path: /etc/default
state: directory
mode: "0755"
- name: place bogus /etc/default/grub
ansible.builtin.copy:
copy:
content: 'GRUB_CMDLINE_LINUX="a=1"'
dest: /etc/default/grub
mode: "0664"

View file

@ -2,13 +2,11 @@
- name: Verify
hosts: all
become: yes
gather_facts: no
gather_facts: yes
tasks:
- name: check that bogus options are in
ansible.builtin.command:
cmd: grep 'a=1' /etc/default/grub
command: grep 'a=1' /etc/default/grub
- name: check that selected option is in
ansible.builtin.command:
cmd: grep 'cgroup_enable=memory' /etc/default/grub
command: grep 'cgroup_enable=memory' /etc/default/grub

View file

@ -1,10 +0,0 @@
# These role have been tested with these PIP component.
# To install the required version yourself, use a command as:
# `python -m pip --user install -r requirements.txt`
# See the pip requirements file documentation for details:
# https://pip.pypa.io/en/stable/user_guide/#requirements-files
#
# Tests run on the previous and current (latest) version of Ansible.
ansible>=2.10
# Some Jinja2 filters are used that are available in the newer releases.
jinja2>=2.11.2

View file

@ -1,4 +1,2 @@
---
roles:
- name: robertdebock.bootstrap
collections:
- robertdebock.bootstrap

View file

@ -1,34 +1,33 @@
---
- name: test if grub_timeout is set correctly
ansible.builtin.assert:
assert:
that:
- grub_timeout is number
- grub_timeout >= 0
- grub_timeout is defined
- grub_timeout | int >= 0
quiet: yes
when: grub_timeout is defined
- name: test if grub_recordfail_timeout is set correctly
ansible.builtin.assert:
assert:
that:
- grub_recordfail_timeout is number
- grub_recordfail_timeout >= 0
- grub_recordfail_timeout is defined
- grub_recordfail_timeout | int >= 0
quiet: yes
when: grub_timeout is defined and grub_recordfail_timeout is defined
- name: test if grub_options is set correctly
ansible.builtin.assert:
assert:
that:
- grub_options | length > 0
- grub_options is iterable
quiet: yes
when:
- grub_options is defined
- name: test if item in grub_options is set correctly
ansible.builtin.assert:
assert:
that:
- item.option is defined
- item.option is string
- item.option | length > 0
- item.value is defined
quiet: yes
loop: "{{ grub_options }}"
loop_control:

View file

@ -1,41 +1,36 @@
---
# tasks file for grub
- name: import assert.yml
ansible.builtin.import_tasks: assert.yml
run_once: yes
delegate_to: localhost
- name: include assert.yml
include_tasks: assert.yml
- name: install required packages
ansible.builtin.package:
package:
name: "{{ grub_packages }}"
state: present
- name: set GRUB_TIMEOUT
ansible.builtin.lineinfile:
lineinfile:
path: /etc/default/grub
line: GRUB_TIMEOUT={{ grub_timeout }}
create: yes
mode: "0664"
when: grub_timeout is defined
notify:
- update grub
- name: set GRUB_RECORDFAIL_TIMEOUT
ansible.builtin.lineinfile:
lineinfile:
path: /etc/default/grub
line: GRUB_RECORDFAIL_TIMEOUT={{ grub_recordfail_timeout }}
create: yes
mode: "0664"
when: grub_recordfail_timeout is defined
notify:
- update grub
- name: add options to GRUB_CMDLINE_LINUX
ansible.builtin.replace:
replace:
path: /etc/default/grub
regexp: '^GRUB_CMDLINE_LINUX="((:?(?!{{ item.option }}{{ "={}".format(item.value) if item.value is defined else "" }}).)*?)"$'
replace: 'GRUB_CMDLINE_LINUX="\1 {{ item.option }}{{ "={}".format(item.value) if item.value is defined else "" }}"'
regexp: '^GRUB_CMDLINE_LINUX="((:?(?!{{ item.option }}={{ item.value }}).)*?)"$'
replace: 'GRUB_CMDLINE_LINUX="\1 {{ item.option }}={{ item.value }}"'
validate: /bin/sh %s
mode: "0664"
loop: "{{ grub_options }}"
@ -47,22 +42,5 @@
- grub_options is defined
- grub_options | length > 0
- name: add options to GRUB_CMDLINE_LINUX_DEFAULT
ansible.builtin.replace:
path: /etc/default/grub
regexp: '^GRUB_CMDLINE_LINUX_DEFAULT="((:?(?!{{ item.option }}=?[^s]*).)*?)"$'
replace: 'GRUB_CMDLINE_LINUX_DEFAULT="\1 {{ item.option }}{{ "={}".format(item.value) if item.value is defined else "" }}"'
validate: /bin/sh %s
mode: "0664"
loop: "{{ grub_default_options }}"
loop_control:
label: "{{ item.option }}"
notify:
- update grub
when:
- grub_default_options is defined
- grub_default_options | length > 0
- name: flush handlers
ansible.builtin.meta: flush_handlers
meta: flush_handlers

22
tox.ini
View file

@ -2,23 +2,25 @@
# Ansible managed
#
[tox]
minversion = 3.21.4
envlist = py{310}-ansible-{4,5}
minversion = 3.7
# Disabled "next" because of:
# https://github.com/ansible-community/molecule/issues/2626.
# envlist = py{38}-ansible-{previous,current,next}
envlist = py{38}-ansible-{previous,current}
skipsdist = true
[testenv]
deps =
4: ansible == 4.*
5: ansible == 5.*
molecule[docker]
docker == 5.*
ansible-lint == 5.*
previous: ansible>=2.8, <2.9
current: ansible>=2.9
next: git+https://github.com/ansible/ansible.git@devel
molecule[lint]>=3, <4
docker>=4.2, <4.3
commands = molecule test
setenv =
TOX_ENVNAME={envname}
MOLECULE_EPHEMERAL_DIRECTORY=/tmp/.molecule/{env:image:fedora}-{env:tag:latest}/{envname}
PY_COLORS=1
ANSIBLE_FORCE_COLOR=1
ANSIBLE_ROLES_PATH=../
passenv = namespace image tag DOCKER_HOST
passenv = namespace image tag

View file

@ -9,11 +9,11 @@ _grub_packages:
Debian:
- grub2
grub_packages: "{{ _grub_packages[ansible_os_family] | default(_grub_packages['default'] ) }}"
grub_packages: "{{ _grub_packages[ansible_os_family] | default(_grub_packages['default']) }}"
_grub_update_grub_command:
default: grub2-mkconfig -o /boot/grub2/grub.cfg
Alpine: grub-mkconfig -o /boot/grub/grub.cfg
Debian: update-grub
grub_update_grub_command: "{{ _grub_update_grub_command[ansible_os_family] | default(_grub_update_grub_command['default'] ) }}"
grub_update_grub_command: "{{ _grub_update_grub_command[ansible_os_family] | default(_grub_update_grub_command['default']) }}"