zoukankan      html  css  js  c++  java
  • Ansible

    1,Ansible 系列命令

    ansible
    ansible-doc
    ansible-playbook
    ansible-valut
    ansible-console
    ansible-galaxy
    ansible-pull
    

    1.1 ansible-doc 显示模块帮助

    Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
    
    plugin documentation tool
    
    Options:
      -a, --all             显示所有模块文档
      -l, --list              列出可用模块
      -s, --snippet      显示指定模块的playbook片段
    
    • 示例
    ansible-doc -l    列出所有模块
    ansible-doc ping    查看指定模块帮助用法
    ansible-doc -s ping    查看指定模块帮助用法
    

    1.2 ansible

    • ansible 通过 ssh 实现配置管理、应用部署、任务执行等功能,建议配置 ansible 端能基于秘钥认证的方式联系各被管理节点
    • ansible [-m module_name] [-a args]
    --version 显示版本
    -m module 指定模块,默认为 command
    -v 详细过程 -vv -vvv 更详细
    --list-hosts  显示主机列表,可简写 --list
    -k,--ask-pass    提示输入 ssh 连接密码,默认 key 验证
    -K,--ask-become-pass    提示输入 sudo 时的口令
    -C,--check    检查,并不执行
    -T,--timeout=TIMEOUT    执行命令的超时时间,默认 10s
    -u,--user=REMOTE_USER    执行远程执行的用户
    -b,--become    代替旧版的 sudo 切换
    

    1.2.1 ansible 的 主机模式

    • Host-pattern 匹配主机主机的列表
      • ALL:表示素有 Inventory 中的所有主机
        • ansible all -m ping
      • *:通配符
        • ansible "*" -m ping
        • ansible 192.168.1.* -m ping
        • ansible "*srvs" -m ping
      • 或关系
        • ansible "websrvs:appsrvs" -m ping
        • ansible "192.168.2.100:192.168.2.111" -m ping
      • 逻辑与
        • ansible 'websrvs:&dbsrvs' -m ping
        • websrvs 组并且在 dbsrvs 组中的主机
        • 注意:此处为单引号
      • 逻辑非
        • ansible 'websrvs:!dbsrvs' -m ping
        • websrvs 组,但不在 dbsrvs 组中的主机
        • 注意:此处为单引号
      • 综合逻辑
        • ansible 'websrvs:dbsrvs:&appsrvs:!ftpsrvs' -m ping
        • 注意:此处为单引号
      • 正则表达式
        • ansible 'websrvs:&dbsrvs' -m ping
        • ansible '~(web|db).*.example.com' -m ping
        • 注意:此处为单引号

    1.2.2 ansible 命令执行过程

    • 1,加载自己的配置文件 默认 /etc/ansible/ansible.cfg
    • 2,加载自己对应的模块文件,如 command
    • 3,通过 ansible 将模块或命令生成对应的临时 py 文件,并将该 文件传输至远程服务器
    • 4,给文件 +x 执行权限
    • 5,执行并返回结果
    • 6,删除临时 py 文件,sleep 0 退出
    • 执行状态
      • 绿色:执行成功并且不需要做改变的操作
      • 黄色:执行成功并且对目标主机做变更
      • 红色:执行失败
    • 示例
      • 以 wang 用户执行 ping 存活检测
        • ansible all -m ping -u wang -k
      • 以 wang sudo 至 root 执行 ping 存活检测
        • ansible all -m ping -u wang -b -k
      • 以 wang sudo 至 test 用户执行 ping 存活检测
        • ansible all -m ping -u wang -b -k --become-user test
      • 以 wang sudo 至 root 用户执行 ls
        • ansible all -m command -u wang --become-user=root -a 'ls /root' -b -k -K

    2,ansible 常用模块

    • Command:在远程主机执行命令,默认模块,可忽略 -m 选项
      • ansible srvs -m command -a 'service vsftpd start'
      • ansible srvs -m command -a 'echo test | passwd --stdin wang' 不成功
      • 此命令不支持 $VARNAME < > | ; & 等,用 shell 模块实现
    • Shell:和 command 相似,用 shell 执行命令
      • ansible srv -m shell -a 'echo test | passwd --stdin wang'
      • 调用 bash 执行命令类似 cat /tmp/stanley.md | awk -F '|' '{print $1 $2}' & > /tmp/example.txt这些复杂命令,即使使用 shell 也可能会失败,解决办法:写到脚本时,copy 到远程,执行,再把需要的结果拉回执行命令的机器
    • Script:运行脚本
      • -a '/PATH/TO/SCRIPT_FILE'
      • ansible websrvs -m script -a f1.sh
    • Copy:从服务器复制文件到客户端
      • ansible srv -m copy -a 'src=/root/f1.sh dest=/tmp/f2.sh owner=wang mode=600 backup=yes' 如目标存在,默认覆盖,此处指定先备份
      • ansible srv -m copy -a "content='test content ' dest=/tmp/f1.txt" 利用内容直接生成目标文件
    • Fetch:从客户端取文件至服务器端,copy 相反,目录可先 tar
      • ansible srv -m fetch -a 'src=/root/a.sh dest=/data/scripts'
    • File:设置文件属性
      • ansible srv -m file -a 'path=/root/a.sh owner=wang mode=755'
      • ansible web -m -file -a 'src=/app/testfile dest=/app/testfile-link state=link'
    • Hostname:管理主机名
    • Cron:计划任务
      • 支持时间:minute,hour,day,month,weekday
      • ansible srv -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.16.0.1 & > /dev/null' name=Synctime" 创建任务
      • ansible srv -m cron -a "disabled=true job='/usr/sbin/ntpdate 172.16.0.1 & > /dev/null' name=Synctime" 禁用任务
      • ansible srv -m cron -a 'state=absent name=Synctime' 删除任务
    • Yum:管理包
      • ansible srv -m yum -a 'name=httpd state=latest' 安装
      • ansible srv -m yum -a 'name=htttpd state=absent' 删除
    • Service:管理服务
      • ansible srv -m service -a 'name=httpd state=started enabled=true' 启动并且开机自启
      • ansible srv -m service -a 'name=httpd state=stopped' 停止
      • ansible srv -m service -a 'name=httpd state=reloaded' 平滑重启
      • ansible srv -m service -a 'name=httpd state=restarted' 重启
    • User:管理用户
      • ansible srv -m user -a 'name=nginx shell=/sbin/nologin system=yes home=/var/nginx groups=root,bin uid=2048 comment="nginx service"'
      • ansible srv -m user -a 'anme=sysuser1 system=yes home=/app/sysuser1'
      • ansible srv -m user -a 'name=user1 state=absent remove=yes' 删除用户及家目录等数据
    • Group:管理组
      • ansible srv -m group -a "name=testgroup system=yes" 创建组
      • ansible srv -m group -a "name=testgroup state=absent" 删除组

    3,ansible-galaxy

    - 连接 ````https://galaxy.ansible.com```` 下载相应的 roles
    - 列出所有已安装的 galaxy
        - ````ansible-galaxy list````
    - 安装 galaxy
        - ````ansible-galaxy install geerlingguy.nginx````
    - 删除 galalxy
        - ````ansible-galaxy remove geerlingguy.nginx````
    

    4,ansible-pull

    • 推送命令至远程,效率无限提升,对运维要求较高

    5,ansible-playbook

    • 使用文件基本配置如:hello.yml
    # hello world yml file
    ---
    - hosts: websrvs    # 对应ansible hosts 分组名 或 主机名
      remote_user: root    # 指定在被管理的主机上执行任务的用户
      tasks:                       # 任务列表
        - name: hello          # 任务名称
          command: hostname    # 调用command模块 执行命令
    
    • playbook 执行命令
    ansible-playbook hello.yml
    

    6,ansible-vault

    • 功能:管理加密解密 yml 文件
    # ansible-vault [create|decrypt|edit|encrypt|encrypt_string|rekey|view] [options] [vaultfile.yml]
    
    # 加密
    ansible-vault encrypt hello.yml
    
    # 解密
    ansible-vault decrypt hello.yml
    
    # 查看
    ansible-vault view hello.yml
    
    # 编辑加密文件
    ansible-vault edit hello.yml
    
    # 修改口令
    ansible-vault rekey hello.yml
    
    # 创建新文件
    ansible-vault create new.yml
    

    7,ansible-console:2.0+ 新增,可交互执行命令,支持 tab

    • root@all (3)[f:5]$ 执行用户@当前操作的主机组(当前组的主机数量)[f:并发数]$
    • 设置并发数:```forks n;例如:forks 10````
    • 切换组:cd 主机组 例如:cd web
    • 列出当前组主机列表:list
    • 列出所有的内置命令:?help
    • 示例:
    root@all (3)[f:5]$ list
    root@all (3)[f:5]$ cd websrvs
    root@websrvs (3)[f:5]$ list
    root@websrvs (3)[f:5]$ yum name=httpd state=present
    root@websrvs (3)[f:5]$ service name=httpd sstat=started
    
  • 相关阅读:
    Systemd 入门教程:实战篇
    Docker 1.12.0将要发布的新功能
    ubuntu 11.10 安装apache2 tomcat6
    DNS 原理入门
    c# 日志记录 行号
    WIN7系统插入蓝牙适配器经常断开问题
    iphone手机与PC蓝牙出现感叹号且无法修复解决方案
    未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出
    虚拟机如何设置U盘启动项
    Resharper 8.2 注册码
  • 原文地址:https://www.cnblogs.com/xiaoqshuo/p/10470668.html
Copyright © 2011-2022 走看看