2016-05-14 79 views
0

格蘭特:這個作品

我有以下木偶代碼:木偶和mysql:撤銷和重複

mysql_grant {'[email protected]/my-database-name.*': 
    ensure  => 'present', 
    options => ['GRANT'], 
    privileges => ['SELECT', 'INSERT', 'DELETE', 'UPDATE'], 
    table  => 'my-database-name.*', 
    user  => '[email protected]', 
} 

,並且不給予我期待的權限。

撤銷:這不起作用

如果我改變了主意,說這個:

mysql_grant {'[email protected]/my-database-name.*': 
    ensure  => 'absent', 
    options => ['GRANT'], 
    privileges => ['SELECT', 'INSERT', 'DELETE', 'UPDATE'], 
    table  => 'my-database-name.*', 
    user  => '[email protected]', 
} 

我注意到,它並不會撤銷許可(甚至如果我改變S /格蘭特/撤消/)。任何關於如何自動撤銷的指針?我無法在手冊或Google搜索中找到它。

重複:我迷路了,沒有複製和粘貼

現在假設我希望允許從多個主機訪問。我的puppet-fu使我不知道如何不重複該塊(即只是複製粘貼不同的IP地址)。我確信puppet爲此定義了工具,但我還沒有弄清楚那個部分。

感謝您的指點!

回答

-1

對新用戶嘗試使用mysql_grant,然後使用puppet在您的清單上使用-d(debug)和-v(詳細)選項。

這應該會給你一個顯示它在做什麼的輸出負載。什麼會做的是你的數據庫如

grant all on db.* to user 

這些也將顯示在運行SQL命令時運行

show grants for user 

然後切換到「缺席」,並重復。 現在您已經知道在您的數據庫上正在運行的puppet SQL命令。

然後,您可以直接在數據庫中嘗試這些命令,看看它們是否按照您的預期行事。


注意:使用ensure =>'absent'是刪除權限的正確方法,將grant更改爲撤銷將無濟於事。

0

對於重複部分,我能想到的方法有兩種:

  1. puppetDB
  2. 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創建一個授予。