第12章 Ansible角色
第1章 Ansible 角色介绍
1.为什么需要使用角色
不太灵活,臃肿
全部写在一起,修改不方便
配置文件随便放,不标准
2.角色解决了什么问题
把剧本 拆分 拆分 拆分
解耦,结构更清晰,调试更方便
3.编写角色的最佳实践
初级阶段,不要直接写角色,先写好剧本,然后再拆分
一开始不要想一步到位,不用拆的很细,尤其是变量
第2章 角色目录规划
0.官方说明
[https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html](https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html)
1.目录说明
注意!这里的目录结构必须按照官方定义的要求来做!不是自己随便乱起!
tasks				#存放主任务执行文件
handlers				#存放handlers文件
files					#存放需要发送的文件或压缩包
templates			#存放jinja模版配置文件
vars					#存放变量文件
第3章 编写rsync角色
0.编写思路
1.先写好剧本
2.创建角色目录
3.拷贝需要发送的文件到指定目录
4.拆分剧本
1.编写剧本
- hosts: backup
  vars:
    user_id: '666'
    rsync_user: 'www'
  tasks:
  #1.创建www组和www用户
  - name: 01-create_group
    group:
      name: "{{ rsync_user }}"
      gid: "{{ user_id }}"
  #2.创建www用户
  - name: 02-create_user
    user:
      name: "{{ rsync_user }}"
      uid: "{{ user_id }}"
      group: "{{ rsync_user }}"
      create_home: no
      shell: /sbin/nologin
  #3.创建数据目录并更改授权
  - name: 03-create_data
    file:
      path: "{{ item }}"
      state: directory
      owner: "{{ rsync_user }}"
      group: "{{ rsync_user }}"
      mode: '755'
    loop:
      - /data/
      - /backup/
  #4.安装rsync软件
  - name: 04-install_rsync
    yum:
      name: rsync
      state: latest
  #5.复制配置文件和密码文件
  - name: 05-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: 06-start
    systemd:
      name: rsyncd
      state: started
      enabled: yes
  #7.重启服务
  handlers:
    - name: restart rsyncd
      systemd:
        name: rsyncd
        state: restarted
2.创建角色目录
[root@m-61 ~]# cd /etc/ansible/roles/
[root@m-61 /etc/ansible/roles]# mkdir rsync_server/{tasks,handlers,files,templates,vars} -p
[root@m-61 /etc/ansible/roles]# tree rsync_server/
rsync_server/
├── files
├── handlers
├── tasks
├── templates
└── vars
3.把剧本复制到tasks目录
├── tasks
│   └── main.yaml
4.把配置文件复制到file目录
cp script/rsync/* /etc/ansible/roles/rsync_server/files/
5.拆分handlers
[root@m-61 ~]# cat /etc/ansible/roles/rsync_server/handlers/main.yaml
- name: restart rsyncd
  systemd:
    name: rsyncd
    state: restarted
6.拆分vars
[root@m-61 ~]# cat /etc/ansible/roles/rsync_server/vars/main.yaml
user_id: '666'
rsync_user: 'www'
7.精简tasks任务文件
[root@m-61 ~]# cat /etc/ansible/roles/rsync_server/tasks/main.yaml
#1.创建www组和www用户
- name: 01-create_group
  group:
    name: "{{ rsync_user }}"
    gid: "{{ user_id }}"
#2.创建www用户
- name: 02-create_user
  user:
    name: "{{ rsync_user }}"
    uid: "{{ user_id }}"
    group: "{{ rsync_user }}"
    create_home: no
    shell: /sbin/nologin
#3.创建数据目录并更改授权
- name: 03-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: 04-rsync
    state: latest
#5.复制配置文件和密码文件
- name: 05-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
8.编写调用文件
[root@m-61 ~]# cat /etc/ansible/rsync_server.yaml
- hosts: rsync_server
  roles:
    - rsync_server
9.编写主机清单
[root@m-61 ~]# cat /etc/ansible/hosts
[rsync_server]
172.16.1.41
10.调试运行
cd /etc/ansible/
ansible-playbook -C rsync_server.yaml
ansible-playbook rsync_server.yaml
第4章 编写sshd角色
1.编写思路
1.先拷贝配置文件到template目录下并重命名为j2
2.编写tasks文件
3.调试运行
2.创建角色目录
cd /etc/ansible/roles/
mkdir sshd/{tasks,handlers,files,templates,vars} -p
3.编写jinja模版文件
jinja模板注意:
1.模块必须是template
2.模版文件必须以.j2结尾
3.模版文件必须放在template目录下
关键配置:
#复制sshd配置文件到template文件夹下
Port \{\{ ssh_port \}\}
ListenAddress \{\{ ansible_facts.eth1.ipv4.address \}\}
4.编写变量文件
[root@m-61 /etc/ansible/roles/sshd]# cat vars/main.yaml
ssh_port: '22'
5.编写handlers文件
[root@m-61 /etc/ansible/roles/sshd]# cat handlers/main.yaml
- name: restart sshd
  systemd:
    name: sshd
    state: restarted
6.编写主任务文件
[root@m-61 /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
7.查看最终的目录
[root@m-61 /etc/ansible/roles]# tree sshd/
sshd/
├── files
├── handlers
│   └── main.yaml
├── tasks
│   └── main.yaml
├── templates
│   └── sshd_config.j2
└── vars
    └── main.yaml
8.编写主调用文件
[root@m-61 /etc/ansible/roles]# cat ../sshd.yaml
- hosts: ssh
  roles:
    - sshd
第5章 编写nfs角色
1.编写思路
1.先拷贝配置文件到template目录下并重命名为j2
2.编写handlers
3.编写tasks
2.创建角色目录
cd /etc/ansible/roles/
mkdir nfs_server/{tasks,handlers,files,templates,vars} -p
3.编写jinja模版文件
[root@m-61 ~]# cat /etc/ansible/roles/nfs_server/templates/exports.j2
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
4.编写handlers文件
[root@m-61 ~]# cat /etc/ansible/roles/nfs_server/handlers/main.yaml
- name: restart nfs
  systemd:
    name: nfs
    state: restarted
5.编写主任务文件
[root@m-61 ~]# 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
6.编写调用文件
[root@m-61 ~]# cat /etc/ansible/nfs_server.yaml
- hosts: nfs
  roles:
    - nfs_server
第6章 拆分init角色
0.编写思路
1.先分析以前写过所有的角色里重复的操作
2.把重复的操作内容单独写一个角色,例如:init
3.先备份一份以前写好的角色文件
4.精简以前的角色文件,删除重复的内容
5.调试,运行,检查
1.找出重复的操作
1.创建www组和www用户
2.创建www用户
3.创建数据目录并更改授权
4.安装rsync软件
4.安装nfs软件
2.创建角色目录
cd /etc/ansible/roles/
mkdir init/{tasks,handlers,files,templates,vars} -p
3.编写jinja模版文件
4.编写handlers文件
5.编写主任务文件
[root@m-61 /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
第八章 拆分后的各个服务角色文件
1.拆分后的rsync角色
[root@m-61 ~]# 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
2.拆分后的nfs角色
[root@m-61 ~]# 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
3.拆分后的lsyncd角色
4.调用文件
rsync
[root@m-61 ~]# cat /etc/ansible/rsync_server.yaml
- hosts: rsync_server
  roles:
    - init
    - rsync_server
nfs
[root@m-61 ~]# cat /etc/ansible/nfs_server.yaml
- hosts: nfs
  roles:
    - init
    - nfs_server
更新: 2024-11-25 16:33:36