mirror of
https://github.com/mrlesmithjr/ansible-manage-lvm.git
synced 2026-09-02 21:50:36 +03:00
Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ed841fd622 | |||
| 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 |
@@ -1,2 +1,3 @@
|
||||
skip_list:
|
||||
- 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: Molecule
|
||||
name: CI
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
@@ -11,23 +10,18 @@ on:
|
||||
- main
|
||||
- master
|
||||
jobs:
|
||||
build:
|
||||
lint:
|
||||
name: Lint
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
max-parallel: 4
|
||||
matrix:
|
||||
python-version: [3.9]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
- uses: actions/cache@v2
|
||||
python-version: '3.11'
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.cache/pip
|
||||
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }}
|
||||
@@ -1,10 +1,6 @@
|
||||
---
|
||||
name: Ansible Galaxy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
release:
|
||||
types:
|
||||
- published
|
||||
@@ -13,22 +9,22 @@ jobs:
|
||||
galaxy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v2
|
||||
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
|
||||
python-version: '3.11'
|
||||
|
||||
- name: Install Ansible
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements.txt -r requirements-dev.txt
|
||||
- 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)
|
||||
pip install ansible-core
|
||||
|
||||
- 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 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
|
||||
|
||||
Devices/disks to be members of the LVM setup **must be** identified prior to
|
||||
using this role.
|
||||
- Unpartitioned disk devices to assign to volume groups
|
||||
- `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
|
||||
|
||||
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)
|
||||
- [mrlesmithjr@gmail.com](mailto:mrlesmithjr@gmail.com)
|
||||
- [http://everythingshouldbevirtual.com](http://everythingshouldbevirtual.com)
|
||||
## Author
|
||||
|
||||
<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
|
||||
# # true or false
|
||||
# create: true
|
||||
# # defines if PV should be resized to max size
|
||||
# pvresize: false
|
||||
# lvnames:
|
||||
# - lvname: swap_1
|
||||
# # Define size of lvol
|
||||
@@ -86,8 +88,5 @@ 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
|
||||
###
|
||||
### resize all pv's to max size
|
||||
pvresize_to_max: false
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ galaxy_info:
|
||||
author: Larry Smith Jr.
|
||||
description: Ansible role to manage(create, extend, resize) LVM Groups/Logical Volumes.
|
||||
namespace: mrlesmithjr
|
||||
role_name: manage_lvm
|
||||
role_name: manage-lvm
|
||||
|
||||
license: MIT
|
||||
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
+40
-31
@@ -38,13 +38,13 @@ test = ["coverage", "pip-tools", "pytest (>=7.2.0)", "pytest-mock", "pytest-plus
|
||||
|
||||
[[package]]
|
||||
name = "ansible-core"
|
||||
version = "2.15.8"
|
||||
version = "2.15.9"
|
||||
description = "Radically simple IT automation"
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
files = [
|
||||
{file = "ansible-core-2.15.8.tar.gz", hash = "sha256:8aa49cb1ddbf33d88c2bb4bf09ecd4b0dd8b788e174adca8b88dda6e6bdbf59b"},
|
||||
{file = "ansible_core-2.15.8-py3-none-any.whl", hash = "sha256:55e6f4350fb98ac5441620ba981b1d9f7b90aa5f320885965af996e149bd3caa"},
|
||||
{file = "ansible-core-2.15.9.tar.gz", hash = "sha256:25f9b1b5a5af3c0986bd3928ed086eaddb867527fb5c83afef1a03cfad34f345"},
|
||||
{file = "ansible_core-2.15.9-py3-none-any.whl", hash = "sha256:5b6a4b12aa5358f60933e79d86763e3558862282fb1dc563a29b9999e5849fc3"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -451,47 +451,56 @@ requests = ">=2.23.0"
|
||||
|
||||
[[package]]
|
||||
name = "cryptography"
|
||||
version = "41.0.6"
|
||||
version = "42.0.2"
|
||||
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "cryptography-41.0.6-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:0f27acb55a4e77b9be8d550d762b0513ef3fc658cd3eb15110ebbcbd626db12c"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:ae236bb8760c1e55b7a39b6d4d32d2279bc6c7c8500b7d5a13b6fb9fc97be35b"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afda76d84b053923c27ede5edc1ed7d53e3c9f475ebaf63c68e69f1403c405a8"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da46e2b5df770070412c46f87bac0849b8d685c5f2679771de277a422c7d0b86"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ff369dd19e8fe0528b02e8df9f2aeb2479f89b1270d90f96a63500afe9af5cae"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b648fe2a45e426aaee684ddca2632f62ec4613ef362f4d681a9a6283d10e079d"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5daeb18e7886a358064a68dbcaf441c036cbdb7da52ae744e7b9207b04d3908c"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:068bc551698c234742c40049e46840843f3d98ad7ce265fd2bd4ec0d11306596"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-win32.whl", hash = "sha256:2132d5865eea673fe6712c2ed5fb4fa49dba10768bb4cc798345748380ee3660"},
|
||||
{file = "cryptography-41.0.6-cp37-abi3-win_amd64.whl", hash = "sha256:48783b7e2bef51224020efb61b42704207dde583d7e371ef8fc2a5fb6c0aabc7"},
|
||||
{file = "cryptography-41.0.6-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:8efb2af8d4ba9dbc9c9dd8f04d19a7abb5b49eab1f3694e7b5a16a5fc2856f5c"},
|
||||
{file = "cryptography-41.0.6-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c5a550dc7a3b50b116323e3d376241829fd326ac47bc195e04eb33a8170902a9"},
|
||||
{file = "cryptography-41.0.6-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:85abd057699b98fce40b41737afb234fef05c67e116f6f3650782c10862c43da"},
|
||||
{file = "cryptography-41.0.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f39812f70fc5c71a15aa3c97b2bbe213c3f2a460b79bd21c40d033bb34a9bf36"},
|
||||
{file = "cryptography-41.0.6-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:742ae5e9a2310e9dade7932f9576606836ed174da3c7d26bc3d3ab4bd49b9f65"},
|
||||
{file = "cryptography-41.0.6-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:35f3f288e83c3f6f10752467c48919a7a94b7d88cc00b0668372a0d2ad4f8ead"},
|
||||
{file = "cryptography-41.0.6-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4d03186af98b1c01a4eda396b137f29e4e3fb0173e30f885e27acec8823c1b09"},
|
||||
{file = "cryptography-41.0.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b27a7fd4229abef715e064269d98a7e2909ebf92eb6912a9603c7e14c181928c"},
|
||||
{file = "cryptography-41.0.6-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:398ae1fc711b5eb78e977daa3cbf47cec20f2c08c5da129b7a296055fbb22aed"},
|
||||
{file = "cryptography-41.0.6-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7e00fb556bda398b99b0da289ce7053639d33b572847181d6483ad89835115f6"},
|
||||
{file = "cryptography-41.0.6-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:60e746b11b937911dc70d164060d28d273e31853bb359e2b2033c9e93e6f3c43"},
|
||||
{file = "cryptography-41.0.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3288acccef021e3c3c10d58933f44e8602cf04dba96d9796d70d537bb2f4bbc4"},
|
||||
{file = "cryptography-41.0.6.tar.gz", hash = "sha256:422e3e31d63743855e43e5a6fcc8b4acab860f560f9321b0ee6269cc7ed70cc3"},
|
||||
{file = "cryptography-42.0.2-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:701171f825dcab90969596ce2af253143b93b08f1a716d4b2a9d2db5084ef7be"},
|
||||
{file = "cryptography-42.0.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:61321672b3ac7aade25c40449ccedbc6db72c7f5f0fdf34def5e2f8b51ca530d"},
|
||||
{file = "cryptography-42.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea2c3ffb662fec8bbbfce5602e2c159ff097a4631d96235fcf0fb00e59e3ece4"},
|
||||
{file = "cryptography-42.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b15c678f27d66d247132cbf13df2f75255627bcc9b6a570f7d2fd08e8c081d2"},
|
||||
{file = "cryptography-42.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8e88bb9eafbf6a4014d55fb222e7360eef53e613215085e65a13290577394529"},
|
||||
{file = "cryptography-42.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a047682d324ba56e61b7ea7c7299d51e61fd3bca7dad2ccc39b72bd0118d60a1"},
|
||||
{file = "cryptography-42.0.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:36d4b7c4be6411f58f60d9ce555a73df8406d484ba12a63549c88bd64f7967f1"},
|
||||
{file = "cryptography-42.0.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a00aee5d1b6c20620161984f8ab2ab69134466c51f58c052c11b076715e72929"},
|
||||
{file = "cryptography-42.0.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b97fe7d7991c25e6a31e5d5e795986b18fbbb3107b873d5f3ae6dc9a103278e9"},
|
||||
{file = "cryptography-42.0.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5fa82a26f92871eca593b53359c12ad7949772462f887c35edaf36f87953c0e2"},
|
||||
{file = "cryptography-42.0.2-cp37-abi3-win32.whl", hash = "sha256:4b063d3413f853e056161eb0c7724822a9740ad3caa24b8424d776cebf98e7ee"},
|
||||
{file = "cryptography-42.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:841ec8af7a8491ac76ec5a9522226e287187a3107e12b7d686ad354bb78facee"},
|
||||
{file = "cryptography-42.0.2-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:55d1580e2d7e17f45d19d3b12098e352f3a37fe86d380bf45846ef257054b242"},
|
||||
{file = "cryptography-42.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28cb2c41f131a5758d6ba6a0504150d644054fd9f3203a1e8e8d7ac3aea7f73a"},
|
||||
{file = "cryptography-42.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9097a208875fc7bbeb1286d0125d90bdfed961f61f214d3f5be62cd4ed8a446"},
|
||||
{file = "cryptography-42.0.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:44c95c0e96b3cb628e8452ec060413a49002a247b2b9938989e23a2c8291fc90"},
|
||||
{file = "cryptography-42.0.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2f9f14185962e6a04ab32d1abe34eae8a9001569ee4edb64d2304bf0d65c53f3"},
|
||||
{file = "cryptography-42.0.2-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:09a77e5b2e8ca732a19a90c5bca2d124621a1edb5438c5daa2d2738bfeb02589"},
|
||||
{file = "cryptography-42.0.2-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad28cff53f60d99a928dfcf1e861e0b2ceb2bc1f08a074fdd601b314e1cc9e0a"},
|
||||
{file = "cryptography-42.0.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:130c0f77022b2b9c99d8cebcdd834d81705f61c68e91ddd614ce74c657f8b3ea"},
|
||||
{file = "cryptography-42.0.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:fa3dec4ba8fb6e662770b74f62f1a0c7d4e37e25b58b2bf2c1be4c95372b4a33"},
|
||||
{file = "cryptography-42.0.2-cp39-abi3-win32.whl", hash = "sha256:3dbd37e14ce795b4af61b89b037d4bc157f2cb23e676fa16932185a04dfbf635"},
|
||||
{file = "cryptography-42.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:8a06641fb07d4e8f6c7dda4fc3f8871d327803ab6542e33831c7ccfdcb4d0ad6"},
|
||||
{file = "cryptography-42.0.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:087887e55e0b9c8724cf05361357875adb5c20dec27e5816b653492980d20380"},
|
||||
{file = "cryptography-42.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a7ef8dd0bf2e1d0a27042b231a3baac6883cdd5557036f5e8df7139255feaac6"},
|
||||
{file = "cryptography-42.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4383b47f45b14459cab66048d384614019965ba6c1a1a141f11b5a551cace1b2"},
|
||||
{file = "cryptography-42.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:fbeb725c9dc799a574518109336acccaf1303c30d45c075c665c0793c2f79a7f"},
|
||||
{file = "cryptography-42.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:320948ab49883557a256eab46149df79435a22d2fefd6a66fe6946f1b9d9d008"},
|
||||
{file = "cryptography-42.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5ef9bc3d046ce83c4bbf4c25e1e0547b9c441c01d30922d812e887dc5f125c12"},
|
||||
{file = "cryptography-42.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:52ed9ebf8ac602385126c9a2fe951db36f2cb0c2538d22971487f89d0de4065a"},
|
||||
{file = "cryptography-42.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:141e2aa5ba100d3788c0ad7919b288f89d1fe015878b9659b307c9ef867d3a65"},
|
||||
{file = "cryptography-42.0.2.tar.gz", hash = "sha256:e0ec52ba3c7f1b7d813cd52649a5b3ef1fc0d433219dc8c93827c57eab6cf888"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
cffi = ">=1.12"
|
||||
cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""}
|
||||
|
||||
[package.extras]
|
||||
docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"]
|
||||
docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"]
|
||||
docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"]
|
||||
nox = ["nox"]
|
||||
pep8test = ["black", "check-sdist", "mypy", "ruff"]
|
||||
pep8test = ["check-sdist", "click", "mypy", "ruff"]
|
||||
sdist = ["build"]
|
||||
ssh = ["bcrypt (>=3.1.5)"]
|
||||
test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"]
|
||||
test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"]
|
||||
test-randomorder = ["pytest-randomly"]
|
||||
|
||||
[[package]]
|
||||
|
||||
@@ -17,14 +17,14 @@ 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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
filelock==3.12.2 ; python_version >= "3.9" and python_version < "4.0"
|
||||
flake8==6.0.0 ; python_version >= "3.9" and python_version < "4.0"
|
||||
identify==2.5.24 ; python_version >= "3.9" and python_version < "4.0"
|
||||
idna==3.4 ; python_version >= "3.9" and python_version < "4.0"
|
||||
idna==3.15 ; python_version >= "3.9" and python_version < "4.0"
|
||||
isort==5.12.0 ; python_version >= "3.9" and python_version < "4.0"
|
||||
jinja2-time==0.2.0 ; python_version >= "3.9" and python_version < "4.0"
|
||||
jinja2==3.1.2 ; 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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
|
||||
+1
-13
@@ -4,24 +4,12 @@
|
||||
vg: "{{ vg.vgname }}"
|
||||
pvs: "{{ vg.disks | join(',') }}"
|
||||
state: present
|
||||
pvresize: "{{ vg.pvresize | default(pvresize_to_max) }}"
|
||||
become: true
|
||||
when:
|
||||
- vg.create is defined
|
||||
- vg.create|bool
|
||||
|
||||
### workaround: auto pvresize waiting for upgrade to new module supporting integrated pvresize
|
||||
### ref: https://docs.ansible.com/ansible/3/collections/community/general/lvg_module.html
|
||||
- name: create_vg | pvresize to max available free space
|
||||
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
|
||||
ansible.builtin.include_tasks: create_lv.yml
|
||||
loop: "{{ vg.lvnames | default([]) }}"
|
||||
|
||||
+1
-1
@@ -37,4 +37,4 @@
|
||||
ansible.builtin.command: "{{ rescan_scsi_command }}"
|
||||
become: true
|
||||
changed_when: false
|
||||
when: scsi_devices['stdout'] | length
|
||||
when: scsi_devices['stdout'] | length > 0
|
||||
|
||||
Reference in New Issue
Block a user