/etc/ansible/ansible.cfg 主配置文件,配置ansible工做特性
/etc/ansible/hosts 主机清单
/etc/ansible/roles/ 存放角色的目录linux
/usr/bin/ansible 主程序,临时命令执行工具
/usr/bin/ansible-doc 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具
/usr/bin/ansible-pull 远程执行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基于Console界面与用户交互的执行工具nginx
Ansible 配置文件/etc/ansible/ansible.cfg (通常保持默认)web
ansible #主程序命令,临时执行命令用 ansible-doc #显示模块帮助 ansible-playbook #将一系列的任务写在一块儿,称为:剧本 ansible-vault #管理加密、解密yml文件 ansible-console #2.0+版本新增,可交互执行命令,支持tab ansible-galaxy #链接 https://galaxy.ansible.com 下载相应的roles ansible-pull #推送命令至远程,效率无限提高,对运维要求较高
ansible-docshell
Fetch:从客户端取文件至服务器端,copy相反,拉取目录可先tar打包
ansible srv -m fetch -a 'src=/root/a.sh dest=/data/scripts'apache
Hostname:管理主机名
ansible all -m hostname -a "name=websrv"编程
Yum:管理包
ansible srv -m yum -a 'name=httpd state=latest' #安装
ansible srv -m yum -a 'name=httpd state=absent' #删除 vim
Service:管理服务
ansible srv -m service -a 'name=httpd state=stopped' #中止
ansible srv -m service -a 'name=httpd state=started' #启动
ansible srv –m service –a 'name=httpd state=reloaded' #重读配置文件
ansible srv -m service -a 'name=httpd state=restarted' #重启centos
User:管理用户
ansible srv -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1 '
ansible srv -m user -a 'name=user1 state=absent remove=yes'
#删除用户及家目录等数据bash
Group:管理组
ansible srv -m group -a "name=testgroup system=yes"
ansible srv -m group -a "name=testgroup state=absent" 服务器
将多个play组织在一个playbook中,便可以让它们联同起来按事先编排的机制同唱一台大戏
运行playbook:
ansible-playbook <filename.yml> ... [options] 选项: --check 只检测可能会发生的改变,但不真正执行操做 --list-hosts 列出运行任务的主机 --limit 主机列表 只针对主机列表中的主机执行 -v,-vv,-vvv 显示过程,更详细 例: ansible-playbook file.yml --check #只检测不运行 ansible-playbook file.yml ansible-playbook file.yml --limit websrvs
- (1)在单一档案中,可用连续三个连字号(——)区分多个档案。另外,还有选择性的连续三个点号( ... )用来表示档案结尾
- (2)次行开始正常写Playbook的内容,通常建议写明该Playbook的功能
- (3)使用#号注释代码
- (4)缩进必须是统一的,不能空格和tab混用
- (5)缩进的级别也必须是一致的,一样的缩进表明一样的级别,程序判别配置的级别是经过缩进结合换行来实现的
- (6)YAML文件内容和Linux系统大小写判断方式保持一致,是区别大小写的,k/v的值均需大小写敏感
- (7)k/v的值可同行写也可换行写。同行使用:分隔
- (8)v但是个字符串,也但是另外一个列表
- (9)一个完整的代码块功能需最少元素需包括 name: task
- (10)一个name只能包括一个task
- (11)YAML文件扩展名一般为yml或yaml **
- Hosts #执行的远程主机列表
- Tasks #任务集
- Varniables #内置变量或自定义变量在playbook中调用
- Templates #模板,可替换模板文件中的变量并实现一些简单逻辑的文件
- Handlers #和notity结合使用,由特定条件触发的操做,知足条件方才执行,不然不执行
- tags #标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible具备幂等性,所以会自动跳过没有变化的部分,即使如此,有些代码为测试其确实没有发生变化的时间依然会很是地长。此时,若是确信其没有变化,就能够经过tags跳过此些代码片段
能够是以下形式:
www.bigboss.com www.bigboss1.com:www.bigboss2.com 192.168.1.2 192.168.1.* web:db #两个组的交集 web:&db #两个组的并集 web:!db #在web组但不在db组中 例: - host: web:db
此外,甚至能够在sudo时使用sudo_user指定sudo时切换的用户
- hosts: websrvs remote_user: root tasks: - name: test connection ping: remote_user: bigboss sudo: yes #默认sudo为root sudo_user:wang #sudo为wang
例:
tasks: - name: disable selinux command: /sbin/setenforce 0 #若是命令或脚本的退出码不为零,可使用以下方式替代 tasks: - name: run this command and ignore the result shell: /usr/bin/somecommand || /bin/true #或者使用ignore_errors来忽略错误信息: tasks: - name: run this command and ignore the result shell: /usr/bin/somecommand ignore_errors: True
handlers和notify结合使用触发条件:
- hosts: websrvs remote_user: root tasks: - name: Install httpd yum: name=httpd state=present - name: Install configure file copy: src=files/httpd.conf dest=/etc/httpd/conf/ notify: restart httpd #当copy动做实现时,就会执行handlers的动做 - name: ensure apache is running service: name=httpd state=started enabled=yes handlers: - name: restart httpd service: name=httpd status=restarted
http.yml - hosts: web remote_user: root task: - name: Install httpd yum: name=httpd - name: copy configure file copy: src=file/httpd.conf dest=/etc/httpd/conf/ tags: conf #设置tags名为conf - name: start httpd tags:service service: name=httpd state=started enabled=yes ansible-playbook -t conf httpd.yml #调用名为conf的tags
文本文件,嵌套有脚本(使用模板编程语言编写)
Jinja2语言,使用字面量,有下面形式
字符串:使用单引号或双引号
数字:整数,浮点数
列表:[item1, item2, ...]
元组:(item1, item2, ...)
字典:{key1:value1, key2:value2, ...}
布尔型:true/false
算术运算:+, -, *, /, //, %, **
比较操做:==, !=, >, >=, <, <=
逻辑运算:and, or, not
流表达式:For If When
templates功能:根据模块文件动态生成对应的配置文件
yaml/yml 文件需和templates目录平级,目录结构以下:
[root@centos7 ~]# cat nginx.conf.j2
user nginx;
worker_processes {{ ansible_processor_vcpus*2 }};
#setup模块中ansible_processor_vcpus变量为CPU核心数,[root@centos7 ~]# vim temnginx.yml
- hosts: web remote_user: root tasks: - name: template config to hosts template: src=nginx.conf.j2 dest=/etc/nginx/nginx.confansible-playbook temnginx.yml
when: 条件测试
若是须要根据变量、facts或此前任务的执行结果来作为某task执行与否的前提时要用到条件测试,经过when语句实现,在task中使用,jinja2的语法格式在task后添加when子句便可使用条件测试;when语句支持Jinja2表达式语法
#当setup模块中ansible_os_family等于RedHat时执行关机
tasks:
name: shutdown redhat system
command: /sbin/shutdown -h now
when: ansible_os_family == 'RedHat'#根据系统版原本安装软件
tasks:- name: install nginx to centos7
yum: name=nginx
when: ansible_distribution_major_version == '7'- name: install httpd to centos6
yum: name=httpd
when: ansible_distribution_major_version == '6'
迭代:with_items