puppet-enterprise - 如何自动将节点添加到组中?

标签 puppet-enterprise

我刚刚从 PE 3.3 切换到 Puppet Enterprise 3.8。 我过去常常使用 rake api 来创建我的组、类和节点。这在 PE 3.8 中不再有效,并且除了使用仪表板 ( https://docs.puppetlabs.com/pe/latest/console_classes_groups.html#adding-nodes-to-a-node-group ) 之外,似乎没有任何记录的方法将节点添加到给定组。

有人可以向我指出一些有关如何自动将节点添加到组中的文档吗?

最佳答案

您可以使用Node Classifier API添加组,或将节点添加到组中。您需要在 master 和 include the correct certs with the requests 上运行这些curl 命令。 。在下面的命令中,将“fqdn”替换为您的主服务器的完全限定域名。

创建一个名为“foo”的组,它是默认组的子组

curl -X POST -H 'Content-Type: application/json' \
  --cert /etc/puppetlabs/puppet/ssl/certs/fqdn.pem \
  --key /etc/puppetlabs/puppet/ssl/private_keys/fqdn.pem \
  --cacert /etc/puppetlabs/puppet/ssl/certs/ca.pem \
  -d '{ "name": "foo",
        "parent": "00000000-0000-4000-8000-000000000000",
        "environment": "production",
        "classes": {}
      }' \
  https://fqdn:4433/classifier-api/v1/groups

获取所有组,以便我们可以获得新创建的组的 ID

curl 'https://fqdn:4433/classifier-api/v1/groups' \
   -H "Content-Type: application/json" \
   --cert /etc/puppetlabs/puppet/ssl/certs/fqdn.pem \
   --key /etc/puppetlabs/puppet/ssl/private_keys/fqdn.pem \
   --cacert /etc/puppetlabs/puppet/ssl/certs/ca.pem

对该请求的响应将包含新创建的组:

{
  "environment_trumps": false,
  "parent": "00000000-0000-4000-8000-000000000000",
  "name": "foo",
  "variables": {},
  "id": "085e2797-32f3-4920-9412-8e9decf4ef65",
  "environment": "production",
  "classes": {}
},

修改新组以“固定”节点

curl -X POST -H 'Content-Type: application/json' \
  --cert /etc/puppetlabs/puppet/ssl/certs/fqdn.pem \
  --key /etc/puppetlabs/puppet/ssl/private_keys/fqdn.pem \
  --cacert /etc/puppetlabs/puppet/ssl/certs/ca.pem \
  -d '{ "rule": ["or", ["=", "name", "u38a.vm"]] }' \
  https://fqdn:4433/classifier-api/v1/groups/085e2797-32f3-4920-9412-8e9decf4ef65

修改新组以“固定”另一个节点(您必须提供完整的新规则)

curl -X POST -H 'Content-Type: application/json' \
  --cert /etc/puppetlabs/puppet/ssl/certs/fqdn.pem \
  --key /etc/puppetlabs/puppet/ssl/private_keys/fqdn.pem \
  --cacert /etc/puppetlabs/puppet/ssl/certs/ca.pem \
  -d '{ "rule": ["or", ["=", "name", "u38a.vm"], ["=", "name", "u38.vm"]] }' \
  https://fqdn:4433/classifier-api/v1/groups/085e2797-32f3-4920-9412-8e9decf4ef65

更新2016-04-12

从 Puppet Enterprise 2016.1.1 开始,您可以使用 new pin/unpin endpoints of the classifier API更轻松地做到这一点:

固定节点

curl -X POST -H 'Content-Type: application/json' \
  --cert $(puppet config print hostcert) \
  --key $(puppet config print hostprivkey) \
  --cacert $(puppet config print localcacert) \
-d '{"nodes": ["foo.tld", "bar.tld", "baz.tld"]}' \
  https://$HOSTNAME:4433/classifier-api/v1/groups/<group id>/pin

取消固定节点

curl -X POST -H 'Content-Type: application/json' \
  --cert $(puppet config print hostcert) \
  --key $(puppet config print hostprivkey) \
  --cacert $(puppet config print localcacert) \
-d '{"nodes": ["foo.tld", "bar.tld", "baz.tld"]}' \
  https://$HOSTNAME:4433/classifier-api/v1/groups/<group id>/unpin

从所有组中取消固定节点

使用新的(技术预览版)commands/unpin-from-all端点:

curl -X POST -H 'Content-Type: application/json' \
  --cert $(puppet config print hostcert) \
  --key $(puppet config print hostprivkey) \
  --cacert $(puppet config print localcacert) \
-d '{"nodes": ["foo.tld", "bar.tld", "baz.tld"]}' \
  https://$HOSTNAME:4433/classifier-api/v1/commands/unpin-from-all

通过所有这些端点,您还可以generate a token并提供它,而不是使用基于证书的身份验证。

关于puppet-enterprise - 如何自动将节点添加到组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30176390/

相关文章:

windows - 使用 puppet exec 检测是否已安装 Windows 服务

windows - Puppet 安装在另一个节点定义中定义的软件

Puppet splay 和 splaylimit 解释了吗?

linux - Puppet 模块在 '{' 处出现语法错误;预计 '}'

puppet - 如何计算puppet erb文件中的值

python 2.7.5 请求和证书验证失败

puppet - 安装和运行 apache2 或 httpd 的平台独立 list

ruby - puppet 4.10.4 : Master not reading manifest

puppet - 使用 puppet 执行 shell 命令/脚本