zoukankan      html  css  js  c++  java
  • ansible再谈

    一 . linux的单双引号区别

    a=10
    echo '$a'  结果$a
    echo "$a"  结果10

    二 . playbook 剧本

      1. 操作都是幂等(操作以后就不会在操作了)的
      2. 为什么要用playbook?
         有一些好的功能

    ymal规范(必须严格遵守):
        字典: 
         key: value(冒号后边必须有空格)
        列表:
         - (以短横杠开头)
         
        如:
        - attila: shuai
          olsen: mei
          movie:
          - name: 复联
            salary: 10000
        结果:
        [ { attila: 'shuai',
            olsen: 'mei',
            movie: [ { name: '复联', salary: 10000 } ] } ]

      playbook的格式

    Usage: ansible-playbook [options] playbook.yml [playbook2 ...]
    -C, --check #白跑,执行但是不会有结果
    --list-hosts #列出符合的主机
    -f FORKS, --forks=FORKS #做并发
    --syntax-check #检查语法
    -k, --ask-pass #输入密码

      单个playbook

    !!!必须遵守ymal规范
    - hosts: web   # 指定运行命令的主机
      remote_user: root  #可以不写,默认是root
      tasks:  # 任务列表
      - name: createuser   # 任务1,必须是name
        user: name=olsen1 home=/opt/olsen1 uid=666   # 指定模块
      - name: copyfile  # 任务2   
        copy: src=/opt/xxx.txt dest=/opt/xxx1.txt
    # 执行任务的顺序是,当web组里的所有服务器执行完第一个任务之后在执行第二个
    
    ansible-playbook --syntax-check playbook1.yml  # 检查语法
    ansible-playbook  playbook1.yml  # 真正的执行
    
    # 多个playbook,就是在一个.yml文件中有复制了多个像单个playbook那样的,了解即可

      传参

      第一种方式

    # playbook3.yml文件
    
    - hosts: web
      tasks:
    - name: create{{user}}
      user: name={{user}}
      
    ansible-playbook -e user=curry1 playbook3.yml

      第二种方式

    # 修改host文件 vim /etc/ansible/hosts
    
    [web]
    192.168.111.129 user=curry2
    192.168.111.130 user=kobe2
    
    ansible-playbook playbook3.yml   # 129有了curry2,130有了kobe2

      第三种方式

    # 修改host文件 vim /etc/ansible/hosts
    
    [web]
    192.168.111.129
    192.168.111.130
    [web:vars]
    user=curry3
    
    ansible-playbook playbook3.yml   # 129和130都有了curry3

      第四种方式

    # playbook4.yml文件
    
    - hosts: web
      vars:
      - user: curry4
      tasks:
      - name: create{{user}}
        user: name={{user}}
    
    ansible-playbook playbook4.yml  # 129和130都有了curry4

      传参优先级:  -e > playbook里直接vars > hosts

      运行时收集的信息

    查看收集信息的命令:
    ansible 192.168.111.129 -m setup|more

      一些主要的信息

    ansible_all_ipv4_addresses #所有的ipv4地址
    ansible_all_ipv6_addresses #所有的ipv6地址
    ansible_architecture #系统的架构
    ansible_date_time #系统时间
    ansible_default_ipv4 #默认的ipv4地址
        address ip地址
        alias 网卡名称
        broadcast 广播地址
        gateway 网关
        netmask 子网掩码
        network 网段
    ansible_default_ipv6 #默认的ipv6地址
    ansible_device_links #系统的磁盘信息
    ansible_distribution #系统名称
    ansible_distribution_file_variety #系统的基于公司
    ansible_distribution_major_version #系统的主版本
    ansible_distribution_version #系统的全部版本
    ansible_dns #系统的dns 默认udp 端口53
    ansible_domain #系统的域 ldap
    ipv4 #ipv4地址
    ansible_env #系统的环境
    ansible_fqdn #系统的完整主机名
    ansible_hostname #系统的简写主机名
    ansible_kernel #系统的内核版本
    ansible_machine #系统的架构
    ansible_memtotal_mb #系统的内存
    ansible_memory_mb #系统的内存使用情况
    ansible_mounts #系统的挂载信息
    ansible_os_family #系统家族
    ansible_pkg_mgr #系统的包管理工具
    ansible_processor #系统的cpu
    ansible_processor_cores #每颗cpu的核数
    ansible_processor_count #cpu的颗数
    ansible_processor_vcpus #cpu的个数=cpu的颗数*每颗cpu的核数
    ansible_python #系统python信息
    ansible_python_version #系统python的版本
    ansible_system #系统名字

      tags

    # playbook6.yml文件
    
    - 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  playbook6.yml   # 全都执行一遍
    ansible-playbook -t copyfile playbook6.yml  
    # 只执行copy那个命令(把bind的ip修改之后执行这步就可以)

      handlers

    # playbook7.yml文件
    
    - hosts: web
      tasks:
      - name: install
        yum: name=redis
      - name: copyfile
        copy: dest=/etc/redis.conf src=/etc/redis.conf   
        tags: copyfile
        notify: restart  # value必须是要触发的模块的value
      - name: start
        service: name=redis state=started
      handlers:
      - name: restart
        service: name=redis state=restarted
    ansible-playbook -t copyfile playbook7.yml  # 不仅执行copy还重启

      template(能动态替换)

        绝对路径

    vim  /etc/redis/conf
    bind {{ansible_default_ipv4.address}]   # 上边setup中的参数

        playbook8.yml文件

     

    - hosts: web
      tasks:
    - name: install
      yum: name=redis
    - name: copyfile
      template: dest=/etc/redis.conf src=/etc/redis.conf
      tags: copyfile
      notify: restart
    - name: start
      service: name=redis state=started
    handlers:
    - name: restart
      service: name=redis state=restarted
    
    ansible-playbook -t copyfile playbook8.yml

        相对路径

    mkdir templates
    cp /etc/redis/conf templates/
    mv redis.conf{,.j2} = mv redis.conf redis.conf.j2   # 改名为.j2格式

        playbook9.yml文件

    - hosts: web
      tasks:
      - name: install
        yum: name=redis
      - name: copyfile
        # 创建名为templates文件夹(和playbook9.yml在同一文件夹下)直接写文件名就能找到
        template: dest=/etc/redis.conf src=redis.conf.j2  
        tags: copy
        notify: restart
      - name: start
        service: name=redis state=started
      handlers:
      - name: restart
        service: name=redis state=restarted
        
    ansible-playbook -t copyfile playbook9.yml

      when(判断)

    # playbook10.yml文件
    
    - hosts: web
      tasks:
      - name: copyfile
        copy: content="十步杀一人" dest=/tmp/a.txt
        when: ansible_distribution_major_version=="7"   # setup的参数
      - name: copyfile
        copy: content="千里不流行" dest=/tmp/a.txt
        when: ansible_distribution_major_version=="6"
    
    ansible-playbook -t copyfile playbook10.yml

      with_items(循环)

    # playbook11.yml文件
    
    - hosts: web
      tasks:
      - name: createuser
        user: name={{item}}  # 必须是item
        with_items:
        - attila50
        - curry50
        - kobe50
    
    ansible-playbook -t copyfile playbook11.yml  # 创建了上述三个用户

        循环两个任务

    # playbook12.yml文件
    
    - hosts: web
      tasks:
      - name: createuser
        user: name={{item}}
        with_items:
        - attila60
        - curry60
        - kobe60
      - name: creategroup
        group: name={{item}}   # cat /etc/group 能查看组信息
        with_items:
        - attila60
        - curry60
        - kobe60
        
    ansible-playbook -t copyfile playbook12.yml  # 创建了上述三个用户和三个组

      嵌套循环

    # playbook12.yml文件
    
    - hosts: web
      tasks:
      - name: crateuser
        user: name={{item.name}}  group={{item.group}}
        with_items:
        - {"name":attila80,"group":attila80}
        - {"name":curry80,"group":curry80}
        - {"name":kobe80,"group":kobe80}
         
    ansible-playbook -t copyfile playbook12.yml

       roles

    为什么要使用roles:
    
    - 目录结构清晰
    - 可以相互调用    在调用文件中写需要引入的文件 - import_tasks: roles/nginx/tasks/install.yml
    - 备份方便

      !!! 要注意下面目录结构层级关系

       

      每个文件中的内容展示

      

       

       

       

       

       

       

      

      

       

  • 相关阅读:
    bzoj 2213: [Poi2011]Difference
    51nod 1079 中国剩余定理
    51nod 1074 约瑟夫环 V2
    SpringBoot:第二篇 集成mybatis
    SpringBoot:第二篇 集成日志lombok
    SpringBoot:第一篇 新建spring boot 应用
    JVM常用内存参数配置
    深入研究Java GC
    应用性能监控分析
    Java -- 深入浅出GC自动回收机制
  • 原文地址:https://www.cnblogs.com/attila/p/10828120.html
Copyright © 2011-2022 走看看