mirror of
https://github.com/mrlesmithjr/ansible-manage-lvm.git
synced 2026-02-04 08:49:13 +03:00
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
This commit is contained in:
@@ -61,3 +61,17 @@ lvm_groups: []
|
|||||||
# Defines if LVM will be managed by role
|
# Defines if LVM will be managed by role
|
||||||
# default is false to ensure nothing is changed by accident.
|
# default is false to ensure nothing is changed by accident.
|
||||||
manage_lvm: false
|
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
70
tasks/amazon.yml
Normal 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
|
||||||
@@ -5,6 +5,9 @@
|
|||||||
state: present
|
state: present
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
|
- include_tasks: amazon.yml
|
||||||
|
when: ansible_system_vendor == 'Amazon EC2'
|
||||||
|
|
||||||
- name: centos | installing sg3_utils
|
- name: centos | installing sg3_utils
|
||||||
package:
|
package:
|
||||||
name: sg3_utils
|
name: sg3_utils
|
||||||
@@ -45,3 +48,10 @@
|
|||||||
command: /usr/bin/rescan-scsi-bus.sh
|
command: /usr/bin/rescan-scsi-bus.sh
|
||||||
become: true
|
become: true
|
||||||
changed_when: false
|
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
|
||||||
|
|||||||
@@ -9,6 +9,19 @@
|
|||||||
- vg.create is defined
|
- vg.create is defined
|
||||||
- vg.create|bool
|
- 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
|
- name: manage_lvm | loop over logical volume group(s) to create logical volumes
|
||||||
include_tasks: create_lv.yml
|
include_tasks: create_lv.yml
|
||||||
loop: "{{ vg.lvnames | default([]) }}"
|
loop: "{{ vg.lvnames | default([]) }}"
|
||||||
|
|||||||
3
templates/70-ec2-nvme-devices.rules.j2
Normal file
3
templates/70-ec2-nvme-devices.rules.j2
Normal 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
15
templates/ebsnvme-id.j2
Normal 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}'
|
||||||
|
|
||||||
@@ -1,2 +1,5 @@
|
|||||||
---
|
---
|
||||||
# vars file for ansible-manage-lvm
|
# 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 }}
|
||||||
|
|||||||
Reference in New Issue
Block a user