73 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
| # The Helmfile Best Practices Guide
 | ||
| 
 | ||
| This guide covers the Helmfile’s considered patterns for writing advanced helmfiles. It focuses on how helmfile should be structured and executed.
 | ||
| 
 | ||
| ## Layering
 | ||
| 
 | ||
| You may occasionally end up with many helmfiles that shares common parts like which repositories to use, and whichi release to be bundled by default.
 | ||
| 
 | ||
| Use Layering to extract te common parts into a dedicated *library helmfile*s, so that each helmfile becomes DRY.
 | ||
| 
 | ||
| Let's assume that your `helmfile.yaml` looks like:
 | ||
| 
 | ||
| ```
 | ||
| { readFile "commons.yaml" }}
 | ||
| ---
 | ||
| {{ readFile "environments.yaml" }}
 | ||
| ---
 | ||
| releases:
 | ||
| - name: myapp
 | ||
|   chart: mychart
 | ||
| ```
 | ||
| 
 | ||
| Whereas `commons.yaml` contained a monitoring agent:
 | ||
| 
 | ||
| ```yaml
 | ||
| releases:
 | ||
| - name: metricbaet
 | ||
|   chart: stable/metricbeat
 | ||
| ```
 | ||
| 
 | ||
| And `environments.yaml` contained well-known environments:
 | ||
| 
 | ||
| ```yaml
 | ||
| environments:
 | ||
|   development:
 | ||
|   production:
 | ||
| ```
 | ||
| 
 | ||
| At run time, template expressions in your `helmfile.yaml` are executed:
 | ||
| 
 | ||
| ```yaml
 | ||
| releases:
 | ||
| - name: metricbaet
 | ||
|   chart: stable/metricbeat
 | ||
| ---
 | ||
| environments:
 | ||
|   development:
 | ||
|   production:
 | ||
| ---
 | ||
| releases:
 | ||
| - name: myapp
 | ||
|   chart: mychart
 | ||
| ```
 | ||
| 
 | ||
| Resulting YAML documents are merged in the order of occurrence,
 | ||
| so that your `helmfile.yaml` becomes:
 | ||
| 
 | ||
| ```yaml
 | ||
| environments:
 | ||
|   development:
 | ||
|   production:
 | ||
| 
 | ||
| releases:
 | ||
| - name: metricbaet
 | ||
|   chart: stable/metricbeat
 | ||
| - name: myapp
 | ||
|   chart: mychart
 | ||
| ```
 | ||
| 
 | ||
| Great!
 | ||
| 
 | ||
| Now, repeat the above steps for each your `helmfile.yaml`, so that all your helmfiles becomes DRY.
 |