mirror of
https://github.com/mrlesmithjr/ansible-manage-lvm.git
synced 2026-09-06 23:48:12 +03:00
Compare commits
46 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 73db3c747c | |||
| 73b6bce608 | |||
| 098bd79154 | |||
| fddf9804dd | |||
| 506da4707e | |||
| 773ce28061 | |||
| 1bb56066fe | |||
| cb792e59a6 | |||
| 48e3be3c5c | |||
| 2492c96566 | |||
| e4bc8a9e9b | |||
| 1d57a469b0 | |||
| 19e56ac7d8 | |||
| 5c3e601078 | |||
| 535b410363 | |||
| f87c42a8c5 | |||
| 34e4f08c31 | |||
| f1a54639c6 | |||
| 88489df0ac | |||
| b288695b9a | |||
| ed0eb14ce8 | |||
| 9c04be9046 | |||
| 96fd3b2b06 | |||
| 15b2b7b4e0 | |||
| 9ead2c9b18 | |||
| 79f4787208 | |||
| 94582de25d | |||
| 6ee72799b4 | |||
| 69e25effd4 | |||
| 62fc5a5e2b | |||
| c40f9b7d03 | |||
| 0621cadde8 | |||
| b7cef8e323 | |||
| 59ffcfac4a | |||
| 976ff31d00 | |||
| 78205e51cb | |||
| b731c20100 | |||
| f2df804926 | |||
| 9f37fa3ed1 | |||
| c9a9e1660e | |||
| ec0737d26b | |||
| 52c0270a53 | |||
| 94be28c09b | |||
| a6b07da847 | |||
| 643c7b6ee1 | |||
| 1e997a3e80 |
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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 }}
|
||||||
@@ -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/
|
||||||
|
|||||||
@@ -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
|
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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'"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -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
@@ -0,0 +1 @@
|
|||||||
|
../../default/tests/conftest.py
|
||||||
@@ -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
|
||||||
@@ -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"
|
||||||
@@ -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
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
|
||||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
@@ -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