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

    一. playbook格式

    Usage: ansible-playbook [options] playbook.yml [playbook2 ...]
    (代码执行格式)

    optons:
    -C, --check #白跑,执行但是不会有结果
    --list-hosts #列出符合的主机
    -f FORKS, --forks=FORKS #做并发
    --syntax-check #检查语法
    -k, --ask-pass #输入密码
    补充:

    ① vi 的快捷操作
    yy 复制一行 # yy 复制多行 p 粘贴 dd 删除一行 # dd 删除多行 d$ 从当前位置删除到结尾


    ②echo的操作

      echo `date +%F`
      echo $(date +%F)


      a=10
      echo '$a'
      $a
      echo "$a"
      10

     

     二. setup 模块(收集某主机信息)

    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 #系统名字

    三.   .yaml (.yml)文件的基本格式

      

    字典 key:value

    列表 [] -
      - alex
      
      - wusir

       - yantao
        - yuchao

    [alex,wusir,yantao,yuchao]

      
    • 冒号后面必须有空格

    • 横线后面必须要空格

    • 严格保持对齐

    • 等号前面不能有空格

    
    

      1.单个的playbook

    仅创建一个用户

    - hosts: web remote_user: root (默认是root) tasks: - name: createuser user: name=alex20 home=/opt/alex20 uid=4000


    执行时的代码为:
      
    ansible-playbook 文件名.yml
     

      2.多个playbook

    创建一个用户 和 复制文件

    - hosts: web remote_user: root tasks: - name: createuser user: name=alex20 home=/opt/alex20 uid=4000 - name: copyfile copy: src=/etc/fstab dest=/tmp/fs


    执行时的代码:
      ansible-playbook 文件名.yml

      3.传参

    优先级:
      -e > playbook > hosts

      ①第一种方式

    把要创建的用户名 在执行文件时传入

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


    执行时的代码:   ansible
    -playbook -e user=wusir20 p3.yml

      ②第二种方式

    修改 hosts 配置文件  加入 user
    hosts文件中:
    [web]
    192.168.226.[101:102] user=alex30 192.168.226.104 user=alex100



    在playbook 文件中:  
    - hosts: web
      tasks:
      - name: create{{user}}
        user: name={{user}}

    直接执行playbook文件:
      ansible-playbook 文件名.yml
      

      ③第三种方式

    修改hosts配置文件:

    [web:vars] user
    =alex31
    在playbook 文件中内容如上 
    
    
    直接执行playbook文件:
      ansible-playbook 文件名.yml
    
    

      ④第四种方式

    修改playbook文件

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

    直接执行playbook文件:
      ansible-playbook 文件名.yml


      ⑤第五种方式

    修改 playbook文件

    - hosts: web tasks: - name: yum yum: name=bc #下载bc计算组件 - name: sum shell: echo 11+22|bc register: user # 注册成变量,返回结果为后面使用
    - name: create{{user.stdout}} user: name=alex{{user.stdout}}


    直接执行playbook文件:
      ansible-playbook 文件名.yml

      4.tags(标签,只执行带标签的代码)

    在playbook 中加入标签

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


    执行时的代码(仅运行标签所在的一项):   ansible
    -playbook -t copy p7.yml



      5.handlers(改变时 触发 某一项)

    在 playbook 文件中加 notify;和 handlers


    - 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


    执行时的代码(仅运行标签所在的一项):
      ansible-playbook -t copy p7.yml

      6.template  模块(基于jinja2)

      可以进行动态替换

      用法,作用和copy一样

      ①绝对路径

    利用收集的信息

    在playbook 文件中
    - hosts: web tasks: - name: install yum: name=redis - name: copyfile template: dest=/etc/redis.conf src=/etc/redis.conf #将copy直接替换 tags: copy notify: restart - name: start service: name=redis state=started handlers: - name: restart service: name=redis state=restarted

    在 redis.conf 文件中(利用收集的信息保证安全)
    执行时的代码(仅运行标签所在的一项):
      ansible-playbook -t copy p7.yml


    copy完成之后就引用了收集的信息
    
    

      ②相对路径

    mv redis.conf{,.j2} = mv redis.conf redis.conf.j2

    - hosts: web tasks: - name: install yum: name=redis - name: copyfile 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
    在当前目录下创建一个templates的目录,
    把要copyd的文件放在 templates 文件下
    就可以使用相对路径


    执行时的代码(仅运行标签所在的一项):
      ansible-playbook -t copy p7.yml
     

      7.when (类似于python 中的 if)

    - hosts: web
      tasks:
      - name: copyfile
        copy: content="大弦嘈嘈如急雨" dest=/tmp/a.txt
        when: ansible_distribution_major_version=="7"    #利用收集的信息
      - name: copyfile
        copy: content="小弦切切如私语" dest=/tmp/a.txt
        when: ansible_distribution_major_version=="6"


    执行时的代码:
      ansible-playbook  p7.yml
     

    - hosts: web tasks: - name: copyfile copy: content="大弦嘈嘈如急雨" dest=/tmp/a.txt when: user=="4" - name: copyfile copy: content="小弦切切如私语" dest=/tmp/a.txt when: user=="3"

    执行时的代码:
      ansible-playbook -e user=4 p3.yml
    只执行第一项

      8.with_items (类似于python中的 while)

      ①.循环

    创建多个用户

    - hosts: web tasks: - name: createuser user: name={{item}} with_items: - alex50 - wusir50 - taibai50

    执行时的代码:
      ansible-playbook  p7.yml
    创建多个用户  和  多个组(创建完用户再创建组)

    - hosts: web tasks: - name: createuser user: name={{item}} with_items: - alex51 - wusir51 - taibai51 - name: creategroup group: name={{item}} with_items: - alex60 - wusir60 - taibai60

    执行时的代码:
      ansible-playbook  p7.yml

      ②嵌套循环

    创建用户并添加属组

    - hosts: web tasks: - name: crateuser user: name={{item.name}} group={{item.group}} with_items: - {"name":alex52,"group":alex60} - {"name":wusir52,"group":wusir60} - {"name":taibai52,"group":taibai60}


    执行时的代码:
      ansible-playbook  p7.yml

    九. roles  (角色)

    - 目录结构清晰
    - 可以相互调用 - import_tasks: roles/nginx/tasks/install.yml
    - 备份方便

    roles/nginx/
    ├── files       -- 静态文件
    │   └── c.txt
    ├── handlers    -- 触发的任务
    │   └── main.yml
    ├── tasks       -- 任务(必须的)
    │   ├── copyfile.yml
    │   ├── install.yml
    │   ├── main.yml
    │   └── start.yml
    ├── templates  -- 动态文件,需要传递参数
    │   └── nginx.conf
    └── vars      -- 变量
        └── main.yml

    查找顺序:
    
    - 主文件看到roles,就回去roles目录下面找对应的目录
    - 先去tasks目录里面找main.yml文件,如果遇到import_task则加载任务
    - 如果遇到了template,则去templates目录里面找文件
    - 如果遇到了copy,则去files目录里面找文件
    - 如果遇到了变量,则去vars目录里面找main.yml文件
    - 如果遇到了notify,则去handlers目录里面找main.yml文件

     

    ③启动

    十.补充( 回忆  nginx+uwsgi)

    第一种方式
    
    uwsgi的配置
    
    http = 0.0.0.0:8000
    
    nginx的配置
    
    proxy_pass http://127.0.0.1:8000;
    
    pkill -9 uwsgi 杀掉uwsgi的进程
    
    

    第二种方式 uwsgi的配置 socket
    = 0.0.0.0:8000 nginx的配置 include /etc/nginx/uwsgi_params; uwsgi_pass 127.0.0.1:8000;

    第三种方式 uwsgi的配置 socket
    = /data/mysite/mysite.socket nginx的配置 include /etc/nginx/uwsgi_params; uwsgi_pass unix:/data/mysite/mysite.socket;
  • 相关阅读:
    Centos7安装nodejs(npm)
    Centos7安装docker
    在目标服务器Centos7上安装 GitLab Runner
    PC端,知乎在不想登录的情况下一打开就弹出登录框的无痛解决办法
    mac下webstrom卡顿快速解决办法
    解决项目中使用momentJS文件 体积过大的问题
    发布订阅模式及多种实现方式:
    「react进阶」react开发者的不得不知道的八条优化建议
    Gulp、Webpack 有什么区别
    react 源码解析(上)
  • 原文地址:https://www.cnblogs.com/sc-1067178406/p/10826862.html
Copyright © 2011-2022 走看看