add grub ansible role
This commit is contained in:
79
README.md
Normal file
79
README.md
Normal file
@@ -0,0 +1,79 @@
|
||||
ansible-role-grub
|
||||
=================
|
||||
|
||||
Manages grub config on RHEL/Centos.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
This is a standalone role.
|
||||
|
||||
Role Variables
|
||||
--------------
|
||||
|
||||
Additional kernel parameters can be passed using the following two lists.
|
||||
```yaml
|
||||
# additional cmdline arguments
|
||||
grub_cmdline_linux_list: []
|
||||
|
||||
# additional cmdline default arguments
|
||||
grub_cmdline_linux_default_list: []
|
||||
```
|
||||
|
||||
Additional tty instances can be added to the follwing list.
|
||||
For example a serial connection which has its own set of variables.
|
||||
```yaml
|
||||
# start grub and linux on these consoles
|
||||
grub_consoles:
|
||||
- tty0
|
||||
- 'ttyS0,{{ grub_serial.speed }}'
|
||||
|
||||
# grub serial command settings
|
||||
grub_serial:
|
||||
speed: 115200
|
||||
unit: 0
|
||||
word: 8
|
||||
parity: 0
|
||||
stop: 1
|
||||
```
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
No hard dependencies.
|
||||
|
||||
Example Playbook
|
||||
----------------
|
||||
|
||||
An example playbook which installs and configures grub with kernel parameters.
|
||||
```yaml
|
||||
---
|
||||
|
||||
- name: grub test play
|
||||
hosts: all
|
||||
become: true
|
||||
vars:
|
||||
grub_cmdline_linux_list:
|
||||
- crashkernel=auto
|
||||
- rd.lvm.lv=vg01/root
|
||||
- rhgb
|
||||
- quiet
|
||||
- boot=a27cca18-a888-4b0e-9066-986d22036054
|
||||
- vsyscall=none
|
||||
- slub_debug=P
|
||||
- page_poison=1
|
||||
- audit_backlog_limit=8192
|
||||
- audit=1
|
||||
roles:
|
||||
- grub
|
||||
```
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
GPLv3
|
||||
|
||||
Author Information
|
||||
------------------
|
||||
|
||||
Aaron (aaron@0x29a.ch)
|
||||
40
defaults/main.yaml
Normal file
40
defaults/main.yaml
Normal file
@@ -0,0 +1,40 @@
|
||||
---
|
||||
# defaults file for ansible-role-grub
|
||||
|
||||
# grub related packages
|
||||
grub_packages:
|
||||
- grub2
|
||||
|
||||
# grub-mkconfig binary
|
||||
grub_mkconfig_bin: /usr/sbin/grub2-mkconfig
|
||||
|
||||
# grub configuration file
|
||||
grub_cfg: /etc/default/grub
|
||||
|
||||
# grub main running configuration
|
||||
grub_boot_cfg: /boot/grub2/grub.cfg
|
||||
|
||||
# start grub and linux on these consoles
|
||||
grub_consoles:
|
||||
- tty0
|
||||
# - 'ttyS0,{{ grub_serial.speed }}'
|
||||
|
||||
# grub serial command settings
|
||||
#grub_serial:
|
||||
# speed: 115200
|
||||
# unit: 0
|
||||
# word: 8
|
||||
# parity: 0
|
||||
# stop: 1
|
||||
|
||||
# grub timeout (in seconds)
|
||||
grub_timeout: 5
|
||||
|
||||
# disable predictable network interface names
|
||||
grub_disable_network_predictable_interface_names: false
|
||||
|
||||
# additional cmdline arguments
|
||||
grub_cmdline_linux_list: []
|
||||
|
||||
# additional cmdline default arguments
|
||||
grub_cmdline_linux_default_list: []
|
||||
5
handlers/main.yaml
Normal file
5
handlers/main.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
# handlers file for ansible-role-grub
|
||||
|
||||
- name: grub update config
|
||||
command: '{{ grub_mkconfig_bin }} -o {{ grub_boot_cfg }}'
|
||||
52
meta/main.yaml
Normal file
52
meta/main.yaml
Normal file
@@ -0,0 +1,52 @@
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
|
||||
min_ansible_version: 2.9
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
#
|
||||
# Provide a list of supported platforms, and for each platform a list of versions.
|
||||
# If you don't wish to enumerate all versions for a particular platform, use 'all'.
|
||||
# To view available platforms and versions (or releases), visit:
|
||||
# https://galaxy.ansible.com/api/v1/platforms/
|
||||
#
|
||||
# platforms:
|
||||
# - name: Fedora
|
||||
# versions:
|
||||
# - all
|
||||
# - 25
|
||||
# - name: SomePlatform
|
||||
# versions:
|
||||
# - all
|
||||
# - 1.0
|
||||
# - 7
|
||||
# - 99.99
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
53
meta/main.yml
Normal file
53
meta/main.yml
Normal file
@@ -0,0 +1,53 @@
|
||||
galaxy_info:
|
||||
author: your name
|
||||
description: your role description
|
||||
company: your company (optional)
|
||||
|
||||
# If the issue tracker for your role is not on github, uncomment the
|
||||
# next line and provide a value
|
||||
# issue_tracker_url: http://example.com/issue/tracker
|
||||
|
||||
# Choose a valid license ID from https://spdx.org - some suggested licenses:
|
||||
# - BSD-3-Clause (default)
|
||||
# - MIT
|
||||
# - GPL-2.0-or-later
|
||||
# - GPL-3.0-only
|
||||
# - Apache-2.0
|
||||
# - CC-BY-4.0
|
||||
license: license (GPL-2.0-or-later, MIT, etc)
|
||||
|
||||
min_ansible_version: 2.9
|
||||
|
||||
# If this a Container Enabled role, provide the minimum Ansible Container version.
|
||||
# min_ansible_container_version:
|
||||
|
||||
#
|
||||
# Provide a list of supported platforms, and for each platform a list of versions.
|
||||
# If you don't wish to enumerate all versions for a particular platform, use 'all'.
|
||||
# To view available platforms and versions (or releases), visit:
|
||||
# https://galaxy.ansible.com/api/v1/platforms/
|
||||
#
|
||||
# platforms:
|
||||
# - name: Fedora
|
||||
# versions:
|
||||
# - all
|
||||
# - 25
|
||||
# - name: SomePlatform
|
||||
# versions:
|
||||
# - all
|
||||
# - 1.0
|
||||
# - 7
|
||||
# - 99.99
|
||||
|
||||
galaxy_tags: []
|
||||
# List tags for your role here, one per line. A tag is a keyword that describes
|
||||
# and categorizes the role. Users find roles by searching for tags. Be sure to
|
||||
# remove the '[]' above, if you add tags to this list.
|
||||
#
|
||||
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
|
||||
# Maximum 20 tags per role.
|
||||
|
||||
dependencies: []
|
||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
||||
# if you add dependencies to this list.
|
||||
|
||||
15
tasks/configuration.yaml
Normal file
15
tasks/configuration.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
|
||||
- name: create the grub configuration
|
||||
template:
|
||||
src: etc/default/grub.j2
|
||||
dest: '{{ grub_cfg }}'
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
seuser: system_u
|
||||
serole: object_r
|
||||
setype: bootloader_etc_t
|
||||
selevel: s0
|
||||
notify:
|
||||
- 'grub update config'
|
||||
6
tasks/installation.yaml
Normal file
6
tasks/installation.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
|
||||
- name: install grub related packages
|
||||
package:
|
||||
name: '{{ grub_packages }}'
|
||||
state: present
|
||||
20
tasks/main.yaml
Normal file
20
tasks/main.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
# tasks file for ansible-role-grub
|
||||
|
||||
- name: load variables based on distribution type
|
||||
include_vars: '{{ item }}'
|
||||
with_first_found:
|
||||
- '{{ ansible_distribution }}_{{ ansible_distribution_major_version }}.yaml'
|
||||
- '{{ ansible_os_family }}.yaml'
|
||||
tags:
|
||||
- 'grub_vars'
|
||||
|
||||
- name: import installation tasks
|
||||
import_tasks: installation.yaml
|
||||
tags:
|
||||
- 'grub_install'
|
||||
|
||||
- name: import configuration tasks
|
||||
import_tasks: configuration.yaml
|
||||
tags:
|
||||
- 'grub_configuration'
|
||||
35
templates/etc/default/grub.j2
Normal file
35
templates/etc/default/grub.j2
Normal file
@@ -0,0 +1,35 @@
|
||||
{% if grub_consoles | d(False) %}
|
||||
{% set grub_console = "console=" + grub_consoles | join(' console=') %}
|
||||
{% endif %}
|
||||
{% if grub_cmdline_linux_default_list | d(False) %}
|
||||
{% set grub_cmdline_linux_default = grub_cmdline_linux_default_list | join(' ') %}
|
||||
{% endif %}
|
||||
{% set grub_cmdline_linux = [] + grub_cmdline_linux_list %}
|
||||
{% if ansible_cmdline['rd.auto'] | d(False) %}
|
||||
{% set grub_cmdline_linux = grub_cmdline_linux + ['rd.auto'] %}
|
||||
{% endif %}
|
||||
{% if grub_disable_network_predictable_interface_names %}
|
||||
{% set grub_cmdline_linux = grub_cmdline_linux + ['net.ifnames=0'] %}
|
||||
{% endif %}
|
||||
|
||||
# default entry
|
||||
GRUB_DEFAULT=saved
|
||||
# grub timeout
|
||||
GRUB_TIMEOUT={{ grub_timeout }}
|
||||
# distribition information
|
||||
GRUB_DISTRIBUTOR=$(sed 's, release .*$,,g' /etc/system-release)
|
||||
|
||||
{% if grub_console and grub_cmdline_linux_default | d(False) %}
|
||||
GRUB_CMDLINE_LINUX_DEFAULT="{{ grub_console }} {{ grub_cmdline_linux_default }}"
|
||||
{% elif grub_cmdline_linux_default | d(False) %}
|
||||
GRUB_CMDLINE_LINUX_DEFAULT="{{ grub_cmdline_linux_default }}"
|
||||
{% else %}
|
||||
GRUB_CMDLINE_LINUX_DEFAULT="{{ grub_console }}"
|
||||
{% endif %}
|
||||
GRUB_CMDLINE_LINUX="{{ grub_cmdline_linux | join(' ') }}"
|
||||
{% if grub_serial | d(False) %}
|
||||
GRUB_SERIAL_COMMAND="serial --speed={{ grub_serial.speed }} --unit={{ grub_serial.unit }} --word={{ grub_serial.word }} --parity={{ grub_serial.parity }} --stop={{ grub_serial.stop }}"
|
||||
{% endif %}
|
||||
|
||||
# disable graphical terminal
|
||||
GRUB_TERMINAL=console
|
||||
2
tests/inventory
Normal file
2
tests/inventory
Normal file
@@ -0,0 +1,2 @@
|
||||
localhost
|
||||
|
||||
5
tests/test.yml
Normal file
5
tests/test.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
- hosts: localhost
|
||||
remote_user: root
|
||||
roles:
|
||||
- ansible-role-grub
|
||||
15
vars/RedHat.yaml
Normal file
15
vars/RedHat.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
# vars file for ansible-role-grub
|
||||
|
||||
# grub related packages
|
||||
grub_packages:
|
||||
- grub2
|
||||
|
||||
# grub-mkconfig binary
|
||||
grub_mkconfig_bin: /usr/sbin/grub2-mkconfig
|
||||
|
||||
# grub configuration file
|
||||
grub_cfg: /etc/default/grub
|
||||
|
||||
# grub main running configuration
|
||||
grub_boot_cfg: /boot/grub2/grub.cfg
|
||||
Reference in New Issue
Block a user