17 Commits

Author SHA1 Message Date
Larry Smith Jr
73db3c747c Merge pull request #68 from stackhpc/ansible-facts
Use ansible_facts to reference facts
2021-07-26 14:25:57 -04:00
Mark Goddard
73b6bce608 Use ansible_facts to reference facts
By default, Ansible injects a variable for every fact, prefixed with
ansible_. This can result in a large number of variables for each host,
which at scale can incur a performance penalty. Ansible provides a
configuration option [0] that can be set to False to prevent this
injection of facts. In this case, facts should be referenced via
ansible_facts.<fact>.

This change updates all references to Ansible facts from using
individual fact variables to using the items in the
ansible_facts dictionary. This allows users to disable fact variable
injection in their Ansible configuration, which may provide some
performance improvement.

[0] https://docs.ansible.com/ansible/latest/reference_appendices/config.html#inject-facts-as-vars
2021-05-13 17:21:42 +01:00
Larry Smith Jr
098bd79154 Merge pull request #64 from mrlesmithjr/issue-63-Add_Probot_configs_for_new_apps
Closes Add Probot configs for new apps #63
2021-04-23 20:58:39 -04:00
Larry Smith Jr
fddf9804dd Closes Add Probot configs for new apps #63 2021-04-23 20:56:44 -04:00
Larry Smith Jr
506da4707e Create stale.yml 2021-04-23 00:20:15 -04:00
Larry Smith Jr
773ce28061 Merge pull request #57 from Roxyrob/issue-51-nvme
mitigation for aws ec2 nvme random device name assignment + scsi device rescan + auto pvresize + skip scsi if scsi adapter not installed
2021-04-18 08:49:45 -04:00
Roxyrob
1bb56066fe * Doc: set subfile task comments 2021-03-19 19:28:54 +01:00
Roxyrob
cb792e59a6 * Refactor: aws code in its own tasks file to mitigate concerns about performance at scale 2021-03-18 15:38:22 +01:00
Roxyrob
48e3be3c5c * Refactor: task comment review 2021-03-17 13:46:10 +01:00
Roxyrob
2492c96566 * Fix: allow automatic pvresize also for ansible ersion 2.10 or above without new lvg collection version installed 2021-03-17 10:01:24 +01:00
Roxyrob
e4bc8a9e9b * Fix: lint 2021-03-17 01:40:26 +01:00
Roxyrob
1d57a469b0 * Fix: pvresize waiting for new collection lvg native support 2021-03-17 01:29:14 +01:00
Roxyrob
19e56ac7d8 * Fix: improve centos7/8 recognize scsi disk resize without reboot 2021-03-17 01:24:15 +01:00
Roxyrob
5c3e601078 * Fix: lint 2021-03-17 01:13:53 +01:00
Roxyrob
535b410363 * Fix: follow best practice for pipe in shell command 2021-03-16 23:24:24 +01:00
Roxyrob
f87c42a8c5 * Fix: remove too many blank lines (molecule) 2021-03-16 20:28:13 +01:00
Roxyrob
34e4f08c31 * New: support mitigation for aws ec2 nvme random device name assignment 2021-03-16 19:41:37 +01:00
13 changed files with 220 additions and 2 deletions

14
.github/config.yml vendored Normal file
View File

@@ -0,0 +1,14 @@
# Configuration for request-info - https://github.com/behaviorbot/request-info
# *Required* Comment to reply with
requestInfoReplyComment: >
We would appreciate it if you could provide us with more info about this issue/pr!
# *OPTIONAL* default titles to check against for lack of descriptiveness
# MUST BE ALL LOWERCASE
requestInfoDefaultTitles:
- update readme.md
- updates
# *OPTIONAL* Label to be added to Issues and Pull Requests with insufficient information given
requestInfoLabelToAdd: needs-more-info

32
.github/release-drafter.yml vendored Normal file
View File

