zoukankan      html  css  js  c++  java
  • 运维自动化 第三章 ansible

    1.ansible概念

      在远程主机上批量执行命令或者脚本的一个工具

    系统的ping走的是ICMP协议,ansible的ping是ssh协议

    2.ansible的安装

    #下载wget工具
    yum install -y wget
    
    #将epel源下载到本地
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    #安装ansible
    yum install -y ansible
    

    模块

    shell命令模块

    命令格式

      ansible host-pattern options

    常用的options:
      -a MODULE_ARGS #模块的参数   -C --check #干跑,白跑,走过之后不改变任何东西   -f FORKS , --forks=FORKS #指定并发,默认是5个   --list-hosts #列出主机   -m MODULE_NAME #模块名称   --syntax-check #检查语法   -k #密钥(密码)

     指令

    rpm -ql anssible|more  #查看ansible生成的文件
    
    /etc/ansible
    /etc/ansible/ansible.cfg  #配置文件
    /etc/ansible/hosts 
    /etc/ansible/roles       #空文件夹

     注: ansible底层是通过ssh实现的

     注: ping 走的是ICMP协议

    www.[001:006].example.com  代表www.001 -www.oo6(包含001和006)

    ansible的第一个命令

    ansible 192.168.100.1 -m ping -k
    #此时输入密码即可ping通

     将公钥copy到另一个ip地址下

    ssh-copy-id root@192.168.100.2
    

     此时就可以直接在1这个ip下直接登录2了(并不需要密码)

    ansible单个机器和多个机器ping

    ansible ip地址 -m ping  #单个机器的ping
    ansible ip1,ip2 -m ping #多个机器的ping
    ansible all -m ping  #所有的机器ping
    ansible web -m ping  #单个组的ping
    ansible web,db -m ping #多个组的并集
    ansible 'web:&db' -m ping #多个组的交集
    ansible 'web:!db' -m ping #多个组的差集
    

     host-pattern(ip地址)的格式

    - 单个的ip地址
    - 多个的ip地址,用,分割
    - 单个组
    - 多个组
      - 并集
        - web,db
        - ‘web:db’
      - 交集 ‘web:&db’
      - 差集 ‘web:!db’
    - 全部 all表示
    

    ansible-doc的命令格式

    ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
    
    -j #以json方式返回数据
        -l ,--list    #列出所有的模块
        -s,--snippet   #以片段式显示模块信息
      ansible-doc command #直接查看完整信息

     creates 如果已经存在,就不执行,如果不存在,就执行

     removes 如果存在,执行,如果不存在,就不执行

     chdir  改变命令,然后在执行(chdir=/tmp pwd相当于我跑到后面这个目录下/tmp,执行后面的命令pwd)

     1.command模块

    ansible web -m command -a "pwd"
    ansible web -m command -a "ls"
    ansible web -m command -a "chdir=/tmp pwd" #切换目录并执行命令
    ansible web -m command -a "creates=/tmp pwd" #因为tmp目录存在,pwd不会执行
    ansible web -m command -a "creates=/tmp2 pwd" #因为tmp2不存在,pwd执行
    ansible web -m command -a "removes=/tmp2 pwd" #因为tmp2不存在pwd不执行
    ansible web -m command -a "removes=/tmp pwd" #因为tmp目录存在,pwd会执行
    
    #创建用户
    ansible web -m command -a "useradd alex"
    #设置密码
    passwd alex
    
    echo "1234" |passwd --stdin alex #设置用户的密码

    2.shell模块 (支持特殊字符 , <, >, | ,& ,$  )

    - chdir
    - creates
    - removes
    ansible web -m shell -a "echo '1234' |passwd --stdin alex"
    ansible web -m shell -a "chdir=/tmp pwd" shabang
    ansible 192.168.226.101 -m shell -a "bash a.sh" #执行shell脚本
    ansible 192.168.226.101 -m shell -a "/root/a.sh" # 执行shell脚本,文件要有执行的权限
    ansible 192.168.226.101 -m shell -a "/root/a.py" #执行Python文件
    

    3.script模块 (执行本地脚本,判断被控机上是否存在文件)

    - chdir
    - creates
    - removes
    ansible db -m script -a "/root/a.sh" #执行本地的文件,管控机的文件
    ansible db -m script -a "creates=/root/a.sh /root/a.sh" # 判断被控机上的文件是否存在,如果不存在,就执行,如果存在,就跳过
    ansible db -m script -a "creates=/tmp /root/a.sh" #判断被控机上的文件
    

    4.copy模块 (将本地的文件复制到远程仓库上)

    - backup 备份,以时间结尾
    - content 直接往文件里面写内容,覆盖写
    - dest 目标文件,被控机的路径
    - src 源文件,直接写目录,则复制整个目录,如果目录后面以/结尾,则复制的目录下的所有文件
    - owner 属主
    - group 属组
    - mode 权限
    backup #创建一个备份文件,以时间戳结尾
    content #直接往文件里面写内容
    dest #目标地址
    group #属组
    mode# 文件的权限 W 2 R 4 X 1
    owner #属主
    src #源地址
    ansible web -m copy -a "src=/etc/fstab dest=/tmp/f" #复制本地文件到远程主机,并修改文件名,多次执行不会改变,因为checksum值是一样的
    ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes" #复制本地文件,并备份
    ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes group=alex mode=755"# 复制本地文件到远程主机,并指定属组和权限
    ansible web -m copy -a "src=/etc/init.d dest=/tmp backup=yes group=alex mode=755" #复制本地的目录到远程主机,修改目录权限,则目录里面的文件也会跟着变更
    ansible web -m copy -a "src=/etc/init.d/ dest=/tmp backup=yes group=alex mode=755" #复制本地目录下的所有文件,
    ansible web -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私语,嘈嘈切切错 杂弹,大珠小珠落玉盘' dest=/tmp/b" #直接往文件里面写内容,覆盖写,慎用

      

  • 相关阅读:
    LeetCode:Validate Binary Search Tree
    二叉树的非递归遍历(非递归使用栈、非递归不使用栈)
    scala 基础语法
    scala VS python2 (linux or shell)
    web压力测试工具
    Elasticsearch cluster health: yellow unassigned shards
    GC overhead limit exceeded
    linux定时任务的设置
    linux CPU占用率高(转)
    JQuery Sparkline 说明文档
  • 原文地址:https://www.cnblogs.com/zty1304368100/p/10815814.html
Copyright © 2011-2022 走看看