73 Commits

Author SHA1 Message Date
6eebd0b6f6 Secrets not required for this role
All checks were successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/push/z.ntfy Pipeline was successful
2023-10-18 22:59:16 +13:00
0b6e1f123a Linted pipeline
All checks were successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/push/z.ntfy Pipeline was successful
2023-10-18 22:34:00 +13:00
6e684e6efc Updated pipeline
Some checks failed
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/test unknown status
ci/woodpecker/push/z.ntfy unknown status
2023-10-18 22:29:40 +13:00
0c1ae22375 Update Pipeline
Some checks failed
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/test unknown status
ci/woodpecker/push/z.ntfy unknown status
2023-10-18 22:19:02 +13:00
131b683b49 Copy entire directory
All checks were successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/push/z.ntfy Pipeline was successful
2023-10-18 21:57:54 +13:00
682404a819 Add static/dhcp ip helpers for NetworkManager
All checks were successful
ci/woodpecker/manual/lint Pipeline was successful
ci/woodpecker/manual/test Pipeline was successful
ci/woodpecker/manual/z.ntfy Pipeline was successful
2023-10-18 16:58:24 +13:00
a3ee65b213 test
All checks were successful
ci/woodpecker/manual/lint Pipeline was successful
ci/woodpecker/manual/test Pipeline was successful
ci/woodpecker/manual/z.ntfy Pipeline was successful
2023-10-17 09:34:51 +13:00
0118504841 Yamllint fixes
Some checks failed
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/push/z.failed-ntfy unknown status
ci/woodpecker/push/z.ntfy Pipeline was successful
2023-10-16 22:42:16 +13:00
47e1eaca8b Fix syntax err
Some checks failed
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/test unknown status
ci/woodpecker/push/z.ntfy unknown status
ci/woodpecker/push/z.failed-ntfy Pipeline was successful
2023-10-16 21:55:12 +13:00
6365bf0c00 Test and Lint 2023-10-16 21:52:34 +13:00
5c46cca25c [CHORE] Linting fix
All checks were successful
ci/woodpecker/push/z.cron-ntfy Pipeline was successful
ci/woodpecker/push/z.failed-cron-ntfy Pipeline was successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
2023-10-16 21:45:57 +13:00
70c581f82e Update CI
Some checks failed
ci/woodpecker/push/z.cron-ntfy Pipeline was successful
ci/woodpecker/push/z.failed-cron-ntfy Pipeline was successful
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/test unknown status
2023-10-16 21:42:53 +13:00
83e5a49a28 [SKIP CI] Fix linting 2023-10-16 21:32:53 +13:00
93641c3cf8 [SKIP CI] Fixing line ending removed 2023-10-08 23:21:10 +13:00
b663b49bab [SKIP_CI] Just a test
Some checks failed
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/test unknown status
2023-10-08 23:19:09 +13:00
3ea8059b0f [CI_SKIP] Allow test to work if directory named different
All checks were successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
2023-10-08 23:03:31 +13:00
e39de4a672 [CI_SKIP] More local linter improvements
All checks were successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
2023-10-08 22:49:17 +13:00
ba98a986f1 Lint all files when run locally
All checks were successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
2023-10-08 22:44:43 +13:00
db1e526f0c Make linter a little more strict 2023-10-08 22:44:24 +13:00
303b8d7afb Lint improvements
All checks were successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
2023-10-08 22:34:46 +13:00
05208e5dae Reformat linter output
All checks were successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
2023-10-08 22:20:48 +13:00
ab31c5cdcf I want some colour
All checks were successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
2023-10-08 22:14:19 +13:00
5ad8dde9aa Colored Output
All checks were successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
2023-10-08 22:03:52 +13:00
0adb495154 [CI SKIP] Updated badge 2023-10-06 07:22:30 +13:00
600f469ca2 Ignore env/directory
All checks were successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
Add yamllint to "make lint"
2023-10-06 07:17:08 +13:00
97d11bcb87 BUGFIX: Ignore when running in container
All checks were successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
2023-10-06 07:10:53 +13:00
942fe21aef CHORE: Linting CI Pipeline
Some checks failed
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline failed
2023-10-06 07:04:43 +13:00
bd61d62fd6 CHORE: Linting
Some checks failed
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/test unknown status
2023-10-06 07:02:26 +13:00
e2b2acd56a CHORE: Lint fix
Some checks failed
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/test unknown status
2023-10-06 07:00:52 +13:00
19bfcc6eb2 Remove Drone configuration
Some checks failed
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/test unknown status
2023-10-06 06:58:18 +13:00
de589a11e0 Add Makefile 2023-10-06 06:57:52 +13:00
b5db07d6e5 Another to ignore if testing in container
Some checks failed
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline failed
2023-10-05 17:38:47 +13:00
5bac53eae1 Don't test if container
Some checks failed
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline failed
2023-10-05 17:37:03 +13:00
347faec64c Fix error
Some checks failed
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline failed
2023-10-05 17:34:57 +13:00
17329fe030 Test virtualization
Some checks failed
ci/woodpecker/push/lint Pipeline failed
ci/woodpecker/push/test unknown status
2023-10-05 17:33:18 +13:00
344cb5614d Pipeline Fixing
Some checks failed
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline failed
2023-10-05 17:27:36 +13:00
6003d42063 update pipeline
All checks were successful
ci/woodpecker/push/1.lint Pipeline was successful
2023-10-05 17:26:11 +13:00
233b976243 Update pipeline
Some checks failed
ci/woodpecker/push/1.lint Pipeline was successful
ci/woodpecker/push/2.test Pipeline failed
ci/woodpecker/push/1.test Pipeline was successful
2023-10-05 17:19:05 +13:00
5baf0d2d87 Don't lint with molecule
Some checks failed
ci/woodpecker/push/1.test Pipeline was successful
ci/woodpecker/push/2.build Pipeline failed
2023-10-05 17:14:14 +13:00
2d12d58960 Depends syntax
Some checks failed
ci/woodpecker/push/1.test Pipeline was successful
ci/woodpecker/push/2.build Pipeline failed
2023-10-05 17:08:58 +13:00
bc80a57b9c Update Pipeline
All checks were successful
ci/woodpecker/push/1.test Pipeline was successful
2023-10-05 17:07:44 +13:00
7f3147e3ee Update lint pass
All checks were successful
ci/woodpecker/push/1.test Pipeline was successful
2023-10-05 17:06:16 +13:00
e29f5d536d Update linting
Some checks failed
ci/woodpecker/push/1.test Pipeline failed
2023-10-05 16:51:31 +13:00
0af870d440 Fix linting
Some checks failed
ci/woodpecker/push/1.test Pipeline failed
2023-10-05 16:44:41 +13:00
107705b584 Call yamllint with directory
Some checks failed
ci/woodpecker/push/1.test Pipeline failed
2023-10-05 16:43:24 +13:00
6cbcbbad7a Update CI
Some checks failed
ci/woodpecker/push/1.test Pipeline failed
2023-10-05 16:41:38 +13:00
373273dabf .
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
2023-10-05 15:00:38 +13:00
23b9664ede Update CI 2023-10-05 14:32:13 +13:00
00b1548103 axe the backticks
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-08 10:10:44 +13:00
19f54c9f52 Specifically use os-release
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-08 10:02:22 +13:00
1f6b4d51e0 Silence /proc
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-08 07:30:20 +13:00
2652ce3653 Fix output
All checks were successful
continuous-integration/drone Build is passing
2022-11-07 22:45:06 +13:00
0f3221ac3e Fix IP address display
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-06 21:56:55 +13:00
158095b011 lies, again we go
Some checks failed
continuous-integration/drone/push Build was killed
2022-11-02 17:24:56 +13:00
dec7676e87 last test
Some checks failed
continuous-integration/drone/push Build was killed
2022-11-02 17:23:16 +13:00
943aecfe55 Escape the variables
Some checks failed
continuous-integration/drone/push Build was killed
2022-11-02 17:18:50 +13:00
4924606317 ..
Some checks failed
continuous-integration/drone/push Build was killed
2022-11-02 17:14:24 +13:00
41b5efa39b Missing comma again :(
Some checks failed
continuous-integration/drone/push Build was killed
2022-11-02 16:58:11 +13:00
aece1b662a Add echo for testing
Some checks failed
continuous-integration/drone/push Build encountered an error
2022-11-02 16:57:16 +13:00
3cd00a0d1d missing comma
Some checks failed
continuous-integration/drone/push Build was killed
2022-11-02 16:43:55 +13:00
f1999f47f7 echo env
Some checks failed
continuous-integration/drone/push Build encountered an error
2022-11-02 16:42:27 +13:00
0768d5fb3e Added secrets to environment variables
Some checks failed
continuous-integration/drone/push Build was killed
2022-11-02 16:40:15 +13:00
d9e71bec29 Update apk package list
Some checks failed
continuous-integration/drone/push Build was killed
2022-11-02 16:33:54 +13:00
85213537ce Check curl is available
Some checks failed
continuous-integration/drone/push Build was killed
2022-11-02 16:33:26 +13:00
7f616fb5eb Actually exclude the main pipeline
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-02 16:26:29 +13:00
10f03a610b Try triggers
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-02 16:18:25 +13:00
5203103900 Cloning disable jsonnet style
All checks were successful
continuous-integration/drone/push Build is passing
2022-11-02 16:11:33 +13:00
57ab370f92 Stop cloning for notify steps
Some checks failed
continuous-integration/drone/push Build was killed
2022-11-02 16:09:27 +13:00
0a1f4323a3 Image goes on steps (doh)
Some checks failed
continuous-integration/drone/push Build was killed
2022-11-02 16:05:31 +13:00
f6713ff240 Add image
Some checks failed
continuous-integration/drone/push Build was killed
2022-11-02 16:03:52 +13:00
1ef3ba3ca9 Fix permissions
Some checks failed
continuous-integration/drone/push Build was killed
2022-11-02 16:01:57 +13:00
568b6fb667 Ordering fix
Some checks failed
continuous-integration/drone/push Build encountered an error
2022-11-02 16:00:39 +13:00
22d502de50 Update jsonnet
Some checks failed
continuous-integration/drone/push Build encountered an error
2022-11-02 15:59:12 +13:00
28 changed files with 363 additions and 431 deletions

View File

@@ -1,3 +1,5 @@
profile: basic
skip_list: # or 'skip_list' to silence them completely
- experimental # all rules tagged as experimental
- unnamed-task # All tasks should be named

View File

@@ -1,114 +0,0 @@
// Distros to Test on ;)
local distros = ['centos7',
'rockylinux8',
'debian10',
'debian11'];
/* Configuration of DIND */
local docker_service() =
{
name: 'docker',
image: 'docker:dind',
privileged: true,
volumes: [{ name: 'dockersock', path: '/var/run' },],
};
local email_notification() =
{
name: 'notify by email',
image: 'drillster/drone-email',
settings:
{ host:
{ from_secret: 'EMAIL_HOST' },
username:
{ from_secret: 'EMAIL_USER' },
password:
{ from_secret: 'EMAIL_PASS' },
from: 'drone@guise.net.nz'
}
};
local test_distro(distribution) =
{
name: 'Molecule test on %(distribution)s' % { distribution: distribution },
volumes: [{ name: 'dockersock', path: '/var/run' },],
pull: true,
image: 'guisea/ansible-molecule:alpine-latest',
commands: [
'sleep 10', // give docker enough time to start
'mkdir ${DRONE_REPO_NAME}',
'rsync -a . ${DRONE_REPO_NAME} --exclude ${DRONE_REPO_NAME}',
'cd ${DRONE_REPO_NAME}',
'molecule test'
],
environment:
{ MOLECULE_DISTRO: '%(distribution)s' % { distribution: distribution }
},
};
local gen_pipeline(distro) =
{kind: 'pipeline',
type: 'docker',
name: 'Test on %(distro)s' % { distro: distro },
steps:
[test_distro(distro)],
services:
[docker_service()],
volumes:
[{
name: 'dockersock',
temp: {},
},],
when:
{ event: {exclude: ['tag']},
},
};
local gen_release() =
{kind: 'pipeline',
type: 'docker',
name: 'Generate Release',
commands: [
'sleep 10', // give docker enough time to start
'mkdir ${DRONE_REPO_NAME}',
'rsync -a . ${DRONE_REPO_NAME} --exclude ${DRONE_REPO_NAME}',
'cd ${DRONE_REPO_NAME}',
'tar -czf ../${DRONE_REPO_NAME}.${DRONE_TAG}.tar.gz ./*', // Create an archive of the role
'curl --user ${GITEA_USER}:${GITEA_TOKEN} --upload-file ../${DRONE_REPO_NAME}.${DRONE_TAG}.tar.gz https://${GITEA_URL}/api/packages/${GITEA_REPOUSER}/generic/ansible-role-common/${DRONE_TAG}/${DRONE_REPO_NAME}.${DRONE_TAG}.tar.gz',
],
when:
{ event: {include: ['tag']},
},
};
// Generate the output
[
gen_pipeline('centos7'),
gen_pipeline('rockylinux8'),
gen_pipeline('debian10'),
gen_pipeline('debian11'),
{kind: 'pipeline',
type: 'docker',
name: 'Notify normal',
steps: [email_notification()],
when:
{ status: [ 'success', 'failure' ] ,
event: {exclude: ['tag']},
},
depends_on:
['Test on %(distro)s' % { distro: distro }
for distro in distros]
},
gen_release(),
{kind: 'pipeline',
type: 'docker',
name: 'Notify Tagged release',
steps: [email_notification()],
when:
{ status: [ 'success', 'failure' ] ,
event: {include: ['tag']},
},
depends_on:
['Generate Release']
},
]

View File

@@ -1,210 +0,0 @@
---
kind: pipeline
name: runners
steps:
- commands:
- cd terraform
- terraform init
- terraform plan -out /data/runners.plan
- terraform apply /data/runners.plan
environment:
TF_VAR_linode_api_token:
from_secret: linode_api_token
TF_VAR_root_pass:
from_secret: root_pass
TF_VAR_ssh_pubkey:
from_secret: TF_VAR_ssh_pubkey
image: hashicorp/terraform:1.1.7
name: Provision with terraform
volumes:
- name: terraform-data
path: /data
type: docker
volumes:
- host:
path: /mnt/nfs/swarm/runners
name: terraform-data
---
depends_on:
- runners
kind: pipeline
name: Test on centos7
node:
linodrone: "true"
services:
- image: docker:dind
name: docker
privileged: true
volumes:
- name: dockersock
path: /var/run
steps:
- commands:
- sleep 10
- mkdir ${DRONE_REPO_NAME}
- rsync -a . ${DRONE_REPO_NAME} --exclude ${DRONE_REPO_NAME}
- cd ${DRONE_REPO_NAME}
- molecule test
environment:
MOLECULE_DISTRO: centos7
image: guisea/ansible-molecule:latest
name: Molecule test on centos7
volumes:
- name: dockersock
path: /var/run
type: docker
volumes:
- name: dockersock
temp: {}
---
depends_on:
- runners
kind: pipeline
name: Test on centos8
node:
linodrone: "true"
services:
- image: docker:dind
name: docker
privileged: true
volumes:
- name: dockersock
path: /var/run
steps:
- commands:
- sleep 10
- mkdir ${DRONE_REPO_NAME}
- rsync -a . ${DRONE_REPO_NAME} --exclude ${DRONE_REPO_NAME}
- cd ${DRONE_REPO_NAME}
- molecule test
environment:
MOLECULE_DISTRO: centos8
image: guisea/ansible-molecule:latest
name: Molecule test on centos8
volumes:
- name: dockersock
path: /var/run
type: docker
volumes:
- name: dockersock
temp: {}
---
depends_on:
- runners
kind: pipeline
name: Test on rockylinux8
node:
linodrone: "true"
services:
- image: docker:dind
name: docker
privileged: true
volumes:
- name: dockersock
path: /var/run
steps:
- commands:
- sleep 10
- mkdir ${DRONE_REPO_NAME}
- rsync -a . ${DRONE_REPO_NAME} --exclude ${DRONE_REPO_NAME}
- cd ${DRONE_REPO_NAME}
- molecule test
environment:
MOLECULE_DISTRO: rockylinux8
image: guisea/ansible-molecule:latest
name: Molecule test on rockylinux8
volumes:
- name: dockersock
path: /var/run
type: docker
volumes:
- name: dockersock
temp: {}
---
depends_on:
- runners
kind: pipeline
name: Test on debian10
node:
linodrone: "true"
services:
- image: docker:dind
name: docker
privileged: true
volumes:
- name: dockersock
path: /var/run
steps:
- commands:
- sleep 10
- mkdir ${DRONE_REPO_NAME}
- rsync -a . ${DRONE_REPO_NAME} --exclude ${DRONE_REPO_NAME}
- cd ${DRONE_REPO_NAME}
- molecule test
environment:
MOLECULE_DISTRO: debian10
image: guisea/ansible-molecule:latest
name: Molecule test on debian10
volumes:
- name: dockersock
path: /var/run
type: docker
volumes:
- name: dockersock
temp: {}
---
depends_on:
- runners
kind: pipeline
name: Test on debian11
node:
linodrone: "true"
services:
- image: docker:dind
name: docker
privileged: true
volumes:
- name: dockersock
path: /var/run
steps:
- commands:
- sleep 10
- mkdir ${DRONE_REPO_NAME}
- rsync -a . ${DRONE_REPO_NAME} --exclude ${DRONE_REPO_NAME}
- cd ${DRONE_REPO_NAME}
- molecule test
environment:
MOLECULE_DISTRO: debian11
image: guisea/ansible-molecule:latest
name: Molecule test on debian11
volumes:
- name: dockersock
path: /var/run
type: docker
volumes:
- name: dockersock
temp: {}
---
depends_on:
- Test on centos7
- Test on centos8
- Test on rockylinux8
- Test on debian10
- Test on debian11
kind: pipeline
name: Notify
steps:
- image: drillster/drone-email
name: notify by email
settings:
from: drone@guise.net.nz
host: mail.guise.net.nz
password:
from_secret: EMAIL_PASS
username:
from_secret: EMAIL_USER
type: docker
when:
status:
- success
- failure

1
.gitignore vendored
View File

@@ -12,6 +12,7 @@ roles/*
!files/authorized_keys/
files/authorized_keys/*
!files/authorized_keys/.gitkeep
env/
# Do not commit Vault password
.vault_password.txt

28
.woodpecker/cron.yml Normal file
View File

@@ -0,0 +1,28 @@
matrix:
include:
- MOLECULE_DISTRO: centos7
- MOLECULE_DISTRO: almalinux8
clone:
git:
image: woodpeckerci/plugin-git
settings:
recursive: true
submodule_update_remote: true
when:
event: [ cron ]
steps:
test:
name: Test on ${MOLECULE_DISTRO}
image: guisea/ansible-molecule
pull: true
environment:
PY_COLORS: '1'
ANSIBLE_FORCE_COLOR: '1'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
commands:
- molecule test --scenario-name ${MOLECULE_SCENARIO:-default}
when:
event: [ cron ]

43
.woodpecker/lint.yml Normal file
View File

@@ -0,0 +1,43 @@
clone:
git:
image: woodpeckerci/plugin-git
settings:
recursive: true
submodule_update_remote: true
when:
event: [ push, manual ]
steps:
ansible-lint:
group: test
name: "Lint: Ansible-lint"
image: guisea/ansible-molecule
environment:
PY_COLORS: '1'
ANSIBLE_FORCE_COLOR: '1'
commands:
- ansible-lint -c ".ansible-lint"
when:
event: [ push, manual ]
yamllint:
group: test
name: "Lint: Yamllint"
image: guisea/ansible-molecule
commands:
- yamllint -f colored .
when:
event: [ push, manual ]
ntfy:
image: codeberg.org/l-x/woodpecker-ntfy
settings:
url: https://ntfy.cybercinch.nz/ci-status
title: "Lint failed for ${CI_REPO_NAME}"
priority: urgent
icon: https://woodpecker-ci.org/img/logo.svg
tags: robot,warning,rotating_light,${CI_BUILD_EVENT},${CI_REPO_NAME}
message: >
📝 Commit by ${CI_COMMIT_AUTHOR} on ${CI_COMMIT_BRANCH}:
${CI_COMMIT_MESSAGE}
when:
event: [ push, manual ]
status: [ failure ]

47
.woodpecker/test.yml Normal file
View File

@@ -0,0 +1,47 @@
matrix:
include:
- MOLECULE_DISTRO: centos7
- MOLECULE_DISTRO: almalinux8
clone:
git:
image: woodpeckerci/plugin-git
settings:
recursive: true
submodule_update_remote: true
when:
event: [ push, manual ]
steps:
test:
name: Test on ${MOLECULE_DISTRO}
image: guisea/ansible-molecule
pull: true
environment:
PY_COLORS: '1'
ANSIBLE_FORCE_COLOR: '1'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
commands:
- molecule test --scenario-name ${MOLECULE_SCENARIO:-default}
secrets: [ auth_duo_host, auth_duo_ikey, auth_duo_skey, auth_duo_mirror_url ]
when:
event:
- push
- manual
ntfy:
image: codeberg.org/l-x/woodpecker-ntfy
settings:
url: https://ntfy.cybercinch.nz/ci-status
title: "Test failed for ${CI_REPO_NAME} - Distro: ${MOLECULE_DISTRO} Scenario: ${MOLECULE_SCENARIO:-default}"
priority: urgent
icon: https://woodpecker-ci.org/img/logo.svg
tags: robot,warning,rotating_light,${CI_BUILD_EVENT},${CI_REPO_NAME}
message: >
📝 Commit by ${CI_COMMIT_AUTHOR} on ${CI_COMMIT_BRANCH}:
${CI_COMMIT_MESSAGE}
when:
event: [ push, manual ]
status: [ failure ]
depends_on:
- lint

View File

@@ -0,0 +1,16 @@
skip_clone: true
steps:
ntfy-success:
image: codeberg.org/l-x/woodpecker-ntfy
settings:
url: https://ntfy.cybercinch.nz/ci-status
title: Build succeeded on ${CI_REPO_NAME}
priority: urgent
icon: https://woodpecker-ci.org/img/logo.svg
tags: robot,white_check_mark,${CI_BUILD_EVENT},${CI_REPO_NAME}
message: >
Test success when run by cron for ${CI_REPO_NAME}.
depends_on:
- "cron"
runs_on: [ success ]

20
.woodpecker/z.ntfy.yml Normal file
View File

@@ -0,0 +1,20 @@
skip_clone: true
steps:
ntfy:
image: codeberg.org/l-x/woodpecker-ntfy
settings:
url: https://ntfy.cybercinch.nz/ci-status
title: "Build completed for ${CI_REPO_NAME}"
priority: urgent
icon: https://woodpecker-ci.org/img/logo.svg
tags: robot,tada,white_check_mark,${CI_BUILD_EVENT},${CI_REPO_NAME}
message: >
📝 Commit by ${CI_COMMIT_AUTHOR} on ${CI_COMMIT_BRANCH}:
${CI_COMMIT_MESSAGE}
when:
event: [ push, manual ]
status: [ success ]
depends_on:
- lint
- test

View File

@@ -0,0 +1,16 @@
skip_clone: true
steps:
ntfy-failed:
image: codeberg.org/l-x/woodpecker-ntfy
settings:
url: https://ntfy.cybercinch.nz/ci-status
title: Build failed on ${CI_REPO_NAME}
priority: urgent
icon: https://woodpecker-ci.org/img/logo.svg
tags: robot,rotating_light,no_entry,${CI_BUILD_EVENT},${CI_REPO_NAME}
message: >
Test failed when run by cron for ${CI_REPO_NAME}.
depends_on:
- "cron"
runs_on: [ failure ]

View File

@@ -2,6 +2,8 @@
# Based on ansible-lint config
extends: default
ignore: |
.venv/
rules:
braces:
max-spaces-inside: 1
@@ -26,8 +28,8 @@ rules:
indentation: disable
key-duplicates: enable
line-length: disable
new-line-at-end-of-file: disable
new-line-at-end-of-file: enable
new-lines:
type: unix
trailing-spaces: disable
trailing-spaces: enable
truthy: disable

42
Makefile Normal file
View File

@@ -0,0 +1,42 @@
.PHONY: clean virtualenv lint test docker dist dist-upload
clean:
find . -name '*.py[co]' -delete
virtualenv:
virtualenv --prompt '|> ansible-role-common <| ' .venv
.venv/bin/pip install --upgrade pip
.venv/bin/pip install -r requirements.txt
.venv/bin/ansible-galaxy collection install -r requirements.yml
@echo
@echo "VirtualENV Setup Complete. Now run: source .venv/bin/activate"
@echo
test:
for distro in centos7 almalinux8 ; do \
MOLECULE_DISTRO=$$distro molecule test --all ; \
done
lint:
@echo "Linting with Ansible-lint"
@echo
ansible-lint -c ".ansible-lint" --exclude ".venv"
@echo
@echo "Linting with Yamllint"
@echo
yamllint .
@echo
docker: clean
docker buildx build --platform 'linux/amd64,linux/arm64' --push \
-t hub.cybercinch.nz/cybercinch/imap_retention_manager:latest \
-t docker.io/cybercinch/imap_retention_manager:latest .
dist: clean
rm -rf dist/*
python setup.py sdist
python setup.py bdist_wheel
dist-upload:
twine upload dist/*

View File

@@ -1,4 +1,4 @@
# Common [![Build Status](https://drone.guise.net.nz/api/badges/ansible-roles/common/status.svg)](https://drone.guise.net.nz/ansible-roles/common)
# Common [![status-badge](https://ci.cybercinch.nz/api/badges/4/status.svg)](https://ci.cybercinch.nz/repos/4)
=========
A brief description of the role goes here.

View File

@@ -9,7 +9,7 @@ dns_servers:
- 1.0.0.1
- 1.1.1.1
ADMIN_GROUP: admins
admin_group: admins
common_grub_timeout: 5
@@ -24,15 +24,15 @@ common_packages:
- bind-utils
- yum-utils
- unzip
win_packages:
- notepadplusplus.install
- firefoxesr
- baretail
- 7zip.install
apply_win_updates: false
common_show_ipv6: false|bool
common_root_pwd: l3tm31nN0w
common_root_email: admin@somplace.co.nz
common_root_email: admin@somplace.co.nz

View File

@@ -0,0 +1,8 @@
#!/bin/bash
# This script will reset the IP Address back to default of DHCP
# helpful for a pending restore
/bin/nmcli c m "System eth0" ipv4.method auto
/bin/nmcli c m "System eth0" ipv4.address "" ipv4.gateway ""
/bin/nmcli connection up "System eth0"

View File

@@ -0,0 +1,48 @@
#!/bin/bash
# get subnet
subnet=$(ip a | grep "inet " | tail -1 | awk '{print $2}')
# get router/gateway
router=$(ip route show | head -1 | awk '{print $3}')
# get size of network portion of address in bytes
sz=$(echo $subnet | awk -F / '{print $2}')
bytes=$(("$sz" / 8))
prefix=$(echo "$subnet" | cut -d. -f1-$bytes) # e.g., 192.168.0
# get IP address to be set
IP=$(hostname -I | awk '{print $1}') # current IP
echo -n "Keep IP address?—$IP [yn]> "
read -r ans
if [ "$ans" == "n" ]; then
echo -n "Enter new IP address: "
read -r IP
# check if specified IP is properly formatted
if [[ ! $IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
echo Invalid IP
fi
# check if specified IP works for local network
if [[ ! $IP =~ ^$prefix ]]; then
echo "ERROR: Specified IP not usable for local network"
exit
fi
fi
# check if specified IP is properly formatted
if [[ ! $IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
echo Invalid IP
fi
# fetch the UUID
UUID=$(nmcli connection show | tail -1 | awk '{print $4}')
if [[ "$UUID" == "ethernet" ]]; then
# This is the other format of nmcli connection show
UUID=$(nmcli connection show | head -2 | tail -1 | awk '{print $3}')
fi
# run commands to set up the permanent IP address
nmcli connection modify "$UUID" IPv4.address "$IP"/"$sz"
nmcli connection modify "$UUID" IPv4.gateway "$router"
nmcli connection modify "$UUID" IPv4.method manual
nmcli connection up "$UUID"

View File

@@ -15,10 +15,10 @@
name: ntpd
state: restarted
- name: reboot windows
- name: Reboot Windows
win_reboot:
- name: restart NetworkManager
- name: Restart NetworkManager
service:
name: NetworkManager
state: restarted

View File

@@ -4,4 +4,4 @@
tasks:
- name: "Include common"
include_role:
name: "common"
name: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') | basename }}"

View File

@@ -4,8 +4,8 @@ dependency:
driver:
name: docker
platforms:
- name: instance
image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible:latest"
- name: molecule-${MOLECULE_DISTRO:-almalinux8}
image: "cybercinch/docker-${MOLECULE_DISTRO:-almalinux8}-ansible:latest"
command: ${MOLECULE_DOCKER_COMMAND:-""}
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
@@ -13,9 +13,11 @@ platforms:
pre_build_image: true
provisioner:
name: ansible
env:
MOLECULE_NO_LOG: true
# verifier:
# name: ansible
lint: |
set -e
yamllint .
ansible-lint
# lint: |
# set -e
# yamllint .
# ansible-lint

6
requirements.txt Normal file
View File

@@ -0,0 +1,6 @@
ansible-core<2.17
ansible-compat<4
molecule[docker]<5.0.0
ansible-lint==6.16.2
yamllint==1.32.0
passlib==1.7.4

3
requirements.yml Normal file
View File

@@ -0,0 +1,3 @@
collections:
- ansible.windows
- community.general

View File

@@ -3,7 +3,7 @@
- include_tasks: networking.yml
- name: Ensure common packages (RHEL)
yum:
yum:
name: "{{ common_packages }}"
state: present
enablerepo: epel
@@ -17,7 +17,7 @@
enablerepo: ol7_developer_EPEL
when: ansible_distribution == 'OracleLinux'
tags: packages
- name: Check if SELinux is installed
stat:
path: /etc/selinux/config
@@ -38,7 +38,9 @@
# tags: security
- name: Create admin group
group: name={{ ADMIN_GROUP }} state=present
group:
name: "{{ admin_group }}"
state: present
- name: Configure yum limit
lineinfile:
@@ -49,25 +51,18 @@
- name: Ensure Helpers are present
copy:
src: "{{ helpers.src }}"
dest: "{{ helpers.dest }}"
src: helpers/
dest: /usr/local/bin/
mode: u+rwx,g+rx,o+rx
with_items:
- src: helpers/reload_scsi_devices
dest: /usr/local/bin/reload_scsi_devices
- src: helpers/reload_scsi_hosts
dest: /usr/local/bin/reload_scsi_hosts
loop_control:
loop_var: helpers
- name: Ensure Hostname is set
hostname:
hostname:
name: "{{ inventory_hostname }}.{{ domain }}"
when: ansible_virtualization_type != "docker"
when: ansible_virtualization_type != "docker" and ansible_virtualization_type != "container"
- name: Change root password
user:
name: root
user:
name: root
password: "{{ common_root_pwd | password_hash('sha512') }}"
changed_when: false
tags: rootpw

View File

@@ -30,7 +30,7 @@
admin_password: "{{ vault_ad_password }}"
domain_name: "{{ authconfig_domain }}"
when: ad_domain_joined
notify: reboot windows
notify: Reboot Windows
- meta: flush_handlers
- name: Ensure Important dirs exist
@@ -53,7 +53,7 @@
- name: Apply Windows Updates
win_updates:
when: apply_windows_updates
notify: reboot windows
notify: Reboot Windows
- meta: flush_handlers
- name: Ensure default applications installed

View File

@@ -1,7 +1,8 @@
---
- name: Postfix Configuration
when: postfix_configure
block:
- name: postfix | Apply postfix configuration
- name: Postfix | Apply postfix configuration
lineinfile:
dest: "{{ configurations.dest }}"
regexp: "{{ configurations.regexp }}"
@@ -33,12 +34,11 @@
loop_control:
loop_var: configurations
- name: postfix | Ensure Postfix is Started/Enabled
- name: Postfix | Ensure Postfix is Started/Enabled
service:
name: postfix
state: started
enabled: yes
when: postfix_configure
- name: Ensure root forwarding address is set
lineinfile:

View File

@@ -20,7 +20,7 @@
no_extra_spaces: yes
when: "ansible_os_family == 'RedHat' and ansible_distribution_major_version > '6'"
notify:
- Check if grub.cfg exists
- Check if grub.cfg exists
- Update GRUB
tags:
- grub
- grub

View File

@@ -1,4 +1,8 @@
---
- name: What is virtualization type?
debug:
msg: "Virtualization is: {{ ansible_virtualization_type }}"
- name: Ensure DNS and SSH common config
template:
src: "{{ network_config.src }}"
@@ -13,7 +17,7 @@
a+r,
}
- { src: etc.resolv.conf.j2, dest: /etc/resolv.conf, mode: u+rw, a+r }
when: ansible_virtualization_type != "docker"
when: ansible_virtualization_type != "docker" and ansible_virtualization_type != "container"
loop_control:
loop_var: network_config
tags: dns
@@ -52,7 +56,7 @@
}
loop_control:
loop_var: hosts_config
when: ansible_virtualization_type != "docker"
when: ansible_virtualization_type != "docker" and ansible_virtualization_type != "container"
- name: Ensure NetworkManager does not fiddle DNS
ini_file:
@@ -63,7 +67,7 @@
backup: yes
when: (ansible_os_family == "RedHat" and ansible_distribution_major_version == "7")
notify:
- restart NetworkManager
- Restart NetworkManager
changed_when: false
- name: Ensure correct permissions (hosts/resolv.conf)

View File

@@ -15,21 +15,21 @@
# /usr/local/bin/dynmotd
#
USER=`whoami`
HOSTNAME=`uname -n | cut -d. -f1`
IP=`ip route get 1 | awk '{print $NF;exit}'`
NUM_CPU=`lscpu | grep "CPU(s):" | head -n 1 | awk '{print $2}'`
ROOT=`df -x fuse.gvfs-fuse-daemon -Ph | egrep -i 'root|logvol|vda' | awk '{print $4}' | tr -d '\n'`
HOME=`df -x fuse.gvfs-fuse-daemon -Ph | grep home | awk '{print $4}' | tr -d '\n'`
FILESYSTEMS=`cat /etc/fstab | grep -v '#' | grep -v 'swap' | awk '{if(NF>0) {print $2}}'`
BACKUP=`df -x fuse.gvfs-fuse-daemon -Ph | grep backup | awk '{print $4}' | tr -d '\n'`
OS_RELEASE=`awk -F= '$1=="PRETTY_NAME" { print $2 ;}' /etc/os-release | sed -e 's/^"//' -e 's/"$//'`
MEMORY=`free -m | grep "Mem" | awk '{print $2,"-",$3,"-",$4}'`
SWAP=`free -m | grep "Swap" | awk '{print $2,"-",$3,"-",$4}'`
PSA=`ps -Afl | wc -l`
USER=`/usr/bin/env whoami`
HOSTNAME=`/usr/bin/env uname -n | /usr/bin/env cut -d. -f1`
IP=`/usr/bin/env ip route get 1 | /usr/bin/env grep -Po '(?<=src.)[\w\d.]+'`
IP6=`/usr/bin/env ip -6 addr | /usr/bin/env awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next ; } /inet6/ {print $3} '`
NUM_CPU=`cat /proc/cpuinfo | grep processor | wc -l`
#ROOT=`/usr/bin/df / -x fuse.gvfs-fuse-daemon -Ph | /usr/bin/egrep -i 'root|logvol|vda' | awk '{print $4}' | tr -d '\n'`
#HOME=`/usr/bin/df /home -x fuse.gvfs-fuse-daemon -Ph | grep home | awk '{print $4}' | tr -d '\n'`
#BACKUP=`/usr/bin/df -x fuse.gvfs-fuse-daemon -Ph | grep backup | awk '{print $4}' | tr -d '\n'`
FILESYSTEMS=`cat /etc/fstab | grep -v '#' | grep -v 'swap' | grep -v 'proc' | awk '{if(NF>0) {print $2}}'`
MEMORY=`/usr/bin/env free -m | /usr/bin/env grep "Mem" | /usr/bin/env awk '{print $2,"-",$3,"-",$4}'`
SWAP=`/usr/bin/env free -m | /usr/bin/env grep "Swap" | /usr/bin/env awk '{print $2,"-",$3,"-",$4}'`
PSA=`/usr/bin/env ps -Afl | /usr/bin/env wc -l`
# time of day
HOUR=$(date +"%H")
HOUR=$(/usr/bin/env date +"%H")
if [ $HOUR -lt 12 -a $HOUR -ge 0 ]
then TIME="morning"
elif [ $HOUR -lt 17 -a $HOUR -ge 12 ]
@@ -39,17 +39,17 @@ else
fi
#System uptime
uptime=`cat /proc/uptime | cut -f1 -d.`
uptime=`/usr/bin/env cat /proc/uptime | cut -f1 -d.`
upDays=$((uptime/60/60/24))
upHours=$((uptime/60/60%24))
upMins=$((uptime/60%60))
upSecs=$((uptime%60))
#System load
LOADAVG=`cat /proc/loadavg`
LOAD1=`echo $LOADAVG | awk {'print $1'}`
LOAD5=`echo $LOADAVG | awk {'print $2'}`
LOAD15=`echo $LOADAVG | awk {'print $3'}`
LOADAVG=`/usr/bin/env cat /proc/loadavg`
LOAD1=`echo $LOADAVG | /usr/bin/env awk {'print $1'}`
LOAD5=`echo $LOADAVG | /usr/bin/env awk {'print $2'}`
LOAD15=`echo $LOADAVG | /usr/bin/env awk {'print $3'}`
echo ""
echo -e "\e[7m--- GOOD $TIME $USER ----\e[0m"
@@ -63,9 +63,19 @@ RESET_COLORS="\e[0m"
echo -e "
===========================================================================
$COLOR_COLUMN- Hostname$RESET_COLORS............: $COLOR_VALUE $HOSTNAME $RESET_COLORS
$COLOR_COLUMN- IP Address (Default)$RESET_COLORS: $COLOR_VALUE $IP $RESET_COLORS
$COLOR_COLUMN- Release$RESET_COLORS.............: $COLOR_VALUE $OS_RELEASE $RESET_COLORS
{% if common_show_ipv6 == true %}
$COLOR_COLUMN- IP Address (Main v4)$RESET_COLORS: $COLOR_VALUE $IP $RESET_COLORS
$COLOR_COLUMN- IP Address (Main v6)$RESET_COLORS: $COLOR_VALUE $IP6 $RESET_COLORS
{% else %} $COLOR_COLUMN- IP Address (Default)$RESET_COLORS: $COLOR_VALUE $IP $RESET_COLORS
{% endif %}
{% if ansible_distribution == "Alpine" %}
$COLOR_COLUMN- Release$RESET_COLORS.............: $COLOR_VALUE Alpine `/usr/bin/env cat /etc/os-release` $RESET_COLORS
{% else %}
$COLOR_COLUMN- Release$RESET_COLORS.............: $COLOR_VALUE `/usr/bin/env cat /etc/os-release | /usr/bin/env grep PRETTY_NAME | /usr/bin/env cut -d '"' -f 2` $RESET_COLORS
{% endif %}
{% if ansible_distribution != "Alpine" %}
$COLOR_COLUMN- Users$RESET_COLORS...............: $COLOR_VALUE Currently `users | wc -w` user(s) logged on $RESET_COLORS
{% endif %}
=========================================================================== $RESET_COLORS
$COLOR_COLUMN- Current user$RESET_COLORS........: $COLOR_VALUE $USER $RESET_COLORS
$COLOR_COLUMN- Number of CPU$RESET_COLORS.......: $COLOR_VALUE $NUM_CPU $RESET_COLORS
@@ -74,10 +84,15 @@ echo -e "
$COLOR_COLUMN- Swap in use$RESET_COLORS.........: $COLOR_VALUE $SWAP (total-used-free) MB $RESET_COLORS
$COLOR_COLUMN- Processes$RESET_COLORS...........: $COLOR_VALUE $PSA running $RESET_COLORS
$COLOR_COLUMN- System uptime$RESET_COLORS.......: $COLOR_VALUE $upDays days $upHours hours $upMins minutes $upSecs seconds $RESET_COLORS
{% if ansible_virtualization_type != "lxc" %}
$COLOR_COLUMN- Disk space$RESET_COLORS..........: "
for FS in ${FILESYSTEMS}; do
echo -e " $COLOR_COLUMN- ..........$RESET_COLORS..........: $COLOR_VALUE `df -H ${FS} | grep -v 'Filesystem' | grep -v '^[[:space:]]*$' | awk '{print $6 " " $4}'` remaining $RESET_COLORS"
echo -e " $COLOR_COLUMN- ..........$RESET_COLORS..........: $COLOR_VALUE `df -H ${FS} | grep -v 'Filesystem' | grep -v '^[[:space:]]*$' | awk '{print $6 \" \" $4}'` remaining $RESET_COLORS"
done
{% endif %}
echo -e "
===========================================================================
"
if [ -f /etc/motd ]; then
/usr/bin/env cat /etc/motd
fi

View File

@@ -1,42 +0,0 @@
{
docker_service()::
{
name: 'docker',
image: 'docker:dind',
privileged: true,
volumes: [{ name: 'dockersock', path: '/var/run' },],
},
email_notification()::
{
name: 'notify by email',
image: 'drillster/drone-email',
settings:
{ host: 'mail.guise.net.nz',
username:
{ from_secret: 'EMAIL_USER' },
password:
{ from_secret: 'EMAIL_PASS' },
from: 'drone@guise.net.nz'
},
when:
{ status: [ 'changed', 'failure' ] },
},
test_distro(distribution)::
{
name: 'Test on %(distribution)s' % { distribution: distribution },
volumes: [{ name: 'dockersock', path: '/var/run' },],
image: 'guisea/ansible-molecule:latest',
commands: [
'sleep 10', // give docker enough time to start
'mkdir ${DRONE_REPO_NAME}',
'rsync -a . ${DRONE_REPO_NAME} --exclude ${DRONE_REPO_NAME}',
'cd ${DRONE_REPO_NAME}',
'molecule test'
],
environment:
{ MOLECULE_DISTRO: '%(distribution)s' % { distribution: distribution }
},
},
}