- Puppet 4 Essentials(Second Edition)
- Felix Frank Martin Alfke
- 443字
- 2021-07-30 09:58:43
Using variables
Variable assignment works just like in most scripting languages. Any variable name is always prefixed with the $
sign:
$download_server = 'img2.example.net' $url = "https://${download_server}/pkg/example_source.tar.gz"
Also, just like most scripting languages, Puppet performs variable value substitution in strings that are in double quotes, but no interpolation at all in single-quoted strings.
Variables are useful for making your manifest more concise and comprehensible. They help you with the overall goal of keeping your source code free from redundancy. An important distinction from variables in imperative programming and scripting languages is the immutability of variables in Puppet manifests. Once a value has been assigned, it cannot be overwritten.
Why is it called a variable at all if it is a constant? One should never look at Puppet as a tool that manages a single system. For a single system, a Puppet variable might look like a constant. But Puppet manages a multitude of systems with different operating systems. Across all these systems, variables will be different and not constants.
Variable types
As of Puppet 3.x, there are only four variable types: Strings, Arrays, Hashes, and Boolean. Puppet 4 introduces a rich type system. The new type system will be explained in Chapter 7, New Features from Puppet 4. The basic variable types work much like their respective counterparts in other languages. Depending on your background, you might be familiar with using associative arrays or dictionaries as semantic equivalents to Puppet's hash type:
$a_bool = true $a_string = 'This is a string value' $an_array = [ 'This', 'forms', 'an', 'array' ] $a_hash = { 'subject' => 'Hashes', 'predicate' => 'are written', 'object' => 'like this', 'note' => 'not actual grammar!', 'also note' => [ 'nesting is', { 'allowed' => ' of course' } ], }
Accessing the values is equally simple. Note that the hash syntax is similar to that of Ruby, not Perl's:
$x = $a_string $y = $an_array[1] $z = $a_hash['object']
Strings can be used as resource attribute values, but it's worth noting that a resource title can also be a variable reference:
package { $apache_package: ensure => 'installed' }
It's intuitively clear what a string value means in this context. But you can also pass arrays here to declare a whole set of resources in one statement. The following manifest manages three packages, making sure that they are all installed:
$packages = [ 'apache2',
'libapache2-mod-php5',
'libapache2-mod-passenger', ]
package { $packages:
ensure => 'installed'
}
You will learn how to make efficient use of hash values in later chapters.
The array does not need to be stored in a variable to be used, but it is a good practice in some cases.
- INSTANT Mock Testing with PowerMock
- 手機安全和可信應用開發指南:TrustZone與OP-TEE技術詳解
- VMware View Security Essentials
- 區塊鏈:以太坊DApp開發實戰
- jQuery從入門到精通 (軟件開發視頻大講堂)
- Python數據可視化之Matplotlib與Pyecharts實戰
- PostgreSQL Replication(Second Edition)
- SQL Server 2008 R2數據庫技術及應用(第3版)
- C++17 By Example
- Ionic3與CodePush初探:支持跨平臺與熱更新的App開發技術
- HTML并不簡單:Web前端開發精進秘籍
- JavaScript編程精解(原書第3版)
- Microsoft Azure Security
- Java與Android移動應用開發:技術、方法與實踐
- WCF 4.5 Multi-Layer Services Development with Entity Framework(Third Edition)