# HG changeset patch # User Paul Boddie # Date 1462891653 -7200 # Node ID 406daa6b57b8328f1b5693924f1ec0860ba7409f # Parent d13def5b985380209a385b54d851543e476dde26 Improved the description of user/group mappings for quotas. diff -r d13def5b9853 -r 406daa6b57b8 docs/wiki/Resources --- a/docs/wiki/Resources Tue May 10 16:07:13 2016 +0200 +++ b/docs/wiki/Resources Tue May 10 16:47:33 2016 +0200 @@ -366,9 +366,9 @@ Now consider a number of separate car resources. An organiser might attempt to get around any individual resource quota by booking a number of different cars. -By grouping the resources together, the organiser will exhaust a quota set on -the group of resources as reservations are made for the different members of -the group. +By grouping the resources together, the organiser will exhaust any quota set on +the group of resources as they try and make reservations for the different +members of the quota group. ==== Initialising Quotas ==== @@ -409,6 +409,12 @@ quota directory must be defined, mapping each user identity to the group to which they will belong. For example: +{{{{#!table +'''Scheduling Data''' || '''Decision Process''' +== + +The groups are defined as follows in the `groups` file: + {{{ mailto:vincent.vole@example.com developers mailto:harvey.horse@example.com developers @@ -423,10 +429,45 @@ testers PT20H }}} -Limits apply to individuals, then to groups, then the general quota applies. -Thus, when a group is not listed, the general quota applies; without a general -quota (and without matching individually), a group member will be unable to -reserve the resource. +|| + +{{{#!graphviz +//format=svg +//transform=notugly +digraph quota_users { + node [shape=box,fontsize="13.0",fontname="Helvetica",tooltip="Quota users"]; + edge [tooltip="Quota users"]; + + subgraph { + rank=same; + user1 [label="User is vincent.vole@example.com"]; + user2 [label="User is oliver.otter@example.com"]; + } + + havegroup [label="Have group for quota?",shape=ellipse,style=filled,fillcolor=gold]; + haveuser [label="Have group for user in quota?",shape=ellipse,style=filled,fillcolor=gold]; + + group1 [label="User is vincent.vole@example.com\nGroup is developers"]; + group2 [label="User is oliver.otter@example.com"]; + + checkuser1 [label="Have limit for group?",shape=ellipse,style=filled,fillcolor=gold]; + checkgeneral1 [label="Have general limit?",shape=ellipse,style=filled,fillcolor=gold]; + + checkuser2 [label="Have limit for user?",shape=ellipse,style=filled,fillcolor=gold]; + checkgeneral2 [label="Have general limit?",shape=ellipse,style=filled,fillcolor=gold]; + + accept [label="Quota",shape=folder,style=filled,fillcolor=cyan]; + decline [label="No quota",shape=folder,style=filled,fillcolor=cyan]; + + user1 -> havegroup -> haveuser -> group1 -> checkuser1 -> checkgeneral1 -> accept; + user2 -> havegroup -> haveuser -> group2 -> checkuser2 -> checkgeneral2 -> decline [style=dashed]; +} +}}} +}}}} + +Where individuals are not assigned to groups, any individual limit will apply +to them; otherwise, the general quota applies. Where individuals are assigned +to groups, any group limit will apply; otherwise, the general quota applies. ==== Individual Resource Quotas ====