{% macro replicate(namebase, nbbackup, typeexport, typeimport, heriteLeader='', heriteBackup='') %} ## Tells the Backupable recipe that we want a backup [resilient] config-namebase = {{namebase}} ## Every request is double to provide the 3 IPs. [request-{{namebase}}] <= resilient slap-connection {{heriteLeader}} software-type = {{typeexport}} name = {{namebase}}0 return = url ssh-public-key ssh-url notification-id ip config = number authorized-key notify ip-list namebase config-number = 0 config-authorized-key = {% for id in range(1,nbbackup|int) %} ${request-pbs-{{namebase}}-{{id}}:connection-ssh-key}{% endfor %} config-notify = {% for id in range(1,nbbackup|int) %} ${request-pbs-{{namebase}}-{{id}}:connection-notification-url}{% endfor %} config-ip-list = {% for id in range(1,nbbackup|int) %} [request-{{namebase}}-pseudo-replicating-{{id}}] <= slap-connection resilient {{heriteBackup}} recipe = slapos.cookbook:request name = {{namebase}}{{id}} software-url = ${slap-connection:software-release-url} software-type = {{typeimport}} return = url ssh-public-key ssh-url notification-url ip pbs-notification-id = ${slap-connection:computer-id}-${slap-connection:partition-id}-{{namebase}}-push config = number authorized-key on-notification ip-list namebase config-number = {{id}} config-authorized-key = ${request-pbs-{{namebase}}-{{id}}:connection-ssh-key} config-on-notification = ${request-pbs-{{namebase}}-{{id}}:connection-feeds-url}${:pbs-notification-id} config-ip-list = {% endfor %} [iplist] config-ip-list = ${request-{{namebase}}:connection-ip}{% for j in range(1,nbbackup|int) %} ${request-{{namebase}}-pseudo-replicating-{{j}}:connection-ip}{% endfor %} [request-{{namebase}}-2] <= resilient slap-connection iplist {{heriteLeader}} recipe = slapos.cookbook:request name = {{namebase}}0 software-url = ${slap-connection:software-release-url} software-type = {{typeexport}} return = url ssh-public-key ssh-url notification-id ip config = number authorized-key notify ip-list namebase config-number = 0 config-authorized-key = {% for id in range(1,nbbackup|int) %} ${request-pbs-{{namebase}}-{{id}}:connection-ssh-key}{% endfor %} config-notify = {% for id in range(1,nbbackup|int) %} ${request-pbs-{{namebase}}-{{id}}:connection-notification-url}{% endfor %} {% for id in range(1,nbbackup|int) %} [request-{{namebase}}-pseudo-replicating-{{id}}-2] <= slap-connection resilient iplist {{heriteBackup}} recipe = slapos.cookbook:request name = {{namebase}}{{id}} software-url = ${slap-connection:software-release-url} software-type = {{typeimport}} return = url ssh-public-key ssh-url notification-url pbs-notification-id = ${slap-connection:computer-id}-${slap-connection:partition-id}-{{namebase}}-push config = number authorized-key on-notification ip-list namebase config-number = {{id}} config-authorized-key = ${request-pbs-{{namebase}}-{{id}}:connection-ssh-key} config-on-notification = ${request-pbs-{{namebase}}-{{id}}:connection-feeds-url}${:pbs-notification-id} {% endfor %} ## The PBS and their push / pull slaves ## Adding a PBS provides resiliency ## Adding a backup server provides availability ## Having 3 backups pulling from the same PBS provides ##only availability, not resiliency ## WARNING : SLAVES ARE ALLOCATED AT RANDOM, THIS NEEDS TO BE FIXED. [request-pbs-common] <= slap-connection recipe = slapos.cookbook:request software-url = ${slap-connection:software-release-url} software-type = pull-backup {% for id in range(1,nbbackup|int) %} [request-pbs-{{namebase}}-{{id}}] <= request-pbs-common name = PBS ({{namebase}} / {{id}}) return = ssh-key notification-url feeds-url slave = false [request-pull-backup-server-{{namebase}}-{{id}}] <= request-pbs-common name = PBS {{id}} pulling from ${request-{{namebase}}:name} config = url name type server-key on-notification notify notification-id title config-url = ${request-{{namebase}}:connection-ssh-url} config-name = ${slap-connection:computer-id}-${slap-connection:partition-id}-{{namebase}}-{{id}} config-type = pull config-server-key = ${request-{{namebase}}:connection-ssh-public-key} config-on-notification = ${request-{{namebase}}:connection-notification-id} config-notify = ${request-pbs-{{namebase}}-{{id}}:connection-notification-url} config-notification-id = ${slap-connection:computer-id}-${slap-connection:partition-id}-{{namebase}}-{{id}}-pull config-title = Pulling from {{namebase}} slave = true sla = instance_guid sla-instance_guid = ${request-pbs-{{namebase}}-{{id}}:instance_guid} [request-pull-backup-server-{{namebase}}-backup-{{id}}] <= request-pbs-common name = PBS pushing on ${request-{{namebase}}-pseudo-replicating-{{id}}:name} config = url name type server-key on-notification notify notification-id title config-url = ${request-{{namebase}}-pseudo-replicating-{{id}}:connection-ssh-url} config-name = ${request-pull-backup-server-{{namebase}}-{{id}}:config-name} config-type = push config-server-key = ${request-{{namebase}}-pseudo-replicating-{{id}}:connection-ssh-public-key} config-on-notification = ${request-pbs-{{namebase}}-{{id}}:connection-feeds-url}${request-pull-backup-server-{{namebase}}-{{id}}:config-notification-id} config-notify = ${request-{{namebase}}-pseudo-replicating-{{id}}:connection-notification-url} config-notification-id = ${request-{{namebase}}-pseudo-replicating-{{id}}:pbs-notification-id} config-title = Pushing to {{namebase}} backup {{id}} slave = true sla = instance_guid sla-instance_guid = ${request-pbs-{{namebase}}-{{id}}:instance_guid} {% endfor %} {% endmacro %}