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

Reply via email to