Ansible-Role编写之使用渲染host文件

一般部署分布式集群的时候都会用到hosts文件,我们一般会把ip地址和主机名写进去,那么编写Ansible的时候渲染如何实现?
首先定义这个roles角色

[root@ansible kubeadm-high-install]# ls
ansible.cfg  group_vars  hosts  roles  site-all.yml

第一个文件将默认的etc/ansible的cfg文件拿过来,将key去掉,不然会报ssh的问题,group_vars/all.yml放变量的,写这个hosts也用不到,最重要的就是后面三个hosts、roles、site-all.yml,用来编写整个playbook

[root@ansible kubeadm-high-install]# cat hosts
[master]
192.168.30.51 node_name=k8s-master1
192.168.30.52 node_name=k8s-master2
192.168.30.53 node_name=k8s-master3

[node]
192.168.30.54 node_name=node1

[k8s:children]
master  
node

roles就是这个角色,init就是系统初始化的这个角色,tasks具体的任务细节都通过main.yml来实现编写,这里使用的template模块,如果下面templates的J2就会直接引用上

[root@ansible kubeadm-high-install]# cat roles/init/tasks/main.yaml 

---
#这个playbook需要初始化每个节点

- name: 添加hosts
  template: src=host.j2 dest=/etc/hosts
而这个j2文件里面说的是通过k8s这个组,也就是我们在hosts定义的k8s:children这个组下来的,hostvars来获取k8s组下面的ip ,后面定义我们hosts里面的主机名node_name是什么hostname定义的直接也就获取到了
 inventory_hostname 获取被操作的当前主机主机名
 以及自定义的node_name,这样就渲染过来了
[root@ansible kubeadm-high-install]# cat roles/init/templates/host.j2 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
{% for host in groups['k8s'] %}
{{ hostvars[host].inventory_hostname }} {{ hostvars[host].node_name }}
{% endfor %} 

测试执行

[root@ansible kubeadm-high-install]# ansible-playbook -i hosts site-all.yml 

PLAY [1、主机初始化] **********************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************
ok: [192.168.30.53]
ok: [192.168.30.52]
ok: [192.168.30.54]
ok: [192.168.30.51]

TASK [init : 添加hosts] ***************************************************************************************************************
changed: [192.168.30.52]
changed: [192.168.30.51]
changed: [192.168.30.54]
changed: [192.168.30.53]

PLAY RECAP **************************************************************************************************************************
192.168.30.51              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.30.52              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.30.53              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.30.54              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

查看是否成功渲染

[root@ansible kubeadm-high-install]# ansible all -a "cat /etc/hosts"
192.168.30.51 | CHANGED | rc=0 >>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.30.51 k8s-master1
192.168.30.52 k8s-master2
192.168.30.53 k8s-master3
192.168.30.54 node1

192.168.30.54 | CHANGED | rc=0 >>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.30.51 k8s-master1
192.168.30.52 k8s-master2
192.168.30.53 k8s-master3
192.168.30.54 node1

192.168.30.52 | CHANGED | rc=0 >>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.30.51 k8s-master1
192.168.30.52 k8s-master2
192.168.30.53 k8s-master3
192.168.30.54 node1

192.168.30.53 | CHANGED | rc=0 >>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.30.51 k8s-master1
192.168.30.52 k8s-master2
192.168.30.53 k8s-master3
192.168.30.54 node1

猜你喜欢

转载自blog.51cto.com/14143894/2498756