我正在设置Ansible接管木偶安装。
我看到正在设置ypbind文件的puppet manifest,它根据主机名推出了一个稍微不同的yp.conf文件版本。
所以我有以下傀儡定义:
class ypbind {
file {'yp.conf':
ensure => file,
content => template("ypbind/yp.conf.erb"),
owner => 'root',
group => 'root',
mode => '0644',
notify => Service['ypbind'],
path => '/etc/yp.conf',
}
service {'ypbind':
enable => true,
ensure => running,
}
}
此模板(已清理的域和IP)
<% case
when @hostname =~/(^[p|d]NY-)/ -%>
#New York Data Center NIS
domain NY1.domain.com IP1
domain NY2.domain.com IP2
domain SF1.domain.com IP3
<%when @hostname =~/(^[p|d]SF-)/ -%>
#San Fran Data Center NIS
domain SF1.domain.com IP1
domain SF2.domain.com IP2
domain NY1.domain.com IP3
<% else -%>
#Default to NY DC
domain NY1.domain.com IP1
domain NY2.domain.com IP2
<% end -%>
我的问题是我如何使用Ansible复制这个逻辑? 我想我找到了一种方法来使用hostname,但我必须使用多个文件。有没有办法在这个木偶的例子中做同样的事情?
---
- hosts: all
sudo: yes
gather_facts: yes
user: ansible
tasks:
- name: update NY ypbind
template: src=/etc/ansible/files/yp.conf.NY dest=/etc/yp.conf mode=0644 owner=root group=root
notify: restart ypbind
when: ansible_hostname | match('^[p|d]NY-test01')
- name: update SF ypbind
template: src=/etc/ansible/files/yp.conf.SF dest=/etc/yp.conf mode=0644 owner=root group=root
notify: restart ypbind
when: ansible_hostname | match('^[p|d]SF-test01')
handlers:
- name: restart ypbind
- service: name=ypbind state=restarted
我认为经过研究,我只是使用jinja2模板系统,不知道还有多少...
答案 0 :(得分:1)
对于其他可能感兴趣的人来说,结果非常简单。这只是以下几点。
ypbind.yaml
---
- hosts: all
sudo: yes
gather_facts: yes
user: ansible
tasks:
- name: update NY ypbind
template: src=/etc/ansible/files/yp.conf.j2 dest=/etc/yp.conf mode=0644 owner=root group=root
notify: restart ypbind
handlers:
- name: restart ypbind
service: name=ypbind state=restarted
yp.conf.j2
{% if ansible_hostname |match ('^[p|d]sf-') %}
domain SF.domain.com server 10.200.0.1
domain SF.domain.com server 10.200.0.2
domain NY.domain.com server 10.201.0.1
{% else %}
domain NY.domain.com server 10.201.0.1
domain NY.domain.com server 10.201.0.2
domain SF.domain.com server 10.200.0.1
{% endif %}