bundles/docker-immich: add album-auto-share script
This commit is contained in:
parent
9edf9111a1
commit
ff2be8d58d
4 changed files with 114 additions and 0 deletions
80
bundles/docker-immich/files/immich-auto-album-share.py
Normal file
80
bundles/docker-immich/files/immich-auto-album-share.py
Normal file
|
@ -0,0 +1,80 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from json import loads
|
||||
from os import environ
|
||||
from subprocess import check_output
|
||||
from sys import exit
|
||||
|
||||
import psycopg2
|
||||
|
||||
PSQL_HOST = environ['DB_HOSTNAME']
|
||||
PSQL_USER = environ['DB_USERNAME']
|
||||
PSQL_PASS = environ['DB_PASSWORD']
|
||||
PSQL_DB = environ['DB_DATABASE_NAME']
|
||||
|
||||
docker_networks = loads(check_output(['docker', 'network', 'inspect', 'aaarghhh']))
|
||||
|
||||
container_ip = None
|
||||
# why the fuck is this a list of networks, even though we have to provide
|
||||
# a network name to inspect ...
|
||||
for network in docker_networks:
|
||||
if network['Name'] != 'aaarghhh':
|
||||
continue
|
||||
|
||||
for _, container in network['Containers'].items():
|
||||
if container['Name'] == PSQL_HOST:
|
||||
container_ip = container['IPv4Address'].split('/')[0]
|
||||
|
||||
if not container_ip:
|
||||
print(f'could not find ip address for container {PSQL_HOST=} in json')
|
||||
print(docker_networks)
|
||||
exit(1)
|
||||
|
||||
print(f'{PSQL_HOST=} {container_ip=}')
|
||||
|
||||
conn = psycopg2.connect(
|
||||
dbname=PSQL_DB,
|
||||
host=container_ip,
|
||||
password=PSQL_PASS,
|
||||
user=PSQL_USER,
|
||||
)
|
||||
|
||||
with conn:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute('SELECT "id","ownerId","albumName" FROM albums;')
|
||||
albums = {
|
||||
i[0]: {
|
||||
'owner': i[1],
|
||||
'name': i[2],
|
||||
}
|
||||
for i in cur.fetchall()
|
||||
}
|
||||
|
||||
with conn.cursor() as cur:
|
||||
cur.execute('SELECT "id","name" FROM users;')
|
||||
users = {
|
||||
i[0]: i[1]
|
||||
for i in cur.fetchall()
|
||||
}
|
||||
|
||||
for album_id, album in albums.items():
|
||||
print(f'----- working on album: {album["name"]}')
|
||||
with conn:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute('SELECT "usersId" FROM albums_shared_users_users WHERE "albumsId" = %s;', (album_id,))
|
||||
album_shares = [i[0] for i in cur.fetchall()]
|
||||
print(f' album is shared with {len(album_shares)} users: {album_shares}')
|
||||
for user_id, user_name in users.items():
|
||||
if user_id == album['owner'] or user_id in album_shares:
|
||||
continue
|
||||
|
||||
print(f' sharing album with user {user_name} ... ', end='')
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
'INSERT INTO albums_shared_users_users ("albumsId","usersId","role") VALUES (%s, %s, %s);',
|
||||
(album_id, user_id, 'viewer'),
|
||||
)
|
||||
print('done')
|
||||
print()
|
||||
|
||||
conn.close()
|
3
bundles/docker-immich/items.py
Normal file
3
bundles/docker-immich/items.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
files['/usr/local/bin/immich-auto-album-share.py'] = {
|
||||
'mode': '0755',
|
||||
}
|
|
@ -1,6 +1,11 @@
|
|||
assert node.has_bundle('docker-engine')
|
||||
|
||||
defaults = {
|
||||
'apt': {
|
||||
'packages': {
|
||||
'python3-psycopg2': {},
|
||||
},
|
||||
},
|
||||
'docker-engine': {
|
||||
'containers': {
|
||||
'immich': {
|
||||
|
@ -45,6 +50,9 @@ defaults = {
|
|||
},
|
||||
},
|
||||
},
|
||||
'docker-immich': {
|
||||
'enable_auto_album_share': False,
|
||||
},
|
||||
'nginx': {
|
||||
'vhosts': {
|
||||
'immich': {
|
||||
|
@ -59,3 +67,23 @@ defaults = {
|
|||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@metadata_reactor.provides(
|
||||
'systemd-timers/timers/immich-auto-album-share',
|
||||
)
|
||||
def auto_album_share(metadata):
|
||||
if not metadata.get('docker-immich/enable_auto_album_share'):
|
||||
return {}
|
||||
|
||||
return {
|
||||
'systemd-timers': {
|
||||
'timers': {
|
||||
'immich-auto-album-share': {
|
||||
'command': '/usr/local/bin/immich-auto-album-share.py',
|
||||
'environment': metadata.get('docker-engine/containers/immich/environment'),
|
||||
'when': 'minutely',
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -13,6 +13,9 @@ bundles = [
|
|||
"zfs",
|
||||
]
|
||||
|
||||
[metadata.docker-immich]
|
||||
enable_auto_album_share = true
|
||||
|
||||
[metadata.icinga_options]
|
||||
period = "daytime"
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue