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 }