Ansible三 角色

annan 2020-04-21

第一章 Ansible 角色介绍

1.为什么需要使用角色

1.不太灵活,臃肿
2.全部写在一起,修改不方便
3.配置文件随便放,不标准

2.角色解决了什么问题

1.把剧本 拆分 拆分 拆分
2.解耦,结构更清晰,调试更方便

3.编写角色的最佳实践

1.初级阶段,不要直接写角色,先写好剧本,然后再拆分
2.一开始不要想一步到位,不用拆的很细,尤其是变量

第二章 角色目录规划

0.官方说明

https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html

1.目录说明

注意!这里的目录结构必须按照官方定义的要求来做!不是自己随便乱起!

tasks					#存放主任务执行文件
handlers			#存放handlers文件
files					#存放需要发送的文件或压缩包
templates			#存放jinja模版配置文件
vars					#存放变量文件

第三章 实战演练-编写rsync角色

3.0 编写思路

1.先写好剧本
2.创建角色目录
3.拷贝需要发送的文件到指定目录
4.拆分剧本

3.1 编写剧本

- hosts: backup
  vars:
    user_id: ‘666‘
    rsync_user: ‘www‘

  tasks:
  #1.创建www组和www用户
  - name: create_group
    group:
      name: "{{ rsync_user }}"
      gid: "{{ user_id }}"
      
  #2.创建www用户  
  - name: create_user
    user:
      name: "{{ rsync_user }}"
      uid: "{{ user_id }}"
      group: "{{ rsync_user }}"
      create_home: no
      shell: /sbin/nologin
  
  #3.创建数据目录并更改授权
  - name: create_data
    file: 
      path: "{{ item }}" 
      state: directory 
      owner: "{{ rsync_user }}" 
      group: "{{ rsync_user }}" 
      mode: ‘755‘
    loop:
      - /data/
      - /backup/

  #4.安装rsync软件
  - name: install_rsync
    yum:
      name: rsync
      state: latest

  #5.复制配置文件和密码文件
  - name: copy pwd&conf
    copy:
      src: "{{ item.src }}"
      dest: /etc/
      mode: "{{ item.mode }}"
    notify:
      - restart rsyncd
    loop:
      - { src: /root/script/rsync/rsyncd.conf,  mode: ‘644‘}
      - { src: /root/script/rsync/rsync.passwd, mode: ‘600‘}
  
  #6.启动服务
  - name: start 
    systemd:
      name: rsyncd
      state: started
      enabled: yes
      
  #7.重启服务
  handlers:
    - name: restart rsyncd
      systemd:
        name: rsyncd
        state: restarted

3.2 创建角色目录

[ ~]# cd /etc/ansible/roles/
[ /etc/ansible/roles]# mkdir rsync_server/{tasks,handlers,files,templates,vars} -p
[ /etc/ansible/roles]# tree rsync_server/
rsync_server/
├── files
├── handlers
├── tasks
├── templates
└── vars

3.3 把剧本复制到tasks目录

├── tasks
│   └── main.yaml

3.4 把配置文件复制到file目录

