Namespaces

Namespaces allow users to create objects with the same name in different naming spaces.

The <namespace>/<kind>/<name> is called a path.

The object selector (--service option for svcmgr and svcmon, first argument for om) accepts the path notation.

Namespaced objects have their config stored in /etc/opensvc/namespaces/<namespace>/<kind>/.

This feature is available since version 1.9-2748.

Operations with namespaces

Users have 3 methods to select a namespace to operate into:

Selector expressions

om test/svc/svc1 create

Namespace command line option

om svc1 --namespace=test create

OSVC_NAMESPACE environment variable

OSVC_NAMESPACE=test om svc1 create

With OSVC_NAMESPACE exported, all actions are applied in the context of the test namespace.

$ export OSVC_NAMESPACE=test
$ om '*' ls
svc1
svc2
$ unset OSVC_NAMESPACE
$ om 'test/*' ls
test/svc1
test/svc2

References

A {namespace} reference is available for service configuration.

Cgroups

Services in an explicit namespace have the namespace name inserted in their cgroup path

opensvc.slice/<namespace>.slice/<name>.slice

The « root » pseudo namespace

Services created before namespaces support and services created without an explicit namespace are assigned to a pseudo namespace named root. Their config are stored in /etc/opensvc/.

The root pseudo namespace name is used in the cluster dns names (<name>.root.svc.<clustername>) and dns search paths, but is not embedded in docker container names nor cgroup paths.

The {namespace} reference is evaluated to root.

Select objects in the root namespace

$ om 'root/**' ls
$ om '**' ls --namespace=root
$ OSVC_NAMESPACE=root om '**' ls

Create objects in the root namespace

$ unset OSVC_NAMESPACE
$ om svc1 create

Relations

Children and parents relations use object paths or object names.

  • If a name is declared in the parents, slaves or children lists, the related objects are searched in the same namespace.

  • A relation to an object in another namespace must be declared using its path instead of its name.

  • Relations to objects in the root pseudo namespace must be defined as root/<kind>/<name> to avoid ambiguity.