zoukankan      html  css  js  c++  java
  • roles的用法

    回顾

    redirect 临时重定向
    ad-hoc:临时执行
    playbook:使用yml语法记录了多条ad-hoc
    roles:解耦
    
    site里面写了,依赖也写了,不会执行两遍
    
    client 客户端
    server 服务端
    
    yum:
    	1.路径(本地)
    	2.包名(镜像仓库)
    	3.url(网站中的)
    	
    cat /var/lib/nfs/etab  可以查看nfs配置文件是否生效(该结果只与配置文件是否生效有关)
    防火墙如果是开着的话,那么在web上是不能看挂载点的(不能showmount -e),无论是否可以挂载
    zabbix:
    https://www.zabbix.com/documentation/4.0/manual/installation/install_from_packages/rhel_centos
    jumpserver官网
    https://docs.jumpserver.org/
    

    Ansible Roles基本概述

    1. 角色(roles)是ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook。
    2. roles:不管是Ansible还是saltstack,都可以使用roles

    roles目录结构使用ansible-galaxy创建

    [root@m01 ~]# cd /etc/ansible/roles/
    [root@m01 roles]# ansible-galaxy init nfs	#nfs目录位置可以随意创建
    [root@m01 roles]# tree nfs
    nfs/                #项目名称
    ├── defaults        #低优先级变量
    │   └── main.yml
    ├── files           #存放文件,存放由copy或script·解压等模块调用的文件
    ├── handlers        #触发器文件
    │   └── main.yml
    ├── meta            #依赖关系文件
    │   └── main.yml
    ├── README.md		#项目目录用法
    ├── tasks           #工作任务文件,使用include的时候不需要指明文件的路径
    │   └── main.yml
    ├── templates       #jinja2模板文件(Python变量)
    ├── tests           #测试文件(与-C类似)
    │   ├── inventory	#测试用的主机清单
    │   └── test.yml
    └── vars            #高优先级变量文件
        └── main.yml
    
    [root@m01 roles]# vim site.yml
    
    1.项目目录里,第一个加载的是meta目录,查看该项目是否有依赖,有的话先执行该项目的依赖,没有的话
    2.执行tasks目录下的main.yml文件,如果有copy模块
    3.执行files目录中找src指定的文件名(#不需要指明路径)
    4.执行tasks中的template模块,去找template目录找src指定的文件名(#不需要指明路径)
    5.如果有变量,去找vars目录main.yml
    			去找defaults目录下的main.yml
    6.如果有触发器,在所有的tasks执行完之后,去找handlers目录下的main.yml
    

    Ansible Roles依赖关系

    1. ansible 1.3及其以后的版本才支持
    2. roles允许你再使用roles时自动引入其他的roles。role依赖关系存储在roles目录中meta/main.yml文件中。

    例如:推送wordpress并解压,前提条件,必须要安装nginx和php,把服务跑起来,才能运行wordpress的页面,此时我们就可以在wordpress的roles中定义依赖nginx和php的roles

    [root@m01 roles]# vim /etc/ansible/roles/wordpress/meta/main.yml
    dependencies:
      - { role: nginx }
      - { role: php }
      
      #nginx·php,项目名称,先执行依赖,再执行该项目
    

    使用Ansible Roles对rsync剧本解耦

    1.使用ansible-galaxy创建'任务角色'
    [root@m01 rsync]# cd /etc/ansible/roles/
    [root@m01 roles]# ansible-galaxy init rsync
    - rsync was created successfully
    [root@m01 roles]# tree
    .
    └── rsync
        ├── defaults	---------------------------- 5.低级变量
        │   └── main.yml
        ├── files	-------------------- 3.src指定文件名(不含j2变量)
        ├── handlers	------------------------------------ 6.触发器
        │   └── main.yml
        ├── meta	--------- 1.项目的依赖目录
        │   └── main.yml	--如果有的话,先执行
        ├── README.md
        ├── tasks	---------------- 2.任务(include include_tasks)
        │   └── main.yml
        ├── templates	------------------------ 4.python变量,j2模板
        ├── tests
        │   ├── inventory
        │   └── test.yml
        └── vars	--------------------------------- 5.高级变量
            └── main.yml
            
    #以组名为文件名        
    mkdir /etc/ansible/roles/group_vars		
    2.编辑'主机清单'(选做)
    [root@m01 roles]# vim /etc/ansible/roles/hosts 
    ...
    3.编辑site.yml,指定roles(可以在这里指定变量),'site.yml是入口文件'(名字随意)。可以写多个site,site和tasks的关系类似于包含
    [root@m01 roles]# vim /etc/ansible/roles/site.yml 
    1>列表
    - hosts: all
      vars:
        - user_group: www
        - uid_gid: 666
      roles:
        - rsync  #指定的这个角色名是galaxy创建的目录名,可以指定多个
    
    2>判断
    - hosts: all
      roles:
        - role: rsync
          when: ansible_fqdn is match 'backup*'
    
    3>字典
    - hosts: all
      roles:
        - { role: rsync , when: ansible_fqdn == 'backup' }
    4>字典+变量
      roles:
      - { role: nginx, http_port: 8080, web_root: /data/ }
    5>为roles设置触发条件
    - hosts: all
      roles:
        - { role: some_role, when: "ansible_os_family == 'RedHat'" }
    6>为roles设置标签
    - hosts: all
      roles:
        - { role: nfs, tags: ["bar", "baz"],when: ansible_fqdn is match 'web*' }
        - { role: nfs, tags: ["bar", "baz"],when: ansible_fqdn is match 'nfs*' }   
          
    4.编辑rsync角色的tasks'任务' (不要写路径,路径无效)
    #不要用include_tasks
    #直接写注释·模块·动作
    [root@m01 roles]# vim /etc/ansible/roles/rsync/tasks/install_rsync.yml
    - name: install rsync
      yum:
        name: rsync
        state: present
        
    [root@m01 roles]# vim /etc/ansible/roles/rsync/tasks/config_rsync.yml
    - name: config rsync
      template:
        src: rsyncd.j2
        dest: /etc/rsyncd.conf
      notify: restart rsyncd
      
    [root@m01 roles]# vim /etc/ansible/roles/rsync/tasks/start_rsync.yml
    - name: start rsyncd
      service: rsyncd
        state: started
        
    [root@m01 roles]# vim /etc/ansible/roles/rsync/tasks/main.yml 
    - include: install_rsync.yml
    - include: config_rsync.yml
    - include: start_rsync.yml
    
    5.编辑rsync角色的'handlers'
    [root@m01 roles]# vim /etc/ansible/roles/rsync/handlers/main.yml 
    - name: restart rsyncd
      service:
        name: rsyncd
        state: restarted
        
    6.编辑rsync角色的'files目录'
    [root@m01 roles]# vim /etc/ansible/roles/rsync/files/
    
    7.编辑rsync角色的'template目录'
    [root@m01 roles]# vim /etc/ansible/roles/rsync/template/rsyncd.j2
    
    8.编辑handlers
    - name: restart rsyncd
      service:
        name: rcyncd
        state: restarted
    
    9.编辑'变量文件'(vars defaults)
    [root@m01 roles]# vim /etc/ansible/roles/rsync/defaults
    use_dir_mk: backup
    
    10.'执行roles'
    [root@m01 roles]# ansible-playbook rsync site.yml 
    
    测试yml语法是否正确
    [root@ansible roles]# ansible-playbook -C site.yml 
    

    Ansible-galaxy命令格式

    ansible-galaxy [init|info|install|list|remove] [--help] [options] ...
    
    init: 初始化本地roles配置
    info: 指定roles详细信息
    install: 下载并安装Galaxy上指定的roles
    list: 列出本地已下载的roles
    remove: 删除本地已下载的roles
    
    #查看选项帮助
    ansible-galaxy init -–help
    

    ansible-vault

    [root@m01 ~]# rpm -ql ansible |egrep -v 'share|lib'
    /etc/ansible/ansible.cfg		#配置文件
    /etc/ansible/hosts				#主机清单
    /etc/ansible/roles				#解耦目录
    /usr/bin/ansible			ad-hoc的使用命令
    /usr/bin/ansible-2
    /usr/bin/ansible-2.7
    /usr/bin/ansible-config
    /usr/bin/ansible-connection
    /usr/bin/ansible-console
    /usr/bin/ansible-console-2
    /usr/bin/ansible-console-2.7
    /usr/bin/ansible-doc			#查看帮助
    /usr/bin/ansible-doc-2
    /usr/bin/ansible-doc-2.7
    /usr/bin/ansible-galaxy			#roles目录的创建和删除
    /usr/bin/ansible-galaxy-2
    /usr/bin/ansible-galaxy-2.7
    /usr/bin/ansible-inventory
    /usr/bin/ansible-playbook		#yml文件的执行命令
    /usr/bin/ansible-playbook-2
    /usr/bin/ansible-playbook-2.7
    /usr/bin/ansible-pull
    /usr/bin/ansible-pull-2
    /usr/bin/ansible-pull-2.7
    /usr/bin/ansible-test
    /usr/bin/ansible-vault			#加密命令
    /usr/bin/ansible-vault-2
    /usr/bin/ansible-vault-2.7
    
    
    [root@m01 tasks]# ansible-vault --help
    usage: ansible-vault [-h] [--version] [-v]
                         {create,decrypt,edit,view,encrypt,encrypt_string,rekey}
    
    1.使用'ansible-vault'加密文件或目录
    [root@m01 tasks]# ansible-vault encrypt main.yml 
    2.使用'view'查看加密文件的内容
    [root@m01 tasks]# ansible-vault view main.yml 
    Vault password: 
    ---
    # tasks file for rsync
    - include: install.yml
    - include: config_rsync.yml
    3.使用'edit'编辑加密文件
    [root@m01 tasks]# ansible-vault edit main.yml 
    4.使用'rekey'更换加密密码
    [root@m01 tasks]# ansible-vault rekey main.yml 
    5.执行加密的playbook
    ansible-playbook include.yml  --vault-password-file=ansible.pass
    6.创建一个新的加密的目录或文件
    ansible-vault create hello.yml
    
  • 相关阅读:
    Java回调机制
    显示Title和隐藏Title的ListView
    ListView的小知识
    小知识点
    Shader的使用
    项目知识(二)
    项目知识(一)
    复习篇(一)Activity的生命周期和启动模式
    BootStrap 提示框
    BootStrap选项卡
  • 原文地址:https://www.cnblogs.com/syy1757528181/p/13166194.html
Copyright © 2011-2022 走看看