Compare commits

..

46 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
Larry Smith Jr f1a54639c6 Merge pull request #48 from Tcharl/rebased
XFS resize
2020-06-07 20:05:35 -04:00
Larry Smith Jr 88489df0ac Merge pull request #45 from OsgiliathEnterprise/master
Allow to define only volume groups
2020-06-07 20:05:22 -04:00
Charlie Mordant b288695b9a lint 2020-06-07 17:25:33 +02:00
Charlie Mordant ed0eb14ce8 xfs resize 2020-06-07 17:17:48 +02:00
Charlie Mordant 9c04be9046 Merge pull request #14 from OsgiliathEnterprise/rebased
Rebased from upstream
2020-05-15 00:03:37 +02:00
Charlie Mordant 96fd3b2b06 rebase done 2020-05-14 23:46:35 +02:00
Charlie Mordant 15b2b7b4e0 rebased mrjsmith 2020-05-14 23:43:59 +02:00
Larry Smith Jr 9ead2c9b18 Merge pull request #38 from mrlesmithjr/issue-37
Issue 37
2020-05-14 09:52:39 -04:00
Charlie Mordant 79f4787208 Merge pull request #13 from Tcharl/master
Merge pull request #5 from Tcharl/id2
2020-05-11 18:44:01 +02:00
Charlie Mordant 94582de25d use symbolic links instead of replicating files 2020-05-11 17:38:02 +02:00
Charlie Mordant 6ee72799b4 improve tests 2020-05-11 17:09:58 +02:00
Charlie Mordant 69e25effd4 improve tests 2020-05-11 16:56:04 +02:00
Charlie Mordant 62fc5a5e2b testing singl lv and only vg 2020-05-11 16:35:31 +02:00
Charlie Mordant c40f9b7d03 testing singl lv and only vg 2020-05-11 16:35:00 +02:00
Charlie Mordant 0621cadde8 avoid error when lv not defined 2020-05-11 14:36:04 +02:00
Charlie Mordant b7cef8e323 avoid error when lv not defined 2020-05-11 14:26:48 +02:00
Charlie Mordant 59ffcfac4a avoid error when lv not defined 2020-05-11 14:23:32 +02:00
Charlie Mordant 976ff31d00 avoid error when lv not defined 2020-05-11 14:21:02 +02:00
Charlie Mordant 78205e51cb Merge pull request #12 from Tcharl/id2
rename manage_lvm.yml due to recursive parsing error
2020-05-11 13:53:03 +02:00
Charlie Mordant b731c20100 rename manage_lvm.yml due to recursive parsing error 2020-05-11 13:51:45 +02:00
Charlie Mordant f2df804926 Merge pull request #11 from OsgiliathEnterprise/id2
Id2
2020-05-11 13:39:16 +02:00
Larry Smith Jr 9f37fa3ed1 Cleaned up tasks
These changes include:
- Cleaning up logic of conditionals for more clarity
- Naming of tasks as some were either missing or incorrect
- Removing unnecessary parens, etc.
- Closes #37
2020-04-27 13:50:00 -04:00
Larry Smith Jr c9a9e1660e Cleaned up conditionals logic 2020-04-27 13:47:43 -04:00
Larry Smith Jr ec0737d26b Cleaned up distro specific tasks
- Cleaned up conditions, etc.
2020-04-27 13:47:40 -04:00
Larry Smith Jr 52c0270a53 Updated Molecule Vagrant boxes for testing
- We need to test against CentOS, Fedora, and Ubuntu
- Added my Vagrant boxes to ensure that we know what is included, etc.
- This ensures we can at least test these distros locally
2020-04-27 13:46:08 -04:00
Larry Smith Jr 94be28c09b Updated repo info 2020-04-27 13:43:46 -04:00
Larry Smith Jr a6b07da847 Added example playbook 2020-04-27 13:43:46 -04:00
Larry Smith Jr 643c7b6ee1 Updated Galaxy meta info 2020-04-27 13:43:46 -04:00
Charlie Mordant 1e997a3e80 Merge pull request #5 from Tcharl/id2
xfs support on centos
2020-04-23 19:56:02 +02:00
35 changed files with 634 additions and 379 deletions
+14
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
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
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
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
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 }}
+2
View File
@@ -26,5 +26,7 @@ before_install:
script: script:
- | - |
sudo molecule test --scenario-name kvm sudo molecule test --scenario-name kvm
sudo molecule test --scenario-name kvmsinglelv
sudo molecule test --scenario-name kvmonlyvg
notifications: notifications:
webhooks: https://galaxy.ansible.com/api/v1/notifications/ webhooks: https://galaxy.ansible.com/api/v1/notifications/
+8 -109
View File
@@ -1,6 +1,6 @@
# Role Name # ansible-manage-lvm
An [Ansible] role to manage LVM Groups/Logical Volumes. Ansible role to manage LVM Groups/Logical Volumes.
> NOTE: Can be used to create, extend or resize LVM Groups and volumes. > NOTE: Can be used to create, extend or resize LVM Groups and volumes.
@@ -9,78 +9,9 @@ An [Ansible] role to manage LVM Groups/Logical Volumes.
Devices/disks to be members of the LVM setup **must be** identified prior to Devices/disks to be members of the LVM setup **must be** identified prior to
using this role. using this role.
> NOTE: Ensure that you select the correct devices/disks.
>
> NOTE: To create an LVM VG w/out creating LVM LVOLS...define lvname w/ var as
> `None` as in the below example.
## Role Variables ## Role Variables
```yaml [defaults/main.yml](defaults/main.yml)
---
# defaults file for ansible-manage-lvm
lvm_groups: []
# - vgname: ubuntu-vg
# disks:
# - /dev/sda5
# - /dev/sdc
# - /dev/sdd
# # defines if VG should exist or be removed
# # true or false
# create: true
# lvnames:
# - lvname: swap_1
# # Define size of lvol
# # 100%FREE, 10g, 1024 (megabytes by default)
# size: 5g
# # Defines additional lvcreate options (e.g. stripes, stripesize, etc)
# opts: ''
# # Defines if lvol should exist or be removed
# # true or false
# create: true
# # Defines filesystem to format lvol as
# filesystem: swap
# # Defines if filesystem should be mounted
# mount: false
# # Defines mountpoint for lvol
# mntp: []
# # Defines additional mount options (e.g. noatime, noexec, etc)
# mopts: ''
# - lvname: root
# size: 40g
# create: true
# filesystem: ext4
# mount: true
# mntp: /
# - vgname: test-vg
# disks:
# - /dev/sdb
# create: true
# lvnames:
# - lvname: test_1
# size: 5g
# create: true
# filesystem: ext4
# mount: true
# mntp: /mnt/test_1
# - lvname: test_2
# size: 10g
# create: true
# filesystem: ext4
# mount: true
# mntp: /mnt/test_2
# - vgname: cinder-volumes
# disks:
# - /dev/cciss/c0d1
# create: true
# lvnames:
# # Set to None to only create LVM VG w/out creating LVM LVOLS
# - None
# Defines if LVM will be managed by role
# default is false to ensure nothing is changed by accident.
manage_lvm: false
```
## Dependencies ## Dependencies
@@ -88,48 +19,16 @@ None
## Example Playbook ## Example Playbook
```yaml [playbook.yml](playbook.yml)
---
- hosts: test-nodes
vars:
lvm_groups:
- vgname: test-vg
disks:
- /dev/sdb
- /dev/sdc
create: true
lvnames:
- lvname: test_1
size: 5g
create: true
filesystem: ext4
mount: true
mntp: /mnt/test_1
- lvname: test_2
size: 10g
create: true
filesystem: ext4
mount: true
mntp: /mnt/test_2
manage_lvm: true
pri_domain_name: 'test.vagrant.local'
roles:
- role: ansible-manage-lvm
tasks:
```
## License ## License
BSD MIT
## Author Information ## Author Information
Larry Smith Jr. Larry Smith Jr.
- [@mrlesmithjr] - [@mrlesmithjr](https://twitter.com/mrlesmithjr)
- <http://everythingshouldbevirtual.com> - [mrlesmithjr@gmail.com](mailto:mrlesmithjr@gmail.com)
- mrlesmithjr [at] gmail.com - [http://everythingshouldbevirtual.com](http://everythingshouldbevirtual.com)
[@mrlesmithjr]: https://www.twitter.com/mrlesmithjr
[ansible]: https://www.ansible.com
+14
View File
@@ -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
+7 -8
View File
@@ -1,7 +1,7 @@
--- ---
galaxy_info: galaxy_info:
author: Larry Smith Jr. author: Larry Smith Jr.
description: Role to manage LVM Groups/Logical Volumes. Can be used to create, extend or resize LVM. description: Ansible role to manage(create, extend, resize) LVM Groups/Logical Volumes.
license: MIT license: MIT
min_ansible_version: 1.2 min_ansible_version: 1.2
@@ -12,17 +12,16 @@ galaxy_info:
- name: EL - name: EL
versions: versions:
- 6 - all
- 7 - name: Fedora
versions:
- all
- name: Ubuntu - name: Ubuntu
versions: versions:
- precise - all
- trusty
- name: Debian - name: Debian
versions: versions:
- jessie - all
- wheezy
galaxy_tags: galaxy_tags:
- system - system
- lvm - lvm
+1 -1
View File
@@ -15,7 +15,7 @@
filesystem: ext4 filesystem: ext4
mount: true mount: true
mntp: "/var/lib/mountpoint" mntp: "/var/lib/mountpoint"
- lvname: my_lv2 - lvname: my_lw
size: 20%VG size: 20%VG
opts: "--wipesignatures y" opts: "--wipesignatures y"
mount: true mount: true
+19 -5
View File
@@ -5,13 +5,27 @@ driver:
name: virtualbox name: virtualbox
lint: yamllint . && flake8 && ansible-lint lint: yamllint . && flake8 && ansible-lint
platforms: platforms:
- name: Fedora-Molecule-LVM - name: CentOS-Molecule-LVM
box: fedora/31-cloud-base box: mrlesmithjr/centos7
cpu: 2
memory: 2048
provider_override_args: provider_override_args:
- "persistent_storage.enabled = true" - "persistent_storage.enabled = true"
- "persistent_storage.location = 'molecule-lvm.vdi'" - "persistent_storage.location = 'centos-molecule-lvm.vdi'"
- "persistent_storage.size = 100"
- "persistent_storage.mount = false"
- "persistent_storage.diskdevice = '/dev/sdb'"
- name: Fedora-Molecule-LVM
box: mrlesmithjr/fedora31
provider_override_args:
- "persistent_storage.enabled = true"
- "persistent_storage.location = 'fedora-molecule-lvm.vdi'"
- "persistent_storage.size = 100"
- "persistent_storage.mount = false"
- "persistent_storage.diskdevice = '/dev/sdb'"
- name: Ubuntu-Molecule-LVM
box: mrlesmithjr/bionic64
provider_override_args:
- "persistent_storage.enabled = true"
- "persistent_storage.location = 'ubuntu-molecule-lvm.vdi'"
- "persistent_storage.size = 100" - "persistent_storage.size = 100"
- "persistent_storage.mount = false" - "persistent_storage.mount = false"
- "persistent_storage.diskdevice = '/dev/sdb'" - "persistent_storage.diskdevice = '/dev/sdb'"
+7
View File
@@ -18,6 +18,13 @@ def test_mylv_logical_volume_is_created(host):
assert int(cmd.stdout.rstrip()) >= 1 assert int(cmd.stdout.rstrip()) >= 1
def test_mylv_logical_volume2_is_created(host):
command = """sudo lvs -o lv_name my_vg --separator='|' --noheadings \
| grep -c 'my_lw'"""
cmd = host.run(command)
assert int(cmd.stdout.rstrip()) >= 1
def test_volume_is_mounted(host): def test_volume_is_mounted(host):
host.file("/var/lib/mountpoint").mode == 0o731 host.file("/var/lib/mountpoint").mode == 0o731
+1 -1
View File
@@ -15,7 +15,7 @@
filesystem: ext4 filesystem: ext4
mount: true mount: true
mntp: "/var/lib/mountpoint" mntp: "/var/lib/mountpoint"
- lvname: my_lv2 - lvname: my_lw
size: 20%VG size: 20%VG
opts: "--wipesignatures y" opts: "--wipesignatures y"
mount: true mount: true
+14
View File
@@ -0,0 +1,14 @@
---
- name: Converge
hosts: all
vars:
lvm_groups:
- vgname: my_vg
disks:
- /dev/vdb
create: true
manage_lvm: true
tasks:
- name: "Include lvm"
include_role:
name: "ansible-manage-lvm"
+29
View File
@@ -0,0 +1,29 @@
---
driver:
name: vagrant
provider:
name: libvirt
lint: yamllint . && flake8 && ansible-lint
platforms:
- name: Fedora-Molecule-Volumes-KVM
box: fedora/31-cloud-base
cpu: 2
memory: 2048
provider_raw_config_args:
- "storage :file, :size => '1G', :device => 'vdb'"
provisioner:
name: ansible
config_options:
defaults:
forks: 20
ssh_connection:
pipelining: true
ssh_args: -o ControlMaster=auto -o ControlPersist=600s
verifier:
name: testinfra
env:
PYTHONWARNINGS: "ignore:.*U.*mode is deprecated:DeprecationWarning"
options:
v: 1
scenario:
name: kvmonlyvg
+1
View File
@@ -0,0 +1 @@
../../default/tests/conftest.py
+11
View File
@@ -0,0 +1,11 @@
"""Role testing files using testinfra."""
def test_lvm_package_shall_be_installed(host):
assert host.package("lvm2").is_installed
def test_non_persistent_volume_group_is_created(host):
command = """sudo vgdisplay | grep -c 'my_vg'"""
cmd = host.run(command)
assert '1' in cmd.stdout
+22
View File
@@ -0,0 +1,22 @@
---
- name: Converge
hosts: all
vars:
lvm_groups:
- vgname: my_vg
disks:
- /dev/vdb
create: true
lvnames:
- lvname: my_lv
size: 40%VG
opts: "--wipesignatures y"
create: true
filesystem: ext4
mount: true
mntp: "/var/lib/mountpoint"
manage_lvm: true
tasks:
- name: "Include lvm"
include_role:
name: "ansible-manage-lvm"
+29
View File
@@ -0,0 +1,29 @@
---
driver:
name: vagrant
provider:
name: libvirt
lint: yamllint . && flake8 && ansible-lint
platforms:
- name: Fedora-Molecule-Volumes-KVM
box: fedora/31-cloud-base
cpu: 2
memory: 2048
provider_raw_config_args:
- "storage :file, :size => '1G', :device => 'vdb'"
provisioner:
name: ansible
config_options:
defaults:
forks: 20
ssh_connection:
pipelining: true
ssh_args: -o ControlMaster=auto -o ControlPersist=600s
verifier:
name: testinfra
env:
PYTHONWARNINGS: "ignore:.*U.*mode is deprecated:DeprecationWarning"
options:
v: 1
scenario:
name: kvmsinglelv
+1
View File
@@ -0,0 +1 @@
../../default/tests/conftest.py
@@ -0,0 +1,22 @@
"""Role testing files using testinfra."""
def test_lvm_package_shall_be_installed(host):
assert host.package("lvm2").is_installed
def test_non_persistent_volume_group_is_created(host):
command = """sudo vgdisplay | grep -c 'my_vg'"""
cmd = host.run(command)
assert '1' in cmd.stdout
def test_mylv_logical_volume_is_created(host):
command = """sudo lvs -o lv_name my_vg --separator='|' --noheadings \
| grep -c 'my_lv'"""
cmd = host.run(command)
assert int(cmd.stdout.rstrip()) >= 1
def test_volume_is_mounted(host):
host.file("/var/lib/mountpoint").mode == 0o731
+27
View File
@@ -0,0 +1,27 @@
---
- hosts: test-nodes
vars:
lvm_groups:
- vgname: test-vg
disks:
- /dev/sdb
- /dev/sdc
create: true
lvnames:
- lvname: test_1
size: 5g
create: true
filesystem: ext4
mount: true
mntp: /mnt/test_1
- lvname: test_2
size: 10g
create: true
filesystem: ext4
mount: true
mntp: /mnt/test_2
manage_lvm: true
tasks:
- name: Include lvm
include_role:
name: ansible-manage-lvm
-17
View File
@@ -1,17 +0,0 @@
#!/usr/bin/env bash
TAR_FILE="v1.6.0.tar.gz"
# Prompt for Ansible role name
read -p "Enter the Ansible role name: " input
# Update .travis.yml with Ansible role name
sed -i '' "s/replace_role/${input}/g" ".travis.yml"
# Update tests/test.yml with Ansible role name
sed -i '' "s/replace_role/${input}/g" "tests/test.yml"
# Cleanup
if [ -f $TAR_FILE ]; then
rm $TAR_FILE
fi
+70
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
+17 -7
View File
@@ -1,14 +1,17 @@
--- ---
- name: centos | installing lvm2 - name: centos | installing lvm2
package: package:
name: "lvm2" name: lvm2
state: "present" state: present
become: true become: true
- include_tasks: amazon.yml
when: ansible_facts.system_vendor == 'Amazon EC2'
- name: centos | installing sg3_utils - name: centos | installing sg3_utils
package: package:
name: "sg3_utils" name: sg3_utils
state: "present" state: present
become: true become: true
- name: centos | debug lvg - name: centos | debug lvg
@@ -36,12 +39,19 @@
- lv.1.create|bool - lv.1.create|bool
- name: centos | checking for scsi devices - name: centos | checking for scsi devices
command: "sg_scan" command: sg_scan
become: true become: true
register: "scsi_devices" register: scsi_devices
changed_when: false changed_when: false
- name: centos | rescanning for new disks - name: centos | rescanning for new disks
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
+76 -90
View File
@@ -1,110 +1,96 @@
--- ---
- name: manage_lvm | unmounting filesystem(s)
mount:
path: "{{ lv.mntp }}"
src: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
fstype: "{{ lv.filesystem | default(omit) }}"
state: "absent"
become: true
loop: "{{ vg.lvnames }}"
loop_control:
loop_var: lv
when: >
(lv is defined and
lv != 'None') and
(lv.create is defined and
not lv.create and
lv.filesystem != "swap")
- name: manage_lvm | creating new filesystem on new LVM logical volume(s) # unable to resize xfs: looks like we've to reference the mountpoint instead of the device
filesystem: - name: create_fs | check already converted
fstype: "{{ lv.filesystem }}"
dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
resizefs: yes
loop: "{{ vg.lvnames }}"
loop_control:
loop_var: lv
become: true
when: >
(
(vg.create is defined and
vg.create) and
(lv is defined and
lv != 'None') and
(lv.create is defined and
lv.create) and
(
lv.filesystem is defined and
lv.filesystem != 'None' and
lv.filesystem != 'xfs'
)
)
# unable to resize xfs: looks like we've to reference the mountpoint instead of the device
- name: lvm | check already converted
# at least xfs is executed twice if the partition has changed in the meantime # at least xfs is executed twice if the partition has changed in the meantime
# then it tries to recreate the fs on the mounted fs which indeed fails... # then it tries to recreate the fs on the mounted fs which indeed fails...
shell: "xfs_info {{ lv.mntp }} | grep -c 'ftype=1'" shell: "xfs_info {{ lv.mntp }} | grep -c 'ftype=1'"
become: yes become: yes
loop: "{{ vg.lvnames }}"
loop_control:
loop_var: lv
register: mountedxfs register: mountedxfs
ignore_errors: true ignore_errors: true
changed_when: no changed_when: false
when: > when:
( - lv is defined and lv != 'None'
(lv is defined and lv != 'None') and - lv.filesystem is defined
( - lv.filesystem == "xfs"
lv.filesystem is defined and - lv.create is defined
lv.filesystem == "xfs" - lv.create|bool
)
and
(
lv.create is defined and
lv.create
)
)
- name: manage_lvm | creating new xfs filesystem on new LVM logical volume(s) - name: create_fs | unmounting filesystem(s)
mount:
path: "{{ lv.mntp }}"
src: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
fstype: "{{ lv.filesystem | default(omit) }}"
state: absent
become: true
when:
- lv is defined
- lv != 'None'
- lv.create is defined
- not lv.create|bool
- lv.filesystem != "swap"
- name: create_fs | creating new filesystem on new LVM logical volume(s)
filesystem: filesystem:
fstype: "{{ lv.filesystem }}" fstype: "{{ lv.filesystem }}"
dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}" dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
loop: "{{ vg.lvnames }}" resizefs: yes
loop_control:
loop_var: lv
become: true become: true
when: > when:
( - vg.create is defined
mountedxfs is failed and - vg.create|bool
(vg.create is defined and - lv is defined
vg.create) and - lv != 'None'
(lv is defined and - lv.create is defined
lv != 'None') and - lv.create|bool
(lv.create is defined and - lv.filesystem is defined
lv.create) and - lv.filesystem != 'None'
( - lv.filesystem != 'xfs'
lv.filesystem is defined and
lv.filesystem == 'xfs'
)
)
- name: manage_lvm | mounting new filesystem(s) - name: create_fs | creating new xfs filesystem on new LVM logical volume(s)
filesystem:
fstype: "{{ lv.filesystem }}"
dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
become: true
when:
- mountedxfs is failed
- vg.create is defined
- vg.create|bool
- lv is defined
- lv != 'None'
- lv.create is defined
- lv.create|bool
- lv.filesystem is defined
- lv.filesystem == 'xfs'
- name: create_fs | mounting new filesystem(s)
mount: mount:
path: "{{ lv.mntp }}" path: "{{ lv.mntp }}"
src: "/dev/{{ vg.vgname }}/{{ lv.lvname }}" src: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
fstype: "{{ lv.filesystem }}" fstype: "{{ lv.filesystem }}"
state: "mounted" state: mounted
opts: "{{ lv.mopts | default('defaults') }}" opts: "{{ lv.mopts | default('defaults') }}"
become: true become: true
loop: "{{ vg.lvnames }}" when:
loop_control: - vg.create is defined
loop_var: lv - vg.create|bool
when: > - lv is defined
((vg.create is defined and - lv != 'None'
vg.create) and - lv.create is defined
lv != 'None' and - lv.create|bool
(lv.create is defined and - lv.mount is defined
lv.create) and - lv.mount|bool
(lv.mount is defined and
lv.mount)) - name: create_fs | resizing xfs filesystem on new LVM logical volume(s)
command: "xfs_growfs {{ lv.mntp }}"
become: true
when:
- vg.create is defined
- vg.create|bool
- lv is defined
- lv != 'None'
- lv.create is defined
- lv.create|bool
- lv.filesystem is defined
- lv.filesystem == 'xfs'
- lvchanged.changed
+20 -24
View File
@@ -1,35 +1,31 @@
--- ---
- name: "debug vg"
- name: create_lv | Display Volume Group
debug: debug:
var: vg var: vg
verbosity: 2 verbosity: 2
- name: "debug lvm" - name: create_lv | creating new LVM logical volume(s)
loop: "{{ vg.lvnames }}"
debug:
var: lv
verbosity: 1
loop_control:
loop_var: lv
- name: manage_lvm | creating new LVM logical volume(s)
lvol: lvol:
vg: "{{ vg.vgname }}" vg: "{{ vg.vgname }}"
lv: "{{ lv.lvname }}" lv: "{{ lv.lvname }}"
size: "{{ lv.size }}" size: "{{ lv.size }}"
shrink: no shrink: false
opts: "{{ lv.opts | default('') }}" opts: "{{ lv.opts | default('') }}"
state: "present" state: present
loop: "{{ vg.lvnames }}"
loop_control:
loop_var: lv
become: true become: true
when: > register: lvchanged
( when:
(vg.create is defined - vg.create is defined
and vg.create) and - vg.create|bool
(lv is defined and - lv is defined
lv != 'None') and - lv != 'None'
(lv.create is defined and - lv.create is defined
lv.create) - lv.create|bool
)
- name: create_lv | debug changed attribute
debug:
var: lvchanged
- name: create_lv | configuring FS
include_tasks: create_fs.yml
+26 -9
View File
@@ -1,12 +1,29 @@
--- ---
- name: create_vg | creating new LVM volume group(s)
- name: manage_lvm | creating new LVM volume group(s)
lvg: lvg:
vg: "{{ item.vgname }}" vg: "{{ vg.vgname }}"
pvs: "{{ item.disks | join(',') }}" pvs: "{{ vg.disks | join(',') }}"
state: "present" state: present
become: true become: true
loop: "{{ lvm_groups }}" when:
when: > - vg.create is defined
item.create is defined and - vg.create|bool
item.create
### 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([]) }}"
loop_control:
loop_var: lv
+22 -22
View File
@@ -1,40 +1,40 @@
--- ---
- name: debian | Updating Apt Cache
apt:
update_cache: true
cache_valid_time: 3600
become: true
- name: debian | installing pre-reqs - name: debian | installing pre-reqs
package: apt:
name: name:
- lvm2 - lvm2
- scsitools - scsitools
state: "present" state: present
become: true become: true
- name: debian | install xfs tools - name: debian | install xfs tools
package: apt:
name: "xfsprogs" name: xfsprogs
state: "present" state: present
become: yes become: true
loop: "{{ lvm_groups|subelements('lvnames') }}" loop: "{{ lvm_groups|subelements('lvnames') }}"
when: > when:
( - item.1 is defined
(item.1 is defined and item.1 != 'None') and - item.1 != 'None'
( - item.1.filesystem is defined
item.1.filesystem is defined and - item.1.filesystem == "xfs"
item.1.filesystem == "xfs" - item.1.create is defined
) - item.1.create|bool
and
(
item.1.create is defined and
item.1.create
)
)
- name: debian | checking for scsi devices - name: debian | checking for scsi devices
command: "sg_scan" command: sg_scan
become: true become: true
register: "scsi_devices" register: scsi_devices
changed_when: false changed_when: false
- name: debian | rescanning for new disks added - name: debian | rescanning for new disks added
command: "/sbin/rescan-scsi-bus" command: /sbin/rescan-scsi-bus
become: true become: true
changed_when: false changed_when: false
when: scsi_devices['stdout'] | length when: scsi_devices['stdout'] | length
+5 -5
View File
@@ -1,12 +1,12 @@
--- ---
# tasks file for ansible-manage-lvm # tasks file for ansible-manage-lvm
- include_tasks: debian.yml - include_tasks: debian.yml
when: ansible_os_family == "Debian" when: ansible_facts.os_family == "Debian"
- include_tasks: centos.yml - include_tasks: centos.yml
when: ansible_os_family == "RedHat" when: ansible_facts.os_family == "RedHat"
- include_tasks: manage_lvm.yml - include_tasks: manage_lvm.yml
when: > when:
manage_lvm and - lvm_groups is defined
lvm_groups is defined - manage_lvm|bool
+12 -21
View File
@@ -1,15 +1,6 @@
--- ---
- name: manage_lvm | manage physical volume group creation - name: manage_lvm | manage physical volume group creation
include_tasks: create_vg.yml include_tasks: create_vg.yml
- name: manage_lvm | loop over logical volume group(s) to create logical volumes
include_tasks: create_lv.yml
loop: "{{ lvm_groups }}"
loop_control:
loop_var: vg
- name: manage_lvm | loop over logical volume group(s) to create filesystems
include_tasks: create_fs.yml
loop: "{{ lvm_groups }}" loop: "{{ lvm_groups }}"
loop_control: loop_control:
loop_var: vg loop_var: vg
@@ -18,23 +9,23 @@
lvol: lvol:
vg: "{{ item.0.vgname }}" vg: "{{ item.0.vgname }}"
lv: "{{ item.1.lvname }}" lv: "{{ item.1.lvname }}"
state: "absent" state: absent
force: yes force: true
become: true become: true
loop: "{{ lvm_groups|subelements('lvnames') }}" loop: "{{ lvm_groups|subelements('lvnames', {'skip_missing': true}) }}"
when: > when:
(item.1 is defined and - item.1 is defined
item.1 != 'None') and - item.1 != 'None'
(item.1.create is defined and - item.1.create is defined
not item.1.create) - not item.1.create|bool
- name: manage_lvm | Removing LVM volume group(s) - name: manage_lvm | Removing LVM volume group(s)
lvg: lvg:
vg: "{{ item.vgname }}" vg: "{{ item.vgname }}"
pvs: "{{ item.disks | join(',') }}" pvs: "{{ item.disks | join(',') }}"
state: "absent" state: absent
become: true become: true
loop: "{{ lvm_groups }}" loop: "{{ lvm_groups }}"
when: > when:
item.create is defined and - item.create is defined
not item.create - not item.create|bool
+3
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
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}'
+3
View File
@@ -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 }}