mirror of
https://github.com/mrlesmithjr/ansible-manage-lvm.git
synced 2026-09-06 23:48:12 +03:00
Compare commits
34 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4267de6416 | |||
| f1a9284396 | |||
| dadb9f24f7 | |||
| 8666645760 | |||
| 2f63eab727 | |||
| 050f8a56f1 | |||
| b955a6f073 | |||
| f81937e9d8 | |||
| 1c3818e5d0 | |||
| 47f8dae16a | |||
| 96fa78d6d0 | |||
| 17e8ec1058 | |||
| ba5d929fce | |||
| ea9109220b | |||
| fe860566ba | |||
| d8b3a4e932 | |||
| fc49e1d7b1 | |||
| b15ecea51d | |||
| 092546c501 | |||
| 9788ee5df6 | |||
| 0f428a0e40 | |||
| 8957630c04 | |||
| bd866078da | |||
| 183087e767 | |||
| 25dc548acb | |||
| b3ef85d4f7 | |||
| 9f4afa7afb | |||
| 5603c5f6b0 | |||
| 118ec79cb0 | |||
| 563aa1effb | |||
| 4a58cb36cf | |||
| a0c784797f | |||
| 51b79c5e71 | |||
| 66368de1d3 |
@@ -0,0 +1,100 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
# This is a basic workflow to help you get started with Actions
|
||||||
|
|
||||||
|
name: Molecule
|
||||||
|
|
||||||
|
# Controls when the action will run. Triggers the workflow on push or pull request
|
||||||
|
# events but only for the master branch
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- tags/*
|
||||||
|
|
||||||
|
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
lint:
|
||||||
|
# The type of runner that the job will run on
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
|
steps:
|
||||||
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: install lint prerequisite
|
||||||
|
run: |
|
||||||
|
sudo apt -y install python3-setuptools ansible-lint
|
||||||
|
|
||||||
|
- name: Install molecule
|
||||||
|
run: |
|
||||||
|
sudo apt update
|
||||||
|
sudo apt -y install python3-setuptools python3 python3-pip docker vagrant
|
||||||
|
sudo pip3 install wheel
|
||||||
|
sudo pip3 install docker molecule testinfra yamllint ansible-lint flake8 molecule-vagrant
|
||||||
|
|
||||||
|
- name: molecule lint
|
||||||
|
run: |
|
||||||
|
molecule lint
|
||||||
|
|
||||||
|
molecule:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: "false"
|
||||||
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: configure keyboard layout
|
||||||
|
run: |
|
||||||
|
echo XKBLAYOUT='us' > /etc/default/keyboard
|
||||||
|
|
||||||
|
- name: install virtualization stack
|
||||||
|
env:
|
||||||
|
DEBIAN_FRONTEND: noninteractive
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt -y install cpu-checker
|
||||||
|
kvm-ok
|
||||||
|
# shit happens here, containerization sucks... that was worth the try
|
||||||
|
|
||||||
|
- name: install virtualization stack
|
||||||
|
env:
|
||||||
|
DEBIAN_FRONTEND: noninteractive
|
||||||
|
run: |
|
||||||
|
sudo apt -y install policycoreutils-python-utils qemu-kvm qemu-utils libvirt-clients libvirt-daemon-system bridge-utils python3-libvirt libnss-libvirt libguestfs-tools virtinst virt-top genisoimage libvirt-dev libvirt-bin
|
||||||
|
|
||||||
|
- name: install vagrant
|
||||||
|
env:
|
||||||
|
VAGRANT_DISABLE_STRICT_DEPENDENCY_ENFORCEMENT: 1
|
||||||
|
run: |
|
||||||
|
wget https://releases.hashicorp.com/vagrant/2.2.7/vagrant_2.2.7_x86_64.deb
|
||||||
|
sudo apt -y install ./vagrant_2.2.7_x86_64.deb
|
||||||
|
vagrant plugin install vagrant-persistent-storage
|
||||||
|
vagrant plugin install vagrant-libvirt
|
||||||
|
sudo groupadd --system libvirt
|
||||||
|
sudo usermod -a -G libvirt $(whoami)
|
||||||
|
sudo /etc/init.d/libvirtd restart
|
||||||
|
|
||||||
|
- name: Install molecule
|
||||||
|
run: |
|
||||||
|
sudo apt -y install python3-setuptools
|
||||||
|
pip3 install molecule-vagrant wheel
|
||||||
|
|
||||||
|
- name: create molecule vm
|
||||||
|
env:
|
||||||
|
LC_ALL: C.UTF-8
|
||||||
|
LANG: C.UTF-8
|
||||||
|
run: |
|
||||||
|
molecule create --scenario-name kvm
|
||||||
|
|
||||||
|
- name: verify
|
||||||
|
run: |
|
||||||
|
molecule verify
|
||||||
|
|
||||||
|
- name: teardown
|
||||||
|
run: |
|
||||||
|
molecule destroy
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
.idea
|
||||||
|
**/__pycache__
|
||||||
+52
@@ -0,0 +1,52 @@
|
|||||||
|
---
|
||||||
|
language: python
|
||||||
|
python: "2.7"
|
||||||
|
|
||||||
|
# Use the new container infrastructure
|
||||||
|
sudo: required
|
||||||
|
|
||||||
|
services:
|
||||||
|
- docker
|
||||||
|
|
||||||
|
env:
|
||||||
|
- distribution: centos
|
||||||
|
init: /usr/lib/systemd/systemd
|
||||||
|
version: 7
|
||||||
|
- distribution: fedora
|
||||||
|
init: /usr/lib/systemd/systemd
|
||||||
|
version: 26
|
||||||
|
- distribution: fedora
|
||||||
|
init: /usr/lib/systemd/systemd
|
||||||
|
version: 25
|
||||||
|
- distribution: ubuntu
|
||||||
|
init: /lib/systemd/systemd
|
||||||
|
version: bionic
|
||||||
|
- distribution: ubuntu
|
||||||
|
init: /lib/systemd/systemd
|
||||||
|
version: xenial
|
||||||
|
- distribution: debian
|
||||||
|
init: /lib/systemd/systemd
|
||||||
|
version: stretch
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- 'sudo pip install yamllint'
|
||||||
|
- yamllint -c .yamllint.yml .
|
||||||
|
- 'sudo docker pull ${distribution}:${version}'
|
||||||
|
- 'sudo docker build --no-cache --rm --file=tests/Dockerfile.${distribution}-${version} --tag=${distribution}-${version}:ansible tests'
|
||||||
|
|
||||||
|
script:
|
||||||
|
- container_id=$(mktemp)
|
||||||
|
- role_name="ansible-manage-lvm"
|
||||||
|
- 'sudo docker run --detach --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --volume="${PWD}":/etc/ansible/roles/${role_name}:ro ${distribution}-${version}:ansible ${init} > "${container_id}"'
|
||||||
|
- 'sudo docker exec "$(cat ${container_id})" env ANSIBLE_FORCE_COLOR=1 ansible-lint -c /.ansible-lint /etc/ansible/roles/${role_name}/tests/test.yml'
|
||||||
|
- 'sudo docker exec "$(cat ${container_id})" env ANSIBLE_FORCE_COLOR=1 ansible-playbook -v /etc/ansible/roles/${role_name}/tests/test.yml --syntax-check'
|
||||||
|
- 'sudo docker exec "$(cat ${container_id})" env ANSIBLE_FORCE_COLOR=1 ansible-playbook -v /etc/ansible/roles/${role_name}/tests/test.yml'
|
||||||
|
- >
|
||||||
|
sudo docker exec "$(cat ${container_id})" env ANSIBLE_FORCE_COLOR=1 ansible-playbook -v /etc/ansible/roles/${role_name}/tests/test.yml
|
||||||
|
| grep -q 'changed=0.*failed=0'
|
||||||
|
&& (echo 'Idempotence test: pass' && exit 0)
|
||||||
|
|| (echo 'Idempotence test: fail' && exit 1)
|
||||||
|
- 'sudo docker rm -f "$(cat ${container_id})"'
|
||||||
|
|
||||||
|
notifications:
|
||||||
|
webhooks: https://galaxy.ansible.com/api/v1/notifications/
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
extends: default
|
||||||
|
|
||||||
|
rules:
|
||||||
|
braces:
|
||||||
|
# Defaults
|
||||||
|
# min-spaces-inside: 0
|
||||||
|
# max-spaces-inside: 0
|
||||||
|
|
||||||
|
# Keeping 0 min-spaces to not error on empty collection definitions
|
||||||
|
min-spaces-inside: 0
|
||||||
|
# Allowing one space inside braces to improve code readability
|
||||||
|
max-spaces-inside: 1
|
||||||
|
|
||||||
|
brackets:
|
||||||
|
# Defaults
|
||||||
|
# min-spaces-inside: 0
|
||||||
|
# max-spaces-inside: 0
|
||||||
|
|
||||||
|
# Keeping 0 min-spaces to not error on empty collection definitions
|
||||||
|
min-spaces-inside: 0
|
||||||
|
# Allowing one space inside braces to improve code readability
|
||||||
|
max-spaces-inside: 1
|
||||||
|
|
||||||
|
colons:
|
||||||
|
# Defaults
|
||||||
|
# max-spaces-before: 0
|
||||||
|
# max-spaces-after: 1
|
||||||
|
|
||||||
|
max-spaces-before: 0
|
||||||
|
# Allowing more than one space for code readability
|
||||||
|
max-spaces-after: -1
|
||||||
|
|
||||||
|
comments:
|
||||||
|
# Defaults
|
||||||
|
# level: warning
|
||||||
|
# require-starting-space: true
|
||||||
|
# min-spaces-from-content: 2
|
||||||
|
|
||||||
|
# Disabling to allow for code comment blocks and #!/usr/bin/ansible-playbook
|
||||||
|
require-starting-space: false
|
||||||
|
|
||||||
|
indentation:
|
||||||
|
# Defaults
|
||||||
|
# spaces: consistent
|
||||||
|
# indent-sequences: true
|
||||||
|
# check-multi-line-strings: false
|
||||||
|
|
||||||
|
# Requiring 2 space indentation
|
||||||
|
spaces: 2
|
||||||
|
# Requiring consistent indentation within a file, either indented or not
|
||||||
|
indent-sequences: consistent
|
||||||
|
|
||||||
|
# Disabling due to copious amounts of long lines in the code which would
|
||||||
|
# require a code style change to resolve
|
||||||
|
line-length: disable
|
||||||
|
|
||||||
|
truthy: disable
|
||||||
@@ -33,6 +33,8 @@ lvm_groups: []
|
|||||||
# # Define size of lvol
|
# # Define size of lvol
|
||||||
# # 100%FREE, 10g, 1024 (megabytes by default)
|
# # 100%FREE, 10g, 1024 (megabytes by default)
|
||||||
# size: 5g
|
# size: 5g
|
||||||
|
# # Defines additional lvcreate options (e.g. stripes, stripesize, etc)
|
||||||
|
# opts: ''
|
||||||
# # Defines if lvol should exist or be removed
|
# # Defines if lvol should exist or be removed
|
||||||
# # true or false
|
# # true or false
|
||||||
# create: true
|
# create: true
|
||||||
@@ -42,6 +44,8 @@ lvm_groups: []
|
|||||||
# mount: false
|
# mount: false
|
||||||
# # Defines mountpoint for lvol
|
# # Defines mountpoint for lvol
|
||||||
# mntp: []
|
# mntp: []
|
||||||
|
# # Defines additional mount options (e.g. noatime, noexec, etc)
|
||||||
|
# mopts: ''
|
||||||
# - lvname: root
|
# - lvname: root
|
||||||
# size: 40g
|
# size: 40g
|
||||||
# create: true
|
# create: true
|
||||||
|
|||||||
+56
-52
@@ -1,58 +1,62 @@
|
|||||||
---
|
---
|
||||||
# defaults file for ansible-manage-lvm
|
# defaults file for ansible-manage-lvm
|
||||||
lvm_groups: []
|
lvm_groups: []
|
||||||
# - vgname: ubuntu-vg
|
# - vgname: ubuntu-vg
|
||||||
# disks:
|
# disks:
|
||||||
# - /dev/sda5
|
# - /dev/sda5
|
||||||
# - /dev/sdc
|
# - /dev/sdc
|
||||||
# - /dev/sdd
|
# - /dev/sdd
|
||||||
# # 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
|
||||||
# lvnames:
|
# lvnames:
|
||||||
# - lvname: swap_1
|
# - lvname: swap_1
|
||||||
# # Define size of lvol
|
# # Define size of lvol
|
||||||
# # 100%FREE, 10g, 1024 (megabytes by default)
|
# # 100%FREE, 10g, 1024 (megabytes by default)
|
||||||
# size: 5g
|
# size: 5g
|
||||||
# # Defines if lvol should exist or be removed
|
# # Defines additional lvcreate options (e.g. stripes, stripesize, etc)
|
||||||
# # true or false
|
# opts: ''
|
||||||
# create: true
|
# # Defines if lvol should exist or be removed
|
||||||
# # Defines filesystem to format lvol as
|
# # true or false
|
||||||
# filesystem: swap
|
# create: true
|
||||||
# # Defines if filesystem should be mounted
|
# # Defines filesystem to format lvol as
|
||||||
# mount: false
|
# filesystem: swap
|
||||||
# # Defines mountpoint for lvol
|
# # Defines if filesystem should be mounted
|
||||||
# mntp: []
|
# mount: false
|
||||||
# - lvname: root
|
# # Defines mountpoint for lvol
|
||||||
# size: 40g
|
# mntp: []
|
||||||
# create: true
|
# # Defines additional mount options (e.g. noatime, noexec, etc)
|
||||||
# filesystem: ext4
|
# mopts: ''
|
||||||
# mount: true
|
# - lvname: root
|
||||||
# mntp: /
|
# size: 40g
|
||||||
# - vgname: test-vg
|
# create: true
|
||||||
# disks:
|
# filesystem: ext4
|
||||||
# - /dev/sdb
|
# mount: true
|
||||||
# create: true
|
# mntp: /
|
||||||
# lvnames:
|
# - vgname: test-vg
|
||||||
# - lvname: test_1
|
# disks:
|
||||||
# size: 5g
|
# - /dev/sdb
|
||||||
# create: true
|
# create: true
|
||||||
# filesystem: ext4
|
# lvnames:
|
||||||
# mount: true
|
# - lvname: test_1
|
||||||
# mntp: /mnt/test_1
|
# size: 5g
|
||||||
# - lvname: test_2
|
# create: true
|
||||||
# size: 10g
|
# filesystem: ext4
|
||||||
# create: true
|
# mount: true
|
||||||
# filesystem: ext4
|
# mntp: /mnt/test_1
|
||||||
# mount: true
|
# - lvname: test_2
|
||||||
# mntp: /mnt/test_2
|
# size: 10g
|
||||||
# - vgname: cinder-volumes
|
# create: true
|
||||||
# disks:
|
# filesystem: ext4
|
||||||
# - /dev/cciss/c0d1
|
# mount: true
|
||||||
# create: true
|
# mntp: /mnt/test_2
|
||||||
# lvnames:
|
# - vgname: cinder-volumes
|
||||||
# # Set to None to only create LVM VG w/out creating LVM LVOLS
|
# disks:
|
||||||
# - None
|
# - /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
|
# 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.
|
||||||
|
|||||||
+3
-16
@@ -2,18 +2,8 @@
|
|||||||
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: Role to manage LVM Groups/Logical Volumes. Can be used to create, extend or resize LVM.
|
||||||
#company: your company (optional)
|
|
||||||
# If the issue tracker for your role is not on github, uncomment the
|
license: MIT
|
||||||
# next line and provide a value
|
|
||||||
# issue_tracker_url: http://example.com/issue/tracker
|
|
||||||
# Some suggested licenses:
|
|
||||||
# - BSD (default)
|
|
||||||
# - MIT
|
|
||||||
# - GPLv2
|
|
||||||
# - GPLv3
|
|
||||||
# - Apache
|
|
||||||
# - CC-BY
|
|
||||||
license: license (GPLv2, CC-BY, etc)
|
|
||||||
min_ansible_version: 1.2
|
min_ansible_version: 1.2
|
||||||
platforms:
|
platforms:
|
||||||
- name: EL
|
- name: EL
|
||||||
@@ -29,9 +19,6 @@ galaxy_info:
|
|||||||
- jessie
|
- jessie
|
||||||
- wheezy
|
- wheezy
|
||||||
|
|
||||||
categories:
|
galaxy_tags:
|
||||||
- system
|
- system
|
||||||
dependencies: []
|
dependencies: []
|
||||||
# List your role dependencies here, one per line.
|
|
||||||
# Be sure to remove the '[]' above if you add dependencies
|
|
||||||
# to this list.
|
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
- name: Converge
|
||||||
|
hosts: all
|
||||||
|
vars:
|
||||||
|
lvm_groups:
|
||||||
|
- vgname: my_vg
|
||||||
|
disks:
|
||||||
|
- /dev/sdb1
|
||||||
|
create: true
|
||||||
|
lvnames:
|
||||||
|
- lvname: my_lv
|
||||||
|
size: 40%VG
|
||||||
|
opts: "--wipesignatures y"
|
||||||
|
create: true
|
||||||
|
filesystem: ext4
|
||||||
|
mount: true
|
||||||
|
mntp: "/var/lib/mountpoint"
|
||||||
|
- lvname: my_lv2
|
||||||
|
size: 20%VG
|
||||||
|
opts: "--wipesignatures y"
|
||||||
|
mount: true
|
||||||
|
create: true
|
||||||
|
filesystem: xfs
|
||||||
|
mntp: "/var/lib/mountpoint2"
|
||||||
|
manage_lvm: true
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: "Include lvm"
|
||||||
|
include_role:
|
||||||
|
name: "ansible-manage-lvm"
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
driver:
|
||||||
|
name: vagrant
|
||||||
|
provider:
|
||||||
|
name: virtualbox
|
||||||
|
lint: yamllint . && flake8 && ansible-lint --exclude=meta
|
||||||
|
platforms:
|
||||||
|
- name: Fedora-Molecule-LVM
|
||||||
|
box: bento/fedora-31
|
||||||
|
# box-url: ${platform_root}/packer/bento/builds/fedora-31-x86_64.virtualbox.box
|
||||||
|
provider_override_args:
|
||||||
|
- "persistent_storage.enabled = true"
|
||||||
|
- "persistent_storage.location = 'molecule-lvm.vdi'"
|
||||||
|
- "persistent_storage.size = 100"
|
||||||
|
- "persistent_storage.mount = false"
|
||||||
|
- "persistent_storage.diskdevice = '/dev/sdb'"
|
||||||
|
provisioner:
|
||||||
|
name: ansible
|
||||||
|
inventory:
|
||||||
|
group_vars:
|
||||||
|
lvm:
|
||||||
|
verifier:
|
||||||
|
name: testinfra
|
||||||
|
env:
|
||||||
|
PYTHONWARNINGS: "ignore:.*U.*mode is deprecated:DeprecationWarning"
|
||||||
|
options:
|
||||||
|
v: 1
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
"""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,26 @@
|
|||||||
|
"""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
|
||||||
|
|
||||||
|
|
||||||
|
def test_volume2_is_mounted(host):
|
||||||
|
host.file("/var/lib/mountpoint2").mode == 0o731
|
||||||
Executable
+17
@@ -0,0 +1,17 @@
|
|||||||
|
#!/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
|
||||||
+23
-3
@@ -1,18 +1,38 @@
|
|||||||
---
|
---
|
||||||
- name: centos | installing lvm2
|
- name: centos | installing lvm2
|
||||||
yum:
|
package:
|
||||||
name: "lvm2"
|
name: "lvm2"
|
||||||
state: "present"
|
state: "present"
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
- name: centos | installing sg3_utils
|
- name: centos | installing sg3_utils
|
||||||
yum:
|
package:
|
||||||
name: "sg3_utils"
|
name: "sg3_utils"
|
||||||
state: "present"
|
state: "present"
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
|
- name: centos | install xfs tools
|
||||||
|
package:
|
||||||
|
name: "xfsprogs"
|
||||||
|
state: "present"
|
||||||
|
become: yes
|
||||||
|
loop: "{{ lvm_groups|subelements('lvnames') }}"
|
||||||
|
when: >
|
||||||
|
(
|
||||||
|
(item.1 is defined and item.1 != 'None') and
|
||||||
|
(
|
||||||
|
item.1.filesystem is defined and
|
||||||
|
item.1.filesystem == "xfs"
|
||||||
|
)
|
||||||
|
and
|
||||||
|
(
|
||||||
|
item.1.create is defined and
|
||||||
|
item.1.create
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
- name: centos | checking for scsi devices
|
- name: centos | checking for scsi devices
|
||||||
shell: "sg_scan"
|
command: "sg_scan"
|
||||||
become: true
|
become: true
|
||||||
register: "scsi_devices"
|
register: "scsi_devices"
|
||||||
changed_when: False
|
changed_when: False
|
||||||
|
|||||||
@@ -0,0 +1,110 @@
|
|||||||
|
---
|
||||||
|
- 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)
|
||||||
|
filesystem:
|
||||||
|
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
|
||||||
|
# then it tries to recreate the fs on the mounted fs which indeed fails...
|
||||||
|
shell: "xfs_info /dev/{{ vg.vgname }}/{{ lv.lvname }} | grep -c 'ftype=1'"
|
||||||
|
become: yes
|
||||||
|
loop: "{{ vg.lvnames }}"
|
||||||
|
loop_control:
|
||||||
|
loop_var: lv
|
||||||
|
register: mountedxfs
|
||||||
|
ignore_errors: True
|
||||||
|
changed_when: no
|
||||||
|
when: >
|
||||||
|
(
|
||||||
|
(lv is defined and lv != 'None') and
|
||||||
|
(
|
||||||
|
lv.filesystem is defined and
|
||||||
|
lv.filesystem == "xfs"
|
||||||
|
)
|
||||||
|
and
|
||||||
|
(
|
||||||
|
lv.create is defined and
|
||||||
|
lv.create
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
- name: manage_lvm | creating new xfs filesystem on new LVM logical volume(s)
|
||||||
|
filesystem:
|
||||||
|
fstype: "{{ lv.filesystem }}"
|
||||||
|
dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
|
||||||
|
loop: "{{ vg.lvnames }}"
|
||||||
|
loop_control:
|
||||||
|
loop_var: lv
|
||||||
|
become: true
|
||||||
|
when: >
|
||||||
|
(
|
||||||
|
mountedxfs is failed and
|
||||||
|
(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 == 'xfs'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
- name: manage_lvm | mounting new filesystem(s)
|
||||||
|
mount:
|
||||||
|
path: "{{ lv.mntp }}"
|
||||||
|
src: "/dev/{{ vg.vgname }}/{{ lv.lvname }}"
|
||||||
|
fstype: "{{ lv.filesystem }}"
|
||||||
|
state: "mounted"
|
||||||
|
opts: "{{ lv.mopts | default('defaults') }}"
|
||||||
|
become: true
|
||||||
|
loop: "{{ vg.lvnames }}"
|
||||||
|
loop_control:
|
||||||
|
loop_var: lv
|
||||||
|
when: >
|
||||||
|
((vg.create is defined and
|
||||||
|
vg.create) and
|
||||||
|
lv != 'None' and
|
||||||
|
(lv.create is defined and
|
||||||
|
lv.create) and
|
||||||
|
(lv.mount is defined and
|
||||||
|
lv.mount))
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
- debug: var=vg
|
||||||
|
|
||||||
|
- name: "debug lvm"
|
||||||
|
loop: "{{ vg.lvnames }}"
|
||||||
|
debug: var=lv
|
||||||
|
loop_control:
|
||||||
|
loop_var: lv
|
||||||
|
|
||||||
|
- name: manage_lvm | creating new LVM logical volume(s)
|
||||||
|
lvol:
|
||||||
|
vg: "{{ vg.vgname }}"
|
||||||
|
lv: "{{ lv.lvname }}"
|
||||||
|
size: "{{ lv.size }}"
|
||||||
|
shrink: no
|
||||||
|
opts: "{{ lv.opts | default('') }}"
|
||||||
|
state: "present"
|
||||||
|
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)
|
||||||
|
)
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: manage_lvm | creating new LVM volume group(s)
|
||||||
|
lvg:
|
||||||
|
vg: "{{ item.vgname }}"
|
||||||
|
pvs: "{{ item.disks | join(',') }}"
|
||||||
|
state: "present"
|
||||||
|
become: true
|
||||||
|
loop: "{{ lvm_groups }}"
|
||||||
|
when: >
|
||||||
|
item.create is defined and
|
||||||
|
item.create
|
||||||
+28
-10
@@ -1,22 +1,40 @@
|
|||||||
---
|
---
|
||||||
- name: debian | installing pre-reqs
|
- name: debian | installing pre-reqs
|
||||||
apt:
|
package:
|
||||||
name: "{{ item }}"
|
name:
|
||||||
|
- lvm2
|
||||||
|
- scsitools
|
||||||
state: "present"
|
state: "present"
|
||||||
become: true
|
become: true
|
||||||
with_items:
|
|
||||||
- 'lvm2'
|
- name: debian | install xfs tools
|
||||||
- 'scsitools'
|
package:
|
||||||
- 'xfsprogs'
|
name: "xfsprogs"
|
||||||
|
state: "present"
|
||||||
|
become: yes
|
||||||
|
loop: "{{ lvm_groups|subelements('lvnames') }}"
|
||||||
|
when: >
|
||||||
|
(
|
||||||
|
(item.1 is defined and item.1 != 'None') and
|
||||||
|
(
|
||||||
|
item.1.filesystem is defined and
|
||||||
|
item.1.filesystem == "xfs"
|
||||||
|
)
|
||||||
|
and
|
||||||
|
(
|
||||||
|
item.1.create is defined and
|
||||||
|
item.1.create
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
- name: debian | checking for scsi devices
|
- name: debian | checking for scsi devices
|
||||||
shell: "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'] != ""
|
when: scsi_devices['stdout'] | length
|
||||||
|
|||||||
+3
-3
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
# tasks file for ansible-manage-lvm
|
# tasks file for ansible-manage-lvm
|
||||||
- include: debian.yml
|
- include_tasks: debian.yml
|
||||||
when: ansible_os_family == "Debian"
|
when: ansible_os_family == "Debian"
|
||||||
|
|
||||||
- include: centos.yml
|
- include_tasks: centos.yml
|
||||||
when: ansible_os_family == "RedHat"
|
when: ansible_os_family == "RedHat"
|
||||||
|
|
||||||
- include: manage_lvm.yml
|
- include_tasks: manage_lvm.yml
|
||||||
when: >
|
when: >
|
||||||
manage_lvm and
|
manage_lvm and
|
||||||
lvm_groups is defined
|
lvm_groups is defined
|
||||||
|
|||||||
+24
-137
@@ -1,153 +1,40 @@
|
|||||||
---
|
---
|
||||||
- name: manage_lvm | creating new LVM volume group(s)
|
- name: manage_lvm | manage physical volume group creation
|
||||||
lvg:
|
include_tasks: create_vg.yml
|
||||||
vg: "{{ item['vgname'] }}"
|
|
||||||
pvs: "{{ item['disks']|join(',') }}"
|
|
||||||
state: "present"
|
|
||||||
become: true
|
|
||||||
with_items: "{{ lvm_groups }}"
|
|
||||||
when: >
|
|
||||||
(item['create'] is defined and
|
|
||||||
item['create'])
|
|
||||||
|
|
||||||
- name: manage_lvm | creating new LVM logical volume(s)
|
- name: manage_lvm | loop over logical volume group(s) to create logical volumes
|
||||||
lvol:
|
include_tasks: create_lv.yml
|
||||||
vg: "{{ item[0]['vgname'] }}"
|
loop: "{{ lvm_groups }}"
|
||||||
lv: "{{ item[1]['lvname'] }}"
|
loop_control:
|
||||||
size: "{{ item[1]['size'] }}"
|
loop_var: vg
|
||||||
shrink: no
|
|
||||||
state: "present"
|
|
||||||
become: true
|
|
||||||
register: lvm
|
|
||||||
with_subelements:
|
|
||||||
- "{{ lvm_groups }}"
|
|
||||||
- lvnames
|
|
||||||
when: >
|
|
||||||
((item[0]['create'] is defined
|
|
||||||
and item[0]['create']) and
|
|
||||||
(item[1] is defined and
|
|
||||||
item[1] != 'None') and
|
|
||||||
(item[1]['create'] is defined and
|
|
||||||
item[1]['create']))
|
|
||||||
|
|
||||||
- name: manage_lvm | creating new filesystem on new LVM logical volume(s)
|
- name: manage_lvm | loop over logical volume group(s) to create filesystems
|
||||||
filesystem:
|
include_tasks: create_fs.yml
|
||||||
fstype: "{{ item[1]['filesystem'] }}"
|
loop: "{{ lvm_groups }}"
|
||||||
dev: "/dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}"
|
loop_control:
|
||||||
# resizefs: yes #coming in 2.0 which will replace the resizing filesystem task below
|
loop_var: vg
|
||||||
become: true
|
|
||||||
with_subelements:
|
|
||||||
- "{{ lvm_groups }}"
|
|
||||||
- lvnames
|
|
||||||
when: >
|
|
||||||
((item[0]['create'] is defined and
|
|
||||||
item[0]['create']) and
|
|
||||||
(item[1] is defined and
|
|
||||||
item[1] != 'None') and
|
|
||||||
(item[1]['create'] is defined and
|
|
||||||
item[1]['create']))
|
|
||||||
|
|
||||||
- name: manage_lvm | mounting new filesystem(s)
|
|
||||||
mount:
|
|
||||||
name: "{{ item[1]['mntp'] }}"
|
|
||||||
src: "/dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}"
|
|
||||||
fstype: "{{ item[1]['filesystem'] }}"
|
|
||||||
state: "mounted"
|
|
||||||
become: true
|
|
||||||
with_subelements:
|
|
||||||
- "{{ lvm_groups }}"
|
|
||||||
- lvnames
|
|
||||||
when: >
|
|
||||||
((item[0]['create'] is defined and
|
|
||||||
item[0]['create']) and
|
|
||||||
(item[1] is defined and
|
|
||||||
item[1] != 'None') and
|
|
||||||
(item[1]['create'] is defined and
|
|
||||||
item[1]['create']) and
|
|
||||||
(item[1]['mount'] is defined and
|
|
||||||
item[1]['mount']))
|
|
||||||
|
|
||||||
- name: manage_lvm | resizing filesystem
|
|
||||||
command: resize2fs /dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}
|
|
||||||
become: true
|
|
||||||
with_subelements:
|
|
||||||
- "{{ lvm_groups }}"
|
|
||||||
- lvnames
|
|
||||||
when: >
|
|
||||||
lvm['changed'] and
|
|
||||||
item[1]['filesystem'] != "swap" and
|
|
||||||
item[1]['filesystem'] != "xfs" and
|
|
||||||
item[1]['filesystem'] != "btrfs"
|
|
||||||
|
|
||||||
- name: manage_lvm | resizing xfs
|
|
||||||
command: xfs_growfs -d /dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}
|
|
||||||
become: true
|
|
||||||
with_subelements:
|
|
||||||
- "{{ lvm_groups }}"
|
|
||||||
- lvnames
|
|
||||||
when: >
|
|
||||||
lvm['changed'] and
|
|
||||||
item[1]['filesystem'] == "xfs"
|
|
||||||
|
|
||||||
- name: manage_lvm | resizing swap
|
|
||||||
shell: "swapoff -a && mkswap /dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }} && swapon -va"
|
|
||||||
become: true
|
|
||||||
with_subelements:
|
|
||||||
- "{{ lvm_groups }}"
|
|
||||||
- lvnames
|
|
||||||
when: >
|
|
||||||
lvm['changed'] and
|
|
||||||
item[1]['filesystem'] == "swap"
|
|
||||||
|
|
||||||
- name: manage_lvm | resizing btrfs
|
|
||||||
shell: "btrfs filesystem resize max {{ item[1]['mntp'] }}"
|
|
||||||
become: true
|
|
||||||
with_subelements:
|
|
||||||
- "{{ lvm_groups }}"
|
|
||||||
- lvnames
|
|
||||||
when: >
|
|
||||||
lvm['changed'] and
|
|
||||||
item[1]['filesystem'] == "btrfs"
|
|
||||||
|
|
||||||
- name: manage_lvm | unmounting filesystem(s)
|
|
||||||
mount:
|
|
||||||
name: "{{ item[1]['mntp'] }}"
|
|
||||||
src: "/dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}"
|
|
||||||
fstype: "{{ item[1]['filesystem'] }}"
|
|
||||||
state: "absent"
|
|
||||||
become: true
|
|
||||||
with_subelements:
|
|
||||||
- "{{ lvm_groups }}"
|
|
||||||
- lvnames
|
|
||||||
when: >
|
|
||||||
(item[1] is defined and
|
|
||||||
item[1] != 'None') and
|
|
||||||
(item[1]['create'] is defined and
|
|
||||||
not item[1]['create'])
|
|
||||||
|
|
||||||
- name: manage_lvm | Removing LVM logical volume(s)
|
- name: manage_lvm | Removing LVM logical volume(s)
|
||||||
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: yes
|
||||||
become: true
|
become: true
|
||||||
with_subelements:
|
loop: "{{ lvm_groups|subelements('lvnames') }}"
|
||||||
- "{{ lvm_groups }}"
|
|
||||||
- lvnames
|
|
||||||
when: >
|
when: >
|
||||||
(item[1] is defined and
|
(item.1 is defined and
|
||||||
item[1] != 'None') and
|
item.1 != 'None') and
|
||||||
(item[1]['create'] is defined and
|
(item.1.create is defined and
|
||||||
not item[1]['create'])
|
not item.1.create)
|
||||||
|
|
||||||
- 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
|
||||||
with_items: "{{ lvm_groups }}"
|
loop: "{{ lvm_groups }}"
|
||||||
when: >
|
when: >
|
||||||
item['create'] is defined and
|
item.create is defined and
|
||||||
not item['create']
|
not item.create
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
skip_list: ['305','503','602']
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
FROM centos:7
|
||||||
|
ENV container=docker
|
||||||
|
|
||||||
|
RUN yum -y install epel-release && \
|
||||||
|
yum -y install gmp-devel libffi-devel openssl-devel python-crypto \
|
||||||
|
python-devel python-pip python-setuptools python-virtualenv \
|
||||||
|
redhat-rpm-config && \
|
||||||
|
yum -y group install "Development Tools"
|
||||||
|
|
||||||
|
# Install systemd -- See https://hub.docker.com/_/centos/
|
||||||
|
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
|
||||||
|
rm -f /lib/systemd/system/multi-user.target.wants/*;\
|
||||||
|
rm -f /etc/systemd/system/*.wants/*;\
|
||||||
|
rm -f /lib/systemd/system/local-fs.target.wants/*; \
|
||||||
|
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
|
||||||
|
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
|
||||||
|
rm -f /lib/systemd/system/basic.target.wants/*;\
|
||||||
|
rm -f /lib/systemd/system/anaconda.target.wants/*;
|
||||||
|
|
||||||
|
RUN pip install enum34 ipaddress wheel && \
|
||||||
|
pip install ansible ansible-lint
|
||||||
|
|
||||||
|
COPY .ansible-lint /
|
||||||
|
|
||||||
|
VOLUME ["/sys/fs/cgroup"]
|
||||||
|
|
||||||
|
CMD ["/usr/sbin/init"]
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
FROM debian:stretch
|
||||||
|
ENV container=docker
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends build-essential libffi-dev \
|
||||||
|
libssl-dev python-dev python-minimal python-pip python-setuptools \
|
||||||
|
python-virtualenv systemd && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN pip install enum34 ipaddress wheel && \
|
||||||
|
pip install ansible ansible-lint
|
||||||
|
|
||||||
|
COPY .ansible-lint /
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
FROM fedora:25
|
||||||
|
ENV container=docker
|
||||||
|
|
||||||
|
RUN dnf -y install gmp-devel libffi-devel openssl-devel python-crypto \
|
||||||
|
python-devel python-dnf python-pip python-setuptools python-virtualenv \
|
||||||
|
redhat-rpm-config systemd && \
|
||||||
|
dnf -y group install "C Development Tools and Libraries"
|
||||||
|
|
||||||
|
# Install systemd -- See https://hub.docker.com/_/centos/
|
||||||
|
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
|
||||||
|
rm -f /lib/systemd/system/multi-user.target.wants/*;\
|
||||||
|
rm -f /etc/systemd/system/*.wants/*;\
|
||||||
|
rm -f /lib/systemd/system/local-fs.target.wants/*; \
|
||||||
|
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
|
||||||
|
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
|
||||||
|
rm -f /lib/systemd/system/basic.target.wants/*;\
|
||||||
|
rm -f /lib/systemd/system/anaconda.target.wants/*;
|
||||||
|
|
||||||
|
RUN pip install enum34 ipaddress wheel && \
|
||||||
|
pip install ansible ansible-lint
|
||||||
|
|
||||||
|
COPY .ansible-lint /
|
||||||
|
|
||||||
|
VOLUME ["/sys/fs/cgroup"]
|
||||||
|
|
||||||
|
CMD ["/usr/sbin/init"]
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
FROM fedora:26
|
||||||
|
ENV container=docker
|
||||||
|
|
||||||
|
RUN dnf -y install gmp-devel libffi-devel openssl-devel python-crypto \
|
||||||
|
python-devel python-dnf python-pip python-setuptools python-virtualenv \
|
||||||
|
redhat-rpm-config systemd && \
|
||||||
|
dnf -y group install "C Development Tools and Libraries"
|
||||||
|
|
||||||
|
# Install systemd -- See https://hub.docker.com/_/centos/
|
||||||
|
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
|
||||||
|
rm -f /lib/systemd/system/multi-user.target.wants/*;\
|
||||||
|
rm -f /etc/systemd/system/*.wants/*;\
|
||||||
|
rm -f /lib/systemd/system/local-fs.target.wants/*; \
|
||||||
|
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
|
||||||
|
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
|
||||||
|
rm -f /lib/systemd/system/basic.target.wants/*;\
|
||||||
|
rm -f /lib/systemd/system/anaconda.target.wants/*;
|
||||||
|
|
||||||
|
RUN pip install enum34 ipaddress wheel && \
|
||||||
|
pip install ansible ansible-lint
|
||||||
|
|
||||||
|
COPY .ansible-lint /
|
||||||
|
|
||||||
|
VOLUME ["/sys/fs/cgroup"]
|
||||||
|
|
||||||
|
CMD ["/usr/sbin/init"]
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
FROM ubuntu:bionic
|
||||||
|
ENV container=docker
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends build-essential libffi-dev \
|
||||||
|
libssl-dev python-dev python-minimal python-pip python-setuptools \
|
||||||
|
python-virtualenv systemd && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN pip install enum34 ipaddress wheel && \
|
||||||
|
pip install ansible ansible-lint
|
||||||
|
|
||||||
|
COPY .ansible-lint /
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
FROM ubuntu:xenial
|
||||||
|
ENV container=docker
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends build-essential libffi-dev \
|
||||||
|
libssl-dev python-dev python-minimal python-pip python-setuptools \
|
||||||
|
python-virtualenv && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN pip install enum34 ipaddress wheel && \
|
||||||
|
pip install ansible ansible-lint
|
||||||
|
|
||||||
|
COPY .ansible-lint /
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
localhost
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
- hosts: localhost
|
||||||
|
connection: local
|
||||||
|
roles:
|
||||||
|
- ansible-manage-lvm
|
||||||
Reference in New Issue
Block a user