Unverified Commit 9bf92639 by Paul B

dev: suppression du conteneur d'initialisation pour CouchDB

Ce commit rajoute une commande Django pour l'administration de la base
CouchDB. Elle permet de créer toutes les bases de données nécessaires
au fonctionnement de l'application au démarrage si elle n'existent
pas.

️ Il faut rajouter le dictionaire `'admin'` dans votre fichier
`outils/settins_secret.py` pour que la commande fonctionne.
parent a45cd3e6
Pipeline #978 passed with stage
in 21 seconds
{
"views": {
"by_fp": {
"map": "function(doc){emit(doc.fingerprint);}"
},
"by_completed": {
"map": "function(doc){emit(doc.completed);}"
},
"by_odoo_id": {
"map": "function(doc){emit(doc.odoo_id);}"
}
}
}
{
"views": {
"by_type": {
"map": "function(doc){emit(doc.type);}"
}
}
}
#!/usr/bin/env sh
sleep 3
curl -X PUT http://admin:123abc@couchdb:5984/coops
curl -X PUT http://admin:123abc@couchdb:5984/inventory
curl -X PUT http://admin:123abc@couchdb:5984/envelop
curl -X PUT http://admin:123abc@couchdb:5984/shopping_carts
curl -X PUT http://admin:123abc@couchdb:5984/coops/_design/index \
-d @couchdb-coops-init.json
curl -X PUT http://admin:123abc@couchdb:5984/envelop/_design/index \
-d @couchdb-envelop-init.json
# Set databases to public to allow app to access documents
curl -X PUT http://admin:123abc@couchdb:5984/coops/_security -d '{}'
curl -X PUT http://admin:123abc@couchdb:5984/inventory/_security -d '{}'
curl -X PUT http://admin:123abc@couchdb:5984/envelop/_security -d '{}'
curl -X PUT http://admin:123abc@couchdb:5984/shopping_carts/_security -d '{}'
...@@ -27,17 +27,6 @@ services: ...@@ -27,17 +27,6 @@ services:
volumes: volumes:
- "couchdb-data:/opt/couchdb/data" - "couchdb-data:/opt/couchdb/data"
initializer:
image: curlimages/curl
deploy:
restart_policy:
condition: on-failure
depends_on:
- couchdb
command: ["sh", "-c", "cd /tmp && ./couchdb-setup.sh"]
volumes:
- "./:/tmp"
database: database:
image: "postgres:10" image: "postgres:10"
env_file: .env env_file: .env
......
#! /bin/sh #!/usr/bin/env bash
port=34001 port=34001
ip=127.0.0.1 ip=127.0.0.1
if [ ! -z "$1" ]
then if [ -n "$1" ]
then
ip=$1 ip=$1
fi fi
if [ -n "$2" ]
if [ ! -z "$2" ] then
then
port=$2 port=$2
fi fi
current_path=$(pwd) current_path=$(pwd)
export PYTHONPATH="$current_path:$current_path/lib:$PYTHONPATH" export PYTHONPATH="$current_path:$current_path/lib:$PYTHONPATH"
echo yes | django-admin collectstatic --settings=outils.settings export DJANGO_SETTINGS_MODULE=outils.settings
django-admin runserver $ip:$port --settings=outils.settings # Collect static files
echo yes | django-admin collectstatic
# Make sure couchdb databases exist
python manage.py couchdb
# Run server
django-admin runserver "$ip:$port"
from django.core.management.base import BaseCommand, CommandError
from django.conf import settings
import couchdb
class Command(BaseCommand):
help = 'Initialize needed couchDB databases'
def handle(self, *args, **options):
if 'admin' not in settings.COUCHDB:
raise CommandError('''
Veuillez définir les accès d'admin à CouchDB dans votre fichier settings_secret.py
Vérifiez le fichier settings_secret_example.py pour un exemple.''')
url = settings.COUCHDB['admin']['url'] % (settings.COUCHDB['admin']['user'], settings.COUCHDB['admin']['password'])
dbnames = settings.COUCHDB['dbs']
couchserver = couchdb.Server(url)
for dbname in dbnames.values():
if dbname not in couchserver:
self.stdout.write(self.style.WARNING("Missing database %s" % dbname))
db = couchserver.create(dbname)
self.stdout.write(self.style.SUCCESS("✓ created db"))
if dbname == 'coops':
self.createCoopsViews(db)
elif dbname == 'envelop':
self.createEnvelopViews(db)
# db.security
self.createPublicAccess(db)
def createCoopsViews(self, dbConn):
byFpMapFunction = '''function(doc) {
emit(doc.fingerprint);
}'''
byCompletedMapFunction = '''function(doc) {
emit(doc.completed);
}'''
byOdooMapFunction = '''function(doc) {
emit(doc.odoo_id);
}'''
views = {
"by_fp": {
"map": byFpMapFunction
},
"by_completed": {
"map": byCompletedMapFunction
},
"by_odoo_id": {
"map": byOdooMapFunction
},
}
self.createView(dbConn, "index", views)
def createEnvelopViews(self, dbConn):
byTypeMapFunction = '''function(doc) {
emit(doc.type);
}'''
views = {
"by_type": {
"map": byTypeMapFunction
}
}
self.createView(dbConn, "index", views)
def createView(self, dbConn, designDoc, views):
self.stdout.write(self.style.SUCCESS(f"✓ created view {designDoc}"))
data = {
"_id": f"_design/{designDoc}",
"views": views,
"language": "javascript",
"options": {"partitioned": False }
}
dbConn.save(data)
def createPublicAccess(self, dbConn):
self.stdout.write(self.style.SUCCESS(f"✓ created security rule"))
security_doc = dbConn.resource.get_json("_security")[2]
dbConn.resource.put("_security", {})
...@@ -10,6 +10,11 @@ ODOO = { ...@@ -10,6 +10,11 @@ ODOO = {
COUCHDB = { COUCHDB = {
'private_url': 'http://couchdb:5984', 'private_url': 'http://couchdb:5984',
'url': 'http://127.0.0.1:5984', 'url': 'http://127.0.0.1:5984',
'admin': {
'url': 'http://%s:%s@couchdb:5984',
'user': 'admin',
'password': '123abc',
},
'dbs': { 'dbs': {
'member': 'coops', 'member': 'coops',
'inventory': 'inventory', 'inventory': 'inventory',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment