抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

ansible 常用模块

  • Command: 在远程主机执行命令, 默认模块, 可忽略 -m 选项
    ansible all (-m command) -a ‘service nginx restart’
    此命令不支持 $VARNAME < > | ; & *等, 用 shell 模块实现

  • Shell:

    • -a 参数尽量放到单引号中!
      ansible all -m shell -a ‘echo pass | passwd -stdin user’
      调用bash执行命令 蕾西 cat /tmp/stanley.md | awk -F ‘|’ ‘print $1,$2’ &> /tmp/example.txt
      这些复杂命令, 即使使用 shell 也可能会失败, 解决办法: 写到脚本时, copy到远程, 执行. 再把需要的结果拉回执行命令的机器
  • Script: 运行脚本

-a “/PATH/TO/SCRIPT_FILE”
ansible all -m script -a shel.sh

ansible-vault 加密解密

1
2
3
4
5
6
7
8
9
ansible-vault encrypt file.yml 

ansible-vault decrypt file.yml

ansible-vault edit file.yml

ansible-vault view file.yml

ansible-vault reykey file.yml

ansible-console 交互

YAML 语法

在单一档案中, 可用连续三个连字号(—)区分多个档案. 另外, 还有选择性的连续三个点好(…)用来表示档案结尾
风格和python类似
一个完整代码功能需最少元素包含 name: task
module: arguments (arguments 一般是 key=value)
拓展名通常为 yml 或 yaml

模板:

- hosts: websrvs
  remote_user: root
    tasks: 
      - name: test connection
        ping:

ansible目录下 vars.yml 专用于存放变量

ansible-playbook

  • 运行 playbook 的方式
    ansible-playbook <filename.yml> … [options]

    • -check 检查
    • –list-hosts 列出运行任务的主机
    • –limit 只针对主机列表中的主机执行
    • -v 显示过程 -vv -vvv 更详细
  • 一个模块只对应一个内容

如下:

task :
  - name: copy file1
    copy: src=file1 dest=/path/
    copy: src=file2 dest=/path/

这样只会 copy file2

顺便记下 backup 参数, backup=yes 会在复制前备份一个, 防止覆盖.
备份的文件名是: 文件名_随机数_时间

  • ignore_errors

即使途中出错也会继续运行:

tasks:
  - name: rum and ignore the result
    shell: ...
    ignore_errors: True
  • handlers 与 notify 触发事件

    • handlers 用于当关注的资源发生变化时, 才会才会采取一定的操作
    • notify 调用 handler 中定义的操作
    • handlers 与 tasks 同级, 并且 notify 名字需要与 handlers 中的 name 名字相同

    hosts: websrvs
    remote_user: root

    tasks:
      - name: add group nginx
        user: name=nginx state=present
      - name: add user nginx
        user: name=nginx state=present group=nginx 
      - name: install Nginx
        yum: name=nginx state=present
        notify:
          - restart Nginx
          - check Nginx process
    handlers:
      - name: restart Nginx
        service: name=nginx state=restartd enabled=yes
      - name: check Nginx process
        shell: killall -0 nginx
    
  • tags 标签

可以单独只执行标签
多个动作可以公用一个标签

1
ansible-playbook -t 标签 文件.yml
  • 变量的使用

    • ansible setup facts 远程主机的所有变量都可直接调用
      ansible all -m setup 查看所有系统自带变量
    • 在 /etc/ansible/hosts 中定义
      普通变量: 主机组中主机单独定义, 优先级高于公共变量
      如: [websrvs]
        192.168.22.33 http_port=81
        192.168.22.34 http_port=82
      
      公共(组)变量: 针对主机组中所有主机定义统一变量
      如: [websrvs:vars]
        nodename=www
        domainname=example.com
      
    • 通过命令行制定变量, 优先级最高
      如: ansible-playbook -e varname=value
    • 在 playbook 中定义
      vars:
      \- var1:value1
      \- var12:value2
      
    • 在 role 中定义

评论