zoukankan      html  css  js  c++  java
  • ansible-playbook

    ansible 剧本(playbooks)

    1.什么是Playbooks?

    ansible命令可以创建远程操控我们的主机,虽然ansible的功能已经很ok了,但是面对大型自动化项目,几句简单的ansible命令还是上不了台面.

    这时就需要ansible-playbook的登场了. 规范化,按照配置说明配合ansible命令来应对大型复杂的自动化服务器运维工作.

    2.Playbooks Language example

    Playbooks 语言是以YAML 格式表示,并且有最小的语法,有意的说明它不是一个编程或者脚本语言,它是一种写配置文件的语言。简洁可读性高。类似于java的xml

    yaml 语法示例 p1.yml

    - hosts: web
      tasks:
      - name: creategroup
        group: name=tse
      - name: createuser
        user: name=treasure
    
    3.ansible-palybooks命令格式

    ​ 执行顺序:从上往下

    ​ 特性:幂特性, 不管执行多少遍,结果都是一样的

    ansibel-playbook [options] playbook.yml
    -C, --check # 检查 检查并不会落实到实际操作上
    -f FORKS, --forks=FORKS # 用来做并发
    --list-hosts # 列出主机列表
    --syntax-check #语法检查
    
    4.简单用法
    ansible-playbook p1.yml
    
    5.传参

    p2.yml

    - hosts: web
      task: 
      - name: create{{ user }}
        user: name={{user}} 
    

    第一种方式

    ansible-playbook -e 'user=t1' p2.yml
    

    第二种方式

    修改ansible的host文件
    [web]
    192.168.13.130 user=t21
    192.168.13.130 user=t22
    

    第三种方式

    [web:vars] # 表示被控机组的参数
    user=t3
    

    第四种方式

    p2.yml

    - hosts: web
      vars: 
      - user: t4
      task: 
      - name: create{{ user }}
        user: name={{user}} 
    

    第五种方式

    p3.yml

    ps: bc就是linux的计算器

    - hosts: web
      task: 
      - name: sum
        shell: echo 1+2|bc
        register: user
      - name: createuser
        user: name={{user.stdout}} 
    
    传参方式的优先级

    -e > playbook文件中的 vars > ansible中的host文件中的参数

    Setup

    ansible_all_ipv4_addresses # ipv4的所有地址
    ansible_all_ipv6_addresses # ipv6的所有地址
    ansible_date_time # 获取到控制节点时间
    ansible_default_ipv4 # 默认的ipv4地址
    ansible_distribution # 系统
    ansible_distribution_major_version # 系统的大版本
    ansible_distribution_version # 系统的版本号
    ansible_domain #系统所在的域
    ansible_env #系统的环境变量
    ansible_hostname #系统的主机名
    ansible_fqdn #系统的全名
    ansible_machine #系统的架构
    ansible_memory_mb #系统的内存信息
    ansible_os_family # 系统的家族
    ansible_pkg_mgr # 系统的包管理工具
    ansible_processor_cores #系统的cpu的核数(每颗)
    ansible_processor_count #系统cpu的颗数
    ansible_processor_vcpus #系统cpu的总个数=cpu的颗数*CPU的核数
    ansible_python # 系统上的python
    ansible cache -m setup -a 'filter=*processor*' # 用来搜索
    

    正则补充:

    # * 匹配数量,表示0次或多次
    # ? 匹配数量,表示0次或者一次
    # . 除换行符以外的所有字符
    # + 至少一次
    # [123abc] 匹配内容 匹配其中一个
    # () 分组
    # {m} 次数,出现m次
    # {m,} 至少出现m次
    # {m,n} 出现m-n次
    

    Playbook中的条件判断

    - hosts: web
      remote_user: root
      tasks: 
      - name: createfile1
        copy: content="Playbook真的牛批" dest=/tmp/a.txt
        when: a=="3" 
      - name: createfile2
        copy: content="yaml语法真的很严格" dest=/tmp/a.txt
        when: a=="4"
    

    当传入的参数a为3时 执行createfile1

    当传入的参数a为4时 执行createfile2

    Tags

    - hosts: web
      remote_user: rott
      tasks:
      - name: installnginx
        yum: name=nginx
      - name: copyfile
        copy: src=/etc/nginx/nginx.conf dest=/etc/nginx/nginx.conf
        tags: copyfile
      - name: start
        service: name=nginx state=started
    

    ansible-playbook -t copyfile p7.yml

    -t 后面加上tags

    循环 with_items

    一次创建多个用户怎么办呢?

    - hosts: web
      tasks:
      - name: createusers
        user: name={{item}}
        with_items:
        - t1
        - t2 
        - t3
      - name: creategroups
        group: name={{item}}
        with_item:
        - tse1
        - tse2
        - tse3
    

    创建多个用户,创建多个用户组

    嵌套循环
    - hosts: web
      tasks:
      - name: createusers
        user: name={{item.user}} group={{item.group}}
        with_items:
        - {'user': t4, 'group': tse1}
        - {'user': t5, 'group': tse2}
        - {'user': t6, 'group': tse3}
        
    

    创建用户并指定他们的用户组

    Handlers

    - hosts:
      tasks:
      - name: installredis
        yum: name=redis
      - name: copyfile
        template: src=redis.conf dest=/etc/redis.conf
        tags: copyfile
        notify: restart
      - name: start
        service: name=redis state=started
      handlers:
      - name: restart
        service: name=redis state=restarted
    

    当copyfile任务被执行时候,会触发notify指向的Handlers中的restart

    Roles

    • 目录清晰

    • 可以相互调用

    roles文件夹
    # 文件夹中里面是要创建的每一个角色,每一个角色一个文件夹
    # 每一个角色的文件中里面都要有
    # task(必须),templates,files,handlers,vars目录
    # 每个目录都要有main.yml文件,通过import_tasks来调用
    # 其中templates文件夹中的文件可以通过相对路径来调用
    

    补充

    setenforce 0 # 临时关闭selinux
    iptables -F # 临时关闭防火墙
    /etc/selinux/config # 永久关闭
    
  • 相关阅读:
    【转】Android实战技巧:ViewStub的应用
    3.11 返回数据到前一个Activity
    在用android日志的时候老是弹出一个窗口,内容为:"Copy" did not complete normally. Please see the log 和 什么函数,能达到和android手机上按“返回”键一样的效果?
    Windows下的Android模拟器设置内存大小
    AlertDialog.Builder对话框类的用法(二)
    android版计算器
    【转】Android中字符串的拆分split
    readelf
    6200 uboot 测试版分析(二)
    cpp
  • 原文地址:https://www.cnblogs.com/Treasuremy/p/10407860.html
Copyright © 2011-2022 走看看