Compare commits
70 commits
2914f463ff
...
d282d77a99
Author | SHA1 | Date | |
---|---|---|---|
d282d77a99 | |||
cb4d28c994 | |||
071250d798 | |||
efdff6ef28 | |||
d2caadb41b | |||
9b44bcf3a8 | |||
24f9f87734 | |||
019cc69371 | |||
eee786fabf | |||
c2e93c0abb | |||
cc767867cf | |||
6cb56ab2ec | |||
5c4fc37a37 | |||
68d51450fd | |||
d57844928d | |||
4975562fbc | |||
25e03582b0 | |||
b49dc56c33 | |||
4122a7ccf8 | |||
429bc2a7c6 | |||
6f9fb78d4e | |||
bb1b430d16 | |||
1906e7c256 | |||
7dcad0d584 | |||
077b25f67e | |||
527181bba8 | |||
53e189c644 | |||
eeceebfd23 | |||
7bd8237876 | |||
55bebda4d4 | |||
ef16a2d081 | |||
264ea3e8a7 | |||
109914c039 | |||
8df4441028 | |||
733e4bf0e5 | |||
6cec7e2c9c | |||
f6b0c587d0 | |||
a8e2e6b5ad | |||
17aee0f6bb | |||
a3218ac41f | |||
932fd9e994 | |||
2e6e6b663e | |||
74d44535a8 | |||
cb2b01a2b4 | |||
9684e94e4d | |||
c93a4d0a99 | |||
31e614ab3b | |||
60585a3716 | |||
c717e86f70 | |||
ff8928dd0b | |||
ba97cd432f | |||
f45a759a43 | |||
b4b3fec8a7 | |||
1899dfc278 | |||
d8aa1e80d0 | |||
e634c184c0 | |||
07dce73bca | |||
c5ccc31ad9 | |||
ab76721ddb | |||
b460085bb0 | |||
ba3bf20db7 | |||
5ed4c1e9bd | |||
446e0d057e | |||
![]() |
e393f3cc3c | ||
![]() |
7ee2d08007 | ||
c94aef55a5 | |||
970d97b0a2 | |||
c04ce63c35 | |||
070b466abe | |||
82143e34ad |
116 changed files with 808 additions and 769 deletions
26
.woodpecker/bw-test.yml
Normal file
26
.woodpecker/bw-test.yml
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
pipeline:
|
||||||
|
install-deps:
|
||||||
|
image: python:3.10-slim
|
||||||
|
commands:
|
||||||
|
- pip install -r requirements.txt
|
||||||
|
|
||||||
|
test-dummymode:
|
||||||
|
image: python:3.10-slim
|
||||||
|
commands:
|
||||||
|
- bw test
|
||||||
|
environment:
|
||||||
|
BW_VAULT_DUMMY_MODE: 1
|
||||||
|
BW_PASS_DUMMY_MODE: 1
|
||||||
|
|
||||||
|
test-ignore-missing-faults:
|
||||||
|
image: python:3.10-slim
|
||||||
|
commands:
|
||||||
|
- bw test --ignore-missing-faults
|
||||||
|
|
||||||
|
test-determinism:
|
||||||
|
image: python:3.10-slim
|
||||||
|
commands:
|
||||||
|
- bw test --metadata-determinism 3 --config-determinism 3
|
||||||
|
environment:
|
||||||
|
BW_VAULT_DUMMY_MODE: 1
|
||||||
|
BW_PASS_DUMMY_MODE: 1
|
8
.woodpecker/editorconfig.yml
Normal file
8
.woodpecker/editorconfig.yml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
pipeline:
|
||||||
|
editorconfig:
|
||||||
|
image: alpine:latest
|
||||||
|
commands:
|
||||||
|
- wget -O ec-linux-amd64.tar.gz https://github.com/editorconfig-checker/editorconfig-checker/releases/latest/download/ec-linux-amd64.tar.gz
|
||||||
|
- tar -xzf ec-linux-amd64.tar.gz
|
||||||
|
- rm ec-linux-amd64.tar.gz
|
||||||
|
- bin/ec-linux-amd64 -no-color -exclude '^bin/'
|
33
Jenkinsfile
vendored
33
Jenkinsfile
vendored
|
@ -1,15 +1,6 @@
|
||||||
pipeline {
|
pipeline {
|
||||||
agent any
|
agent any
|
||||||
stages {
|
stages {
|
||||||
stage('editorconfig-checker') {
|
|
||||||
steps {
|
|
||||||
sh """
|
|
||||||
wget -Oec-linux-amd64.tar.gz https://github.com/editorconfig-checker/editorconfig-checker/releases/latest/download/ec-linux-amd64.tar.gz
|
|
||||||
tar -xzf ec-linux-amd64.tar.gz && rm ec-linux-amd64.tar.gz
|
|
||||||
bin/ec-linux-amd64 -no-color -exclude '^bin/'
|
|
||||||
"""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('install_requirements') {
|
stage('install_requirements') {
|
||||||
steps {
|
steps {
|
||||||
sh """
|
sh """
|
||||||
|
@ -18,13 +9,31 @@ pipeline {
|
||||||
virtualenv -p python3 venv
|
virtualenv -p python3 venv
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
|
|
||||||
pip install --upgrade pip
|
pip install --upgrade pip isort
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('bw test') {
|
stage('tests') {
|
||||||
parallel {
|
parallel {
|
||||||
|
stage('syntax checking using editorconfig-checker') {
|
||||||
|
steps {
|
||||||
|
sh """
|
||||||
|
wget -Oec-linux-amd64.tar.gz https://github.com/editorconfig-checker/editorconfig-checker/releases/latest/download/ec-linux-amd64.tar.gz
|
||||||
|
tar -xzf ec-linux-amd64.tar.gz && rm ec-linux-amd64.tar.gz
|
||||||
|
bin/ec-linux-amd64 -no-color -exclude '^bin/'
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('syntax checking using isort') {
|
||||||
|
steps {
|
||||||
|
sh """
|
||||||
|
. venv/bin/activate
|
||||||
|
|
||||||
|
isort --check .
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
stage('config and metadata determinism') {
|
stage('config and metadata determinism') {
|
||||||
steps {
|
steps {
|
||||||
sh """
|
sh """
|
||||||
|
@ -36,7 +45,7 @@ pipeline {
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('other tests') {
|
stage('bw test -i') {
|
||||||
steps {
|
steps {
|
||||||
sh """
|
sh """
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
|
|
|
@ -36,7 +36,7 @@ Rule of thumb: keep ports below 10000 free for stuff that reserves ports.
|
||||||
| 20090 | matrix-media-repo | prometheus metrics |
|
| 20090 | matrix-media-repo | prometheus metrics |
|
||||||
| 21000 | pleroma | pleroma |
|
| 21000 | pleroma | pleroma |
|
||||||
| 21010 | grafana | grafana |
|
| 21010 | grafana | grafana |
|
||||||
| 22000 | gitea | gitea |
|
| 22000 | gitea | forgejo |
|
||||||
| 22010 | jenkins-ci | Jenkins CI |
|
| 22010 | jenkins-ci | Jenkins CI |
|
||||||
| 22020 | travelynx | Travelynx Web |
|
| 22020 | travelynx | Travelynx Web |
|
||||||
| 22030 | octoprint | OctoPrint Web Interface |
|
| 22030 | octoprint | OctoPrint Web Interface |
|
||||||
|
@ -45,7 +45,8 @@ Rule of thumb: keep ports below 10000 free for stuff that reserves ports.
|
||||||
| 22060 | pretalx | gunicorn |
|
| 22060 | pretalx | gunicorn |
|
||||||
| 22070 | paperless-ng | gunicorn |
|
| 22070 | paperless-ng | gunicorn |
|
||||||
| 22080 | netbox | gunicorn |
|
| 22080 | netbox | gunicorn |
|
||||||
| 22090 | openhab | http |
|
| 22100 | woodpecker-server | http |
|
||||||
|
| 22101 | woodpecker-server | gRPC |
|
||||||
| 22999 | nginx | stub_status |
|
| 22999 | nginx | stub_status |
|
||||||
| 22100 | ntfy | http |
|
| 22100 | ntfy | http |
|
||||||
|
|
||||||
|
|
|
@ -143,6 +143,9 @@ pkg_apt = {
|
||||||
'cloud-init': {
|
'cloud-init': {
|
||||||
'installed': False,
|
'installed': False,
|
||||||
},
|
},
|
||||||
|
'molly-guard': {
|
||||||
|
'installed': False,
|
||||||
|
},
|
||||||
'netplan.io': {
|
'netplan.io': {
|
||||||
'installed': False,
|
'installed': False,
|
||||||
},
|
},
|
||||||
|
|
|
@ -38,9 +38,14 @@ defaults = {
|
||||||
'rofi': {},
|
'rofi': {},
|
||||||
|
|
||||||
# sound
|
# sound
|
||||||
|
'calf': {},
|
||||||
|
'easyeffects': {},
|
||||||
|
'lsp-plugins': {},
|
||||||
'pavucontrol': {},
|
'pavucontrol': {},
|
||||||
'pulseaudio': {},
|
'pipewire': {},
|
||||||
'pulseaudio-zeroconf': {},
|
'pipewire-jack': {},
|
||||||
|
'pipewire-pulse': {},
|
||||||
|
'qpwgraph': {},
|
||||||
|
|
||||||
# window management
|
# window management
|
||||||
'i3-wm': {},
|
'i3-wm': {},
|
||||||
|
@ -53,6 +58,7 @@ defaults = {
|
||||||
|
|
||||||
# Xorg
|
# Xorg
|
||||||
'xf86-input-libinput': {},
|
'xf86-input-libinput': {},
|
||||||
|
'xf86-input-wacom': {},
|
||||||
'xorg-server': {},
|
'xorg-server': {},
|
||||||
'xorg-setxkbmap': {},
|
'xorg-setxkbmap': {},
|
||||||
'xorg-xev': {},
|
'xorg-xev': {},
|
||||||
|
@ -62,20 +68,27 @@ defaults = {
|
||||||
# all them apps
|
# all them apps
|
||||||
'browserpass': {},
|
'browserpass': {},
|
||||||
'browserpass-firefox': {},
|
'browserpass-firefox': {},
|
||||||
|
'ffmpeg': {},
|
||||||
'firefox': {},
|
'firefox': {},
|
||||||
'gimp': {},
|
'gimp': {},
|
||||||
|
'imagemagick': {},
|
||||||
'inkscape': {},
|
'inkscape': {},
|
||||||
|
'kdenlive': {},
|
||||||
'maim': {},
|
'maim': {},
|
||||||
'mosh': {},
|
'mosh': {},
|
||||||
|
'mosquitto': {},
|
||||||
'mpv': {},
|
'mpv': {},
|
||||||
'pass': {},
|
'pass': {},
|
||||||
'pass-otp': {},
|
'pass-otp': {},
|
||||||
'pdftk': {},
|
'pdftk': {},
|
||||||
'pwgen': {},
|
'pwgen': {},
|
||||||
'qpdfview': {},
|
'qpdfview': {},
|
||||||
|
'samba': {},
|
||||||
|
'shotcut': {},
|
||||||
'sipcalc': {},
|
'sipcalc': {},
|
||||||
'the_silver_searcher': {},
|
'the_silver_searcher': {},
|
||||||
'tlp': {},
|
'tlp': {},
|
||||||
|
'virt-manager': {},
|
||||||
'xclip': {},
|
'xclip': {},
|
||||||
'xdotool': {}, # needed for maim window selection
|
'xdotool': {}, # needed for maim window selection
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
repo.libs.tools.require_bundle(node, 'zfs')
|
repo.libs.tools.require_bundle(node, 'zfs')
|
||||||
|
|
||||||
from os.path import join
|
from os.path import join
|
||||||
|
|
||||||
from bundlewrap.metadata import metadata_to_json
|
from bundlewrap.metadata import metadata_to_json
|
||||||
|
|
||||||
dataset = node.metadata.get('backup-server/zfs-base')
|
dataset = node.metadata.get('backup-server/zfs-base')
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from ipaddress import ip_network
|
from ipaddress import ip_network
|
||||||
|
|
||||||
from bundlewrap.exceptions import NoSuchNode
|
from bundlewrap.exceptions import NoSuchNode
|
||||||
from bundlewrap.metadata import atomic
|
from bundlewrap.metadata import atomic
|
||||||
|
|
||||||
|
|
11
bundles/docker-ce/items.py
Normal file
11
bundles/docker-ce/items.py
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
from bundlewrap.metadata import metadata_to_json
|
||||||
|
|
||||||
|
files['/etc/docker/daemon.json'] = {
|
||||||
|
'content': metadata_to_json({
|
||||||
|
'iptables': False,
|
||||||
|
}),
|
||||||
|
'before': {
|
||||||
|
'pkg_apt:docker-ce',
|
||||||
|
'pkg_apt:docker-ce-cli',
|
||||||
|
}
|
||||||
|
}
|
36
bundles/docker-ce/metadata.py
Normal file
36
bundles/docker-ce/metadata.py
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
defaults = {
|
||||||
|
'apt': {
|
||||||
|
'repos': {
|
||||||
|
'docker': {
|
||||||
|
'items': {
|
||||||
|
'deb https://download.docker.com/linux/debian {os_release} stable',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'packages': {
|
||||||
|
'docker-ce': {},
|
||||||
|
'docker-ce-cli': {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@metadata_reactor.provides(
|
||||||
|
'nftables/rules/00-docker-ce',
|
||||||
|
)
|
||||||
|
def nftables_nat(metadata):
|
||||||
|
rules = {
|
||||||
|
'inet filter forward ct state { related, established } accept',
|
||||||
|
'inet filter forward iifname docker0 accept',
|
||||||
|
}
|
||||||
|
|
||||||
|
for iface in metadata.get('interfaces'):
|
||||||
|
rules.add(f'nat postrouting oifname {iface} masquerade')
|
||||||
|
|
||||||
|
return {
|
||||||
|
'nftables': {
|
||||||
|
'rules': {
|
||||||
|
'00-docker-ce': sorted(rules),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
|
@ -46,11 +46,12 @@ plugin {
|
||||||
zlib_save_level = 6
|
zlib_save_level = 6
|
||||||
zlib_save = gz
|
zlib_save = gz
|
||||||
|
|
||||||
sieve_plugins = sieve_imapsieve sieve_extprograms
|
|
||||||
sieve_dir = /var/mail/vmail/sieve/%d/%n/
|
|
||||||
sieve = /var/mail/vmail/sieve/%d/%n.sieve
|
sieve = /var/mail/vmail/sieve/%d/%n.sieve
|
||||||
sieve_pipe_bin_dir = /var/mail/vmail/sieve/bin
|
sieve_dir = /var/mail/vmail/sieve/%d/%n/
|
||||||
sieve_extensions = +vnd.dovecot.pipe
|
sieve_extensions = +vnd.dovecot.pipe
|
||||||
|
sieve_pipe_bin_dir = /var/mail/vmail/sieve/bin
|
||||||
|
sieve_plugins = sieve_imapsieve sieve_extprograms
|
||||||
|
sieve_user_log = /var/mail/vmail/sieve/%d/%n.log
|
||||||
|
|
||||||
old_stats_refresh = 30 secs
|
old_stats_refresh = 30 secs
|
||||||
old_stats_track_cmds = yes
|
old_stats_track_cmds = yes
|
||||||
|
|
|
@ -21,7 +21,6 @@ ROOT_URL = https://${domain}/
|
||||||
DISABLE_SSH = false
|
DISABLE_SSH = false
|
||||||
SSH_PORT = 22
|
SSH_PORT = 22
|
||||||
LFS_START_SERVER = true
|
LFS_START_SERVER = true
|
||||||
LFS_CONTENT_PATH = /var/lib/gitea/data/lfs
|
|
||||||
LFS_JWT_SECRET = ${lfs_secret_key}
|
LFS_JWT_SECRET = ${lfs_secret_key}
|
||||||
OFFLINE_MODE = true
|
OFFLINE_MODE = true
|
||||||
START_SSH_SERVER = false
|
START_SSH_SERVER = false
|
||||||
|
@ -67,7 +66,7 @@ EMAIL_DOMAIN_BLOCKLIST = ${','.join(sorted(email_domain_blocklist))}
|
||||||
|
|
||||||
[mailer]
|
[mailer]
|
||||||
ENABLED = true
|
ENABLED = true
|
||||||
MAILER_TYPE = sendmail
|
PROTOCOL = sendmail
|
||||||
FROM = "${app_name}" <noreply@${domain}>
|
FROM = "${app_name}" <noreply@${domain}>
|
||||||
|
|
||||||
[session]
|
[session]
|
||||||
|
|
|
@ -40,10 +40,7 @@ files = {
|
||||||
},
|
},
|
||||||
'/usr/local/bin/gitea': {
|
'/usr/local/bin/gitea': {
|
||||||
'content_type': 'download',
|
'content_type': 'download',
|
||||||
#'source': 'https://dl.gitea.io/gitea/{version}/gitea-{version}-linux-amd64'.format(version=node.metadata.get('gitea/version')),
|
'source': node.metadata.get('gitea/url'),
|
||||||
'source': 'https://github.com/go-gitea/gitea/releases/download/v{version}/gitea-{version}-linux-amd64'.format(
|
|
||||||
version=node.metadata.get('gitea/version'),
|
|
||||||
),
|
|
||||||
'content_hash': node.metadata.get('gitea/sha1', None),
|
'content_hash': node.metadata.get('gitea/sha1', None),
|
||||||
'mode': '0755',
|
'mode': '0755',
|
||||||
'triggers': {
|
'triggers': {
|
||||||
|
|
|
@ -6,7 +6,7 @@ defaults = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'gitea': {
|
'gitea': {
|
||||||
'app_name': 'Gitea',
|
'app_name': 'Forgejo',
|
||||||
'database': {
|
'database': {
|
||||||
'username': 'gitea',
|
'username': 'gitea',
|
||||||
'password': repo.vault.password_for('{} postgresql gitea'.format(node.name)),
|
'password': repo.vault.password_for('{} postgresql gitea'.format(node.name)),
|
||||||
|
@ -23,9 +23,14 @@ defaults = {
|
||||||
'icinga2_api': {
|
'icinga2_api': {
|
||||||
'gitea': {
|
'gitea': {
|
||||||
'services': {
|
'services': {
|
||||||
'GITEA PROCESS': {
|
'FORGEJO PROCESS': {
|
||||||
'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_systemd_unit gitea',
|
'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_systemd_unit gitea',
|
||||||
},
|
},
|
||||||
|
'FORGEJO UPDATE': {
|
||||||
|
'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_forgejo_for_new_release codeberg.org forgejo/forgejo v$(gitea --version | cut -d" " -f3)',
|
||||||
|
'vars.notification.mail': True,
|
||||||
|
'check_interval': '60m',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -67,7 +72,7 @@ defaults = {
|
||||||
|
|
||||||
|
|
||||||
@metadata_reactor.provides(
|
@metadata_reactor.provides(
|
||||||
'nginx/vhosts/gitea',
|
'nginx/vhosts/forgejo',
|
||||||
)
|
)
|
||||||
def nginx(metadata):
|
def nginx(metadata):
|
||||||
if not node.has_bundle('nginx'):
|
if not node.has_bundle('nginx'):
|
||||||
|
@ -76,7 +81,7 @@ def nginx(metadata):
|
||||||
return {
|
return {
|
||||||
'nginx': {
|
'nginx': {
|
||||||
'vhosts': {
|
'vhosts': {
|
||||||
'gitea': {
|
'forgejo': {
|
||||||
'domain': metadata.get('gitea/domain'),
|
'domain': metadata.get('gitea/domain'),
|
||||||
'locations': {
|
'locations': {
|
||||||
'/': {
|
'/': {
|
||||||
|
@ -99,16 +104,4 @@ def nginx(metadata):
|
||||||
)
|
)
|
||||||
def icinga_check_for_new_release(metadata):
|
def icinga_check_for_new_release(metadata):
|
||||||
return {
|
return {
|
||||||
'icinga2_api': {
|
|
||||||
'gitea': {
|
|
||||||
'services': {
|
|
||||||
'GITEA UPDATE': {
|
|
||||||
# this is only temporary. We will switch to forgejo once they have their first stable release.
|
|
||||||
'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_forgejo_for_new_release codeberg.org forgejo/forgejo v{}'.format(metadata.get('gitea/version')),
|
|
||||||
'vars.notification.mail': True,
|
|
||||||
'check_interval': '60m',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,7 @@ try:
|
||||||
message = f"WARNING - stable version {stable_version} is lower than running version {running_version}, check if downgrade is necessary."
|
message = f"WARNING - stable version {stable_version} is lower than running version {running_version}, check if downgrade is necessary."
|
||||||
else:
|
else:
|
||||||
status = 2
|
status = 2
|
||||||
message = f"CRITICAL - update necessary, running verison {running_version} is lower than stable version {stable_version}"
|
message = f"CRITICAL - update necessary, running version {running_version} is lower than stable version {stable_version}"
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
message = f"{message}: {repr(e)}"
|
message = f"{message}: {repr(e)}"
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
from bundlewrap.metadata import atomic
|
|
||||||
|
|
||||||
defaults = {
|
defaults = {
|
||||||
'apt': {
|
'apt': {
|
||||||
'packages': {
|
'packages': {
|
||||||
|
@ -25,7 +23,7 @@ defaults = {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@metadata_reactor.provides(
|
@metadata_reactor.provides(
|
||||||
'icinga2_api/homeassistant/services/HOMESSISTANT UPDATE',
|
'icinga2_api/homeassistant/services',
|
||||||
)
|
)
|
||||||
def icinga_check_for_new_release(metadata):
|
def icinga_check_for_new_release(metadata):
|
||||||
return {
|
return {
|
||||||
|
@ -54,8 +52,8 @@ def nginx(metadata):
|
||||||
'vhosts': {
|
'vhosts': {
|
||||||
'homeassistant': {
|
'homeassistant': {
|
||||||
'domain': metadata.get('homeassistant/domain'),
|
'domain': metadata.get('homeassistant/domain'),
|
||||||
'website_check_path': '/',
|
'website_check_path': '/auth/authorize',
|
||||||
'website_check_string': 'Homeassistant',
|
'website_check_string': 'Home Assistant',
|
||||||
'locations': {
|
'locations': {
|
||||||
'/': {
|
'/': {
|
||||||
'target': 'http://127.0.0.1:8123',
|
'target': 'http://127.0.0.1:8123',
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from requests import get
|
|
||||||
from sys import argv, exit
|
from sys import argv, exit
|
||||||
|
|
||||||
|
from requests import get
|
||||||
|
|
||||||
meshviewer_url = argv[1]
|
meshviewer_url = argv[1]
|
||||||
node_id = argv[2]
|
node_id = argv[2]
|
||||||
node = None
|
node = None
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from requests import get
|
|
||||||
from sys import exit
|
from sys import exit
|
||||||
|
|
||||||
|
from requests import get
|
||||||
|
|
||||||
SIPGATE_USER = '${node.metadata['icinga2']['sipgate_user']}'
|
SIPGATE_USER = '${node.metadata['icinga2']['sipgate_user']}'
|
||||||
SIPGATE_PASS = '${node.metadata['icinga2']['sipgate_pass']}'
|
SIPGATE_PASS = '${node.metadata['icinga2']['sipgate_pass']}'
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from concurrent.futures import ThreadPoolExecutor, as_completed
|
from concurrent.futures import ThreadPoolExecutor, as_completed
|
||||||
from ipaddress import ip_address, IPv6Address
|
from ipaddress import IPv6Address, ip_address
|
||||||
from subprocess import check_output
|
from subprocess import check_output
|
||||||
from sys import argv, exit
|
from sys import argv, exit
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BLOCKLISTS = [
|
BLOCKLISTS = [
|
||||||
'0spam.fusionzero.com',
|
'0spam.fusionzero.com',
|
||||||
'bl.mailspike.org',
|
'bl.mailspike.org',
|
||||||
|
|
|
@ -4,10 +4,11 @@ import email.mime.text
|
||||||
import smtplib
|
import smtplib
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
from json import dumps
|
from json import dumps
|
||||||
from requests import post
|
|
||||||
from subprocess import run
|
from subprocess import run
|
||||||
from sys import argv
|
from sys import argv
|
||||||
|
|
||||||
|
from requests import post
|
||||||
|
|
||||||
SIPGATE_USER='${node.metadata['icinga2']['sipgate_user']}'
|
SIPGATE_USER='${node.metadata['icinga2']['sipgate_user']}'
|
||||||
SIPGATE_PASS='${node.metadata['icinga2']['sipgate_pass']}'
|
SIPGATE_PASS='${node.metadata['icinga2']['sipgate_pass']}'
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,9 @@ defaults = {
|
||||||
'icinga2': {},
|
'icinga2': {},
|
||||||
'icinga2-ido-pgsql': {},
|
'icinga2-ido-pgsql': {},
|
||||||
'icingaweb2': {},
|
'icingaweb2': {},
|
||||||
'icingaweb2-module-monitoring': {},
|
|
||||||
|
# apparently no longer needed
|
||||||
|
#'icingaweb2-module-monitoring': {},
|
||||||
|
|
||||||
# neeeded for statusmonitor
|
# neeeded for statusmonitor
|
||||||
'python3-flask': {},
|
'python3-flask': {},
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from os import environ
|
from os import environ
|
||||||
from requests import get, post
|
|
||||||
from sys import argv, exit
|
from sys import argv, exit
|
||||||
|
|
||||||
|
from requests import get, post
|
||||||
|
|
||||||
SYNAPSE_MAX_ROOMS_TO_GET = 20000
|
SYNAPSE_MAX_ROOMS_TO_GET = 20000
|
||||||
SYNAPSE_HOST = 'http://[::1]:20080/'
|
SYNAPSE_HOST = 'http://[::1]:20080/'
|
||||||
|
|
|
@ -6,7 +6,7 @@ defaults = {
|
||||||
'repos': {
|
'repos': {
|
||||||
'miniflux': {
|
'miniflux': {
|
||||||
'items': {
|
'items': {
|
||||||
'deb https://apt.miniflux.app/ /',
|
'deb [trusted=yes] https://repo.miniflux.app/apt/ /',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Checks wether upgrade-and-reboot is currently running.
|
|
||||||
|
|
||||||
if [[ -f "/var/lib/bundlewrap/soft-${node.name}/UNATTENDED" ]]
|
|
||||||
then
|
|
||||||
echo "Sorry, can't $MOLLYGUARD_CMD now, upgrade-and-reboot is running"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
|
@ -1,29 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# This script will ask for the bundlewrap node name. This replaces the
|
|
||||||
# original script, which will ask for the hostname, which sometimes
|
|
||||||
# is not enough to properly identify the system.
|
|
||||||
|
|
||||||
NODE_NAME="${node.name}"
|
|
||||||
|
|
||||||
# If this is not a terminal, do nothing
|
|
||||||
test -t 0 || exit 0
|
|
||||||
|
|
||||||
sigh()
|
|
||||||
{
|
|
||||||
echo "Sorry, input does not match. Won't $MOLLYGUARD_CMD $NODE_NAME ..." >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
trap 'echo;sigh' 1 2 3 9 10 12 15
|
|
||||||
|
|
||||||
echo -n "Please enter the bundlewrap node name of this System to $MOLLYGUARD_CMD: "
|
|
||||||
read NODE_NAME_USER || :
|
|
||||||
|
|
||||||
NODE_NAME_USER="$(echo "$NODE_NAME_USER" | tr '[:upper:]' '[:lower:]')"
|
|
||||||
|
|
||||||
[ "$NODE_NAME_USER" = "$NODE_NAME" ] || sigh
|
|
||||||
|
|
||||||
trap - 1 2 3 9 10 12 15
|
|
||||||
|
|
||||||
exit 0
|
|
|
@ -1 +0,0 @@
|
||||||
# currently unused
|
|
|
@ -1,27 +0,0 @@
|
||||||
directories = {
|
|
||||||
'/etc/molly-guard/messages.d': {
|
|
||||||
'purge': True,
|
|
||||||
'after': {
|
|
||||||
'pkg_apt:molly-guard',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'/etc/molly-guard/run.d': {
|
|
||||||
'purge': True,
|
|
||||||
'after': {
|
|
||||||
'pkg_apt:molly-guard',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
files = {
|
|
||||||
'/etc/molly-guard/rc': {},
|
|
||||||
|
|
||||||
'/etc/molly-guard/run.d/10-check-unattended-upgrades': {
|
|
||||||
'content_type': 'mako',
|
|
||||||
'mode': '0755',
|
|
||||||
},
|
|
||||||
'/etc/molly-guard/run.d/30-query-hostname': {
|
|
||||||
'content_type': 'mako',
|
|
||||||
'mode': '0755',
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
defaults = {
|
|
||||||
'apt': {
|
|
||||||
'packages': {
|
|
||||||
'molly-guard': {},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -7,7 +7,6 @@ from time import sleep
|
||||||
|
|
||||||
import paho.mqtt.client as mqtt
|
import paho.mqtt.client as mqtt
|
||||||
|
|
||||||
|
|
||||||
BROKER_HOST = argv[1]
|
BROKER_HOST = argv[1]
|
||||||
BROKER_TOPIC = argv[2]
|
BROKER_TOPIC = argv[2]
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
from bundlewrap.metadata import atomic
|
from bundlewrap.metadata import atomic
|
||||||
|
|
||||||
|
|
||||||
defaults = {
|
defaults = {
|
||||||
'apt': {
|
'apt': {
|
||||||
'packages': {
|
'packages': {
|
||||||
|
|
|
@ -25,7 +25,7 @@ defaults = {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
if not node.has_bundle('vmhost'):
|
if not node.has_bundle('vmhost') and not node.has_bundle('docker-ce'):
|
||||||
# see comment in bundles/vmhost/items.py
|
# see comment in bundles/vmhost/items.py
|
||||||
defaults['apt']['packages']['iptables'] = {
|
defaults['apt']['packages']['iptables'] = {
|
||||||
'installed': False,
|
'installed': False,
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from requests import get
|
|
||||||
from sys import exit
|
from sys import exit
|
||||||
|
|
||||||
|
from requests import get
|
||||||
|
|
||||||
api_key = '${api_key}'
|
api_key = '${api_key}'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
find /var/lib/openhab/backups -type f -mtime +3 -delete
|
|
||||||
|
|
||||||
/usr/share/openhab/runtime/bin/backup --full
|
|
|
@ -1,62 +0,0 @@
|
||||||
# openHAB service options
|
|
||||||
|
|
||||||
#########################
|
|
||||||
## PORTS
|
|
||||||
## The ports openHAB will bind its HTTP/HTTPS web server to.
|
|
||||||
|
|
||||||
OPENHAB_HTTP_PORT=22090
|
|
||||||
#OPENHAB_HTTPS_PORT=8443
|
|
||||||
|
|
||||||
#########################
|
|
||||||
## HTTP(S) LISTEN ADDRESS
|
|
||||||
## The listen address used by the HTTP(S) server.
|
|
||||||
## 0.0.0.0 (default) allows a connection from any location
|
|
||||||
## 127.0.0.1 only allows the local machine to connect
|
|
||||||
|
|
||||||
OPENHAB_HTTP_ADDRESS=127.0.0.1
|
|
||||||
|
|
||||||
#########################
|
|
||||||
## BACKUP DIRECTORY
|
|
||||||
## Set the following variable to specify the backup location.
|
|
||||||
## runtime/bin/backup and runtime/bin/restore will use this path for the zip files.
|
|
||||||
|
|
||||||
#OPENHAB_BACKUPS=/var/lib/openhab/backups
|
|
||||||
|
|
||||||
#########################
|
|
||||||
## JAVA OPTIONS
|
|
||||||
## Additional options for the JAVA_OPTS environment variable.
|
|
||||||
## These will be appended to the execution of the openHAB Java runtime in front of all other options.
|
|
||||||
##
|
|
||||||
## A couple of independent examples:
|
|
||||||
## EXTRA_JAVA_OPTS="-Dgnu.io.rxtx.SerialPorts=/dev/ttyZWAVE:/dev/ttyUSB0:/dev/ttyS0:/dev/ttyS2:/dev/ttyACM0:/dev/ttyAMA0"
|
|
||||||
## EXTRA_JAVA_OPTS="-Djna.library.path=/lib/arm-linux-gnueabihf/ -Duser.timezone=Europe/Berlin -Dgnu.io.rxtx.SerialPorts=/dev/ttyZWave"
|
|
||||||
|
|
||||||
EXTRA_JAVA_OPTS="${extra_java_opts}"
|
|
||||||
|
|
||||||
#########################
|
|
||||||
## OPENHAB DEFAULTS PATHS
|
|
||||||
## The following settings override the default apt/rpm locations and should be used with caution.
|
|
||||||
## openHAB will fail to update itself if you're using different paths.
|
|
||||||
## Only set these if you are testing and are confident in debugging.
|
|
||||||
|
|
||||||
#OPENHAB_HOME=/usr/share/openhab
|
|
||||||
#OPENHAB_CONF=/etc/openhab
|
|
||||||
#OPENHAB_RUNTIME=/usr/share/openhab/runtime
|
|
||||||
#OPENHAB_USERDATA=/var/lib/openhab
|
|
||||||
#OPENHAB_LOGDIR=/var/log/openhab
|
|
||||||
|
|
||||||
#########################
|
|
||||||
## OPENHAB USER AND GROUP
|
|
||||||
## The user and group that takes ownership of openHAB. Only available for init.d systems.
|
|
||||||
## To edit user and group for systemd, see the service file at /usr/lib/systemd/system/openhab.service.
|
|
||||||
|
|
||||||
#OPENHAB_USER=openhab
|
|
||||||
#OPENHAB_GROUP=openhab
|
|
||||||
|
|
||||||
#########################
|
|
||||||
## SYSTEMD START MODE
|
|
||||||
## The Karaf startmode for the openHAB runtime. Only available for systemctl/systemd systems.
|
|
||||||
## Defaults to daemon when unset here. Multiple options can be used without quotes.
|
|
||||||
## debug increases log output. daemon launches the Karaf/openHAB processes.
|
|
||||||
|
|
||||||
#OPENHAB_STARTMODE=debug
|
|
|
@ -1,32 +0,0 @@
|
||||||
extra_java_opts = []
|
|
||||||
|
|
||||||
for opt, value in sorted(node.metadata.get('openhab/java_opts', {}).items()):
|
|
||||||
if value is None:
|
|
||||||
extra_java_opts.append(f'-D{opt}')
|
|
||||||
else:
|
|
||||||
extra_java_opts.append(f'-D{opt}={value}')
|
|
||||||
|
|
||||||
files = {
|
|
||||||
'/etc/default/openhab': {
|
|
||||||
'content_type': 'mako',
|
|
||||||
'context': {
|
|
||||||
'extra_java_opts': ' '.join(extra_java_opts),
|
|
||||||
},
|
|
||||||
'triggers': {
|
|
||||||
'svc_systemd:openhab:restart',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'/etc/backup-pre-hooks.d/40-openhab': {
|
|
||||||
'source': 'backup-pre-hook',
|
|
||||||
'mode': '0755',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
svc_systemd = {
|
|
||||||
'openhab': {
|
|
||||||
'needs': {
|
|
||||||
'pkg_apt:openhab',
|
|
||||||
'pkg_apt:openhab-addons',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -1,55 +0,0 @@
|
||||||
defaults = {
|
|
||||||
'apt': {
|
|
||||||
'packages': {
|
|
||||||
'openjdk-17-jre': {},
|
|
||||||
'openhab': {
|
|
||||||
'needs': {
|
|
||||||
'pkg_apt:openjdk-17-jre',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'openhab-addons': {
|
|
||||||
'needs': {
|
|
||||||
'pkg_apt:openhab',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'repos': {
|
|
||||||
'openhab': {
|
|
||||||
'items': {
|
|
||||||
'deb https://openhab.jfrog.io/artifactory/openhab-linuxpkg stable main',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'backups': {
|
|
||||||
'paths': {
|
|
||||||
'/usr/share/openhab/addons', # not included in openhab backup
|
|
||||||
'/var/lib/openhab',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@metadata_reactor.provides(
|
|
||||||
'nginx/vhosts/openhab',
|
|
||||||
)
|
|
||||||
def nginx(metadata):
|
|
||||||
if not node.has_bundle('nginx'):
|
|
||||||
raise DoNotRunAgain
|
|
||||||
|
|
||||||
return {
|
|
||||||
'nginx': {
|
|
||||||
'vhosts': {
|
|
||||||
'openhab': {
|
|
||||||
'domain': metadata.get('openhab/domain'),
|
|
||||||
'locations': {
|
|
||||||
'/': {
|
|
||||||
'target': 'http://localhost:22090/',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'website_check_path': '/',
|
|
||||||
'website_check_string': 'openHAB',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -4,7 +4,6 @@
|
||||||
from json import loads
|
from json import loads
|
||||||
from subprocess import check_output
|
from subprocess import check_output
|
||||||
|
|
||||||
|
|
||||||
queue_counts = {}
|
queue_counts = {}
|
||||||
|
|
||||||
queue_json = check_output(['sudo', '/usr/sbin/postqueue', '-j'])
|
queue_json = check_output(['sudo', '/usr/sbin/postqueue', '-j'])
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
% for zone in sorted(zones):
|
% for zone in sorted(zones):
|
||||||
zone "${zone}" {
|
zone "${zone}" {
|
||||||
file "/var/lib/powerdns/zones/${zone}";
|
file "/var/lib/powerdns/zones/${zone}";
|
||||||
type native;
|
type master;
|
||||||
};
|
};
|
||||||
% endfor
|
% endfor
|
||||||
|
|
|
@ -20,12 +20,15 @@ setgid=pdns
|
||||||
allow-notify-from=${','.join(sorted(my_primary_servers))}
|
allow-notify-from=${','.join(sorted(my_primary_servers))}
|
||||||
|
|
||||||
slave=yes
|
slave=yes
|
||||||
# FIXME enable once debian stable has 4.1.9
|
% if node.os_version[0] > 10:
|
||||||
#superslave=yes
|
superslave=yes
|
||||||
|
% endif
|
||||||
% else:
|
% else:
|
||||||
api=yes
|
api=yes
|
||||||
api-key=${api_key}
|
api-key=${api_key}
|
||||||
webserver=yes
|
webserver=yes
|
||||||
|
webserver-address=0.0.0.0
|
||||||
|
webserver-allow-from=0.0.0.0/0
|
||||||
|
|
||||||
allow-notify-from=
|
allow-notify-from=
|
||||||
|
|
||||||
|
|
|
@ -5,26 +5,12 @@ from subprocess import check_output
|
||||||
|
|
||||||
zone_path = join(repo.path, 'data', 'powerdns', 'files', 'bind-zones')
|
zone_path = join(repo.path, 'data', 'powerdns', 'files', 'bind-zones')
|
||||||
|
|
||||||
ZONE_HEADER = """
|
nameservers = set()
|
||||||
; _ ____ _ _ _____ _ _ _ _ ____
|
|
||||||
; / \\ / ___| | | |_ _| | | | \\ | |/ ___|
|
|
||||||
; / _ \\| | | |_| | | | | | | | \\| | | _
|
|
||||||
; / ___ \\ |___| _ | | | | |_| | |\\ | |_| |
|
|
||||||
; /_/ \\_\\____|_| |_| |_| \\___/|_| \\_|\\____|
|
|
||||||
;
|
|
||||||
; --> Diese Datei wird von BundleWrap verwaltet! <--
|
|
||||||
|
|
||||||
$TTL 60
|
|
||||||
@ IN SOA ns-1.kunbox.net. hostmaster.kunbox.net. (
|
|
||||||
{serial}
|
|
||||||
3600
|
|
||||||
600
|
|
||||||
86400
|
|
||||||
300
|
|
||||||
)
|
|
||||||
"""
|
|
||||||
for rnode in sorted(repo.nodes_in_group('dns')):
|
for rnode in sorted(repo.nodes_in_group('dns')):
|
||||||
ZONE_HEADER += '@ IN NS {}.\n'.format(rnode.metadata.get('powerdns/my_hostname', rnode.metadata.get('hostname')))
|
if not rnode.metadata.get('powerdns/is_secondary'):
|
||||||
|
# hide the primary nameserver from auto-generated nameserver lists
|
||||||
|
continue
|
||||||
|
nameservers.add(rnode.metadata.get('powerdns/my_hostname', rnode.metadata.get('hostname')))
|
||||||
|
|
||||||
directories = {
|
directories = {
|
||||||
'/etc/powerdns/pdns.d': {
|
'/etc/powerdns/pdns.d': {
|
||||||
|
@ -50,11 +36,11 @@ files = {
|
||||||
'/etc/powerdns/pdns.conf': {
|
'/etc/powerdns/pdns.conf': {
|
||||||
'content_type': 'mako',
|
'content_type': 'mako',
|
||||||
'context': {
|
'context': {
|
||||||
'api_key': node.metadata['powerdns']['api_key'],
|
'api_key': node.metadata.get('powerdns/api_key'),
|
||||||
'my_hostname': node.metadata['powerdns'].get('my_hostname', node.metadata.get('hostname')),
|
'my_hostname': node.metadata.get('powerdns/my_hostname', node.metadata.get('hostname')),
|
||||||
'is_secondary': node.metadata['powerdns'].get('is_secondary', False),
|
'is_secondary': node.metadata.get('powerdns/is_secondary', False),
|
||||||
'my_primary_servers': node.metadata['powerdns'].get('my_primary_servers', set()),
|
'my_primary_servers': node.metadata.get('powerdns/my_primary_servers', set()),
|
||||||
'my_secondary_servers': node.metadata['powerdns'].get('my_secondary_servers', set()),
|
'my_secondary_servers': node.metadata.get('powerdns/my_secondary_servers', set()),
|
||||||
},
|
},
|
||||||
'needs': {
|
'needs': {
|
||||||
'pkg_apt:pdns-server',
|
'pkg_apt:pdns-server',
|
||||||
|
@ -78,7 +64,7 @@ svc_systemd = {
|
||||||
actions = {
|
actions = {
|
||||||
'powerdns_reload_zones': {
|
'powerdns_reload_zones': {
|
||||||
'triggered': True,
|
'triggered': True,
|
||||||
'command': 'pdns_control rediscover; pdns_control reload',
|
'command': 'pdns_control rediscover; pdns_control reload; pdns_control notify \*',
|
||||||
'needs': {
|
'needs': {
|
||||||
'svc_systemd:pdns',
|
'svc_systemd:pdns',
|
||||||
},
|
},
|
||||||
|
@ -102,7 +88,8 @@ if node.metadata.get('powerdns/features/bind', False):
|
||||||
files[f'/var/lib/powerdns/zones/{zone}'] = {
|
files[f'/var/lib/powerdns/zones/{zone}'] = {
|
||||||
'content_type': 'mako',
|
'content_type': 'mako',
|
||||||
'context': {
|
'context': {
|
||||||
'header': ZONE_HEADER.format(serial=serial),
|
'NAMESERVERS': '\n'.join(sorted({f'@ IN NS {ns}.' for ns in nameservers})),
|
||||||
|
'SERIAL': serial,
|
||||||
'metadata_records': node.metadata.get(f'powerdns/bind-zones/{zone}/records', []),
|
'metadata_records': node.metadata.get(f'powerdns/bind-zones/{zone}/records', []),
|
||||||
},
|
},
|
||||||
'source': f'bind-zones/{zone}',
|
'source': f'bind-zones/{zone}',
|
||||||
|
@ -142,12 +129,22 @@ if node.metadata.get('powerdns/features/bind', False):
|
||||||
'action:powerdns_reload_zones',
|
'action:powerdns_reload_zones',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
else:
|
||||||
|
files['/etc/powerdns/named.conf'] = {
|
||||||
|
'delete': True,
|
||||||
|
'needed_by': {
|
||||||
|
'svc_systemd:pdns',
|
||||||
|
},
|
||||||
|
'triggers': {
|
||||||
|
'action:powerdns_reload_zones',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
if node.metadata.get('powerdns/features/pgsql', False):
|
if node.metadata.get('powerdns/features/pgsql', node.has_bundle('postgresql')):
|
||||||
files['/etc/powerdns/pdns.d/pgsql.conf'] = {
|
files['/etc/powerdns/pdns.d/pgsql.conf'] = {
|
||||||
'content_type': 'mako',
|
'content_type': 'mako',
|
||||||
'context': {
|
'context': {
|
||||||
'password': node.metadata['postgresql']['roles']['powerdns']['password'],
|
'password': node.metadata.get('postgresql/roles/powerdns/password'),
|
||||||
},
|
},
|
||||||
'needs': {
|
'needs': {
|
||||||
'pkg_apt:pdns-backend-pgsql',
|
'pkg_apt:pdns-backend-pgsql',
|
||||||
|
@ -163,7 +160,7 @@ if node.metadata.get('powerdns/features/pgsql', False):
|
||||||
files['/etc/powerdns/schema.pgsql.sql'] = {}
|
files['/etc/powerdns/schema.pgsql.sql'] = {}
|
||||||
|
|
||||||
actions['powerdns_load_pgsql_schema'] = {
|
actions['powerdns_load_pgsql_schema'] = {
|
||||||
'command': node.metadata['postgresql']['roles']['powerdns']['password'].format_into('PGPASSWORD={} psql -h 127.0.0.1 -d powerdns -U powerdns -w < /etc/powerdns/schema.pgsql.sql'),
|
'command': node.metadata.get('postgresql/roles/powerdns/password').format_into('PGPASSWORD={} psql -h 127.0.0.1 -d powerdns -U powerdns -w < /etc/powerdns/schema.pgsql.sql'),
|
||||||
'unless': 'sudo -u postgres psql -d powerdns -c "\dt" | grep domains 2>&1 >/dev/null',
|
'unless': 'sudo -u postgres psql -d powerdns -c "\dt" | grep domains 2>&1 >/dev/null',
|
||||||
'needs': {
|
'needs': {
|
||||||
'bundle:postgresql',
|
'bundle:postgresql',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from ipaddress import ip_address, IPv4Address, IPv6Address
|
from ipaddress import IPv4Address, IPv6Address, ip_address
|
||||||
|
|
||||||
from bundlewrap.metadata import atomic
|
from bundlewrap.metadata import atomic
|
||||||
|
|
||||||
|
@ -43,7 +43,11 @@ if node.has_bundle('telegraf'):
|
||||||
defaults['telegraf'] = {
|
defaults['telegraf'] = {
|
||||||
'input_plugins': {
|
'input_plugins': {
|
||||||
'builtin': {
|
'builtin': {
|
||||||
'powerdns': [{}],
|
'powerdns': [{
|
||||||
|
'unix_sockets': [
|
||||||
|
'/var/run/pdns/pdns.controlsocket',
|
||||||
|
],
|
||||||
|
}],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'additional_groups': {
|
'additional_groups': {
|
||||||
|
@ -186,16 +190,16 @@ def hosts_entries_for_all_dns_servers(metadata):
|
||||||
if rnode.name == node.name:
|
if rnode.name == node.name:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
ip = rnode.metadata.get('external_ipv4')
|
found_ips = repo.libs.tools.resolve_identifier(repo, rnode.name)
|
||||||
|
for ip in sorted(found_ips['ipv4']):
|
||||||
if ip:
|
if not ip.is_private:
|
||||||
entries[ip] = {
|
entries[str(ip)] = {
|
||||||
rnode.metadata.get('hostname'),
|
rnode.metadata.get('hostname'),
|
||||||
rnode.name,
|
rnode.name,
|
||||||
}
|
}
|
||||||
|
|
||||||
if rnode.metadata.get('powerdns/my_hostname', None):
|
if rnode.metadata.get('powerdns/my_hostname', None):
|
||||||
entries[ip].add(rnode.metadata.get('powerdns/my_hostname'))
|
entries[str(ip)].add(rnode.metadata.get('powerdns/my_hostname'))
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'hosts': {
|
'hosts': {
|
||||||
|
@ -211,8 +215,9 @@ def firewall(metadata):
|
||||||
return {
|
return {
|
||||||
'firewall': {
|
'firewall': {
|
||||||
'port_rules': {
|
'port_rules': {
|
||||||
'53': atomic(metadata.get('powerdns/restrict-to', {'*'})),
|
'53': atomic(metadata.get('powerdns/restrict-to/dns', {'*'})),
|
||||||
'53/udp': atomic(metadata.get('powerdns/restrict-to', {'*'})),
|
'53/udp': atomic(metadata.get('powerdns/restrict-to/dns', {'*'})),
|
||||||
|
'8081': atomic(metadata.get('powerdns/restrict-to/api', set())),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,10 +36,13 @@ actions = {
|
||||||
'needs': {
|
'needs': {
|
||||||
'directory:/opt/powerdnsadmin', # provided by bundle:users
|
'directory:/opt/powerdnsadmin', # provided by bundle:users
|
||||||
},
|
},
|
||||||
|
'after': {
|
||||||
|
'pkg_apt:',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
'powerdnsadmin_install_deps': {
|
'powerdnsadmin_install_deps': {
|
||||||
'triggered': True,
|
'triggered': True,
|
||||||
'command': '/opt/powerdnsadmin/venv/bin/pip install -r /opt/powerdnsadmin/src/requirements.txt',
|
'command': '/opt/powerdnsadmin/venv/bin/pip install --upgrade psycopg2-binary -r /opt/powerdnsadmin/src/requirements.txt',
|
||||||
'needs': {
|
'needs': {
|
||||||
'action:powerdnsadmin_create_virtualenv',
|
'action:powerdnsadmin_create_virtualenv',
|
||||||
'pkg_apt:',
|
'pkg_apt:',
|
||||||
|
|
|
@ -10,7 +10,6 @@ defaults = {
|
||||||
'libxmlsec1-dev': {},
|
'libxmlsec1-dev': {},
|
||||||
'libxslt1-dev': {},
|
'libxslt1-dev': {},
|
||||||
'pkg-config': {},
|
'pkg-config': {},
|
||||||
'python3-psycopg2': {},
|
|
||||||
'python3-wheel': {},
|
'python3-wheel': {},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import requests
|
|
||||||
from sys import argv
|
from sys import argv
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
INTERFACE = argv[1]
|
INTERFACE = argv[1]
|
||||||
LOCAL_IP = argv[4]
|
LOCAL_IP = argv[4]
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import psycopg2
|
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
from sys import argv, exit
|
from sys import argv, exit
|
||||||
|
|
||||||
|
import psycopg2
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from requests import get
|
|
||||||
from sys import argv, stderr
|
from sys import argv, stderr
|
||||||
|
|
||||||
|
from requests import get
|
||||||
|
|
||||||
try:
|
try:
|
||||||
r = get('http://127.0.0.1:11334/stat')
|
r = get('http://127.0.0.1:11334/stat')
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
from subprocess import check_output
|
|
||||||
from json import loads
|
from json import loads
|
||||||
|
from subprocess import check_output
|
||||||
from sys import stderr
|
from sys import stderr
|
||||||
|
|
||||||
devices = check_output(['smartctl', '--scan']).decode().splitlines()
|
devices = check_output(['smartctl', '--scan']).decode().splitlines()
|
||||||
|
|
|
@ -55,8 +55,9 @@ try:
|
||||||
exit(2)
|
exit(2)
|
||||||
else:
|
else:
|
||||||
print(
|
print(
|
||||||
"Currently installed version {} matches newest release on github".format(
|
"Currently installed version {} matches newest release on {}".format(
|
||||||
current_version
|
current_version,
|
||||||
|
host,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
exit(0)
|
exit(0)
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
#this is actually a python https requests query, its called check_http_wget cause it got replaced
|
#this is actually a python https requests query, its called check_http_wget cause it got replaced
|
||||||
|
|
||||||
from sys import exit
|
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
|
from sys import exit
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ from argparse import ArgumentParser
|
||||||
from subprocess import check_output
|
from subprocess import check_output
|
||||||
from tempfile import TemporaryFile
|
from tempfile import TemporaryFile
|
||||||
|
|
||||||
|
|
||||||
check_filesystem_types = {
|
check_filesystem_types = {
|
||||||
'ext2',
|
'ext2',
|
||||||
'ext3',
|
'ext3',
|
||||||
|
|
|
@ -8,7 +8,10 @@ defaults = {
|
||||||
'monitoring-plugins': {},
|
'monitoring-plugins': {},
|
||||||
'python3-requests': {},
|
'python3-requests': {},
|
||||||
'python3-setuptools': {}, # needed by check_github_for_new_release
|
'python3-setuptools': {}, # needed by check_github_for_new_release
|
||||||
'sysstat': {}, # needed by check_cpu_stats
|
'sysstat': {
|
||||||
|
# legacy
|
||||||
|
'installed': False,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'icinga2_api': {
|
'icinga2_api': {
|
||||||
|
@ -37,7 +40,6 @@ defaults = {
|
||||||
'perl-libwww': {},
|
'perl-libwww': {},
|
||||||
'monitoring-plugins': {},
|
'monitoring-plugins': {},
|
||||||
'python-requests': {},
|
'python-requests': {},
|
||||||
'sysstat': {},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
defaults = {
|
defaults = {
|
||||||
'apt': {
|
'apt': {
|
||||||
'packages': {
|
'packages': {
|
||||||
|
'isc-dhcp-client': {
|
||||||
|
'installed': False,
|
||||||
|
},
|
||||||
'resolvconf': {
|
'resolvconf': {
|
||||||
'installed': False,
|
'installed': False,
|
||||||
},
|
},
|
||||||
|
|
|
@ -5,15 +5,13 @@
|
||||||
# 'localhost'.
|
# 'localhost'.
|
||||||
|
|
||||||
{
|
{
|
||||||
# Cache directories for schedule and realtime data. Mandatory. The parent
|
base_url => Mojo::URL->new('https://${domain}'),
|
||||||
# directory ('/var/cache/travelynx' in this case) must already exist.
|
|
||||||
cache => {
|
cache => {
|
||||||
schedule => '/var/cache/travelynx/iris',
|
schedule => '/var/cache/travelynx/iris',
|
||||||
realtime => '/var/cache/travelynx/iris-rt',
|
realtime => '/var/cache/travelynx/iris-rt',
|
||||||
},
|
},
|
||||||
|
|
||||||
# Database configuration. host and port are optional
|
|
||||||
# (defaulting to localhost:5432), the rest is mandatory.
|
|
||||||
db => {
|
db => {
|
||||||
host => '${database.get('host', 'localhost')}',
|
host => '${database.get('host', 'localhost')}',
|
||||||
port => 5432,
|
port => 5432,
|
||||||
|
@ -22,8 +20,6 @@
|
||||||
password => '${database['password']}',
|
password => '${database['password']}',
|
||||||
},
|
},
|
||||||
|
|
||||||
# See the Mojo::Server::Hypnotoad manual for details on the following
|
|
||||||
# settings.
|
|
||||||
hypnotoad => {
|
hypnotoad => {
|
||||||
accepts => 100,
|
accepts => 100,
|
||||||
clients => 10,
|
clients => 10,
|
||||||
|
@ -34,21 +30,14 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
mail => {
|
mail => {
|
||||||
# If you want to disable outgoing mail for development purposes,
|
|
||||||
# uncomment the following line. Mails will instead be logged as
|
|
||||||
# Mojolicious "info" messages, causing their content to be printed on
|
|
||||||
# stdout.
|
|
||||||
## disabled => 1,
|
|
||||||
|
|
||||||
# Otherwise, specify the sender ("From" field) for mail sent by travelynx
|
|
||||||
# here. E.g. 'Travelynx <mail@example.org>'
|
|
||||||
from => '${mail_from}',
|
from => '${mail_from}',
|
||||||
},
|
},
|
||||||
|
|
||||||
# Secrets used for cookie signing and verification. Must contain at least
|
ref => {
|
||||||
# one random string. If you specify several strings, the first one will
|
issues => 'https://github.com/derf/travelynx/issues',
|
||||||
# be used for signing new cookies, and the remaining ones will still be
|
source => 'https://github.com/derf/travelynx',
|
||||||
# accepted for cookie validation.
|
},
|
||||||
|
|
||||||
secrets => [
|
secrets => [
|
||||||
'${cookie_secret}',
|
'${cookie_secret}',
|
||||||
],
|
],
|
||||||
|
|
|
@ -36,7 +36,7 @@ files = {
|
||||||
},
|
},
|
||||||
'/opt/travelynx/travelynx.conf': {
|
'/opt/travelynx/travelynx.conf': {
|
||||||
'content_type': 'mako',
|
'content_type': 'mako',
|
||||||
'context': node.metadata['travelynx'],
|
'context': node.metadata.get('travelynx'),
|
||||||
'needs': {
|
'needs': {
|
||||||
'git_deploy:/opt/travelynx',
|
'git_deploy:/opt/travelynx',
|
||||||
},
|
},
|
||||||
|
@ -61,7 +61,7 @@ if isfile(join(repo.path, 'data', 'travelynx', 'files', 'imprint', node.name)):
|
||||||
git_deploy = {
|
git_deploy = {
|
||||||
'/opt/travelynx': {
|
'/opt/travelynx': {
|
||||||
'repo': 'https://github.com/derf/travelynx.git',
|
'repo': 'https://github.com/derf/travelynx.git',
|
||||||
'rev': node.metadata['travelynx']['version'],
|
'rev': node.metadata.get('travelynx/version'),
|
||||||
'needs': {
|
'needs': {
|
||||||
'directory:/opt/travelynx',
|
'directory:/opt/travelynx',
|
||||||
},
|
},
|
||||||
|
@ -84,7 +84,7 @@ actions = {
|
||||||
'triggered': True,
|
'triggered': True,
|
||||||
},
|
},
|
||||||
'travelynx_database_migrate': {
|
'travelynx_database_migrate': {
|
||||||
'command': 'cd /opt/travelynx && perl index.pl database migrate',
|
'command': 'export PERL5LIB=/opt/travelynx/local/lib/perl5; cd /opt/travelynx && perl index.pl database migrate',
|
||||||
# Because git_deploy does not put .git onto the server, the script
|
# Because git_deploy does not put .git onto the server, the script
|
||||||
# will complain on STDERR about not finding a git repository.
|
# will complain on STDERR about not finding a git repository.
|
||||||
# That's why we need to redirect stderr to /dev/null.
|
# That's why we need to redirect stderr to /dev/null.
|
||||||
|
|
|
@ -36,6 +36,7 @@ export EDITOR=vim
|
||||||
export VISUAL=vim
|
export VISUAL=vim
|
||||||
|
|
||||||
alias ipb='ip -brief --color=auto'
|
alias ipb='ip -brief --color=auto'
|
||||||
|
alias ipa='ip -brief --color=always addr show; echo; ip --color=always route show; ip -6 --color=always route show'
|
||||||
alias l='ls -lAh'
|
alias l='ls -lAh'
|
||||||
alias s='sudo -i'
|
alias s='sudo -i'
|
||||||
alias v='vim -p'
|
alias v='vim -p'
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from os.path import join, exists
|
from os.path import exists, join
|
||||||
|
|
||||||
files = {
|
files = {
|
||||||
'/etc/bash.bashrc': {
|
'/etc/bash.bashrc': {
|
||||||
|
|
|
@ -3,7 +3,6 @@ from ipaddress import ip_network
|
||||||
from bundlewrap.exceptions import NoSuchNode
|
from bundlewrap.exceptions import NoSuchNode
|
||||||
from bundlewrap.metadata import atomic
|
from bundlewrap.metadata import atomic
|
||||||
|
|
||||||
|
|
||||||
defaults = {
|
defaults = {
|
||||||
'apt': {
|
'apt': {
|
||||||
'packages': {
|
'packages': {
|
||||||
|
|
42
bundles/woodpecker-agent/files/woodpecker-agent.service
Normal file
42
bundles/woodpecker-agent/files/woodpecker-agent.service
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
[Unit]
|
||||||
|
Description=woodpecker ci agent
|
||||||
|
After=syslog.target
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
RestartSec=2s
|
||||||
|
Type=simple
|
||||||
|
User=woodpecker
|
||||||
|
Group=woodpecker
|
||||||
|
WorkingDirectory=/var/lib/woodpecker
|
||||||
|
ExecStart=/usr/local/bin/woodpecker-agent
|
||||||
|
Restart=always
|
||||||
|
ReadWritePaths=/var/lib/woodpecker
|
||||||
|
CapabilityBoundingSet=
|
||||||
|
NoNewPrivileges=true
|
||||||
|
ProtectSystem=strict
|
||||||
|
ProtectHome=true
|
||||||
|
PrivateTmp=true
|
||||||
|
PrivateDevices=true
|
||||||
|
PrivateUsers=true
|
||||||
|
ProtectHostname=true
|
||||||
|
ProtectClock=true
|
||||||
|
ProtectKernelTunables=true
|
||||||
|
ProtectKernelModules=true
|
||||||
|
ProtectKernelLogs=true
|
||||||
|
ProtectControlGroups=true
|
||||||
|
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
|
||||||
|
LockPersonality=true
|
||||||
|
MemoryDenyWriteExecute=true
|
||||||
|
RestrictRealtime=true
|
||||||
|
RestrictSUIDSGID=true
|
||||||
|
PrivateMounts=true
|
||||||
|
SystemCallArchitectures=native
|
||||||
|
SystemCallFilter=~@clock @cpu-emulation @debug @keyring @memlock @module @mount @obsolete @raw-io @reboot @setuid @swap
|
||||||
|
|
||||||
|
% for k, v in sorted(env.items()):
|
||||||
|
Environment=${k}=${v}
|
||||||
|
% endfor
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
43
bundles/woodpecker-agent/items.py
Normal file
43
bundles/woodpecker-agent/items.py
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
version = node.metadata.get('woodpecker-agent/version')
|
||||||
|
|
||||||
|
directories['/var/lib/woodpecker'] = {
|
||||||
|
'owner': 'woodpecker',
|
||||||
|
}
|
||||||
|
|
||||||
|
actions['install_woodpecker-agent'] = {
|
||||||
|
'command': ' && '.join([
|
||||||
|
f'wget -q -O/tmp/woodpecker-agent.deb https://github.com/woodpecker-ci/woodpecker/releases/download/v{version}/woodpecker-agent_{version}_amd64.deb',
|
||||||
|
'dpkg -i /tmp/woodpecker-agent.deb',
|
||||||
|
]),
|
||||||
|
'unless': f'''bash -c "[[ \"$(woodpecker-agent --version | cut -d' ' -f3)\" == "{version}" ]]"''',
|
||||||
|
'triggers': {
|
||||||
|
'svc_systemd:woodpecker-agent:restart',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
files['/usr/local/lib/systemd/system/woodpecker-agent.service'] = {
|
||||||
|
'content_type': 'mako',
|
||||||
|
'context': {
|
||||||
|
'env': node.metadata.get('woodpecker-agent/environment'),
|
||||||
|
},
|
||||||
|
'triggers': {
|
||||||
|
'action:systemd-reload',
|
||||||
|
'svc_systemd:woodpecker-agent:restart',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
svc_systemd['woodpecker-agent'] = {
|
||||||
|
'after': {
|
||||||
|
# to make sure we have docker and other eventual dependencies
|
||||||
|
'pkg_apt:',
|
||||||
|
},
|
||||||
|
'needs': {
|
||||||
|
'action:install_woodpecker-agent',
|
||||||
|
'file:/usr/local/lib/systemd/system/woodpecker-agent.service',
|
||||||
|
'user:woodpecker',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
users['woodpecker'] = {
|
||||||
|
'home': '/var/lib/woodpecker',
|
||||||
|
}
|
30
bundles/woodpecker-agent/metadata.py
Normal file
30
bundles/woodpecker-agent/metadata.py
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
@metadata_reactor.provides(
|
||||||
|
'woodpecker-agent/environment',
|
||||||
|
'woodpecker-agent/version',
|
||||||
|
)
|
||||||
|
def environment(metadata):
|
||||||
|
env = {}
|
||||||
|
server = repo.get_node(metadata.get('woodpecker-agent/server'))
|
||||||
|
|
||||||
|
domain = server.metadata.get('woodpecker-server/domain')
|
||||||
|
port = server.metadata.get('woodpecker-server/environment/WOODPECKER_GRPC_ADDR')
|
||||||
|
env['WOODPECKER_SERVER'] = f'{domain}{port}'
|
||||||
|
|
||||||
|
env['WOODPECKER_AGENT_SECRET'] = server.metadata.get('woodpecker-server/environment/WOODPECKER_AGENT_SECRET')
|
||||||
|
|
||||||
|
env['WOODPECKER_MAX_PROCS'] = int(int(metadata.get('vm/cpu'))/2)
|
||||||
|
|
||||||
|
env['WOODPECKER_HOSTNAME'] = metadata.get('hostname')
|
||||||
|
|
||||||
|
env['WOODPECKER_LOG_LEVEL'] = server.metadata.get('woodpecker-server/environment/WOODPECKER_LOG_LEVEL')
|
||||||
|
|
||||||
|
debug = server.metadata.get('woodpecker-server/environment/GODEBUG', None)
|
||||||
|
if debug:
|
||||||
|
env['GODEBUG'] = debug
|
||||||
|
|
||||||
|
return {
|
||||||
|
'woodpecker-agent': {
|
||||||
|
'environment': env,
|
||||||
|
'version': server.metadata.get('woodpecker-server/version'),
|
||||||
|
},
|
||||||
|
}
|
43
bundles/woodpecker-server/files/woodpecker-server.service
Normal file
43
bundles/woodpecker-server/files/woodpecker-server.service
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
[Unit]
|
||||||
|
Description=woodpecker ci
|
||||||
|
After=syslog.target
|
||||||
|
After=network.target
|
||||||
|
Requires=postgresql.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
RestartSec=2s
|
||||||
|
Type=simple
|
||||||
|
User=woodpecker
|
||||||
|
Group=woodpecker
|
||||||
|
WorkingDirectory=/var/lib/woodpecker
|
||||||
|
ExecStart=/usr/local/bin/woodpecker-server
|
||||||
|
Restart=always
|
||||||
|
ReadWritePaths=/var/lib/woodpecker
|
||||||
|
CapabilityBoundingSet=
|
||||||
|
NoNewPrivileges=true
|
||||||
|
ProtectSystem=strict
|
||||||
|
ProtectHome=true
|
||||||
|
PrivateTmp=true
|
||||||
|
PrivateDevices=true
|
||||||
|
PrivateUsers=true
|
||||||
|
ProtectHostname=true
|
||||||
|
ProtectClock=true
|
||||||
|
ProtectKernelTunables=true
|
||||||
|
ProtectKernelModules=true
|
||||||
|
ProtectKernelLogs=true
|
||||||
|
ProtectControlGroups=true
|
||||||
|
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
|
||||||
|
LockPersonality=true
|
||||||
|
MemoryDenyWriteExecute=true
|
||||||
|
RestrictRealtime=true
|
||||||
|
RestrictSUIDSGID=true
|
||||||
|
PrivateMounts=true
|
||||||
|
SystemCallArchitectures=native
|
||||||
|
SystemCallFilter=~@clock @cpu-emulation @debug @keyring @memlock @module @mount @obsolete @raw-io @reboot @setuid @swap
|
||||||
|
|
||||||
|
% for k, v in sorted(env.items()):
|
||||||
|
Environment=${k}=${v}
|
||||||
|
% endfor
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
41
bundles/woodpecker-server/items.py
Normal file
41
bundles/woodpecker-server/items.py
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
version = node.metadata.get('woodpecker-server/version')
|
||||||
|
|
||||||
|
directories['/var/lib/woodpecker'] = {
|
||||||
|
'owner': 'woodpecker',
|
||||||
|
}
|
||||||
|
|
||||||
|
actions['install_woodpecker-server'] = {
|
||||||
|
'command': ' && '.join([
|
||||||
|
f'wget -q -O/tmp/woodpecker-server.deb https://github.com/woodpecker-ci/woodpecker/releases/download/v{version}/woodpecker-server_{version}_amd64.deb',
|
||||||
|
'dpkg -i /tmp/woodpecker-server.deb',
|
||||||
|
]),
|
||||||
|
'unless': f'''bash -c "[[ \"$(woodpecker-server --version | cut -d' ' -f3)\" == "{version}" ]]"''',
|
||||||
|
'triggers': {
|
||||||
|
'svc_systemd:woodpecker-server:restart',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
files['/usr/local/lib/systemd/system/woodpecker-server.service'] = {
|
||||||
|
'content_type': 'mako',
|
||||||
|
'context': {
|
||||||
|
'env': node.metadata.get('woodpecker-server/environment'),
|
||||||
|
},
|
||||||
|
'triggers': {
|
||||||
|
'action:systemd-reload',
|
||||||
|
'svc_systemd:woodpecker-server:restart',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
svc_systemd['woodpecker-server'] = {
|
||||||
|
'needs': {
|
||||||
|
'action:install_woodpecker-server',
|
||||||
|
'file:/usr/local/lib/systemd/system/woodpecker-server.service',
|
||||||
|
'postgres_db:woodpecker',
|
||||||
|
'postgres_role:woodpecker',
|
||||||
|
'user:woodpecker',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
users['woodpecker'] = {
|
||||||
|
'home': '/var/lib/woodpecker',
|
||||||
|
}
|
98
bundles/woodpecker-server/metadata.py
Normal file
98
bundles/woodpecker-server/metadata.py
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
from bundlewrap.metadata import atomic
|
||||||
|
|
||||||
|
defaults = {
|
||||||
|
'postgresql': {
|
||||||
|
'roles': {
|
||||||
|
'woodpecker': {
|
||||||
|
'password': repo.vault.password_for(f'{node.name} postgresql woodpecker'),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'databases': {
|
||||||
|
'woodpecker': {
|
||||||
|
'owner': 'woodpecker',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'woodpecker-server': {
|
||||||
|
'environment': {
|
||||||
|
'WOODPECKER_AGENT_SECRET': repo.vault.password_for(f'{node.name} WOODPECKER_AGENT_SECRET'),
|
||||||
|
'WOODPECKER_DATABASE_DATASOURCE': repo.vault.password_for(f'{node.name} postgresql woodpecker').format_into(
|
||||||
|
'postgres://woodpecker:{}@localhost/woodpecker?sslmode=disable'
|
||||||
|
),
|
||||||
|
'WOODPECKER_DATABASE_DRIVER': 'postgres',
|
||||||
|
'WOODPECKER_GRPC_ADDR': ':22101',
|
||||||
|
'WOODPECKER_LOG_LEVEL': 'warn',
|
||||||
|
'WOODPECKER_OPEN': 'true',
|
||||||
|
'WOODPECKER_SERVER_ADDR': ':22100',
|
||||||
|
|
||||||
|
# https://github.com/woodpecker-ci/woodpecker/issues/1497
|
||||||
|
# https://github.com/woodpecker-ci/woodpecker/issues/748
|
||||||
|
'GODEBUG': 'netdns=go'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@metadata_reactor.provides(
|
||||||
|
'nginx/vhosts/woodpecker-server',
|
||||||
|
'woodpecker-server/environment/WOODPECKER_HOST',
|
||||||
|
)
|
||||||
|
def nginx(metadata):
|
||||||
|
if not node.has_bundle('nginx'):
|
||||||
|
raise DoNotRunAgain
|
||||||
|
|
||||||
|
ssl = metadata.get('nginx/vhosts/woodpecker-server/ssl', 'letsencrypt')
|
||||||
|
domain = metadata.get('woodpecker-server/domain')
|
||||||
|
prefix = 'https' if ssl else 'http'
|
||||||
|
|
||||||
|
return {
|
||||||
|
'nginx': {
|
||||||
|
'vhosts': {
|
||||||
|
'woodpecker-server': {
|
||||||
|
'domain': domain,
|
||||||
|
'locations': {
|
||||||
|
'/': {
|
||||||
|
'target': 'http://127.0.0.1:22100',
|
||||||
|
'additional_config': {
|
||||||
|
'proxy_redirect off',
|
||||||
|
'chunked_transfer_encoding off',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'/metrics': {
|
||||||
|
'return': 403,
|
||||||
|
},
|
||||||
|
'/debug': {
|
||||||
|
'return': 403,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'website_check_path': '/do-login',
|
||||||
|
'website_check_string': 'Woodpecker',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'woodpecker-server': {
|
||||||
|
'environment': {
|
||||||
|
'WOODPECKER_HOST': f'{prefix}://{domain}',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@metadata_reactor.provides(
|
||||||
|
'firewall/port_rules',
|
||||||
|
)
|
||||||
|
def firewall(metadata):
|
||||||
|
port = metadata.get('woodpecker-server/environment/WOODPECKER_GRPC_ADDR')[1:]
|
||||||
|
agents = set()
|
||||||
|
|
||||||
|
for node in repo.nodes:
|
||||||
|
if node.has_bundle('woodpecker-agent'):
|
||||||
|
agents.add(node.name)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'firewall': {
|
||||||
|
'port_rules': {
|
||||||
|
port: atomic(agents),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
|
@ -1,9 +1,9 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
|
||||||
|
import re
|
||||||
from subprocess import check_output
|
from subprocess import check_output
|
||||||
from sys import argv, exit
|
from sys import argv, exit
|
||||||
import re
|
|
||||||
|
|
||||||
|
|
||||||
def to_bytes(size):
|
def to_bytes(size):
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from json import loads
|
from json import loads
|
||||||
from subprocess import check_call, check_output
|
from subprocess import check_call, check_output
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
from json import dumps
|
from json import dumps
|
||||||
#from os.path import join
|
|
||||||
|
|
||||||
from bundlewrap.metadata import MetadataJSONEncoder
|
from bundlewrap.metadata import MetadataJSONEncoder
|
||||||
|
|
||||||
|
|
62
data/apt/files/gpg-keys/docker.asc
Normal file
62
data/apt/files/gpg-keys/docker.asc
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
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
|
||||||
|
YT90qFF93M3v01BbxP+EIY2/9tiIPbrd
|
||||||
|
=0YYh
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
|
@ -1,52 +1,29 @@
|
||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
Version: GnuPG v1
|
|
||||||
|
|
||||||
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
|
=YwXc
|
||||||
nIK5yiU6GkS3IFaQg2T9/tOBKxm0ZJPfqTXbT4jFSfvYJ3oUqc+AyYxtb8gj1GRk
|
|
||||||
X283/86/bA3C98u7re1vPtiDRyM8r0+lhEc59Yx/EAOL+X2gZyTgyUoH+LLuOWQK
|
|
||||||
s1egI8y80R8NZfM1nMiQk2ywMsTFwQjSVimScvzqv5Nt8k8CvHUQ3a6R+6doXGNX
|
|
||||||
5RnUqn9Qvmh0JY5sNgFsoaGbuk2PJrVaGBRnfnjaDqAlZpDhwkWhcCcguNhRbRHp
|
|
||||||
N7/a0pQr70bAG9VikzLyGC17EU0sxney/hyNHkr4Uyy2OXHpuJvRjVKy/BwZ3fxA
|
|
||||||
AYX2oZIOxQB3/OulzO/DppaCVhRtp1bt+Z5f+fpisiVb5DvZcMdeyAoQ4+oOr7v3
|
|
||||||
EasIs2XYcQ+kOE3Y2kdlHWBeuXzxgWgJZ1OOpwGMjR3Uy6IwhuSWtreJBA4er+Df
|
|
||||||
vgSPwKBsRLNLbPe3ftjArnC5GfMiGgikVdAUdN4OkEqvUbkRoAVGKTOMLUKm+ZkG
|
|
||||||
OskJOVYS+JAina0qkYEFF7haycMjf9olhqLmTIC+6X7Ox9R2plaOhQARAQABiQIf
|
|
||||||
BBgBCgAJBQJWCZsEAhsMAAoJEGhKFM8lguDF8ZIP/1q9Sdz8oMvf9AJXZ7AYxm77
|
|
||||||
V+kJzJqi62nZLWJnrFXDZJpU+LkYlb3fstsZ1rvBhnrEPSmFxoj72CP0RtcyX7wJ
|
|
||||||
dA7K1Fl9LpJi5H8300cC7UyG94MUYbrXijbLTbnFTfNr1tGx4a1T/7Yyxx/wZGrT
|
|
||||||
H/X8cvNybkl33SxDdlQQ9kx3lFOwC41e3TkGsUWxn3TCfvDh8VdA6Py6JeSPFGOb
|
|
||||||
MEO2/q7oUgvjfV+ivN5ayZi9bWgeqm1sgtmTHHQ4RqwwKrAb5ynXpn1b9QrkevgT
|
|
||||||
b91uzMA22Prl4DuzKiaMYDcZOQ3vtf0eFBP0GOSSgUKS4bQ3dGgi1JmQ7VuAM4uj
|
|
||||||
+Ug5TnGoLwclTwLksc7v89C5MMPgm2vVXvCUDzyzQA7bIHFeX+Rziby4nymec4Nr
|
|
||||||
eeXYNBJWrEp8XR7UNWmEgroXRoN1x9/6esh5pnoUXGAIWuKzSLQM70/wWxS67+v2
|
|
||||||
aC1GNb+pXXAzYeIIiyLWaZwCSr8sWMvshFT9REk2+lnb6sAeJswQtfTUWI00mVqZ
|
|
||||||
dvI3Wys2h0IyIejuwetTUvGhr9VgpqiLLfGzGlt/y2sg27wdHzSJbMh0VrVAK26/
|
|
||||||
BlvEwWDCFT0ZJUMG9Lvre25DD0ycbougLsRYjzmGb/3k3UktS3XTCxyBa/k3TPw3
|
|
||||||
vqIHrEqk446nGPDqJPS5
|
|
||||||
=9iF7
|
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
||||||
|
|
||||||
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
|
|
||||||
Yyq3xLVDG/Zs7LmgSAiEITxRFTR4qg7k
|
|
||||||
=r37a
|
|
||||||
-----END PGP PUBLIC KEY BLOCK-----
|
|
1
data/backup/keys/ns-primary.key.vault
Normal file
1
data/backup/keys/ns-primary.key.vault
Normal file
|
@ -0,0 +1 @@
|
||||||
|
encrypt$gAAAAABj1jTasX0XOFRWh7F0pxNgMoJIjrblvqOM8ohGVCsvVyMEQDiOmGaJCs9lW-lbeghlzRpiC8P7CNot6OOeNXBYWmxN_HgN3J2p6Q5-XoSJ62NUJWQNRNNENuiN1Yy0g0MREk4gVsNh8-VeoXuKgyLEXJQJI-SYLzl8faZoBnQGTK4FbTAiN6KSB4EbTPwxx-8dYp8kNIj4ipBjkQKNu-mXuVvdnf5fTUwTCQx6rz7yjlp7DOPuSJDASg5bE33dd8gt89grW5vBKeEnQsi7hpJCJF5vNfRay89IKfjf6UqxJHKCmS2tIWQ9Kz4Tv41MnNR0-jvnULq7TWcnqwo_SKb8JRLUA3dH2wLiOUu7aApYSkeSNiul2ILCtBPsjY_eWzqdd3tkpJBErOcFVe2mdjVRSIUOXTM_T3nNWCJgn5TxD4qbHklZoCaM6Ey9P_yQj-sSRGizgcDhGiqY8xJNmwbWz9IH5a_Fs6iRVhAh6VzSa1ZAKxcum87dj-KVA_SjG9hy7Dy28xK0D4NoSpYFOkEz4VHpa1tP0t8QJ2WtQiw-qjHFzokkIINEUKUPIBg6t_5oedJ24YMnyyzBZ2_uQ1HFVFjBx-7Iw73bTPNluVwXkobzEnrYFwDsEXGE6tR0HjbteNxj
|
1
data/backup/keys/ns-primary.pub
Normal file
1
data/backup/keys/ns-primary.pub
Normal file
|
@ -0,0 +1 @@
|
||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL+FCn1sWP74+lVAyaXDpXxCCauh6LC2KEJmIMhDEYvJ kunsi@kunsi-p14s.kunbox.net
|
|
@ -1,9 +0,0 @@
|
||||||
${header}
|
|
||||||
|
|
||||||
$ORIGIN cybert-media.net.
|
|
||||||
|
|
||||||
@ IN A 159.69.11.231
|
|
||||||
IN AAAA 2a01:4f8:c2c:c410::1
|
|
||||||
IN TXT "v=spf1 a ~all"
|
|
||||||
|
|
||||||
www IN CNAME cybert-media.net.
|
|
|
@ -1,9 +0,0 @@
|
||||||
${header}
|
|
||||||
|
|
||||||
$ORIGIN die-brontosaurier-waren-es.org.
|
|
||||||
|
|
||||||
; ends up on rx300.kunbox.net
|
|
||||||
@ IN A 31.47.232.106
|
|
||||||
IN AAAA 2a00:f820:528::2
|
|
||||||
IN MX 10 rx300.kunbox.net.
|
|
||||||
IN TXT "v=spf1 mx ~all"
|
|
|
@ -1,3 +0,0 @@
|
||||||
${header}
|
|
||||||
|
|
||||||
$ORIGIN emails.sexy.
|
|
|
@ -1,9 +0,0 @@
|
||||||
${header}
|
|
||||||
|
|
||||||
$ORIGIN eskalation.jetzt.
|
|
||||||
|
|
||||||
|
|
||||||
queere IN NS ns1.athena7.eu.
|
|
||||||
queere IN NS ns2.athena7.eu.
|
|
||||||
queere IN NS ns3.athena7.eu.
|
|
||||||
queere IN NS ns4.athena7.eu.
|
|
|
@ -1,5 +0,0 @@
|
||||||
${header}
|
|
||||||
|
|
||||||
$ORIGIN felix-kunsmann.de.
|
|
||||||
|
|
||||||
@ IN MX 10 rx300.kunbox.net.
|
|
|
@ -1,15 +0,0 @@
|
||||||
${header}
|
|
||||||
|
|
||||||
$ORIGIN flauschehorn.sexy.
|
|
||||||
|
|
||||||
@ IN A 5.189.140.103
|
|
||||||
IN AAAA 2a02:c207:3002:8320:feed:f2c1:c0ff:ee
|
|
||||||
IN MX 10 rx300.kunbox.net.
|
|
||||||
IN TXT "v=spf1 mx ~all"
|
|
||||||
|
|
||||||
_dmarc IN TXT "v=DMARC1; p=quarantine; rua=mailto:hostmaster@kunbox.net; ruf=mailto:postmaster@kunsmann.eu; fo=0:d:s; adkim=r; aspf=r"
|
|
||||||
|
|
||||||
uO4aNejDvVdw8BKne3KJIqAvCQMJ0416._domainkey IN TXT ( "v=DKIM1; k=rsa; "
|
|
||||||
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnh5Ym9PO7r+wdOIKfopvHzn3KU3qT6IlCG/gvvbmIqoeFQfRbAe3gQmcG6RcLue55cJQGhI6y2r0lm59ZeoHR40aM+VabAOlplekM7xWmoXb/9vG2OZLIqAyF4I+7GQmTN6B9keBHp9SWtDUkI0B0G9neZ5MkXJP705M0duxritqQlb4YvCZwteHiyckKcg9aE9j+GF2EEawBoVDp"
|
|
||||||
"oveoB3+wgde3lWEUjjwKFtXNXxuN354o6jgXgPNWtIEdPMLfK/o0CaCjZNlzaLTsTegY/+67hdHFqDmm8zXO9s+Xiyfq7CVq21t7wDhQ2W1agj+up6lH82FMh5rZNxJ6XB0yQIDAQAB"
|
|
||||||
) ;
|
|
|
@ -1,43 +0,0 @@
|
||||||
${header}
|
|
||||||
|
|
||||||
$ORIGIN franzi.business.
|
|
||||||
|
|
||||||
; ends up on rx300.kunbox.net
|
|
||||||
@ IN A 31.47.232.106
|
|
||||||
IN AAAA 2a00:f820:528::2
|
|
||||||
IN MX 10 rx300.kunbox.net.
|
|
||||||
IN TXT "v=spf1 mx a:sewfile.htz-cloud.kunbox.net ~all"
|
|
||||||
|
|
||||||
chat IN CNAME rx300.kunbox.net.
|
|
||||||
dimension IN CNAME rx300.kunbox.net.
|
|
||||||
git IN CNAME rx300.kunbox.net.
|
|
||||||
jenkins IN CNAME rx300.kunbox.net.
|
|
||||||
matrix IN CNAME rx300.kunbox.net.
|
|
||||||
mta-sts IN CNAME rx300.kunbox.net.
|
|
||||||
netbox IN CNAME rx300.kunbox.net.
|
|
||||||
sewfile IN CNAME sewfile.htz-cloud.kunbox.net.
|
|
||||||
paste IN CNAME rx300.kunbox.net.
|
|
||||||
postfixadmin IN CNAME rx300.kunbox.net.
|
|
||||||
radicale IN CNAME rx300.kunbox.net.
|
|
||||||
rss IN CNAME rx300.kunbox.net.
|
|
||||||
status IN CNAME icinga2.ovh.kunbox.net.
|
|
||||||
tickets IN CNAME franzi-business.cname.pretix.eu.
|
|
||||||
travelynx IN CNAME rx300.kunbox.net.
|
|
||||||
unicornsden IN CNAME rx300.kunbox.net.
|
|
||||||
wiki IN CNAME rx300.kunbox.net.
|
|
||||||
|
|
||||||
_matrix._tcp IN SRV 10 10 443 matrix
|
|
||||||
|
|
||||||
_dmarc IN TXT "v=DMARC1; p=quarantine; rua=mailto:hostmaster@kunbox.net; ruf=mailto:postmaster@kunsmann.eu; fo=0:d:s; adkim=r; aspf=r"
|
|
||||||
_mta-sts IN TXT "v=STSv1;id=20201111;"
|
|
||||||
_smtp._tls IN TXT "v=TLSRPTv1;rua=mailto:hostmaster@kunbox.net"
|
|
||||||
_token._dnswl IN TXT "gg3mbwjx9bbuo5osvh7oz6bc881wcmc"
|
|
||||||
|
|
||||||
2019._domainkey IN TXT ( "v=DKIM1; k=rsa; "
|
|
||||||
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwkg6UAcu3V98hal1UVf6yB0WT1CKDS0AK83CUlSP8bUwraPxkxK1nkQOUsmjbQs6a3FhdsKprMi32GeUaTVvZg81JIybPk3jNugfNWfSjs2TXPomYu+XD2pmmbR3cZlzC5NGR2nmBFt/P/S2ihPHj35KziiBIwK1TdvOi1M2+upCjK33Icco0ByCm0gJpD2O0cbqcBcUKqd6X440"
|
|
||||||
"vYhNXH1ygp0e91P0iRnvS9sg6yD0xjD8kD6j/8GfxBY+9bpU3EvDoBgyJSbjw5b6PUVJbKMXzw1NIRNj0SXKs5BakjS8+7u62vR11IPCYRwy+yr0rDT0tNegM7gStIIgoTpOoQIDAQAB"
|
|
||||||
) ;
|
|
||||||
uO4aNejDvVdw8BKne3KJIqAvCQMJ0416._domainkey IN TXT ( "v=DKIM1; k=rsa; "
|
|
||||||
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnh5Ym9PO7r+wdOIKfopvHzn3KU3qT6IlCG/gvvbmIqoeFQfRbAe3gQmcG6RcLue55cJQGhI6y2r0lm59ZeoHR40aM+VabAOlplekM7xWmoXb/9vG2OZLIqAyF4I+7GQmTN6B9keBHp9SWtDUkI0B0G9neZ5MkXJP705M0duxritqQlb4YvCZwteHiyckKcg9aE9j+GF2EEawBoVDp"
|
|
||||||
"oveoB3+wgde3lWEUjjwKFtXNXxuN354o6jgXgPNWtIEdPMLfK/o0CaCjZNlzaLTsTegY/+67hdHFqDmm8zXO9s+Xiyfq7CVq21t7wDhQ2W1agj+up6lH82FMh5rZNxJ6XB0yQIDAQAB"
|
|
||||||
) ;
|
|
|
@ -1,4 +1,14 @@
|
||||||
${header}
|
$TTL 60
|
||||||
|
@ IN SOA ns-primary.kunbox.net. hostmaster.kunbox.net. (
|
||||||
|
${SERIAL}
|
||||||
|
3600
|
||||||
|
600
|
||||||
|
86400
|
||||||
|
300
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
${NAMESERVERS}
|
||||||
|
|
||||||
$ORIGIN kunbox.net.
|
$ORIGIN kunbox.net.
|
||||||
|
|
||||||
|
@ -10,6 +20,10 @@ $ORIGIN kunbox.net.
|
||||||
IN MX 10 rx300
|
IN MX 10 rx300
|
||||||
IN TXT "v=spf1 mx ~all"
|
IN TXT "v=spf1 mx ~all"
|
||||||
|
|
||||||
|
; delegate acme stuff to psql-managed zone
|
||||||
|
_acme-challenge IN CNAME _acme-challenge.kunbox.net.le.kunbox.net.
|
||||||
|
_acme-challenge.home IN CNAME _acme-challenge.home.kunbox.net.le.kunbox.net.
|
||||||
|
|
||||||
; Mail servers
|
; Mail servers
|
||||||
mta-sts IN CNAME rx300
|
mta-sts IN CNAME rx300
|
||||||
|
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
${header}
|
|
||||||
|
|
||||||
$ORIGIN kunsmann.eu.
|
|
||||||
|
|
||||||
; ends up on rx300.kunbox.net
|
|
||||||
@ IN A 31.47.232.106
|
|
||||||
IN AAAA 2a00:f820:528::2
|
|
||||||
IN MX 10 rx300.kunbox.net.
|
|
||||||
IN TXT "v=spf1 mx ~all"
|
|
||||||
|
|
||||||
git IN CNAME rx300.kunbox.net.
|
|
||||||
grafana IN CNAME influxdb.htz-cloud.kunbox.net.
|
|
||||||
icinga IN CNAME icinga2.ovh.kunbox.net.
|
|
||||||
influxdb IN CNAME influxdb.htz-cloud.kunbox.net.
|
|
||||||
luther-ps IN CNAME luther.htz-cloud.kunbox.net.
|
|
||||||
mta-sts IN CNAME rx300.kunbox.net.
|
|
||||||
statusmonitor.icinga IN CNAME icinga2.ovh.kunbox.net.
|
|
||||||
|
|
||||||
_dmarc IN TXT "v=DMARC1; p=quarantine; rua=mailto:hostmaster@kunbox.net; ruf=mailto:postmaster@kunsmann.eu; fo=0:d:s; adkim=r; aspf=r"
|
|
||||||
_mta-sts IN TXT "v=STSv1;id=20201111;"
|
|
||||||
_smtp._tls IN TXT "v=TLSRPTv1;rua=mailto:hostmaster@kunbox.net"
|
|
||||||
_token._dnswl IN TXT "5mx0rv9ru8s1zz4tf4xlt48osh09czmg"
|
|
||||||
|
|
||||||
2019._domainkey IN TXT ( "v=DKIM1; k=rsa; "
|
|
||||||
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwkg6UAcu3V98hal1UVf6yB0WT1CKDS0AK83CUlSP8bUwraPxkxK1nkQOUsmjbQs6a3FhdsKprMi32GeUaTVvZg81JIybPk3jNugfNWfSjs2TXPomYu+XD2pmmbR3cZlzC5NGR2nmBFt/P/S2ihPHj35KziiBIwK1TdvOi1M2+upCjK33Icco0ByCm0gJpD2O0cbqcBcUKqd6X440"
|
|
||||||
"vYhNXH1ygp0e91P0iRnvS9sg6yD0xjD8kD6j/8GfxBY+9bpU3EvDoBgyJSbjw5b6PUVJbKMXzw1NIRNj0SXKs5BakjS8+7u62vR11IPCYRwy+yr0rDT0tNegM7gStIIgoTpOoQIDAQAB"
|
|
||||||
) ;
|
|
||||||
uO4aNejDvVdw8BKne3KJIqAvCQMJ0416._domainkey IN TXT ( "v=DKIM1; k=rsa; "
|
|
||||||
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnh5Ym9PO7r+wdOIKfopvHzn3KU3qT6IlCG/gvvbmIqoeFQfRbAe3gQmcG6RcLue55cJQGhI6y2r0lm59ZeoHR40aM+VabAOlplekM7xWmoXb/9vG2OZLIqAyF4I+7GQmTN6B9keBHp9SWtDUkI0B0G9neZ5MkXJP705M0duxritqQlb4YvCZwteHiyckKcg9aE9j+GF2EEawBoVDp"
|
|
||||||
"oveoB3+wgde3lWEUjjwKFtXNXxuN354o6jgXgPNWtIEdPMLfK/o0CaCjZNlzaLTsTegY/+67hdHFqDmm8zXO9s+Xiyfq7CVq21t7wDhQ2W1agj+up6lH82FMh5rZNxJ6XB0yQIDAQAB"
|
|
||||||
) ;
|
|
|
@ -1,4 +0,0 @@
|
||||||
${header}
|
|
||||||
|
|
||||||
$ORIGIN trans-agenda.de.
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
${header}
|
|
||||||
|
|
||||||
$ORIGIN trans-agenda.eu.
|
|
||||||
|
|
||||||
@ IN MX 10 rx300.kunbox.net.
|
|
||||||
IN TXT "v=spf1 a mx ~all"
|
|
||||||
|
|
||||||
mta-sts IN CNAME rx300.kunbox.net.
|
|
||||||
|
|
||||||
_dmarc IN TXT "v=DMARC1; p=quarantine; rua=mailto:hostmaster@kunbox.net; ruf=mailto:postmaster@kunsmann.eu; fo=0:d:s; adkim=r; aspf=r"
|
|
||||||
_mta-sts IN TXT "v=STSv1;id=20201111;"
|
|
||||||
_smtp._tls IN TXT "v=TLSRPTv1;rua=mailto:hostmaster@kunbox.net"
|
|
||||||
_token._dnswl IN TXT "5mx0rv9ru8s1zz4tf4xlt48osh09czmg"
|
|
||||||
|
|
||||||
2019._domainkey IN TXT ( "v=DKIM1; k=rsa; "
|
|
||||||
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwkg6UAcu3V98hal1UVf6yB0WT1CKDS0AK83CUlSP8bUwraPxkxK1nkQOUsmjbQs6a3FhdsKprMi32GeUaTVvZg81JIybPk3jNugfNWfSjs2TXPomYu+XD2pmmbR3cZlzC5NGR2nmBFt/P/S2ihPHj35KziiBIwK1TdvOi1M2+upCjK33Icco0ByCm0gJpD2O0cbqcBcUKqd6X440"
|
|
||||||
"vYhNXH1ygp0e91P0iRnvS9sg6yD0xjD8kD6j/8GfxBY+9bpU3EvDoBgyJSbjw5b6PUVJbKMXzw1NIRNj0SXKs5BakjS8+7u62vR11IPCYRwy+yr0rDT0tNegM7gStIIgoTpOoQIDAQAB"
|
|
||||||
) ;
|
|
||||||
uO4aNejDvVdw8BKne3KJIqAvCQMJ0416._domainkey IN TXT ( "v=DKIM1; k=rsa; "
|
|
||||||
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnh5Ym9PO7r+wdOIKfopvHzn3KU3qT6IlCG/gvvbmIqoeFQfRbAe3gQmcG6RcLue55cJQGhI6y2r0lm59ZeoHR40aM+VabAOlplekM7xWmoXb/9vG2OZLIqAyF4I+7GQmTN6B9keBHp9SWtDUkI0B0G9neZ5MkXJP705M0duxritqQlb4YvCZwteHiyckKcg9aE9j+GF2EEawBoVDp"
|
|
||||||
"oveoB3+wgde3lWEUjjwKFtXNXxuN354o6jgXgPNWtIEdPMLfK/o0CaCjZNlzaLTsTegY/+67hdHFqDmm8zXO9s+Xiyfq7CVq21t7wDhQ2W1agj+up6lH82FMh5rZNxJ6XB0yQIDAQAB"
|
|
||||||
) ;
|
|
|
@ -1,3 +0,0 @@
|
||||||
${header}
|
|
||||||
|
|
||||||
$ORIGIN warnochwas.de.
|
|
|
@ -1,27 +1,27 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
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
|
||||||
ssU+fmyZoeNBV6q8xw==
|
G47QSheqKqJnHOCL0hA=
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
encrypt$gAAAAABjZ10m0BnUbl5777KN6VHf6uAdtcs15-osbqRoQq6epRuWllD-ziy_2N7BrOkRcmfSJaB8zZ1l1bLD6ws3SlI7jvbkahvWnuKinkGiE30SGGjqr6MY_NJGawdox8OJWrsWLFYJJjrePl_mmVtx9G41oBreKizj1YPswzbzsFociJ0zF0xlx99sjjLxRB5PEaI3fwK1eXDmODGZ__dwKxINGSB2zxPb10Vwtnsp3cmaUiKh1TfIghQAm523cAuHPys1-tNXuJpvhPY3tIxB5gHZYiBXMzcS64mD1KqEubsnplxQlK-N_mJ7Q6n0xReG00pqvm5twRI5g7PoHYLH7nZI7KYOSI2XMAS7gP6Uy-H60BQKAHXuX4yutznVRJspv0wa4kfW9vcBfFECBhFeC8tAAkgAc-NvAsDYk6tYSi2k3N2zXsiyHy0NL-JMnUEicQT3YZNnfkoYqjuxwFbQvgtZZun38w==
|
encrypt$gAAAAABj1gankGocRRCdH6WqCUFJ6UtA1f07KpXYh4KcelenJv0ZbQ98f2nwIk29iXWEIsS9FTiRyEG95u_Lmm_p7GbKCMDSIZfZgAC2I3tp_BxZPerhEkwxTT_BjEYHRjMDFrzwoAypTO1Mj_XiT_CYvAZptHI3MZcI9QwPVw-CMJ4KqzG-IztkW8KVnuM7agiBdUt4IYkLyeZ0IoL4nOIWANtdM-y4rILv6N7WIMw6dgsSvLPEQR-PYdNLq866IR0-yFGOfYcQKOvpBqAt6A69E6JxSm3AakaJaS75QYF2lzGVjTfrFoGz60LUjC60KuTsu3dUckGUm7JEq1BSMxvc5b_a6pCazvoAnM0gbtbM_DjL0phLj7VWZEg-_1CHfc2S0-UxbxBjLKJ3NPPs93_En5RWxqxkhvvZgxzWJqQWP2eBprge8Q_EEXkMbxumVVx9Ymdynlw2AgkQhVVJIu_vnsZ4Uc8vIA==
|
|
@ -1,27 +1,27 @@
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
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
|
||||||
sc1/2y3z9deYm4qHw/w=
|
cK9weiaIniziAnEjUr4=
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
encrypt$gAAAAABjZ10mtywN2Tx7b0-sZywDVcNo5gQbnzjwlMjQPktMwmRBwGMbQVcwuGhhopu5vd4Ztw8aGO5lf-SQmLWgdpR4aIrPNx1Iu4urF2LMV-BMLSgmF85ADQzlbiBvrzGAnIoVUjwXYyGj1Wst4feWMKBDc_kThinYhSplMZ_yjEbMj0eMGRzjSclkvAm24KWi7l_LQAklRELuQQyopHDo47AxehNI-nvLfO0FfXZJpkdrMV1V8lSqyXwBSW3McJKH8bbmVEX8qq-mNntBNpe3n5V2ninj72aC0D572hfMp-jKC6xccf-CqnmX1qaWGGj1yiFDdBxfOSU-kO6204BVtfspMtkI75YAYE_7aA-GUiHfXaNHvDhf2uMb8ssbJUdvGS_oLx1qnKiyeyJ6RRhl71xxXjNEo0hPYYY1BGj6hjq30R8aGknkQNCjyCD87Sc7qh95KpMmY4d82xI70xeS4mk8hEgCow==
|
encrypt$gAAAAABj1kcBpq8c_Ez3JkYJIB0evClkcblewwzBEbl4rfcd-3Z2xFlQ8OggIxGdlLGWjIN_ZBaENvXcqy4ZYlwpXgqrZJpBao8WyovZiKLK759r8qVRjbIBvHnH90t_JZ3-MydlpD1mUzHUy5oQq5Qn8jLoRTzHE2TM8VyhaBkMVQ9gacHdqNGW6dsvCRzXCQM1CNqs8pyc8nQxdARjv_FGwSeZlCxcYPSLEBeE-Hf-wJyVWnG7oyq9XKUyI8NWLPQNwWUjzMgKwumtDh21goRsSRAtLLFmqE_iU1IyZYwNh4J3SBMZKBl0fATtHXhnW1_k-RA1-l54PFMTR0KgS-uxYtqZ1Az0t1KEfEvyzfHAQLJ8RIwOOVtPNUvhSiMHr3jG0WpxymilOLfjFpnCZ8E_CA6L8hmytXEBfoM4ZHMCWzOIe_9tIKcMS146NOzaPnCXpKFganNuvV_S7zEn33zv-jYEHD4d8A==
|
|
@ -12,10 +12,6 @@ groups['dns'] = {
|
||||||
},
|
},
|
||||||
'metadata': {
|
'metadata': {
|
||||||
'powerdns': {
|
'powerdns': {
|
||||||
'features': {
|
|
||||||
'bind': True,
|
|
||||||
'pgsql': True,
|
|
||||||
},
|
|
||||||
# Overridden in node metadata for primary server
|
# Overridden in node metadata for primary server
|
||||||
'is_secondary': True,
|
'is_secondary': True,
|
||||||
},
|
},
|
||||||
|
|
|
@ -71,7 +71,6 @@ groups['debian'] = {
|
||||||
'bundles': {
|
'bundles': {
|
||||||
'apt',
|
'apt',
|
||||||
'backup-client',
|
'backup-client',
|
||||||
'molly-guard',
|
|
||||||
},
|
},
|
||||||
'os': 'debian',
|
'os': 'debian',
|
||||||
'pip_command': 'pip3',
|
'pip_command': 'pip3',
|
||||||
|
|
|
@ -2,6 +2,7 @@ from bundlewrap.exceptions import BundleError
|
||||||
from bundlewrap.utils.text import bold, green, yellow
|
from bundlewrap.utils.text import bold, green, yellow
|
||||||
from bundlewrap.utils.ui import io
|
from bundlewrap.utils.ui import io
|
||||||
|
|
||||||
|
|
||||||
def test_node(repo, node, **kwargs):
|
def test_node(repo, node, **kwargs):
|
||||||
if not node.has_bundle('backup-client'):
|
if not node.has_bundle('backup-client'):
|
||||||
return
|
return
|
||||||
|
|
|
@ -4,6 +4,7 @@ from bundlewrap.exceptions import BundleError
|
||||||
from bundlewrap.utils.text import bold, green
|
from bundlewrap.utils.text import bold, green
|
||||||
from bundlewrap.utils.ui import io
|
from bundlewrap.utils.ui import io
|
||||||
|
|
||||||
|
|
||||||
def test_underscore_vs_dash(node, metadata, path=[]):
|
def test_underscore_vs_dash(node, metadata, path=[]):
|
||||||
for k, v in metadata.items():
|
for k, v in metadata.items():
|
||||||
if not isinstance(k, str):
|
if not isinstance(k, str):
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from json import loads, dumps
|
from json import dumps, loads
|
||||||
|
|
||||||
from bundlewrap.metadata import metadata_to_json
|
from bundlewrap.metadata import metadata_to_json
|
||||||
from bundlewrap.utils import Fault
|
from bundlewrap.utils import Fault
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
from ipaddress import IPv4Network, ip_network
|
||||||
from os.path import abspath, dirname, join
|
from os.path import abspath, dirname, join
|
||||||
from ipaddress import ip_network, IPv4Network
|
|
||||||
|
|
||||||
REPO_PATH = dirname(dirname(abspath(__file__)))
|
REPO_PATH = dirname(dirname(abspath(__file__)))
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
import base64
|
import base64
|
||||||
from nacl.public import PrivateKey
|
|
||||||
from nacl.encoding import Base64Encoder
|
from nacl.encoding import Base64Encoder
|
||||||
|
from nacl.public import PrivateKey
|
||||||
|
|
||||||
from bundlewrap.utils import Fault
|
from bundlewrap.utils import Fault
|
||||||
|
|
||||||
|
|
||||||
def gen_privkey(repo, identifier):
|
def gen_privkey(repo, identifier):
|
||||||
return repo.vault.random_bytes_as_base64_for(identifier)
|
return repo.vault.random_bytes_as_base64_for(identifier)
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
from ipaddress import ip_address, ip_network, IPv4Address, IPv4Network
|
from ipaddress import IPv4Address, IPv4Network, ip_address, ip_network
|
||||||
|
|
||||||
from bundlewrap.exceptions import NoSuchGroup, NoSuchNode, BundleError
|
from bundlewrap.exceptions import BundleError, NoSuchGroup, NoSuchNode
|
||||||
from bundlewrap.utils.text import bold, red
|
from bundlewrap.utils.text import bold, red
|
||||||
from bundlewrap.utils.ui import io
|
from bundlewrap.utils.ui import io
|
||||||
|
|
||||||
|
|
||||||
def resolve_identifier(repo, identifier):
|
def resolve_identifier(repo, identifier):
|
||||||
"""
|
"""
|
||||||
Try to resolve an identifier (group or node). Return a set of ip
|
Try to resolve an identifier (group or node). Return a set of ip
|
||||||
|
|
1
nodes.py
1
nodes.py
|
@ -3,6 +3,7 @@ from os.path import join
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import bwpass
|
import bwpass
|
||||||
|
|
||||||
from bundlewrap.metadata import atomic
|
from bundlewrap.metadata import atomic
|
||||||
from bundlewrap.utils import error_context
|
from bundlewrap.utils import error_context
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,18 @@ dummy = true
|
||||||
period = "daytime"
|
period = "daytime"
|
||||||
pretty_name = "ticket.gulas.ch"
|
pretty_name = "ticket.gulas.ch"
|
||||||
|
|
||||||
[metadata.icinga2_api.nginx.services."NGINX VHOST jira CERTIFICATE"]
|
[metadata.icinga2_api.nginx.services."NGINX VHOST ticket-redirect CERTIFICATE"]
|
||||||
check_command = "check_https_cert_at_url"
|
check_command = "check_https_cert_at_url"
|
||||||
"vars.domain" = "ticket.gulas.ch"
|
"vars.domain" = "ticket.gulas.ch"
|
||||||
"vars.notification.mail" = true
|
"vars.notification.mail" = true
|
||||||
|
|
||||||
|
[metadata.icinga2_api.nginx.services."NGINX VHOST jira CERTIFICATE"]
|
||||||
|
check_command = "check_https_cert_at_url"
|
||||||
|
"vars.domain" = "jira.gulas.ch"
|
||||||
|
"vars.notification.mail" = true
|
||||||
|
|
||||||
[metadata.icinga2_api.nginx.services."NGINX VHOST jira CONTENT"]
|
[metadata.icinga2_api.nginx.services."NGINX VHOST jira CONTENT"]
|
||||||
check_command = "check_http_wget"
|
check_command = "check_http_wget"
|
||||||
"vars.http_wget_contains" = "login.jsp"
|
"vars.http_wget_contains" = "login.jsp"
|
||||||
"vars.http_wget_url" = "https://ticket.gulas.ch/secure/Dashboard.jspa"
|
"vars.http_wget_url" = "https://jira.gulas.ch/secure/Dashboard.jspa"
|
||||||
"vars.notification.sms" = true
|
"vars.notification.sms" = true
|
||||||
|
|
|
@ -76,18 +76,12 @@ nodes['fkusei-locutus'] = {
|
||||||
# video drivers
|
# video drivers
|
||||||
'xf86-video-intel': {},
|
'xf86-video-intel': {},
|
||||||
|
|
||||||
# for i3pystatus
|
|
||||||
'iw': {},
|
|
||||||
'wireless_tools': {},
|
|
||||||
|
|
||||||
# all that other random stuff one needs
|
# all that other random stuff one needs
|
||||||
'apachedirectorystudio': {},
|
'apachedirectorystudio': {},
|
||||||
'direnv': {},
|
'direnv': {},
|
||||||
'freerdp': {},
|
'freerdp': {},
|
||||||
'mosquitto': {},
|
|
||||||
'sdl_ttf': {}, # for compiling testcard
|
'sdl_ttf': {}, # for compiling testcard
|
||||||
'thermald': {},
|
'thermald': {},
|
||||||
'virt-manager': {},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'systemd-boot': {
|
'systemd-boot': {
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue