Commit with the entrypoint_Dockerfile solution and the odoo connectivity
This commit is contained in:
commit
9684a2d49f
5
.env
Normal file
5
.env
Normal file
@ -0,0 +1,5 @@
|
||||
POSTGRES_PASSWORD=openpgpwd
|
||||
POSTGRES_USER=openpg
|
||||
POSTGRES_DB=pulumi
|
||||
ODOO_PASSWORD=admin
|
||||
GRAFANA_PASSWORD=grafana_pwd
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*.pyc
|
||||
venv/
|
11
Pulumi.yaml
Normal file
11
Pulumi.yaml
Normal file
@ -0,0 +1,11 @@
|
||||
name: last_version_test_1
|
||||
description: A minimal OpenStack Python Pulumi program
|
||||
runtime:
|
||||
name: python
|
||||
options:
|
||||
toolchain: pip
|
||||
virtualenv: venv
|
||||
config:
|
||||
pulumi:tags:
|
||||
value:
|
||||
pulumi:template: openstack-python
|
81
__main__.py
Normal file
81
__main__.py
Normal file
@ -0,0 +1,81 @@
|
||||
import pulumi
|
||||
import pulumi_docker as docker
|
||||
import json
|
||||
import os
|
||||
|
||||
# Load the JSON configuration file
|
||||
try:
|
||||
with open("config.json", "r") as f:
|
||||
containers_data = json.load(f)
|
||||
except FileNotFoundError:
|
||||
raise Exception("Error: 'config.json' file not found.")
|
||||
|
||||
# Create the network
|
||||
try:
|
||||
network = docker.Network("testNetwork")
|
||||
|
||||
except Exception as e:
|
||||
pulumi.log.error(f"Failed to create network: {e}")
|
||||
network = None
|
||||
|
||||
# Create containers
|
||||
for container in containers_data.get("containers", []):
|
||||
instances = container.get("instances", 1)
|
||||
for i in range(instances):
|
||||
container_name = f"{container['name']}-{i}" if instances > 1 else container["name"]
|
||||
|
||||
# Configure volumes
|
||||
volumes = {}
|
||||
for volume in container.get("volumes", []):
|
||||
try:
|
||||
if "volume_name" in volume and volume["volume_name"] not in volumes:
|
||||
volumes[volume["volume_name"]] = docker.Volume(volume["volume_name"])
|
||||
except Exception as e:
|
||||
pulumi.log.error(f"Failed to create volume {volume.get('volume_name')}: {e}")
|
||||
volumes_config = []
|
||||
try:
|
||||
if "volumes" in container:
|
||||
volumes_config = [
|
||||
docker.ContainerVolumeArgs(
|
||||
container_path=volume["container_path"],
|
||||
volume_name=volumes[volume["volume_name"]].name
|
||||
) if "volume_name" in volume else
|
||||
docker.ContainerVolumeArgs(
|
||||
container_path=volume["container_path"],
|
||||
host_path=os.path.abspath(volume["host_path"])
|
||||
)
|
||||
for volume in container["volumes"]
|
||||
]
|
||||
except KeyError as e:
|
||||
pulumi.log.warn(f"Missing key in volume configuration: {e}")
|
||||
except Exception as e:
|
||||
pulumi.log.error(f"Error configuring volumes for container {container_name}: {e}")
|
||||
|
||||
# Create the container
|
||||
try:
|
||||
container_resource = docker.Container(
|
||||
container_name,
|
||||
image=container["image"],
|
||||
hostname=container_name,
|
||||
envs=[
|
||||
f"{key}={value}" for key, value in container.get("envs", {}).items()
|
||||
] if "envs" in container else [],
|
||||
ports=[
|
||||
docker.ContainerPortArgs(
|
||||
internal=port["internal"],
|
||||
external=port["external"] + i
|
||||
) for port in container.get("ports", [])
|
||||
] if "ports" in container else [],
|
||||
volumes=volumes_config,
|
||||
network_mode=network.name if network else None,
|
||||
)
|
||||
ports = container.get("ports", [])
|
||||
if ports:
|
||||
for port in ports:
|
||||
external_port = port["external"] + i
|
||||
pulumi.export(
|
||||
f"{container_name}_url",
|
||||
f"http://localhost:{external_port}"
|
||||
)
|
||||
except Exception as e:
|
||||
pulumi.log.error(f"Failed to create container {container_name}: {e}")
|
14
backup.Dockerfile
Normal file
14
backup.Dockerfile
Normal file
@ -0,0 +1,14 @@
|
||||
# Use the Alpine image as the base
|
||||
FROM alpine:latest as backup_custom
|
||||
|
||||
# Copy the entrypoint script into the container
|
||||
COPY entrypoint_backup.sh /usr/local/bin/entrypoint_backup.sh
|
||||
|
||||
# Switch to root user for setup
|
||||
USER root
|
||||
|
||||
# Make the entrypoint script executable
|
||||
RUN chmod +x /usr/local/bin/entrypoint_backup.sh
|
||||
|
||||
# Set the new entrypoint
|
||||
ENTRYPOINT ["/usr/local/bin/entrypoint_backup.sh"]
|
98
config.json
Normal file
98
config.json
Normal file
@ -0,0 +1,98 @@
|
||||
{
|
||||
"containers": [
|
||||
{
|
||||
"name": "admin",
|
||||
"image": "postgres:latest",
|
||||
"envs": {
|
||||
"POSTGRES_DB": "admin",
|
||||
"POSTGRES_USER": "admin",
|
||||
"POSTGRES_PASSWORD": "admin"
|
||||
},
|
||||
"network_mode": "testNetwork",
|
||||
"ports": [{"internal": 5432, "external": 5432}],
|
||||
"volumes": [
|
||||
{
|
||||
"container_path": "/var/lib/postgresql/data",
|
||||
"volume_name": "postgres-data"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "odoo",
|
||||
"image": "odoo_custom",
|
||||
"envs": {
|
||||
"HOST": "admin",
|
||||
"USER": "admin",
|
||||
"PASSWORD": "admin",
|
||||
"DATABASE": "admin",
|
||||
"ODOO_PASSWORD": "admin"
|
||||
},
|
||||
"network_mode": "testNetwork",
|
||||
"ports": [{"internal": 8069, "external": 8069}],
|
||||
"instances": 3,
|
||||
"volumes": [
|
||||
{
|
||||
"host_path": "./odoo.conf",
|
||||
"container_path": "/etc/odoo/odoo.conf"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "grafana",
|
||||
"image": "grafana/grafana:latest",
|
||||
"envs": {
|
||||
"GF_SECURITY_ADMIN_PASSWORD": "grafana_pwd",
|
||||
"GF_DATASOURCES_PROMETHEUS_URL": "http://prometheus:9090"
|
||||
},
|
||||
"network_mode": "testNetwork",
|
||||
"ports": [{"internal": 3000, "external": 3000}],
|
||||
"instances": 2
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
"image": "prom/prometheus:latest",
|
||||
"network_mode": "testNetwork",
|
||||
"ports": [{"internal": 9090, "external": 9090}],
|
||||
"volumes": [
|
||||
{
|
||||
"container_path": "/prometheus",
|
||||
"volume_name": "prometheus-data"
|
||||
},
|
||||
{
|
||||
"container_path": "/etc/prometheus/prometheus.yml",
|
||||
"host_path": "./prometheus.yml"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "fluentd",
|
||||
"image": "fluent/fluentd:v1.13-1",
|
||||
"network_mode": "testNetwork",
|
||||
"ports": [{"internal": 24224, "external": 24224}],
|
||||
"volumes": [
|
||||
{
|
||||
"container_path": "/fluentd/etc/fluent.conf",
|
||||
"host_path": "./fluent.conf"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "backup",
|
||||
"image": "backup_custom",
|
||||
"envs": {
|
||||
"POSTGRES_HOST": "admin",
|
||||
"POSTGRES_DB": "admin",
|
||||
"POSTGRES_USER": "admin",
|
||||
"POSTGRES_PASSWORD": "admin"
|
||||
},
|
||||
"network_mode": "testNetwork",
|
||||
"volumes": [
|
||||
{
|
||||
"container_path": "/backup",
|
||||
"volume_name": "backup-data"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
11
entrypoint_backup.sh
Normal file
11
entrypoint_backup.sh
Normal file
@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Install PostgreSQL client
|
||||
apk add --no-cache postgresql-client
|
||||
|
||||
# Wait until the PostgreSQL server is ready
|
||||
until pg_isready -h admin -U admin; do
|
||||
echo "Waiting for PostgreSQL..."
|
||||
sleep 2
|
||||
done
|
||||
|
3
entrypoint_odoo.sh
Normal file
3
entrypoint_odoo.sh
Normal file
@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
odoo -i base
|
14
fluent.conf
Normal file
14
fluent.conf
Normal file
@ -0,0 +1,14 @@
|
||||
<source>
|
||||
@type forward
|
||||
port 8069 # Odoo logs
|
||||
</source>
|
||||
|
||||
<source>
|
||||
@type forward
|
||||
port 3000 # Grafana logs
|
||||
</source>
|
||||
|
||||
<match *>
|
||||
@type file
|
||||
path /fluentd/logs/collected-logs
|
||||
</match>
|
13
odoo.Dockerfile
Normal file
13
odoo.Dockerfile
Normal file
@ -0,0 +1,13 @@
|
||||
# Use the existing Odoo image as the base
|
||||
FROM odoo:latest as odoo-custom
|
||||
|
||||
# Copy the entrypoint script into the container
|
||||
COPY entrypoint_odoo.sh /usr/local/bin/entrypoint_odoo.sh
|
||||
|
||||
USER root
|
||||
|
||||
# Make the entrypoint script executable
|
||||
RUN chmod +x /usr/local/bin/entrypoint_odoo.sh
|
||||
|
||||
# Set the new entrypoint
|
||||
ENTRYPOINT ["/usr/local/bin/entrypoint_odoo.sh"]
|
7
odoo.conf
Normal file
7
odoo.conf
Normal file
@ -0,0 +1,7 @@
|
||||
[options]
|
||||
db_host = admin
|
||||
db_port = 5432
|
||||
db_user = admin
|
||||
db_password = admin
|
||||
default_productivity_apps = True
|
||||
db_name = false
|
15
prometheus.yml
Normal file
15
prometheus.yml
Normal file
@ -0,0 +1,15 @@
|
||||
global:
|
||||
scrape_interval: 15s # How often to scrape metrics (every 15 seconds)
|
||||
|
||||
scrape_configs:
|
||||
- job_name: 'postgres' # For scraping PostgreSQL
|
||||
static_configs:
|
||||
- targets: ['postgres:5432']
|
||||
|
||||
- job_name: 'odoo' # For scraping Odoo
|
||||
static_configs:
|
||||
- targets: ['odoo:8069']
|
||||
|
||||
- job_name: 'grafana' # For scraping Grafana
|
||||
static_configs:
|
||||
- targets: ['grafana:3000']
|
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
pulumi>=3.0.0,<4.0.0
|
||||
pulumi-openstack>=3.0.0,<4.0.0
|
Loading…
Reference in New Issue
Block a user