zoukankan      html  css  js  c++  java
  • ansible学习笔记一

    ansible学习笔记一

    参考博客:

    ansible学习 - 51CTO博客

    一、安装

    1 .下载epel源

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    1. 安装
    yum install -y ansible
    

    二、ansible 命令格式及使用

    1,ansible
    Usage: ansible <host-pattern> [options]
    -a MODULE_ARGS # 模块参数
    -C, --check #测试,不做任何改变,但是会执行
    -f FORKS, --forks=FORKS # 用来指定并发
    --list-hosts  #列出主机列表
    -m MODULE_NAME #模块名称
    --syntax-check #语法检查
    -k, --ask-pass #输入密码
    -v, --verbose #输出详细信息
    
    2,ansible-doc #查看ansible模块的帮助信息
    Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
     -j, --json  #以json的格式列出
     -l, --list  #逐条列出
     -s, --snippet  #块状列出
     # 什么都不加,全部列出
    ansible-doc -l |wc -l # 统计ansible提供的模块个数 - 2080
     
    3,ansible-galaxy #下载第三方插件
    4,ansible-playbook
     
    5,rpm -ql ansible |more #查看安装完ansible生成的文件夹和文件
    /etc/ansible
    /etc/ansible/ansible.cfg #配置文件
    /etc/ansible/hosts #主要文件
    

    三、host-pattern设置

    ssh 生成密钥

    # 在控制主机上按照先后顺序执行
    ssh-keygen   # 生成密钥对
    ssh-copy-id ip地址  # 将密钥对复制到远程机器
    

    小知识点:

    ansible 底层是通过ssh来实现的

    ping 走的是ICMP协议

    host-pattern 格式

    • 单个主机
    • 多个主机,用逗号做分割
    • 全部主机,用all表示
    • 单个组
    • 多个组
      • 交集 ‘db:&web’
      • 并集
      • web,db
      • ‘web:db’
      • 差集 ‘web:!db’

    四、ansible的第一个命令:ping

    $ ansible 192.168.14.150 -m ping
    192.168.14.150 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    
    ansible 10.0.0.143,10.0.0.144 -m ping
    ansible all -m ping
    ansible web -m ping
    ansible web,db -m ping
    ansible "web:&db" -m ping 
    ansible 'web:!db' -m ping
    ansible 'web:db' -m ping
    
    

    五、命令相关模块

    1、command:执行远程命令

    chdir # 切换目录,编译安装时使用
    creates # 如果存在,则不执行后面的命令
    removes # 如果存在,则执行后面的命令
    # -m command可忽略不写,是ansible的默认格式
    
    ansible web -a 'pwd'
    ansible web -a 'ls /tmp'
    ansible web -a 'creates=/tmp mdkir /data' #被忽略,因为/tmp存在
    ansible web -a 'creates=/tmp2 mkdir /data' #被执行,因为/tmp2目录不存在
    ansible web -a 'removes=/tmp2 mkdir /data2' #被忽略,因为/tmp2目录不存在
    ansible web -a 'removes=/tmp mkdir /data2' # 被执行,因为/tmp存在
    

    补充:

    # 查看用户相关的命令
    tail -1 /etc/passwd
    tail -1 /etc/shadow
    id alex
    # 设置密码,不需要交互
    echo '123' |passwd --stdin alex 
    # 添加用户
    useradd 用户名
    # 给用户设置密码
    passwd 用户名
    

    2、shell:执行远程主机本地的shell/Python脚本

    - chdir 切换目录
    - creates 有,不执行
    - removes  有,执行
    
    # 支持$,<>|&;等特殊符号
    ansible db -m shell -a 'echo "1234"|passwd --stdin alex' #直接设置用户密码
    ansible 10.0.0.143 -m shell -a "bash a.sh" #执行脚本,默认在/root文件夹下
    ansible 10.0.0.143 -m shell -a "/root/a.sh" #也可以指定文件夹运行脚本
    ansible 10.0.0.143 -m shell -a "/root/a.py" #执行python文件
    

    3、script:在远程主机执行主控端的脚本文件

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

    4、copy:将主控机上的文件或文件夹copy到被控机上

    backup # 备份,以时间戳为后缀名
    content # 内容
    dest # 目的地址
    group # 文件的属组
    mode #文件的权限  R 4 W 2 X 1
    owner # 文件的属主
    src #文件的源文件地址
    
    ansible web -m copy -a "dest=/tmp/f src=/etc/fstab" #复制单独文件
    ansible web -m copy -a "src=/etc/init.d dest=/tmp"  #复制文件目录
    ansible web -m copy -a "src=/etc/init.d/ dest=/tmp" # 复制文件夹内的所有的文件
    ansible db -m copy -a "dest=/tmp/b.sh src=/root/b.sh mode=644 owner=alex" # 复制文件并修改权限和属主
    ansible db -m copy -a "src=/etc/init.d dest=/tmp owner=alex" # 修改文件夹的权限或者属主属组时,文件夹内的所有文件的权限也会被修改
    # 通过md5来做校验
    ansible db -m copy -a "dest=/tmp/b.sh src=/root/b.sh mode=644 owner=alex backup=yes" # 复制文件并将原来的文件做备份
    ansible db -m copy -a "dest=/tmp/c.txt content='大弦嘈嘈如急雨,小弦切切如私语'" # 直接往文件里面写入文件,是直接覆盖写入,慎用
    

    5、file:在管控机上执行文件相关操作

    access_time # 创建时间
    group # 属组
    mode # 权限
    owner # 属主
    path # 文件的路径
    src # 源地址,只有在软连接和硬链接的时候才会使用
    state #参数:directory目录  touch文件  link软连接  hard硬链接  absent 删除
    
    ansible db -m file -a "path=/alex state=directory" # 创建一个目录
    ansible db -m file -a "path=/root/alex.txt state=touch" # 创建一个文件
    ansible db -m file -a "src=/root/q.txt path=/tmp/q state=link" # 创建软连接,源地址是被管控机上的文件地址
    ansible db -m file -a "path=/tmp/q state=absent" # 删除文件或者文件夹
    

    补充:

    软连接 -> 快捷方式 - 会跟源文件改变  - ln -s 
    硬链接 -> 硬盘的重复应用 - 会跟源文件改变  - ln
    复制 -> 复制了一份 - 不会跟源文件改变  - cp
    

    6、fetch:远程收集被管控机上的文件

    dest #目标地址
    src #源地址
    
    ansible db -m fetch -a "dest=/tmp src=/var/log/cron" #复制远程被管控机器的文件到主控机器上
    #特点:以被管控机的ip为目录,并保留原来的目录结构
    

    内容总结

    ansible 的安装 epel源

    ping

    host-pattern 格式

    • 单个ip地址
    • 多个ip地址,用逗号分隔
    • 所有ip地址,用all 表示
    • 单个组
    • 多个组
      • 交集 ‘web:&db’
      • 并集
      • ‘web:db’
      • web,db
      • 差集 ‘web:!db’

    模块

    • command
      • chdir 切换目录
      • creates 有的时候,就不执行
      • removes 有的时候,就执行
    • shell $,<>|&
      • chdir
      • creates
      • removes
    • script 执行管控机上的文件或者脚本
      • creates 判断被管控机上是否存在,如果存在,就不执行
      • removes
    • copy
      • src
      • dest
      • mode
      • owner
      • group
      • backup
      • content
    • file
      • src
      • link
      • hard
      • path
      • state
      • link
      • hard
      • directory
      • touch
      • absent
      • mode
      • owner
      • group
      • access_time
    • fetch 收集远程别管控上的文件
  • 相关阅读:
    20181120-1 每周例行报告
    20181113-2 每周例行报告
    20181030-4 每周例行报告
    20181023-3 每周例行报告
    第六周例行报告
    软件功能说明书final修订
    第十二周——例行报告
    PSP总结报告
    第十一周——例行报告
    PSP Daily软件beta版本——基于NABCD评论,及改进建议
  • 原文地址:https://www.cnblogs.com/russellyoung/p/10552928.html
Copyright © 2011-2022 走看看