mirror of
https://github.com/mrlesmithjr/ansible-manage-lvm.git
synced 2026-09-04 06:28:20 +03:00
Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 24e97867c9 | |||
| 5b36f4779f | |||
| 164b50b083 | |||
| 7328da933e | |||
| af9951c5cd | |||
| 454649d90b | |||
| 12f7033566 | |||
| 9a5d1dfc15 | |||
| 2f56dc54ad | |||
| 9f6bac5d63 | |||
| 9ffff49ef8 | |||
| 113974cccc | |||
| 2c41273c9f | |||
| 6d0feecec7 | |||
| 416e840eea | |||
| 850d571313 | |||
| ff13947aaf | |||
| 26246c7160 | |||
| 5540f7fda5 | |||
| 433b7ca1a9 | |||
| 9404a780c5 | |||
| c0184492d5 | |||
| 60e08852ea | |||
| 42cc915582 | |||
| 49edca9134 | |||
| ee1e3d051b | |||
| 91f8cfca5d | |||
| 3ac9669088 | |||
| 4219da5423 | |||
| 683c617265 | |||
| b41ffc5e58 | |||
| 564d3d1f6f | |||
| 1d0fa70d66 | |||
| 8c3bca39ec | |||
| 4fbcf1cd19 |
@@ -1,2 +1,3 @@
|
|||||||
skip_list:
|
skip_list:
|
||||||
- name[casing]
|
- name[casing]
|
||||||
|
- role-name
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
github: mrlesmithjr
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "monthly"
|
||||||
|
groups:
|
||||||
|
github-actions:
|
||||||
|
patterns: ["*"]
|
||||||
|
labels: ["dependencies"]
|
||||||
|
commit-message:
|
||||||
|
prefix: "ci"
|
||||||
|
|
||||||
|
- package-ecosystem: "pip"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "monthly"
|
||||||
|
groups:
|
||||||
|
python-deps:
|
||||||
|
patterns: ["*"]
|
||||||
|
labels: ["dependencies"]
|
||||||
|
commit-message:
|
||||||
|
prefix: "chore"
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
name: CI
|
||||||
name: Molecule
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
branches-ignore:
|
||||||
@@ -11,23 +10,18 @@ on:
|
|||||||
- main
|
- main
|
||||||
- master
|
- master
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
lint:
|
||||||
|
name: Lint
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
max-parallel: 4
|
|
||||||
matrix:
|
|
||||||
python-version: [3.9]
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: '3.11'
|
||||||
- uses: actions/cache@v2
|
- uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ~/.cache/pip
|
path: ~/.cache/pip
|
||||||
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }}
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }}
|
||||||
@@ -12,6 +12,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
# Drafts your next Release notes as Pull Requests are merged into "master"
|
# Drafts your next Release notes as Pull Requests are merged into "master"
|
||||||
- uses: release-drafter/release-drafter@v5
|
- uses: release-drafter/release-drafter@v7
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
---
|
|
||||||
name: Ansible Galaxy
|
name: Ansible Galaxy
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
- master
|
|
||||||
release:
|
release:
|
||||||
types:
|
types:
|
||||||
- published
|
- published
|
||||||
@@ -13,22 +9,22 @@ jobs:
|
|||||||
galaxy:
|
galaxy:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
python-version: '3.11'
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
|
||||||
uses: actions/setup-python@v2
|
- name: Install Ansible
|
||||||
with:
|
|
||||||
python-version: ${{ matrix.python-version }}
|
|
||||||
- uses: actions/cache@v2
|
|
||||||
with:
|
|
||||||
path: ~/.cache/pip
|
|
||||||
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-pip-
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install -r requirements.txt -r requirements-dev.txt
|
pip install ansible-core
|
||||||
- name: Trigger a new import on Galaxy.
|
|
||||||
run: ansible-galaxy role import --api-key ${{ secrets.GALAXY_API_KEY }} $(echo ${{ github.repository }} | cut -d/ -f1) $(echo ${{ github.repository }} | cut -d/ -f2)
|
- name: Trigger a new import on Galaxy
|
||||||
|
run: >-
|
||||||
|
ansible-galaxy role import
|
||||||
|
--api-key ${{ secrets.GALAXY_API_KEY }}
|
||||||
|
${{ github.repository_owner }}
|
||||||
|
${{ github.event.repository.name }}
|
||||||
|
|
||||||
|
|||||||
@@ -1,36 +1,122 @@
|
|||||||
# ansible-manage-lvm
|
# ansible-manage-lvm
|
||||||
|
|
||||||
Ansible role to manage LVM Groups/Logical Volumes.
|
An [Ansible](https://www.ansible.com) role to create, extend, and resize [LVM](https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)) volume groups and logical volumes.
|
||||||
|
|
||||||
> NOTE: Can be used to create, extend or resize LVM Groups and volumes.
|
> Used by [OpenStack Kayobe](https://docs.openstack.org/kayobe/latest/) for LVM management.
|
||||||
|
|
||||||
|
## Ansible Galaxy
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ansible-galaxy install mrlesmithjr.manage_lvm
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Note:** As of December 2025, the canonical Galaxy name is `mrlesmithjr.manage_lvm` (underscore).
|
||||||
|
> Update any `requirements.yml` using the older hyphen-style name `mrlesmithjr.manage-lvm`.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Historical download statistics</summary>
|
||||||
|
|
||||||
|
| Role Name | Downloads (as of Dec 2025) |
|
||||||
|
|-----------|---------------------------|
|
||||||
|
| `mrlesmithjr.manage_lvm` | 697,492 |
|
||||||
|
| `mrlesmithjr.manage-lvm` | 494,517 |
|
||||||
|
| **Combined** | **1,192,009** |
|
||||||
|
|
||||||
|
Download counts reset when roles are re-imported to Galaxy. These figures represent actual historical usage.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Supported Platforms
|
||||||
|
|
||||||
|
Any Linux distribution with LVM support, including:
|
||||||
|
|
||||||
|
| Platform | Versions |
|
||||||
|
|----------|----------|
|
||||||
|
| Ubuntu | 20.04, 22.04, 24.04 |
|
||||||
|
| Debian | 11, 12 |
|
||||||
|
| Rocky Linux / RHEL | 8, 9 |
|
||||||
|
| Fedora | 39+ |
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
Devices/disks to be members of the LVM setup **must be** identified prior to
|
- Unpartitioned disk devices to assign to volume groups
|
||||||
using this role.
|
- `lvm2` package (installed automatically by the role)
|
||||||
|
|
||||||
## Role Variables
|
## Important: Safety Default
|
||||||
|
|
||||||
[defaults/main.yml](defaults/main.yml)
|
`manage_lvm` defaults to `false`. **The role will not make any disk changes** unless you explicitly set:
|
||||||
|
|
||||||
## Dependencies
|
```yaml
|
||||||
|
manage_lvm: true
|
||||||
|
```
|
||||||
|
|
||||||
None
|
This prevents accidental modifications on misconfigured runs.
|
||||||
|
|
||||||
## Example Playbook
|
## Quick Start
|
||||||
|
|
||||||
[playbook.yml](playbook.yml)
|
```yaml
|
||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
manage_lvm: true
|
||||||
|
lvm_groups:
|
||||||
|
- vgname: data-vg
|
||||||
|
disks:
|
||||||
|
- /dev/sdb
|
||||||
|
create: true
|
||||||
|
lvnames:
|
||||||
|
- lvname: data
|
||||||
|
size: 100%FREE
|
||||||
|
create: true
|
||||||
|
filesystem: ext4
|
||||||
|
mount: true
|
||||||
|
mntp: /data
|
||||||
|
roles:
|
||||||
|
- role: mrlesmithjr.manage_lvm
|
||||||
|
```
|
||||||
|
|
||||||
|
## Key Variables
|
||||||
|
|
||||||
|
| Variable | Default | Description |
|
||||||
|
|----------|---------|-------------|
|
||||||
|
| `manage_lvm` | `false` | Master switch — must be `true` to make any changes |
|
||||||
|
| `lvm_groups` | `[]` | List of volume group definitions |
|
||||||
|
| `pvresize_to_max` | `false` | Resize all PVs to maximum available size |
|
||||||
|
|
||||||
|
### `lvm_groups` Structure
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
lvm_groups:
|
||||||
|
- vgname: my-vg # Volume group name
|
||||||
|
disks: # Physical volumes to assign
|
||||||
|
- /dev/sdb
|
||||||
|
- /dev/sdc
|
||||||
|
create: true # true = create, false = remove
|
||||||
|
pvresize: false # Resize PV to max size
|
||||||
|
lvnames:
|
||||||
|
- lvname: data # Logical volume name
|
||||||
|
size: 50g # Size: 10g | 1024 (MB) | 100%FREE
|
||||||
|
create: true # true = create, false = remove
|
||||||
|
filesystem: ext4 # ext4 | xfs | swap | etc.
|
||||||
|
mount: true # Mount after creation
|
||||||
|
mntp: /data # Mountpoint
|
||||||
|
mopts: noatime # Mount options (optional)
|
||||||
|
fsopts: # Filesystem creation options (optional)
|
||||||
|
```
|
||||||
|
|
||||||
|
See [defaults/main.yml](defaults/main.yml) for full examples including XFS, swap, and OpenStack Cinder volumes.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
MIT
|
MIT
|
||||||
|
|
||||||
## Author Information
|
## Support This Project
|
||||||
|
|
||||||
Larry Smith Jr.
|
This role has been downloaded over **1.1 million times** from Ansible Galaxy.
|
||||||
|
If your organization depends on it in production, consider
|
||||||
|
[sponsoring its maintenance](https://github.com/sponsors/mrlesmithjr).
|
||||||
|
Enterprise support tiers are available.
|
||||||
|
|
||||||
- [@mrlesmithjr](https://twitter.com/mrlesmithjr)
|
## Author
|
||||||
- [mrlesmithjr@gmail.com](mailto:mrlesmithjr@gmail.com)
|
|
||||||
- [http://everythingshouldbevirtual.com](http://everythingshouldbevirtual.com)
|
|
||||||
|
|
||||||
<a href="https://www.buymeacoffee.com/mrlesmithjr" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>
|
Larry Smith Jr. — [everythingshouldbevirtual.com](http://everythingshouldbevirtual.com) · [mrlesmithjr@gmail.com](mailto:mrlesmithjr@gmail.com)
|
||||||
|
|||||||
+3
-4
@@ -9,6 +9,8 @@ lvm_groups: []
|
|||||||
# # defines if VG should exist or be removed
|
# # defines if VG should exist or be removed
|
||||||
# # true or false
|
# # true or false
|
||||||
# create: true
|
# create: true
|
||||||
|
# # defines if PV should be resized to max size
|
||||||
|
# pvresize: false
|
||||||
# lvnames:
|
# lvnames:
|
||||||
# - lvname: swap_1
|
# - lvname: swap_1
|
||||||
# # Define size of lvol
|
# # Define size of lvol
|
||||||
@@ -86,8 +88,5 @@ ebsnvme_binary_helper_path: '/sbin/go-ebsnvme'
|
|||||||
### nvme to scsi device name map script helper
|
### nvme to scsi device name map script helper
|
||||||
ebsnvme_scrip_helper_path: '/usr/local/bin/ebsnvme-id'
|
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)
|
### resize all pv's to max size
|
||||||
### 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
|
pvresize_to_max: false
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@ galaxy_info:
|
|||||||
author: Larry Smith Jr.
|
author: Larry Smith Jr.
|
||||||
description: Ansible role to manage(create, extend, resize) LVM Groups/Logical Volumes.
|
description: Ansible role to manage(create, extend, resize) LVM Groups/Logical Volumes.
|
||||||
namespace: mrlesmithjr
|
namespace: mrlesmithjr
|
||||||
role_name: manage_lvm
|
role_name: manage-lvm
|
||||||
|
|
||||||
license: MIT
|
license: MIT
|
||||||
min_ansible_version: "1.2"
|
min_ansible_version: "1.2"
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
../default/tests
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
"""PyTest Fixtures."""
|
||||||
|
from __future__ import absolute_import
|
||||||
|
import os
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
def pytest_runtest_setup(item):
|
||||||
|
"""Run tests only when under molecule with testinfra installed."""
|
||||||
|
try:
|
||||||
|
import testinfra
|
||||||
|
except ImportError:
|
||||||
|
pytest.skip("Test requires testinfra", allow_module_level=True)
|
||||||
|
if "MOLECULE_INVENTORY_FILE" in os.environ:
|
||||||
|
pytest.testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
|
||||||
|
os.environ["MOLECULE_INVENTORY_FILE"]
|
||||||
|
).get_hosts("all")
|
||||||
|
else:
|
||||||
|
pytest.skip(
|
||||||
|
"Test should run only from inside molecule.", allow_module_level=True
|
||||||
|
)
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
"""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_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):
|
||||||
|
host.file("/var/lib/mountpoint").mode == 0o731
|
||||||
|
|
||||||
|
|
||||||
|
def test_volume2_is_mounted(host):
|
||||||
|
host.file("/var/lib/mountpoint2").mode == 0o731
|
||||||
@@ -1 +0,0 @@
|
|||||||
../../default/tests/conftest.py
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
"""PyTest Fixtures."""
|
||||||
|
from __future__ import absolute_import
|
||||||
|
import os
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
def pytest_runtest_setup(item):
|
||||||
|
"""Run tests only when under molecule with testinfra installed."""
|
||||||
|
try:
|
||||||
|
import testinfra
|
||||||
|
except ImportError:
|
||||||
|
pytest.skip("Test requires testinfra", allow_module_level=True)
|
||||||
|
if "MOLECULE_INVENTORY_FILE" in os.environ:
|
||||||
|
pytest.testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
|
||||||
|
os.environ["MOLECULE_INVENTORY_FILE"]
|
||||||
|
).get_hosts("all")
|
||||||
|
else:
|
||||||
|
pytest.skip(
|
||||||
|
"Test should run only from inside molecule.", allow_module_level=True
|
||||||
|
)
|
||||||
@@ -1 +0,0 @@
|
|||||||
../../default/tests/conftest.py
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
"""PyTest Fixtures."""
|
||||||
|
from __future__ import absolute_import
|
||||||
|
import os
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
def pytest_runtest_setup(item):
|
||||||
|
"""Run tests only when under molecule with testinfra installed."""
|
||||||
|
try:
|
||||||
|
import testinfra
|
||||||
|
except ImportError:
|
||||||
|
pytest.skip("Test requires testinfra", allow_module_level=True)
|
||||||
|
if "MOLECULE_INVENTORY_FILE" in os.environ:
|
||||||
|
pytest.testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
|
||||||
|
os.environ["MOLECULE_INVENTORY_FILE"]
|
||||||
|
).get_hosts("all")
|
||||||
|
else:
|
||||||
|
pytest.skip(
|
||||||
|
"Test should run only from inside molecule.", allow_module_level=True
|
||||||
|
)
|
||||||
Generated
+841
-874
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -6,7 +6,7 @@ authors = ["Larry Smith Jr. <mrlesmithjr@gmail.com>"]
|
|||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = ">=3.9,<4.0"
|
python = ">=3.9,<4.0"
|
||||||
ansible = "6.6.0"
|
ansible = "8.5.0"
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.group.dev.dependencies]
|
||||||
ansible-lint = "6.8.7"
|
ansible-lint = "6.8.7"
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ click-help-colors==0.9.1 ; python_version >= "3.9" and python_version < "4.0"
|
|||||||
click==8.1.3 ; python_version >= "3.9" and python_version < "4.0"
|
click==8.1.3 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows"
|
colorama==0.4.6 ; python_version >= "3.9" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.9" and python_version < "4.0" and platform_system == "Windows"
|
||||||
cookiecutter==2.1.1 ; python_version >= "3.9" and python_version < "4.0"
|
cookiecutter==2.1.1 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
cryptography==41.0.1 ; python_version >= "3.9" and python_version < "4.0"
|
cryptography==46.0.6 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
dill==0.3.6 ; python_version >= "3.9" and python_version < "4.0"
|
dill==0.3.6 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
distlib==0.3.6 ; python_version >= "3.9" and python_version < "4.0"
|
distlib==0.3.6 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
enrich==1.2.7 ; python_version >= "3.9" and python_version < "4.0"
|
enrich==1.2.7 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
@@ -47,7 +47,7 @@ pre-commit==2.21.0 ; python_version >= "3.9" and python_version < "4.0"
|
|||||||
pycodestyle==2.10.0 ; python_version >= "3.9" and python_version < "4.0"
|
pycodestyle==2.10.0 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
pycparser==2.21 ; python_version >= "3.9" and python_version < "4.0"
|
pycparser==2.21 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
pyflakes==3.0.1 ; python_version >= "3.9" and python_version < "4.0"
|
pyflakes==3.0.1 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
pygments==2.15.1 ; python_version >= "3.9" and python_version < "4.0"
|
pygments==2.20.0 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
pylint==2.17.4 ; python_version >= "3.9" and python_version < "4.0"
|
pylint==2.17.4 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
pyrsistent==0.19.3 ; python_version >= "3.9" and python_version < "4.0"
|
pyrsistent==0.19.3 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
python-dateutil==2.8.2 ; python_version >= "3.9" and python_version < "4.0"
|
python-dateutil==2.8.2 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
ansible-core==2.13.10 ; python_version >= "3.9" and python_version < "4.0"
|
ansible-core==2.13.10 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
ansible==6.6.0 ; python_version >= "3.9" and python_version < "4.0"
|
ansible==6.6.0 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
cffi==1.15.1 ; python_version >= "3.9" and python_version < "4.0"
|
cffi==1.15.1 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
cryptography==41.0.1 ; python_version >= "3.9" and python_version < "4.0"
|
cryptography==46.0.6 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0"
|
jinja2==3.1.2 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
markupsafe==2.1.3 ; python_version >= "3.9" and python_version < "4.0"
|
markupsafe==2.1.3 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
packaging==23.1 ; python_version >= "3.9" and python_version < "4.0"
|
packaging==23.1 ; python_version >= "3.9" and python_version < "4.0"
|
||||||
|
|||||||
+2
-2
@@ -30,7 +30,7 @@
|
|||||||
- lv.filesystem != "swap"
|
- lv.filesystem != "swap"
|
||||||
|
|
||||||
- name: create_fs | creating new filesystem on new LVM logical volume(s)
|
- name: create_fs | creating new filesystem on new LVM logical volume(s)
|
||||||
community.general.system.filesystem:
|
community.general.filesystem:
|
||||||
fstype: "{{ lv.filesystem }}"
|
fstype: "{{ lv.filesystem }}"
|
||||||
dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
|
dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
|
||||||
resizefs: yes
|
resizefs: yes
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
- lv.filesystem != 'xfs'
|
- lv.filesystem != 'xfs'
|
||||||
|
|
||||||
- name: create_fs | creating new xfs filesystem on new LVM logical volume(s)
|
- name: create_fs | creating new xfs filesystem on new LVM logical volume(s)
|
||||||
community.general.system.filesystem:
|
community.general.filesystem:
|
||||||
fstype: "{{ lv.filesystem }}"
|
fstype: "{{ lv.filesystem }}"
|
||||||
dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
|
dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
|
||||||
opts: "{{ lv.fsopts | default(omit) }}"
|
opts: "{{ lv.fsopts | default(omit) }}"
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
verbosity: 2
|
verbosity: 2
|
||||||
|
|
||||||
- name: create_lv | creating new LVM logical volume(s)
|
- name: create_lv | creating new LVM logical volume(s)
|
||||||
community.general.system.lvol:
|
community.general.lvol:
|
||||||
vg: "{{ vg.vgname }}"
|
vg: "{{ vg.vgname }}"
|
||||||
lv: "{{ lv.lvname }}"
|
lv: "{{ lv.lvname }}"
|
||||||
size: "{{ lv.size }}"
|
size: "{{ lv.size }}"
|
||||||
|
|||||||
+2
-14
@@ -1,27 +1,15 @@
|
|||||||
---
|
---
|
||||||
- name: create_vg | creating new LVM volume group(s)
|
- name: create_vg | creating new LVM volume group(s)
|
||||||
community.general.system.lvg:
|
community.general.lvg:
|
||||||
vg: "{{ vg.vgname }}"
|
vg: "{{ vg.vgname }}"
|
||||||
pvs: "{{ vg.disks | join(',') }}"
|
pvs: "{{ vg.disks | join(',') }}"
|
||||||
state: present
|
state: present
|
||||||
|
pvresize: "{{ vg.pvresize | default(pvresize_to_max) }}"
|
||||||
become: true
|
become: true
|
||||||
when:
|
when:
|
||||||
- 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
|
|
||||||
ansible.builtin.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
|
||||||
ansible.builtin.include_tasks: create_lv.yml
|
ansible.builtin.include_tasks: create_lv.yml
|
||||||
loop: "{{ vg.lvnames | default([]) }}"
|
loop: "{{ vg.lvnames | default([]) }}"
|
||||||
|
|||||||
+1
-1
@@ -37,4 +37,4 @@
|
|||||||
ansible.builtin.command: "{{ rescan_scsi_command }}"
|
ansible.builtin.command: "{{ rescan_scsi_command }}"
|
||||||
become: true
|
become: true
|
||||||
changed_when: false
|
changed_when: false
|
||||||
when: scsi_devices['stdout'] | length
|
when: scsi_devices['stdout'] | length > 0
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
loop_var: vg
|
loop_var: vg
|
||||||
|
|
||||||
- name: manage_lvm | Removing LVM logical volume(s)
|
- name: manage_lvm | Removing LVM logical volume(s)
|
||||||
community.general.system.lvol:
|
community.general.lvol:
|
||||||
vg: "{{ item.0.vgname }}"
|
vg: "{{ item.0.vgname }}"
|
||||||
lv: "{{ item.1.lvname }}"
|
lv: "{{ item.1.lvname }}"
|
||||||
state: absent
|
state: absent
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
- not item.1.create|bool
|
- not item.1.create|bool
|
||||||
|
|
||||||
- name: manage_lvm | Removing LVM volume group(s)
|
- name: manage_lvm | Removing LVM volume group(s)
|
||||||
community.general.system.lvg:
|
community.general.lvg:
|
||||||
vg: "{{ item.vgname }}"
|
vg: "{{ item.vgname }}"
|
||||||
pvs: "{{ item.disks | join(',') }}"
|
pvs: "{{ item.disks | join(',') }}"
|
||||||
state: absent
|
state: absent
|
||||||
|
|||||||
Reference in New Issue
Block a user