Passing parameters from Hiera
Like the parameter defaults
we introduced in the previous chapter, Hiera may be used to provide default values to classes. This feature requires Puppet Version 3 and higher.
Getting ready
Install and configure hiera
as we did in Chapter 2, Puppet Infrastructure. Create a global or common yaml
file; this will serve as the default for all values.
How to do it...
- Create a class with parameters and no default values:
t@mylaptop ~/puppet $ mkdir -p modules/mysql/manifests t@mylaptop ~/puppet $ vim modules/mysql/manifests/init.pp class mysql ( $port, $socket, $package ) { notify {"Port: $port Socket: $socket Package: $package": } }
- Update your common
.yaml
file in Hiera with the default values for themysql
class:--- mysql::port: 3306 mysql::package: 'mysql-server' mysql::socket: '/var/lib/mysql/mysql.sock'
Apply the class to a node, you can add the mysql class to your default node for now.
node default { class {'mysql': } }
- Run
puppet agent
and verify the output:[root@hiera-test ~]# puppet agent -t Info: Caching catalog for hiera-test.example.com Info: Applying configuration version '1411182251' Notice: Port: 3306 Socket: /var/lib/mysql/mysql.sock Package: mysql-server Notice: /Stage[main]/Mysql/Notify[Port: 3306 Socket: /var/lib/mysql/mysql.sock Package: mysql-server]/message: defined 'message' as 'Port: 3306 Socket: /var/lib/mysql/mysql.sock Package: mysql-server' Notice: Finished catalog run in 1.75 seconds
How it works...
When we instantiate the mysql
class in our manifest, we provided no values for any of the attributes. Puppet knows to look for a value in Hiera that matches class_name::parameter_name:
or ::class_name::parameter_name:
.
When Puppet finds a value, it uses it as the parameter for the class. If Puppet fails to find a value in Hiera and no default is defined, a catalog failure will result in the following command line:
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Must pass package to Class[Mysql] at /etc/puppet/environments/production/manifests/site.pp:6 on node hiera-test.example.com
This error indicates that Puppet would like a value for the parameter package
.
There's more...
You can define a Hiera hierarchy and supply different values for parameters based on facts. You could, for instance, have %{::osfamily}
in your hierarchy and have different yaml
files based on the osfamily
parameter (RedHat, Suse, and Debian).
- Hands-On Internet of Things with MQTT
- 商戰數據挖掘:你需要了解的數據科學與分析思維
- Visual FoxPro 6.0數據庫與程序設計
- 極簡AI入門:一本書讀懂人工智能思維與應用
- 腦動力:PHP函數速查效率手冊
- Python Data Science Essentials
- 大學計算機應用基礎
- 21天學通Visual C++
- Docker High Performance(Second Edition)
- 控制系統計算機仿真
- Implementing Oracle API Platform Cloud Service
- Building a BeagleBone Black Super Cluster
- Bayesian Analysis with Python
- Hands-On DevOps
- Hands-On Business Intelligence with Qlik Sense