Jump to content
Jump to navigation

Jump to heading Inheritance

Sometimes it make sense to extend an existing configuration or to include configuration from other places from the file-system or from remote locations. There's a special key inheritsFrom which will include the yaml found at the location and merge it with the data. This is supported for entries in hosts and dockerHosts and for the fabfile itself.

If a host, a dockerHost or the fabfile itself has the key inheritsFrom, then the given key is used as a base-configuration. Here's a simple example:

hosts:
  default:
    port: 22
    host: localhost
    user: default
  example1:
    inheritsFrom: default
    port: 23
  example2:
    inheritsFrom: example1
    user: example2

example1 will store the merged configuration from default with the configuration of example1. example2 is a merge of all three configurations: example2 with example1 with default.

hosts:
  example1:
    port: 23
    host: localhost
    user: default
  example2:
    port: 23
    host: localhost
    user: example2

You can even reference external files to inherit from:

hosts:
  fileExample:
    inheritsFrom: ./path/to/config/file.yaml
  httpExample:
    inheritsFrom: http://my.tld/path/to/config_file.yaml

This mechanism works also for the fabfile.yaml / index.yaml itself, and is not limited to one entry:

name: test fabfile

inheritsFrom:
  - ./mbb.yaml
  - ./drupal.yaml

Jump to heading Inherit from a blueprint

You can even inherit from a blueprint configuration for a host-config. This host-config can then override specific parts.

host:
  demo:
    inheritFromBlueprint:
      config: my-blueprint-config
      varian: the-variant

Jump to heading Inherit a blueprint from an existing blueprint

inheritsFrom is not supported for blueprints, they will be resolved after the config got created. But you can use blueprintInheritsFrom instead. An example:

dockerHosts:
  hostA:
    blueprint:
      key: hello-world

hosts:
  hostA:
    blueprint:
      blueprintInheritsFrom:
        - docker:hostA

  hostB:
    blueprint:
      blueprintInheritsFrom:
        - host:hostA

As blueprints can be part of the general section, a dockerHost-confg or a host config, they need a namespace, so phab knows exactly which blueprint config you want to inherit from.