@@ -0,0 +1,32 @@
name-template: "v$RESOLVED_VERSION 🌈"
tag-template: "v$RESOLVED_VERSION"
categories:
- title: "🚀 Features"
labels:
- "feature"
- "enhancement"
- title: "🐛 Bug Fixes"
labels:
- "fix"
- "bugfix"
- "bug"
- title: "🧰 Maintenance"
label: "chore"
- title: "🧺 Miscellaneous" #Everything except ABAP
label: "misc"
change-template: "- $TITLE @$AUTHOR (#$NUMBER)"
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
version-resolver:
major:
labels:
- "major"
minor:
labels:
- "minor"
patch:
labels:
- "patch"
default: patch
template: |
## Changes
$CHANGES

10
.github/settings.yml vendored Normal file
View File

@@ -0,0 +1,10 @@
# These settings are synced to GitHub by https://probot.github.io/apps/settings/
repository:
# See https://developer.github.com/v3/repos/#edit for all available settings.
# The name of the repository. Changing this will rename the repository
name: ansible-manage-lvm
# A short description of the repository that will show up on GitHub
description: Ansible role to manage LVM Groups/Logical Volumes

17
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,17 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
# Label to use when marking an issue as stale
staleLabel: wontfix
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

17
.github/workflows/release-drafter.yml vendored Normal file
View File

@@ -0,0 +1,17 @@
name: Release Drafter
on:
push:
# branches to consider in the event; optional, defaults to all
branches:
- main
- master
jobs:
update_release_draft:
runs-on: ubuntu-latest
steps:
# Drafts your next Release notes as Pull Requests are merged into "master"
- uses: release-drafter/release-drafter@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -61,3 +61,17 @@ lvm_groups: []
# Defines if LVM will be managed by role
# default is false to ensure nothing is changed by accident.
manage_lvm: false
### nvme to scsi device name map binary helper
ebsnvme_binary_helper_ver: '0.1.3'
ebsnvme_binary_helper_tmp: '/tmp'
ebsnvme_binary_helper_path: '/sbin/go-ebsnvme'
### nvme to scsi device name map script helper
ebsnvme_scrip_helper_path: '/usr/local/bin/ebsnvme-id'
### auto pvresize (waiting until ansible 2.10 or above as collections have new lvg with integrated pvresize)
### waiting for new module in collection set to true or run pvresize manually on remote systems
### https://docs.ansible.com/ansible/3/collections/community/general/lvg_module.html
###
pvresize_to_max: false

70
tasks/amazon.yml Normal file
View File

@@ -0,0 +1,70 @@
---
- name: amazon | check for nvme devices
shell: |
set -o pipefail
cat /proc/partitions | awk '{print $4}' | grep -q nvme. ; echo $?
args:
executable: /bin/bash
register: blkdev_nvme
changed_when: false
- name: amazon | check for amazon ebs devices
shell: |
set -o pipefail
lsblk -O -J | grep -qi "amazon elastic block store" ; echo $?
register: blkdev_awsebs
changed_when: false
args:
executable: /bin/bash
- name: amazon | set flag for nvme subsystem
set_fact:
device_is_nvme: "{{ true if (blkdev_nvme.stdout == '0') else false }}"
- name: amazon | set flag for aws ebs devices
set_fact:
device_is_awsebs: "{{ true if (blkdev_awsebs.stdout == '0') else false }}"
- name: Block to map renamed ec2 ebs nvmeXnY devices to their original sdX/xvdX names
when: device_is_nvme and device_is_awsebs|bool
become: true
block:
- name: amazon | download nvme mapping binary helper
get_url:
url: "{{ ebsnvme_binary_helper_url }}"
dest: "{{ ebsnvme_binary_helper_tmp }}/"
changed_when: false
- name: amazon | extract binary helper
unarchive:
src: "{{ ebsnvme_binary_helper_tmp }}/{{ ebsnvme_binary_helper_file }}"
dest: "{{ ebsnvme_binary_helper_tmp }}/"
remote_src: yes
mode: 0755
changed_when: false
- name: amazon | copy binary helper
copy:
src: "{{ ebsnvme_binary_helper_tmp }}/go-ebsnvme"
dest: "{{ ebsnvme_binary_helper_path }}"
mode: a+x
remote_src: yes
- name: amazon | template script helper
template:
src: 'ebsnvme-id.j2'
dest: "{{ ebsnvme_scrip_helper_path }}"
mode: a+x
- name: amazon | template udev rule
template:
src: '70-ec2-nvme-devices.rules.j2'
dest: '/etc/udev/rules.d/70-ec2-nvme-devices.rules'
mode: 0755
register: udev_rule
- name: amazon | reload and trigger udev rules
shell:
cmd: udevadm control --reload-rules && udevadm trigger
when: udev_rule.changed

