• ansible 中的 playbook 模块


    playbook 剧本

    yaml

    • 字典 key:value

    • 列表 [] -

    • 后缀名:yaml、yml

    playbook 命令格式

    Usage: ansible-playbook [options] playbook.yml [playbook2 ...]
    -C, --check # 检查但是不会真的执行
    -f FORKS, --forks=FORKS # 并发,默认是5个
    --list-hosts #列出匹配的主机
    --syntax-check # 检查语法

    第一个playbook

    - hosts: web
    remote_user: root
    tasks:
     - name: copyfile
      copy: src=/etc/fstab dest=/tmp/fs

    顺序执行,第一个任务所有机器都执行完,才会执行第二个任务

    多任务

    - hosts: web
    remote_user: root
    tasks:
     - name: copyfile
      copy: src=/etc/fstab dest=/tmp/fs
     - name: createuser
      user: name=alex11

    幂等性 ,不管执行多少次,等到的结果永远是一样的

    传参

    第一种方式

    - hosts: web
    tasks:
     - name: create{{user}}
      user: name={{user}}
    ansible-playbook -e user=alex13 p3.yml      #-e 是传参    

    第二种方式

    10.0.0.[132:133] user=alex14
    10.0.0.135  user=alex12
    ansible-playbook p3.yml

    第三种方式

    [web:vars]        #重新创建一个
    user=alex15
    ansible-playbook p3.yml

    第四种方式

    - hosts: web
    vars:
     - user: alex16
    tasks:
     - name: create{{user}}
      user: name={{user}}

    第五种传参方式

    - hosts: web
    tasks:
     - name: yumbc
      yum: name=bc
     - name: sum
      shell: echo 8+9|bc
      register: user
     - name: echo
      shell: echo {{user.stdout}} >/tmp/sum.txt
     - name: createuser{{user.stdout}}
      user: name=alex{{user.stdout}}

    优先级

    -e > playbook的vars > hosts文件

    setup (获取主机信息模块)

    #ansible all -m setup|more # more是分页显示的意思

    ansible_all_ipv4_addresses # 所有的ipv4地址
    ansible_all_ipv6_addresses # 所有的ipv6的地址
    ansible_bios_version # 主板bios的版本
    ansible_architecture # 架构信息
    ansible_date_time # 系统的时间
    ansible_default_ipv4 # IPv4默认地址
    address #ip地址
    alias #网卡名称
    broadcast #广播地址
    gateway # 网关
    macaddress #mac地址
    netmask #子网掩码
    network #网段
    ansible_distribution #系统的版本
    ansible_distribution_file_variety# 系统的基于对象
    ansible_distribution_major_version# 系统的主版本
    ansible_distribution_version #系统的版本
    ansible_domain #系统的域
    ansible_dns #系统的dns
    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 10.0.0.132 -m setup -a "filter=*processor*" 搜索

    正则

    . 匹配任何字符,除了换行

    * 匹配任何次

    + 最少一次

    ? 最多一次

    {m} 指定的m次

    {m,n} m次到n次

    {m,} 最少m次

    {0,n} 最多n次

    [0-9] 代表数字

    ^ 开头

    $ 结尾

    ^ 取反

    [^0-9]

    () 分组

    grep "^(.*):.*1$" /etc/passwd
    grep -E "^(.*):.*1$" /etc/passwd

     

    tags (设置一个命令执行 只执行存在tags的命令)

    - hosts: web
    tasks:
     - name: install
      yum: name=redis
     - name: copyfile
      copy: dest=/etc/redis.conf src=/etc/redis.conf
      tags: copyfile
     - name: start
       service: name=redis state=started
    ansible-playbook -t copyfile p7.yml

    handlers (notify调用handlers(只有执行了notify所在的任务才会调用))

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

    template (模板 动态更改ip地址)

    - hosts: web
    tasks:
     - name: install
      yum: name=redis
     - name: copyfile
      template: dest=/etc/redis.conf src=/etc/redis.conf
      tags: copy          # tags 执行时要是写 -t copy 就只执行这一个任务
      notify: restart     # 执行这个任务的时候调用 handlers任务
     - name: start
       service: name=redis state=started
    handlers:
     - name: restart
       service: name=redis state=restarted
    - hosts: web
    tasks:
     - name: install
      yum: name=redis
     - name: copyfile
      template: dest=/etc/redis.conf src=redis.conf
      tags: copy
      notify: restart
     - name: start
       service: name=redis state=started
    handlers:
     - name: restart
       service: name=redis state=restarted
    需要在本地的目录下创建一个templates目录,就可以用相对路径

    u 撤销

    p 粘贴

    #yy 复制#行

    d$ 从当前位置删除

    o 当前位置下面增加空白行,并切换到编辑模式

    r 替换

    id用户名 查看用户

    when (判断 加条件 如果满足这个条件就执行这个任务 不满足就不执行)

    - hosts: web
    tasks:
     - name: file
      copy: content="大弦嘈嘈如急雨" dest=/opt/file
      when: ansible_distribution_major_version=="7"
     - name: file
      copy: content="小弦切切如私语" dest=/opt/file
      when: ansible_distribution_major_version=="6"
    - hosts: web
    tasks:
     - name: file
      copy: content="大弦嘈嘈如急雨 " dest=/opt/file
      when: sum=="7"
     - name: file
      copy: content="小弦切切如私语 " dest=/opt/file
      when: sum=="6"
    ansible-playbook -e sum=7 p11.yml     # -e 传值

    循环

    - hosts: web
    tasks:
     - name: file
      user: name={{item}}
      with_items:        #循环创建用户
       - alex20
       - alex21
    - hosts: web
    tasks:
     - name: creategroup
      group: name={{item}}    
      with_items:   #循环创建组名
       - wusir20
       - wusir21
     - name: file
      user: name={{item}}
      with_items:
       - alex22
       - alex23

    嵌套循环

    - hosts: web
    tasks:
     - name: creategroup
      group: name={{item}}
      with_items:
       - wusir22
       - wusir23
     - name: file
      user: name={{item.name}} group={{item.group}}
      with_items:
       - {"name":alex24,"group":wusir22}
       - {"name":alex25,"group":wusir23}
  • 相关阅读:
    玩转Visual Studio Editor篇
    .Net2.0的集合操作 What i know?
    Log文件压缩
    [转]比较高效地实现从两个不同数组中提取相同部分组成新的数组(只支持Int类型) [C#]
    Stream 和 Byte[]互操作
    net 2.0 中如何在线程引发的事件中控制forms controls
    C# 操作Word文档(转)
    利用Lucene.net搜索引擎进行多条件搜索的做法
    c# 添加图片水印,可以指定水印位置+生成缩略图
    SDN第一次作业
  • 原文地址:https://www.cnblogs.com/hahahu/p/10693258.html
Copyright © 2020-2023  润新知