YAML tricks

Block merging

To provide more flexibility about source file organization, HADeploy allow you to split definition in several logical parts, using block merging.

For example, let's say you have the following:

groups:
- name: grp1
- name: grp2

users: 
- login: user1
  groups: "grp1,grp2"
- login: user2
  groups: "grp1,grp2"

This could also be expressed:

groups:
- name: grp1

groups:
- name: grp2

users: 
- login: user1
  groups: " grp1,grp2"

users:
- login: user2
  groups: " grp1,grp2"

or:

groups:
- name: grp1

users: 
- login: user1
  groups: " grp1,grp2"

groups:
- name: grp2

users:
- login: user2
  groups: " grp1,grp2"

This can also be split in two files:

groups:
- name: grp1

users: 
- login: user1
  groups: " grp1,grp2"
groups:
- name: grp2

users:
- login: user2
  groups: " grp1,grp2"

Note than file order will be irrelevant, as effective deployment action ordering is NOT driven by the order of occurrence of declaration. See Execution order

YAML anchors

YAML anchors are a powerful YAML feature, which could be of great help in some cases. For example, lets consider the following snippet:

files:
- scope: hdfs
  src: file://myapp1.jar
  dest_folder: /apps/mayapp
  owner: myappuser
  group: myappgrp
  mode: "0644"
- scope: hdfs
  src: file://myapp2.jar
  dest_folder: /apps/mayapp
  owner: myappuser
  group: myappgrp
  mode: "0644"
- scope: hdfs
  src: file://myapp3.jar
  dest_folder: /apps/mayapp
  owner: myappuser
  group: myappgrp
  mode: "0644"

It can be written as:

vars: 
  permsFiles: &permsFiles
    owner: myappuser
    group: myappgrp
    mode: "0644"

files:
- scope: hdfs
  src: file://myapp1.jar
  dest_folder: /apps/mayapp
  <<: *permsFiles
- scope: hdfs
  src: file://myapp2.jar
  dest_folder: /apps/mayapp
  <<: *permsFiles
- scope: hdfs
  src: file://myapp3.jar
  dest_folder: /apps/mayapp
  <<: *permsFiles

Or, using flow style:

vars: 
  permsFiles: &permsFiles
    owner: myappuser
    group: myappgrp
    mode: "0644"

files:
- { scope: hdfs, src: "file://myapp1.jar", dest_folder: /apps/mayapp, <<: *permsFiles }
- { scope: hdfs, src: "file://myapp2.jar", dest_folder: /apps/mayapp, <<: *permsFiles }
- { scope: hdfs, src: "file://myapp3.jar", dest_folder: /apps/mayapp, <<: *permsFiles }