Puppet和mysql:撤销并重复

时间:2016-05-14 13:36:41

标签: mysql puppet

格兰特:这有效

我有以下木偶代码:

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

并确实授予了我期望的权限。

撤销:这不起作用

如果我改变主意并说出来:

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

我注意到它没有撤销权限(即使我更改了s / GRANT / REVOKE /)也没有。有关如何自动撤销的任何指示?我还没有在手册中或通过谷歌搜索找到它。

重复:我没有复制并粘贴

而丢失

现在假设我想允许来自多个主机的访问。我的puppet-fu让我不知道如何不重复该块(即,只是使用不同的IP地址进行复制粘贴)。我确定puppet为此定义了工具,但我还没有想出那个部分。

感谢您的任何指示!

2 个答案:

答案 0 :(得分:0)

对于重复部分,我可以想到两种方式:

  1. puppetDB
  2. hiera
  3. PuppetDB

    每当您希望节点的事实在第二个节点上执行某些操作时,请使用puppetDB。这称为导出资源。这也在puppet-mysql documentation中解释。

    示例1:将所有计算机的SSH主机密钥添加到所有其他计算机的known_keys。

    示例2:将所有计算机添加到监视中,创建自己的主机定义。

    示例3:在某类机器上,允许它们连接到MySQL。

    在每种情况下,您首先通过puppet-puppetdb模块安装puppetDB。你需要puppet4。只有拥有8 GB以上的内存才会启动PuppetDB。

    然后您必须编写资源导出和资源导入。在所有具有您想要的事实的节点上(如ip / fqdn),您可以编写导出:

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

    ' @@'创建导出。请注意,导出的资源是小写。每当使用变量时,还要注意双引号而不是单引号。

    每当节点看到这种情况时会发生什么,它会用它的事实填充这个导出的资源(在这种情况下是:: ipaddress),并将它发送到puppetDB。您可以将此部分添加到要授予访问权限的所有节点,部分地使其失效,或者您可以将一个清单应用于所有节点并执行以下操作:

    if $::fqdn include? 'app'{
      @@mysql_grant {"my-user-name@${::ipaddress}/**my-database-name.*":
        ensure     => 'absent',
        options    => ['GRANT'],
        privileges => ['SELECT', 'INSERT', 'DELETE', 'UPDATE'],
        table      => 'my-database-name.*',
        user       => "my-user-name@${::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,然后为每个找到的数据库创建一个授权。

答案 1 :(得分:-1)

尝试在新用户上使用mysql_grant,然后在清单上使用puppet apply和-d(调试)和-v(详细)选项。

这应该会给你一大堆输出,显示它正在做什么。它将要做的是在您的数据库上运行sql命令,例如

grant all on db.* to user

运行

时也会显示这些内容
 show grants for user

然后更改为“缺席”,然后重复。 现在您确切地知道您的数据库上正在运行的SQL命令puppet。

然后,您可以直接在数据库中尝试这些命令,看看它们是否符合您的预期。

注意:使用ensure =&gt; &#39;缺席&#39;删除权限是正确的做法,将grant更改为revoke won to help。