执行过程
- 加载配置文件,默认/etc/ansible/ansible.cfg
- 查找并过滤得到需要执行的主机或组
- 加载对应的模块文件
- 将模块或命令生成对应的脚本py文件
- 将脚本传至远程主机上,加上执行权限
- 执行并返回结果
- 删除脚本,退出(sleep 0)
程序结构
- 配置文件目录:/etc/ansible/
- 执行文件目录:/usr/bin/
- lib依赖目录:/usr/lib/python/site-packages/ansible/
- 帮助文档目录:/usr/share/doc/ansible-xx/
- man文档目录:/usr/share/man/man1/
ansible.cfg读取顺序
- 检查环境变量ANSIBLE_CONFIG的路径文件
- 检查当前目录下的配置文件
- 检查/etc目录下的配置文件
ansible.cfg参数
inventory = /etc/ansible/hosts // 资源清单inventory文件的位置
library = /usr/share/ansible // Ansible模块的目录,支持多个目录方式,用冒号’:'隔开
forks = 5 // 并发连接数,默认为5
sudo_user = root // 默认执行命令的用户
remote_port = 22 // 指定连接被管节点的管理端口,默认为22端口
host_key_checking = False // 是否检查SSH主机的密钥
timeout = 60 // SSH连接的超时时间,单位为秒
log_path = /var/log/ansible.log // 指定存储ansible日志的文件(默认不记录日志)
hosts文件
[group_name] // 组成员可使用通配符
ip_addr / host_name
…
常用命令
- ansible 临时命令执行工具
- ansible-doc 获取模块信息及其使用帮助
- ansible-galaxy 上传下载代码或roles模块
- ansible-playbook 定制自动化任务集工具
- ansible-pull 远程执行命令的工具
- ansible-vault 文件加密工具
- ansible-console 基于linux与用户交互的命令执行工具
配置公私钥
ssh-keygen
ssh-copy-id root@xx.xx.xx.xx
// yum install openssh-clientansible -y
常用模块
ansible web -m {module_name} -a {cmd_args} // 命令参数以空格分隔
- command
- chdir 执行命令前,切换到指定目录
- executable 执行shell命令
- creates 当这个文件不存在,执行之后的命令
- removes 当这个文件不存在,不执行之后的命令
- shell
- 指定shell各种命令
- copy
- src 被复制的本地文件或目录
- content 指定文件的值,替换src
- dest 目标主机绝对路径
- backup 当文件内容发生改变后,在覆盖前备份源文件
- mode 设定权限
- force 指定是否在已存在目标文件时强制覆盖
- fetch
- dest 存放文件的目录
- src 远程拉取的文件
- yum
- name 安装的包名
- state
- present 安装
- latest 安装最新的
- absent 卸载
- update_cache 更新yum缓存
- conf_file 指定安装时所依赖的配置文件
playbook所执行的yml文件
---
- hosts:
remote_user:
# sudo_user:
tasks:
- name: TASK_NAME
module: arguments
notify: HANDLER_NAME
tags: tag1
- meta: flush_handlers # 立即执行之前的任务及对应的handler
handlers:
- name: HANDLER_NAME
module: arguments
ansible-playbook xx.yml [-t tag_name] // 可指定tag执行对应的任务
变量定义与使用
-
facts // 使用setup模块获取并使用
-
自定义变量
- ansible-playbook -e VARS, --extra-vars = VARS
- 在yml中定义 vars部分
- 在hosts文件中向不同的组或主机传递不同的变量
-
条件、迭代与字典
-
tasks: - name: template: src=xx.j2 when: condition - name: yum: name={{item}} state=absent with_items: - httpd - php - name: user: name={{item.name}} group={{item.group}} state=present with_items: - {name: '', group: ''} - {name: '', group: ''}
-
-
roles使用
-
将相关配置都放在指定role的文件目录下
- role/tasks/main.yml
- role/files/
- role/templates/
- role/vars/main.yml
- role/handlers/main.yml
-
# 同级目录下role_name.yml - hosts: remote_user: roles: - role
-
ansible-playbook -C role_name.yml
-