0

木偶版 - 3.7.5

你好

我正在尝试使用数组停止使用 puppet 和 Hiera yaml 文件的多项服务,我遇到的问题是随机化。这对我来说会导致一个错误,它不会停止服务,因为有其他服务依赖于它。所以这是我的 Hiera 文件的结构:

server::services:
  - 'WAS'
  - 'DNS'
  - 'IISADMIN'
  - 'NetPipeActivator'
  ...

因此,当我运行我的 puppet 代理时,它成功地循环通过每个服务并停止它们,但对于某些服务,它需要确认我们希望该服务和所有相关服务结束。我收到此错误:

The following services are dependent on the windows Process Activation
Service service. Stopping the Windows Process Activation Service service
will also stop these services.

Net.pipe Listener Adapter

Do you want to continue the operation? (Y/N)[N]:
No valid response was provided.

然后它会出错并跳过该服务并继续其余的。我的第一个想法是在我的 yaml 文件中包含 Net.pipe 服务,但在 WAS 之上,这样它会在停止 WAS 之前停止它。Puppet 每次都会随机执行列表。

这也是我的清单文件:

Class windows::services{

  $windowsservices = [hiera_array('server::services')]


  service {$windowsservices:
    ensure => "stopped",
    enable => manual,
  }
}

有没有解决的办法 ?我正在考虑使用排序箭头'->',但据我所知,它们不能在 Hiera 数组中使用。

提前致谢 :)

4

1 回答 1

0

Hiera 默认以未定义的顺序返回数组。在 Puppet 中获得数据后,您可以根据需要使用PuppetLabs-stdlib函数 sort() 对它们进行排序。

但是,进行字典排序可能会隐藏您的问题,但不能解决它。您的实际问题是您没有在 Puppet 中为服务之间的关系建模。您拥有的是依赖于其他服务的服务,您应该使用关系来反映这一点。

这将使您的清单更加冗长,但它将是“正确的”。

class windows::services { 
  service { 'WAS':
    ensure => stopped,
    enable => manual,
  }
  service { 'NetPipeActivator':
    ensure => stopped,
    enable => manual,
    before => Service['WAS'],
  }
}

您也可以这样做,但这是一个坏主意,因为它假定资源来自 Hiera。如果他们不这样做,这将导致一个清单编译错误:

class windows::services { 
  $windowsservices = [hiera_array('server::services')]
  service { $windowsservices:
    ensure => stopped,
    enable => manual,
  }
  Service['NetPipeActivator'] -> Service['WAS']
}

如果您将要停止的服务存储在 Hiera 中,输入可能很简单,但您无法控制任何排序。

于 2015-05-12T09:54:40.897 回答