puppet - 什么是 Puppet 相当于 Chef 中的 'ignore_failure' 或 Ansible 中的 'ignore_errors'?

标签 puppet devops

我在 Puppet Master 上有以下 list :

exec { 'DatabaseCreation':
  command => '/usr/bin/mysqladmin  -u root --password="system" create gitHandson'
}

当我跑 puppet agent --test在 Puppet Agent 上,它给出了以下错误:
Notice: /Stage[main]/Deployment/Exec[DatabaseCreation]/returns: /usr/bin/mysqladmin: CREATE DATABASE failed; error: 'Can't create database 'gitHandson'; database exists'
Error: /usr/bin/mysqladmin  -u root --password="system" create gitHandson returned 1 instead of one of [0]

它应该忽略错误而不是给出错误。为此,我们在 Chef 中有“ignore_failure”,在 Ansible 中有“ignore_errors”。它的 Puppet 等价物是什么?

最佳答案

简短的回答:没有。 Puppet 资源必须成功,没有办法忽略错误。

最简单(也是 hackyiest)的解决方案是添加一个 && true到您的命令末尾,因此它将返回 0 并且不会失败。

但是,exec 的问题在于它不是幂等的。 Puppet 是关于描述状态并确保事情只需要运行一次。

因此,对于您的示例,最好扩展 exec 以添加 unlessonlyif参数,因此该命令仅在数据库不存在时运行。

exec { 'DatabaseCreation':
  command => '/usr/bin/mysqladmin  -u root --password="system" create gitHandson',
  unless  => 'Some command that exits 0 if the gitHandson database exists'
}

更多详情here.

更好 ,有一个Puppetlabs MySQL module ,它允许您安装 mysql、设置 root 密码和创建 MySQL 数据库。

例子:
mysql::db { 'mydb':
  user     => 'myuser',
  password => 'mypass',
  host     => 'localhost',
  grant    => ['SELECT', 'UPDATE'],
}

关于puppet - 什么是 Puppet 相当于 Chef 中的 'ignore_failure' 或 Ansible 中的 'ignore_errors'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36077643/

相关文章:

vagrant - 通过 wifi 从其他计算机访问私有(private) VM

java - 当我尝试保存新凭据时,Jenkins 通过 SSH 发布出现错误

kubernetes - 使用RBAC授予对Kubernetes中单个Pod的访问权限

azure - 在 Azure Devops 发布管道上的 Appsettings.Json 中添加数组元素 通过 magic chunks 配置转换

kubernetes - 如何在 EKS CLI 中检查微服务的网络连接

puppet - 比较 puppet 模板中的两个字符串变量

vagrant - Puppet - 如何仅在需要安装或更新软件包时运行 'apt-get update'

powershell - 创建虚拟目录 exec 应用每个代理运行

ruby - puppet rspec 在 ubuntu 10.04 上不起作用

azure - 如何停用/跳过发布管道中的阶段(非 YAML)但其直通(继续下一阶段)