标签:不同 中文 running 不同的 amp href 交集 双引号 复制
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
/etc/ansible/hosts 主机清单
/etc/ansible/roles/ 存放角色的目录
/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界面与用户交互的执行工具
Ansible 配置文件/etc/ansible/ansible.cfg (一般保持默认)
ansible #主程序命令,临时执行命令用
ansible-doc #显示模块帮助
ansible-playbook #将一系列的任务写在一起,称为:剧本
ansible-vault #管理加密、解密yml文件
ansible-console #2.0+版本新增,可交互执行命令,支持tab
ansible-galaxy #连接 https://galaxy.ansible.com 下载相应的roles
ansible-pull #推送命令至远程,效率无限提升,对运维要求较高
ansible-doc
Fetch:从客户端取文件至服务器端,copy相反,拉取目录可先tar打包
ansible srv -m fetch -a ‘src=/root/a.sh dest=/data/scripts‘
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‘ #删除
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‘ #重启
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‘
#删除用户及家目录等数据
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.conf
ansible-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
标签:不同 中文 running 不同的 amp href 交集 双引号 复制
原文地址:http://blog.51cto.com/bigboss/2062180