Service provisioning ******************** Introduction ============ A service handle resources activation and desactivation: disk, volumes groups, filesystems for example. Upon creation of a service, the resources may or may not already exist. In the later case, the service can provision them, in other words the service can allocate disks and ip address, create volume groups and logical volume, format filesystems, create containers, pull docker images. This section describes: * how this provisioning feature work * how to provision and template services * some useful examples Provisioners ============ Each resource driver can implement a provisioner, but not all resources actually do. The list of resources supporting provisioning:: $ grep -l "provisioning: True" /template.*conf usr/share/doc/template.container.esx.conf usr/share/doc/template.container.kvm.conf usr/share/doc/template.container.lxc.conf usr/share/doc/template.container.ovm.conf usr/share/doc/template.container.srp.conf usr/share/doc/template.container.vz.conf usr/share/doc/template.container.xen.conf usr/share/doc/template.container.zone.conf usr/share/doc/template.disk.disk.conf usr/share/doc/template.disk.gce.conf usr/share/doc/template.disk.loop.conf usr/share/doc/template.disk.lvm.conf usr/share/doc/template.disk.md.conf usr/share/doc/template.disk.rados.conf usr/share/doc/template.disk.vg.conf usr/share/doc/template.disk.zpool.conf usr/share/doc/template.fs.conf usr/share/doc/template.ip.amazon.conf usr/share/doc/template.ip.conf The resource provisioner may need additional parameters. The resource configuration templates in ```` highlight these particular parameters with ``provisioning = True``. The list of provisioning parameters can thus be extracted using:: $ grep -B 3 "provisioning: True" /template.*conf | grep keyword usr/share/doc/template.container.esx.conf-# keyword: snap usr/share/doc/template.container.esx.conf-# keyword: snapof usr/share/doc/template.container.kvm.conf-# keyword: virtinst usr/share/doc/template.container.kvm.conf-# keyword: snap usr/share/doc/template.container.kvm.conf-# keyword: snapof usr/share/doc/template.container.lxc.conf-# keyword: rootfs usr/share/doc/template.container.lxc.conf-# keyword: cf usr/share/doc/template.container.lxc.conf-# keyword: template usr/share/doc/template.container.ovm.conf-# keyword: virtinst usr/share/doc/template.container.ovm.conf-# keyword: snap usr/share/doc/template.container.ovm.conf-# keyword: snapof usr/share/doc/template.container.srp.conf-# keyword: ip usr/share/doc/template.container.srp.conf-# keyword: rootpath usr/share/doc/template.container.srp.conf-# keyword: prm_cores usr/share/doc/template.container.vz.conf-# keyword: rootfs usr/share/doc/template.container.vz.conf-# keyword: template usr/share/doc/template.container.xen.conf-# keyword: virtinst usr/share/doc/template.container.xen.conf-# keyword: snap usr/share/doc/template.container.xen.conf-# keyword: snapof usr/share/doc/template.container.zone.conf-# keyword: rootfs usr/share/doc/template.container.zone.conf-# keyword: template usr/share/doc/template.container.zone.conf-# keyword: snap usr/share/doc/template.container.zone.conf-# keyword: snapof usr/share/doc/template.container.zone.conf-# keyword: container_origin usr/share/doc/template.disk.gce.conf-# keyword: size usr/share/doc/template.disk.gce.conf-# keyword: description usr/share/doc/template.disk.gce.conf-# keyword: image usr/share/doc/template.disk.gce.conf-# keyword: image_project usr/share/doc/template.disk.gce.conf-# keyword: source_snapshot usr/share/doc/template.disk.gce.conf-# keyword: disk_type usr/share/doc/template.disk.loop.conf-# keyword: size usr/share/doc/template.disk.lvm.conf-# keyword: options usr/share/doc/template.disk.lvm.conf-# keyword: pvs usr/share/doc/template.disk.md.conf-# keyword: devs usr/share/doc/template.disk.md.conf-# keyword: level usr/share/doc/template.disk.md.conf-# keyword: chunk usr/share/doc/template.disk.md.conf-# keyword: layout usr/share/doc/template.disk.md.conf-# keyword: spares usr/share/doc/template.disk.rados.conf-# keyword: size usr/share/doc/template.disk.rados.conf-# keyword: image_format usr/share/doc/template.disk.vg.conf-# keyword: options usr/share/doc/template.disk.vg.conf-# keyword: pvs usr/share/doc/template.disk.zpool.conf-# keyword: vdev usr/share/doc/template.fs.conf-# keyword: vg usr/share/doc/template.fs.conf-# keyword: size usr/share/doc/template.ip.amazon.conf-# keyword: cascade_allocation usr/share/doc/template.ip.amazon.conf-# keyword: docker_daemon_ip usr/share/doc/template.ip.conf-# keyword: gateway A provisioner can update other service DEFAULT and resources configuration parameters. For example, the amazon ip provisioner can cascade the allocated ip address the ``docker_daemon_args`` as a ``--ip x.x.x.x`` argument, and cascade to a ip resource ``ipname`` parameter. The provisioners are run in the service start natural order. Each resource is left in the ``up`` state after provisioning, so that following provisioners can count on their availability to proceed. For example, a amazon allocated disk must be left attached for the btrfs provisioner to format it. As a consequence, when all provisioners have run, the service ``availstatus`` is ``up``. Provisioning usage ================== The provisioners are activated by setting the ``--provision`` with the following actions: create ++++++ * ``create --template |