zoukankan      html  css  js  c++  java
  • ansible的playbook剧本

    如果用模块形式一般有幂等性,如果用shell或者command没有幂等性
    playbooks相当于shell的脚本,可以吧执行的任务写到文件当一次执行,方便调用
    tasks:一个task相当于是一个play
    varobles:变量,一个定义,多次调用
    template:模板。可以区分不同主机的特点
    handlers:触发器,依赖于前一个任务,前一个任务如果执行改变,那么就会触发handlers
    1.vim /etc/ansible/hosts
    [zxw]
    192.168.126.7 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=123
    192.168.126.6 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=123
    ~

    基本格式

    - hosts: zxw
    remote_user: root
    tasks:
    - name: copy httpd.conf
    copy: src=name dest=name
    - name: restarted httpd
    service: name=httpd state=restarted

    Vim name.yaml
    - hosts: zxw 定义的组 (IP,all,组名)
    remote_user: root 主机执行
    tasks: 任务
    - name: copy httpd.conf 任务名字
    copy: src=/etc/httpd/conf/httpd.conf 模块 本地文件 dest=/etc/httpd/conf/httpd.conf 目标文件
    - name: restarted httpd
    service: name=httpd state=restarted
    [root@zxw8 ~]# ansible-playbook host.yaml

    192.168.126.7 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
    执行3个| 修给2个| 不可达=0 | 失败=0| 跳过=0| 获救=0| 忽略=0

    定义变量:
    第一种:
    - hosts: zxw
    remote_user: root
    vars:
    - file: /etc/httpd/conf/httpd.conf
    tasks:
    - name: copy httpd.conf
    copy: src={{ file }} dest={{ file }}
    - name: restarted httpd
    service: name=httpd state=restarted
    第二种:
    vim /etc/ansible/hosts
    [zxw:vars]
    file= /etc/httpd/conf/httpd.conf
    packages=tree2
    第三种:
    [root@zxw8 ~]# ansible-playbook host.yaml --extra-vars "file=/etc/httpd/conf/httpd.conf "

    注册变量:
    register注册变量:把date命令输出的结果赋予给date_output

    - hosts: zxw
    remote_user: root
    tasks:
    - name: get date
    command: date
    register: date_output
    - name: echo date_output
    shell: "echo {{date_output.stdout}} > /root/zxw.txt"
    [root@zxw8 ~]# ansible-playbook date.yaml

    when语句:
    when条件语句:可以根据setup显示出客户端信息为依据来判断
    [root@zxw8 ~]# ansible zxw -m setup | more
    列出客户端详细信息
    - hosts: zxw
    remote_user: root
    tasks:
    - name: mkdir when
    command: 'mkdir when'
    when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "7"

    异常处理:
    ignore_errors:如果任务出错,直接跳过,不会影响其他任务

    - hosts: zxw
    remote_user: root
    tasks:
    - name: touch zhao
    command: 'touch zhao'
    ignore_errors: yes
    - name: restarted httpd
    service: name=httpd state=restarted
    ignore_errors: yes

    循环语句:
    第一种:
    {{ item }}:循环创建
    创建
    - hosts: zxw
    remote_user: root
    tasks:
    - name: add many users
    user: name={{ item }} state=present
    with_items:
    - user1
    - user2
    - user3
    删除:
    user: name={{ item }} state=absent
    - hosts: zxw
    remote_user: root
    tasks:
    - name: yum many rujian
    yum: name={{ item }} state=latest
    with_items:
    - samba
    - vsftpd
    - nfs-utils
    - rpcbind


    第二种:
    - hosts: 192.168.254.12
    remote_user: root
    tasks:
    - name: add several user
    user: name={{item.name}} state=present groups={{item.groups}}
    with_items:
    - { name: 'testuser1', groups: 'wheel'}
    - { name: 'testuser2', groups: 'root'}
    触发器:
    handlers:如果执行的任务被改变那么会触发handlers的任务
    - hosts: zxw
    remote_user: root
    tasks:
    - name: copy httpd.conf
    copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
    notify:
    - service httpd restarted
    handlers:
    - name: service httpd restarted
    service: name=httpd state=restarted

    模板拷贝:
    template,用来区分不同客户端上的特性
    - hosts: zxw
    remote_user: root
    tasks:
    - name: copy httpd.conf
    template: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
    notify:
    - service httpd restarted
    handlers:
    - name: service httpd restarted
    service: name=httpd state=restarted
    [root@zxw8 ~]]# cat /etc/ansible/hosts
    [zxw]
    192.168.126.7 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=123 prot=80
    192.168.126.6 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=123 prot=80


    [root@zxw8 ~]# cat /etc/redhat-release 查看版本
    1 .对剧本语法检测:
    ansible-playbook --syntax-check  /root/ansible/httpd.yaml
     
    2.-C模拟执行剧本:
    ansible-playbook  -C /root/ansible/httpd.yaml
     
    3.执行剧本:
    ansible-playbook   /root/ansible/httpd.yaml
     

    示例1:基础

     

     


    示例2:变量

     

     


    示例3:迭代

     

     


     示例4:触发器notify

     

    示例5:模板templates

     

     

     

  • 相关阅读:
    volley框架使用
    Insert Interval
    candy(贪心)
    Best Time to Buy and Sell Stock
    Best Time to Buy and Sell Stock III
    distinct subsequences
    edit distance(编辑距离,两个字符串之间相似性的问题)
    trapping rain water
    word break II(单词切分)
    sudoku solver(数独)
  • 原文地址:https://www.cnblogs.com/itzhao/p/11262016.html
Copyright © 2011-2022 走看看