帮酷LOGO
  • 显示原文与译文双语对照的内容


问题:

我试图编写一个脚本来设置Icinga2节点,但每个主机都需要从Icinga2主机进行身份验证。 现在我正在考虑从 node 到主机的ssh,但这并不是一个好主意。 我也尝试使用波塞尔的提示,但是我正在运行,塔的剧本,这显然不支持( 它只是等待输入标准值) 。


回答 1:

Ansible允许通过 delegate_to 参数从其他主机获取事实。

要从icinga2服务器获取票证,你将需要如下内容:

- name: Get ticket.
 command: icinga2 pki ticket --cn 'your cn'
 register: ticket
 delegate_to: icinga2_server

这里任务将 icinga2 pki ticket 命令的输出存储在 ticket 变量中。 你可能需要筛选一点才能获得票证 id 。 看一下 Ansible示例存储库( ) 以获得更多信息。 你还需要在你的inventory 中使用icinga2_server进行委派。


回答 2:

好吧,因为我写了这个过滤器,尽管我应该分享它。 https://gist.github.com/byoungb/35c8bbed924bb34f557023992b9b67d3

from ansible.errors import AnsibleError
def icinga_ticket(value, salt):
 try:
 from pbkdf2 import PBKDF2
 except ImportError:
 raise AnsibleError('pbkdf2 library is required for `icinga_ticket` filter"pip install pbkdf2"')
 return PBKDF2(str(value), str(salt), iterations=50000).hexread(20)
class FilterModule(object):
 def filters(self):
 return dict(
 icinga_ticket=icinga_ticket,
 )

将这里存储在ansible过滤器位置 plugins/filter/icinga.py的插件中

像这样使用

- name: setup icinga node
 command: icinga2 node setup --ticket {{ 'web1.domain'|icinga_ticket('salt') }} --cn web1.domain --endpoint master.domain --zone web1.domain --master_host master.domain --trustedcert/var/lib/icinga2/certs/master.domain.crt --accept-commands --accept-config
 notify: restart icinga




Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语