On 15/09/2017 07:27, Luiz Angelo Daros de Luca wrote:
Thanks Jérémy,
That was what I needed. I was afraid to be headed to the wrong way.
Now that I know what to do, I need to know where and when.
you could create a template (xendomains@.service
<mailto:xendomains@.service>) and use drop-ins to do per-instance
overrides
(/etc/systemd/system/xendomains@vm1.service.d/append.conf) that
would allow you to individualize each domain while keeping the
common parts
I would find a way to prevent a domain with no corresponding to
start (maybe by not defining a mandatory key in the template) to
make sure no rogue domains are created...
I would use a template like xendomains@.service in order to specify
common stuff. However, the config of which vm are enabled (autostart)
is only available at boot time. Is a systemd generator the way to go?
Is is there another way to define it?
Also, should I use a service patch (like append.conf you mentioned) or
simply directly create /run/.../xendomains@vm1.service?
both method work... the first one allow to add stuff to the common
template, the second to override more easily in the case of a VM that is
totally different from the others...
It would be trivial to define a template xendomains@.service and start
services like "systemctl start xendomains@vm1.service", that would
read /etc/xen/vm/vm1 and launch it. I just don't know how I could
define dynamic dependency for that instance depending on the content
of /etc/xen/vm/vm1. Execstartpre can check requirements and prevent a
service to run but not wait for a resource to be available. It would
be something like ExecRequires=.
A generator is probably the way to go... generators can create ANY
systemd configuration files, including templates, drop-ins and .wants
directory
You probably already found that, but in case you didn't, you should read
the DESCRIPTION section of man:systemd.unit It describes all the ways
you can add files to configure units
In particular, if you want a service started at boot time, you need to
create a default.target.wants/ directory and add a symbolic link to the
unit to start in there. Populating such a directory at boot time with a
generator might be the best approch for you...
Instances seems to be created only when asked directly (systemctl
start xendomains@vm1.service), which might be triggered by something
like udev event. Is there anything like
ExecListStartInstances=, ExecListRunningInstances=?
see my answer above. There is no such thing, but generators can do the
equivalent by creating a .wants link
(as a side note, I don't know if you could do a "systemctl enable
--runtime" from a generator. maybe someone else here would know)
Generators can create something like that but they are triggered only
at boot and daemon-reload. It would be interesting to somehow run
"something like generators" when start/stop/status is called.
what would be your use-case ?
status is not "an event" nothing real happens on status
start/stop can propagate stuff based on their parameters, but the
services themselves are not meant to be dynamic...
That being said, it might be possible to dinamically add dependencies to
a unit via dbus and/or systemctl set-property, but I have never tried
it, so you'll need to try and see
From what I know about systemd, I'm thinking of something like a
generator that will create services for all autostart and saved vm.
The current script-based xendomains.service will run after
all xendomains@.service instances. This way, a new enabled-after-boot
vm would be started with "systemctl restart xendomains". I could use
the existence of /etc/xen/auto/vm or /var/lib/xen/save/vm as
requirement for xendomains@vm.service, in order to avoid to start a
disabled-after-boot vm. However, this does not look like an elegant
solution.
Your requirements seems very complex (and, I have to admit, a bit hard
to understand through e-mail) but I think that with a good understanding
of templates and generators it can be solved elegantly
* use templates to define how to start vms (common parts in the
template, particularities in the instances)
* add all boot-time depedencies via .wants directory via a generator
(maybe usint systemctl enable if it can be run at generator-time, but
i'm not sure it's possible)
Hope this helps
Jérémy
Regards,
--
Luiz Angelo Daros de Luca
luizl...@gmail.com <mailto:luizl...@gmail.com>
--
Logo <http://www.smile.fr/>
20 rue des Jardins
92600 Asnières-sur-Seine
www.smile.fr <http://www.smile.fr/>
*Jérémy ROSEN*
Architecte technique
Email : jeremy.ro...@smile.fr <mailto:jeremy.ro...@smile.fr>
Tel : +33141402967
Facebook <https://www.facebook.com/smileopensource> Google%2B
<http://fr.slideshare.net/SmileOpenSource/presentations> LinkedIn
<https://www.linkedin.com/company/smile> Twitter
<https://twitter.com/GroupeSmile>
bandeaux_mail
<http://www.smile.fr/Offres-services/Offres/Ingenierie?utm_source=signature&utm_medium=email&utm_campaign=signature>
eco Pour la planète, n'imprimez ce mail que si c'est nécessaire
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel