zoukankan      html  css  js  c++  java
  • [ansible]-ansible-角色

    第一章 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角色

    0.编写思路

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

    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
    

    2.创建角色目录

    [root@m01 ~]# cd /etc/ansible/roles/
    [root@m01 /etc/ansible/roles]# mkdir rsync_server/{tasks,handlers,files,templates,vars} -p
    [root@m01 /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@m01 ~]# cat /etc/ansible/roles/rsync_server/handlers/main.yaml 
    - name: restart rsyncd
      systemd:
        name: rsyncd
        state: restarted
    

    6.拆分vars

    [root@m01 ~]# cat /etc/ansible/roles/rsync_server/vars/main.yaml 
    user_id: '666'
    rsync_user: 'www'
    

    7.精简tasks任务文件

    [root@m01 ~]# 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
    

    8.编写调用文件

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

    9.编写主机清单

    [root@m01 ~]# 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 
    

    第四章 编写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@m01 /etc/ansible/roles/sshd]# cat vars/main.yaml 
    ssh_port: '22' 
    

    5.编写handlers文件

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

    6.编写主任务文件

    [root@m01 /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@m01 /etc/ansible/roles]# tree sshd/
    sshd/
    ├── files
    ├── handlers
    │   └── main.yaml
    ├── tasks
    │   └── main.yaml
    ├── templates
    │   └── sshd_config.j2
    └── vars
        └── main.yaml
    

    8.编写主调用文件

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

    第五章 编写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@m01 ~]# 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@m01 ~]# cat /etc/ansible/roles/nfs_server/handlers/main.yaml 
    - name: restart nfs 
      systemd:
        name: nfs 
        state: restarted
    

    5.编写主任务文件

    [root@m01 ~]# 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@m01 ~]# cat /etc/ansible/nfs_server.yaml 
    - hosts: nfs
      roles:
        - nfs_server
    

    第六章 编写lsyncd服务

    
    

    第七章 拆分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@m01 /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@m01 ~]# 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@m01 ~]# 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@m01 ~]# cat /etc/ansible/rsync_server.yaml 
    - hosts: rsync_server 
      roles:
        - init
        - rsync_server 
    

    nfs

    [root@m01 ~]# cat /etc/ansible/nfs_server.yaml 
    - hosts: nfs
      roles:
        - init
        - nfs_server
    
  • 相关阅读:
    hdu5360 Hiking(水题)
    hdu5348 MZL's endless loop(欧拉回路)
    hdu5351 MZL's Border(规律题,java)
    hdu5347 MZL's chemistry(打表)
    hdu5344 MZL's xor(水题)
    hdu5338 ZZX and Permutations(贪心、线段树)
    hdu 5325 Crazy Bobo (树形dp)
    hdu5323 Solve this interesting problem(爆搜)
    hdu5322 Hope(dp)
    Lightoj1009 Back to Underworld(带权并查集)
  • 原文地址:https://www.cnblogs.com/alaska/p/12611771.html
Copyright © 2011-2022 走看看