Browse Source

add scenario1

main
Nicolas Massé 3 months ago
parent
commit
a4e812126c
  1. 23
      scenario1/Containerfile
  2. 1
      scenario1/env.sh
  3. 6
      scenario1/root/etc/containers/systemd/configs/odoo-config.env
  4. 5
      scenario1/root/etc/containers/systemd/configs/odoo-db.env
  5. 43
      scenario1/root/etc/containers/systemd/odoo-app.container
  6. 37
      scenario1/root/etc/containers/systemd/odoo-db.container
  7. 48
      scenario1/root/etc/containers/systemd/odoo-init.container
  8. 36
      scenario1/root/etc/odoo/init.sh
  9. 12
      scenario1/root/etc/odoo/odoo.conf
  10. 12
      scenario1/root/etc/systemd/system/odoo.target

23
scenario1/Containerfile

@ -0,0 +1,23 @@
FROM edge-registry.itix.fr/demo-edge-retail/generic:latest
ARG ADMIN_USERNAME=demo \
ADMIN_PASSWORD=redhat
RUN <<EOF
set -Eeuo pipefail
dnf config-manager --enable ansible-automation-platform-2.5-for-rhel-9-$(arch)-rpms
dnf install -y mkpasswd podman skopeo flightctl-agent
if [ -n "$ADMIN_USERNAME" ]; then
useradd -m -G wheel -p "$(echo -n "$ADMIN_PASSWORD" | mkpasswd -m bcrypt --stdin)" "$ADMIN_USERNAME"
fi
EOF
ADD --chown=root:root root /
RUN <<EOF
set -Eeuo pipefail
systemctl enable flightctl-agent.service
systemctl mask bootc-fetch-apply-updates.timer
EOF

1
scenario1/env.sh

@ -0,0 +1 @@
TARGET_IMAGE="edge-registry.itix.fr/demo-edge-retail/scenario1:latest"

6
scenario1/root/etc/containers/systemd/configs/odoo-config.env

@ -0,0 +1,6 @@
DATABASE=itix
ADMIN_PASSWORD=S3cr3t!
RIBBON_COLOR=rgba(0,0,255,.6)
RIBBON_NAME=TEST<br/>({db_name})
#RIBBON_COLOR=rgba(255,0,0,.6)
#RIBBON_NAME=PROD<br/>({db_name})

5
scenario1/root/etc/containers/systemd/configs/odoo-db.env

@ -0,0 +1,5 @@
POSTGRES_USER=odoo
POSTGRES_PASSWORD=odoo
POSTGRES_DB=postgres
POSTGRES_HOST_AUTH_METHOD=scram-sha-256
POSTGRES_INITDB_ARGS=--auth-host=scram-sha-256

43
scenario1/root/etc/containers/systemd/odoo-app.container

@ -0,0 +1,43 @@
[Unit]
Description=Odoo
Documentation=https://www.odoo.com/documentation/
# Require initialization to complete first
Requires=odoo-init.service odoo-db.service
After=odoo-init.service odoo-db.service
# Only start if initialization has completed
ConditionPathExists=/var/lib/odoo/initialized
[Container]
ContainerName=odoo-app
Image=docker.io/library/odoo:17
# Network configuration
Network=host
AddCapability=CAP_NET_BIND_SERVICE
# Volume mounts
Volume=/etc/odoo:/etc/odoo:ro
Volume=/var/lib/odoo/data:/var/lib/odoo:z
Volume=/var/lib/odoo/addons:/mnt/extra-addons:z
Volume=/var/log/odoo:/var/log/odoo:z
# Health check
HealthCmd=curl -fs -o /dev/null -w "%{http_code}\n" http://127.0.0.1/web/login
HealthInterval=30s
HealthTimeout=10s
HealthStartPeriod=60s
HealthRetries=3
[Service]
Restart=always
RestartSec=10
TimeoutStartSec=600
TimeoutStopSec=30
# Wait for PostgreSQL to be ready
ExecStartPre=/bin/sh -c 'exec 2>/dev/null; for try in $(seq 0 12); do if ! /bin/true 5<> /dev/tcp/127.0.0.1/5432; then echo "Waiting for PostgreSQL to be available..."; sleep 5; else exit 0; fi; done; exit 1'
[Install]
WantedBy=odoo.target

37
scenario1/root/etc/containers/systemd/odoo-db.container

@ -0,0 +1,37 @@
[Unit]
Description=PostgreSQL Database Server
Documentation=https://www.postgresql.org/
After=network.target
[Container]
ContainerName=odoo-db
Image=docker.io/library/postgres:17-alpine
# Network configuration
Network=host
# Security context (equivalent to K8s securityContext)
#NoNewPrivileges=true
#DropCapability=ALL
# Environment variables from config
EnvironmentFile=/etc/containers/systemd/configs/odoo-db.env
# Volume mounts
Volume=/var/lib/postgresql/data:/var/lib/postgresql/data:Z
# Health check
HealthCmd=pg_isready -U odoo
HealthInterval=30s
HealthTimeout=10s
HealthStartPeriod=60s
HealthRetries=3
[Service]
Restart=always
RestartSec=10
TimeoutStartSec=120
TimeoutStopSec=30
[Install]
WantedBy=odoo.target