View File

@@ -5,6 +5,9 @@
state: present
become: true
- include_tasks: amazon.yml
when: ansible_facts.system_vendor == 'Amazon EC2'
- name: centos | installing sg3_utils
package:
name: sg3_utils
@@ -45,3 +48,10 @@
command: /usr/bin/rescan-scsi-bus.sh
become: true
changed_when: false
when: scsi_devices.stdout|length > 0
- name: centos | rescanning for resized disks
command: /usr/bin/rescan-scsi-bus.sh -s
become: true
changed_when: false
when: scsi_devices.stdout|length > 0

View File

@@ -9,6 +9,19 @@
- vg.create is defined
- vg.create|bool
### workaround: auto pvresize waiting for upgrade to new module supporting integrated pvresize
### ref: https://docs.ansible.com/ansible/3/collections/community/general/lvg_module.html
- name: create_vg | pvresize to max available free space
command: "pvresize {{ pv }}"
loop: "{{ vg.disks | default([]) }}"
loop_control:
loop_var: pv
changed_when: false
when:
- vg.create is defined
- vg.create|bool
- pvresize_to_max|bool
- name: manage_lvm | loop over logical volume group(s) to create logical volumes
include_tasks: create_lv.yml
loop: "{{ vg.lvnames | default([]) }}"

View File

@@ -1,10 +1,10 @@
---
# tasks file for ansible-manage-lvm
- include_tasks: debian.yml
when: ansible_os_family == "Debian"
when: ansible_facts.os_family == "Debian"
- include_tasks: centos.yml
when: ansible_os_family == "RedHat"
when: ansible_facts.os_family == "RedHat"
- include_tasks: manage_lvm.yml
when:

View File

@@ -0,0 +1,3 @@
# ebs nvme to scsi device naming mapping
KERNEL=="nvme[0-9]*n[0-9]*", ENV{DEVTYPE}=="disk", ATTRS{model}=="Amazon Elastic Block Store", PROGRAM="{{ ebsnvme_scrip_helper_path }} /dev/%k", SYMLINK+="%c"

15
templates/ebsnvme-id.j2 Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/bash
# This script uses go version of ebsnvme-id to provide
# SCSI Disk device name links for nvme devices
#
# links:
#
# https://www.logicworks.com/blog/2018/03/manage-aws-ebs-volumes-c5-m5-puppet-chef-ansible/
# https://github.com/mvisonneau/go-ebsnvme
# https://gist.github.com/lbernail/d851e5b06eb32180a4b8ead2ce4f45db
# and working forks like:
# (keenan-v1/ebsnvme-id) https://gist.github.com/keenan-v1/aee92cd7383ee02de2a817a004917a03
#
{{ ebsnvme_binary_helper_path }} -n $1 | awk -F '/' '{print $3}'

View File

@@ -1,2 +1,5 @@
---
# vars file for ansible-manage-lvm
ebsnvme_binary_helper_file: go-ebsnvme_{{ ebsnvme_binary_helper_ver }}_linux_amd64.tar.gz
ebsnvme_binary_helper_url: https://github.com/mvisonneau/go-ebsnvme/releases/download/{{ ebsnvme_binary_helper_ver }}/{{ ebsnvme_binary_helper_file }}