傀儡到Ansible,如何举例

时间:2015-08-24 17:46:25

标签: puppet ansible

我正在设置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模板系统,不知道还有多少...

1 个答案:

答案 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 %}