48
scenario1/root/etc/containers/systemd/odoo-init.container

@ -0,0 +1,48 @@
[Unit]
Description=Odoo initialization service
Documentation=https://www.odoo.com/documentation/
Requires=odoo-db.service
After=odoo-db.service
Before=odoo-app.service
# Prevent running if already initialized
ConditionPathExists=!/var/lib/odoo/initialized
[Container]
ContainerName=odoo-init
Image=docker.io/library/odoo:17
# Network configuration
Network=host
AddCapability=CAP_NET_BIND_SERVICE
# Environment variables from secrets and config
EnvironmentFile=/etc/containers/systemd/configs/odoo-config.env
# Volume mounts
Volume=/etc/odoo:/etc/odoo:ro
Volume=/var/lib/odoo/data:/var/lib/odoo:z
Volume=/var/lib/odoo/addons:/mnt/extra-addons:z
Volume=/var/log/odoo:/var/log/odoo:z
# Initialization script
Entrypoint=/bin/bash
Exec=/etc/odoo/init.sh
[Service]
Type=oneshot
Restart=no
RemainAfterExit=yes
# Flag this service as initialized
ExecStartPost=/bin/touch /var/lib/odoo/initialized
# Skaffold filesystem + fix permissions
ExecStartPre=/bin/sh -c 'for d in /var/lib/odoo/data /var/lib/odoo/addons /var/log/odoo; do mkdir -p "$d" ; chmod 700 "$d" ; chown 101:101 "$d" ; done'
# Wait for PostgreSQL to be ready
ExecStartPre=/bin/sh -c 'exec 2>/dev/null; for try in $(seq 0 12); do if ! /bin/true 5<> /dev/tcp/127.0.0.1/5432; then echo "Waiting for PostgreSQL to be available..."; sleep 5; else exit 0; fi; done; exit 1'
[Install]
WantedBy=odoo.target

36
scenario1/root/etc/odoo/init.sh

@ -0,0 +1,36 @@
#!/bin/bash
##
## This script initializes the Odoo application environment.
##
set -Eeuo pipefail
echo "Downloading OCA addons..."
curl -sSfL https://github.com/OCA/web/archive/refs/heads/17.0.tar.gz | tar -xz -C /mnt/extra-addons --strip-components=1
echo "Initializing database '$DATABASE'..."
odoo -c /etc/odoo/odoo.conf --logfile=/dev/stdout --no-http --stop-after-init -d $DATABASE --init base
if [ -n "${RIBBON_NAME}${RIBBON_COLOR}" ]; then
echo "Installing Web Environment Ribbon module..."
odoo -c /etc/odoo/odoo.conf --logfile=/dev/stdout --no-http --stop-after-init -d $DATABASE --init web_environment_ribbon
fi
echo "Installing Point of Sale module..."
odoo -c /etc/odoo/odoo.conf --logfile=/dev/stdout --no-http --stop-after-init -d $DATABASE --init point_of_sale
echo "Setting admin password and ribbon color..."
odoo shell -c /etc/odoo/odoo.conf -d $DATABASE <<EOF
import os
if os.getenv("ADMIN_PASSWORD") is not None:
env['res.users'].search([('login', '=', 'admin')]).password = os.environ["ADMIN_PASSWORD"]
if os.getenv("RIBBON_COLOR") is not None:
env['ir.config_parameter'].sudo().set_param('ribbon.background.color', os.environ["RIBBON_COLOR"])
if os.getenv("RIBBON_NAME") is not None:
env['ir.config_parameter'].sudo().set_param('ribbon.name', os.environ["RIBBON_NAME"])
env.cr.commit()
exit()
EOF
echo "Odoo initialization completed."

12
scenario1/root/etc/odoo/odoo.conf

@ -0,0 +1,12 @@
[options]
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo
admin_passwd = $pbkdf2-sha512$600000$G6OU8j7HuBdCyBnDeE/pnQ$rtoycI6N7hJW37qeLLesYPWyfk8HsXD9HnsMtzkkU.pciBgd4bc0kV4Z2mI5cctjRIZf/RTOYAX5BvSjbwMxsA
db_host = localhost
db_port = 5432
db_user = odoo
db_password = odoo
logfile = /var/log/odoo/odoo.log
log_level = info
http_port = 80
http_interface = 0.0.0.0

12
scenario1/root/etc/systemd/system/odoo.target

@ -0,0 +1,12 @@
[Unit]
Description=Odoo Service Target
Documentation=man:systemd.target(5)
# This target represents the complete MyApp service stack
# It groups both the init and main services together
Wants=odoo-db.service odoo-init.service odoo-app.service
After=odoo-db.service odoo-init.service odoo-app.service
# Allow isolation - can stop/start this target independently
AllowIsolate=yes
[Install]
WantedBy=multi-user.target
Loading…
Cancel
Save