Namespaces ********** Namespaces allow users to create objects with the same name in different naming spaces. The ``//`` 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///``. 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/.slice/.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 (.root.svc.) 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//`` to avoid ambiguity.