cp script/rsync/* /etc/ansible/roles/rsync_server/files/

3.5 拆分handlers

[ ~]# cat /etc/ansible/roles/rsync_server/handlers/main.yaml 
- name: restart rsyncd
  systemd:
    name: rsyncd
    state: restarted

3.6 拆分vars

[ ~]# cat /etc/ansible/roles/rsync_server/vars/main.yaml 
user_id: ‘666‘
rsync_user: ‘www‘

3.7 精简tasks任务文件

[ ~]# cat /etc/ansible/roles/rsync_server/tasks/main.yaml 
#1.创建www组和www用户
- name: create_group
  group:
    name: "{{ rsync_user }}"
    gid: "{{ user_id }}"
    
#2.创建www用户  
- name: create_user
  user:
    name: "{{ rsync_user }}"
    uid: "{{ user_id }}"
    group: "{{ rsync_user }}"
    create_home: no
    shell: /sbin/nologin

#3.创建数据目录并更改授权
- name: create_data
  file: 
    path: "{{ item }}" 
    state: directory 
    owner: "{{ rsync_user }}" 
    group: "{{ rsync_user }}" 
    mode: ‘755‘
  loop:
    - /data/
    - /backup/

#4.安装rsync软件
- name: install_rsync
  yum:
    name: rsync
    state: latest

#5.复制配置文件和密码文件
- name: copy pwd&conf
  copy:
    src: "{{ item.src }}"
    dest: /etc/
    mode: "{{ item.mode }}"
  notify:
    - restart rsyncd
  loop:
    - { src: rsyncd.conf,  mode: ‘644‘}
    - { src: rsync.passwd, mode: ‘600‘}

#6.启动服务
- name: start 
  systemd:
    name: rsyncd
    state: started
    enabled: yes

3.8 编写调用文件

[ ~]# cat /etc/ansible/rsync_server.yaml 
- hosts: rsync_server 
  roles:
    - rsync_server

3.9 编写主机清单

[ ~]# cat /etc/ansible/hosts 
[rsync_server]
172.16.1.41

3.10 调试运行

cd /etc/ansible/
ansible-playbook -C rsync_server.yaml 
ansible-playbook rsync_server.yaml

第四章 实战演练-编写sshd角色

4.1 编写思路

1.先拷贝配置文件到template目录下并重命名为j2
2.编写tasks文件
3.调试运行

4.2 创建角色目录

cd /etc/ansible/roles/
mkdir sshd/{tasks,handlers,files,templates,vars} -p

4.3 编写jinja模版文件

jinja模板注意:

1.模块必须是template
2.模版文件必须以.j2结尾
3.模版文件必须放在template目录下

关键配置:

#复制sshd配置文件到template文件夹下
Port {{ ssh_port }}
ListenAddress {{ ansible_facts.eth1.ipv4.address }}

4.4 编写变量文件

[ /etc/ansible/roles/sshd]# cat vars/main.yaml 
ssh_port: ‘22‘

4.5 编写handlers文件

[ /etc/ansible/roles/sshd]# cat handlers/main.yaml 
- name: restart sshd
  systemd:
    name: sshd 
    state: restarted

4.6 编写主任务文件

[ /etc/ansible/roles/sshd]# cat tasks/main.yaml 
#1.复制配置文件和密码文件
- name: 01_copy_sshd 
  template:
    src: sshd_config.j2
    dest: /etc/ssh/sshd_config
    mode: ‘600‘
    backup: yes
  notify:
    - restart sshd 

#2.启动服务
- name: start 
  systemd:
    name: sshd 
    state: started
    enabled: yes

4.7 查看最终的目录

[root@m01 /etc/ansible/roles]# tree sshd/
sshd/
├── files
├── handlers
│   └── main.yaml
├── tasks
│   └── main.yaml
├── templates
│   └── sshd_config.j2
└── vars
    └── main.yaml

4.8.编写主调用文件

[root@m01 /etc/ansible/roles]# cat ../sshd.yaml 
- hosts: ssh
  roles:
    - sshd

第五章 实战演练-编写nfs角色

5.1 编写思路

1.先拷贝配置文件到template目录下并重命名为j2
2.编写handlers
3.编写tasks

5.2 创建角色目录

cd /etc/ansible/roles/
mkdir nfs_server/{tasks,handlers,files,templates,vars} -p

5.3 编写jinja模版文件

[ ~]# cat /etc/ansible/roles/nfs_server/templates/exports.j2 
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

5.4 编写handlers文件

[ ~]# cat /etc/ansible/roles/nfs_server/handlers/main.yaml 
- name: restart nfs 
  systemd:
    name: nfs 
    state: restarted

5.5 编写主任务文件

[ ~]# cat /etc/ansible/roles/nfs_server/tasks/main.yaml 
#1.创建www组和www用户
- name: create_group
  group:
    name: www
    gid: 666
    
#2.创建www用户  
- name: create_user
  user:
    name: www
    uid: 666
    group: www
    create_home: no
    shell: /sbin/nologin

#3.创建数据目录并更改授权
- name: create_data
  file: 
    path: "{{ item }}" 
    state: directory 
    owner: www
    group: www
    mode: ‘755‘
  loop:
    - /data/
    - /backup/

#4.安装nfs软件
- name: install_nfs
  yum:
    name: nfs-utils 
    state: latest

#5.复制配置文件和密码文件
- name: copy_exports
  template:
    src: exports.j2
    dest: /etc/exports
  notify:
    - restart nfs

#6.启动服务
- name: start 
  systemd:
    name: nfs 
    state: started
    enabled: yes

5.6 编写调用文件

[ ~]# cat /etc/ansible/nfs_server.yaml 
- hosts: nfs
  roles:
    - nfs_server

第六章 实战演练-编写lsyncd服务

第七章 拆分init角色

7.0 编写思路

1.先分析以前写过所有的角色里重复的操作
2.把重复的操作内容单独写一个角色,例如:init 
3.先备份一份以前写好的角色文件
4.精简以前的角色文件,删除重复的内容
5.调试,运行,检查

7.1 找出重复的操作

1.创建www组和www用户
2.创建www用户  
3.创建数据目录并更改授权
4.安装rsync软件
4.安装nfs软件

7.2 创建角色目录

cd /etc/ansible/roles/
mkdir init/{tasks,handlers,files,templates,vars} -p

7.3 编写jinja模版文件

7.4 编写handlers文件

7.5 编写主任务文件

[ /etc/ansible]# cat /etc/ansible/roles/init/tasks/main.yaml 
#1.创建www组和www用户
- name: create_group
  group:
    name: www
    gid: 666
    
#2.创建www用户  
- name: create_user
  user:
    name: www
    uid: 666
    group: www
    create_home: no
    shell: /sbin/nologin

#3.创建数据目录并更改授权
- name: create_data
  file: 
    path: "{{ item }}" 
    state: directory 
    owner: www
    group: www
    mode: ‘755‘
  loop:
    - /data/
    - /backup/

#4.安装nfs软件
- name: install_soft
  yum:
    name: "{{ item }}"
    state: latest
  loop:
    - rsync
    - nfs-utils

第八章 拆分后的各个服务角色文件

8.1 拆分后的rsync角色

[ ~]# cat /etc/ansible/roles/rsync_server/tasks/main.yaml 
#1.复制配置文件和密码文件
- name: copy pwd&conf
  copy:
    src: "{{ item.src }}"
    dest: /etc/
    mode: "{{ item.mode }}"
  notify:
    - restart rsyncd
  loop:
    - { src: rsyncd.conf,  mode: ‘644‘}
    - { src: rsync.passwd, mode: ‘600‘}

#2.启动服务
- name: start 
  systemd:
    name: rsyncd
    state: started
    enabled: yes

8.2 拆分后的nfs角色

[ ~]# cat /etc/ansible/roles/nfs_server/tasks/main.yaml 
#1.复制配置文件和密码文件
- name: copy_exports
  template:
    src: exports.j2
    dest: /etc/exports
  notify:
    - restart nfs

#2.启动服务
- name: start 
  systemd:
    name: nfs 
    state: started
    enabled: yes

8.3 拆分后的lsyncd角色

8.4 调用文件

rsync

[ ~]# cat /etc/ansible/rsync_server.yaml 
- hosts: rsync_server 
  roles:
    - init
    - rsync_server

nfs

[ ~]# cat /etc/ansible/nfs_server.yaml 
- hosts: nfs
  roles:
    - init
    - nfs_server

相关推荐