A disposable local Odoo 20 or 19 server (or a nightly or master build) with sample data and well-known credentials, for developing tools against Odoo (JSON-2, XML-RPC and JSON-RPC clients, odooly scripts, custom Dynamist modules).
The name is a play on nodool, but spelled noodle: if Google can misspell googol, so can we.
mise trust && make tools # install k3d, kubectl and odooly
make up # create the cluster, build and deploy odoo, follow logsThe first start installs the apps with demo data, which takes a few minutes. Odoo is at http://odoo.localhost/odoo and its public website at http://odoo.localhost/, behind the cluster's Traefik ingress.
make down stops Odoo and keeps the data, make reset deletes it.
VERSION picks the Odoo to build, one at a time in the same namespace:
VERSION |
Odoo |
|---|---|
20 (default) |
the official odoo:20.0 image, pinned to a dated build |
19 |
the official odoo:19.0 image, pinned to a dated build |
19-nightly, 20-nightly |
the newest nightly deb of that series from nightly.odoo.com |
master |
the current commit of the odoo/odoo master branch |
make reset && make up VERSION=19The last VERSION built is kept in .k8s/version, a plain make up reuses
it. A database only works with the Odoo series that created it: Odoo refuses to
start on another one and asks for make reset.
PG picks the PostgreSQL major version next to it, PostgreSQL 17 by default.
PG=min picks the oldest version the Odoo series supports, and a version below
that is refused before deploying:
make reset && make up VERSION=19 PG=min
make reset && make up PG=18The last PG is kept in .k8s/postgres. The data only works with the
PostgreSQL major version that created it, switching needs make reset as well.
make console # odooly console logged in as admin with the API key
make test-k8s # run the smoke, seed data and isolation testsThe k3d cluster dynamist can be shared with other Dynamist dev apps.
Each app lives in its own namespace, see
Kubernetes Setup.
Local development only, the ingress is bound to loopback.
| What | Value |
|---|---|
| URL / database | http://odoo.localhost / odoo |
| Admin username / password | admin / supersecr3tpassw0rdfordevelop1 |
| Admin API key | odoo-supersecr3tapikeyfordevelop1 |
| Master password | supersecr3tmasterpassw0rdfordevelop1 |
| Postgres user / password | odoo / supersecr3tpassw0rdfordatabase1 |
| Test users | password supersecr3tpassw0rdfordevelop1, API key <first name>-supersecr3tapikeyfordevelop1 |
| Odoo demo users | demo / demo, portal / portal |
See docs/odoo-setup.md for the test users, API examples and configuration.
curl -s http://odoo.localhost/json/2/res.partner/search_read \
-H "Authorization: bearer odoo-supersecr3tapikeyfordevelop1" \
-H "X-Odoo-Database: odoo" -H "Content-Type: application/json" \
-d '{"domain": [["is_company", "=", true]], "fields": ["name"], "limit": 3}'| Target | Description |
|---|---|
make up |
Create or reuse the cluster, build and deploy odoo (VERSION=19 for another version), follow the logs until it is ready |
make down |
Stop odoo and postgres, keeping the data |
make reset |
Delete the noodle namespace with all its data |
make destroy |
Delete the whole cluster, with every app in it (FORCE=1 if other apps run) |
make logs / make ps |
Follow odoo logs / show pods, ingress and volumes |
make creds |
Print the credentials of the running odoo |
make seed |
Copy odoo/seed into the pod and re-run seeding (STEPS=users,apikeys, DATASETS=crm to limit) |
make upgrade |
Copy addons/ into the pod and upgrade the changed modules, without a restart |
make sample |
Load the sample datasets through the API with odooly (DATASETS=crm to limit) |
make shell / make odoo-shell / make psql |
bash, Odoo Python shell or psql in the odoo pod |
make db-forward |
Forward PostgreSQL to 127.0.0.1:5432 |
make console |
odooly console (ODOOLY_ENV=sales for another odooly.ini section) |
make validate / make test-k8s |
Validate the manifests / run tests/k8s against the deployed odoo |
make tools |
Install the tools pinned in mise.toml |
Put Dynamist modules in addons/ and add them to ODOO_MODULES.
They are built into the dynamist/odoo image and installed on the next
make up. make upgrade loads changes to them into the running Odoo.
The public website is the noodle_website module, see
addons/README.md for how to change it.
Apache License 2.0, see LICENSE. Copyright (c) 2026 Dynamist AB.