對於重複部分,我能想到的方法有兩種:
- puppetDB
- hiera
PuppetDB
每當你想一個節點的事實做一個什麼東西第二個節點,使用puppetDB。這稱爲導出資源。這也在puppet-mysql documentation中解釋。
示例1:將所有機器的SSH主機密鑰添加到所有其他機器的known_keys。
示例2:將所有機器添加到監控,創建自己的主機定義。
示例3:在某一類機器上,允許它們連接到MySQL。
在每種情況下,首先通過puppet-puppetdb模塊安裝puppetDB。你將需要puppet4。 PuppetDB只會在您擁有8 GB以上內存的情況下啓動。
然後您必須編寫資源導出和資源導入。在所有有你想要的事實(如ip/fqdn)的節點上,你寫出口:
@@mysql_grant {"[email protected]${::ipaddress}/**my-database-name.*":
ensure => 'absent',
options => ['GRANT'],
privileges => ['SELECT', 'INSERT', 'DELETE', 'UPDATE'],
table => 'my-database-name.*',
user => "[email protected]${::ipaddress}",
}
'@@'創建導出。請注意,導出的資源是小寫字母。當使用變量時,還要注意雙引號而不是單引號。
當節點看到這個時,會發生什麼情況,它會用它的事實(在這種情況下:: ipaddress)填充這個導出的資源,並將它發送到puppetDB。您可以將此部分添加到您要授予訪問權限,所有的節點部分擊敗它的目的,或者你可以有應用於所有節點清單和做線沿線的東西:
if $::fqdn include? 'app'{
@@mysql_grant {"[email protected]${::ipaddress}/**my-database-name.*":
ensure => 'absent',
options => ['GRANT'],
privileges => ['SELECT', 'INSERT', 'DELETE', 'UPDATE'],
table => 'my-database-name.*',
user => "[email protected]${::ipaddress}",
}
}
然後您需要在應該應用此操作的節點上編寫import語句。
Mysql_grant <<| |>>
請注意:大寫。
另一個簡單的例子,這是我們適用於我們所有的Linux節點:
# collect all the public host RSA keys for known hosts
@@sshkey { $hostname:
ensure => present,
type => 'rsa',
host_aliases => [$::ipaddress, $::fqdn],
key => $sshrsakey,
}
# and populate known_hosts
Sshkey <<| |>>
#https://projects.puppetlabs.com/issues/21811
file { '/etc/ssh/ssh_known_hosts':
ensure => present,
path => '/etc/ssh/ssh_known_hosts',
mode => '0644',
}
Hiera
Hiera是建立出於這樣的目的,從數據單獨代碼。有關如何設置,請參閱hiera文檔。
你最終做的是,你將創建一個擁有它的所有數據YAML文件:
mysql::grants:
db1:
username: my-user-name
database: my-database-name
ip: 1.2.3.4
ensure: present
options:
- GRANT
privileges:
- SELECT
- INSERT
- DELETE
- UPDATE
table: my-database-name.*
db2:
username: my-user-name
database: my-database-name
ip: 1.2.3.5
ensure: present
options:
- GRANT
privileges:
- SELECT
- INSERT
- DELETE
- UPDATE
table: my-database-name.*
那你先走一步,把這個在你的MySQL節點(雖然創建一個小模塊會更乾淨):
$grants = hiera('mysql::grants', undef)
create_resources('mysql::grant', $grants)
Puppet將解析所有的hiera,然後爲每個找到的db創建一個授予。