马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、ansible先容
Ansible是一款自动化运维工具,基于Python开发,聚集了浩繁运维工具(puppet、cfengine、chef、func、fabric)的长处,实现了批量体系设置、批量步调摆设、批量运行下令等功能。
Ansible 具有多个紧张的长处:
跨平台支持:Ansible 提供Linux、Windows、UNIX和网络装备的无署理支持,实用于物理、捏造、云和容器情况。
人类可读的自动化:Ansible Playbook接纳YAML文本文件编写,易于阅读,有助于确保全部人都能明白它们的用途。
完善形貌应用:可以通过 Ansible Playbook举行每种更改,并形貌和记录应用情况的每一个方面。
轻松管理版本控制:Ansible Playbook和项目是纯文本。它们可以视作源代码,放在现有版本控制体系中。
支持动态清单:可以从外部泉源动态更新 Ansible 管理的盘算机列表,随时获取全部受管服务器的当前准确列表,不受根本架构或位置的影响。
编排可与其他体系轻松集成:可以大概利用情况中现有的 HP SA、Puppet、Jenkins、红帽卫星和其他体系,而且集成到 Ansible 工作流中。
二、Ad-Hoc模式
Ad-Hoc下令是ansible提供的一种快速实验简单使命的下令行工具,它允许用户在不编写完备playbook的情况下直接实验单条下令,
根本语法- ansible <host-pattern> -m <module-name> -a '<module-aguments>'[options]
复制代码host-pattern:指定目的主机或主机组(如:all、webservers、192.168.1.*)
模块 -m:指定要利用的ansible模块
模块参数 -a:通报给模块的参数
选项全称作用示例-i --inventory指定自界说Inventory文件-i /etc/ansible/my_hosts.ini-m --module-name指定要利用的模块(command、shell、copy等)-m shell-a ''--args通报给模块的参数-a 'ls -l /tmp'-u --user指定ssh毗连用户-u root-k--ask-pass提示输入ssh暗码(默认暗码认证失败时利用)-k-b--become利用特权升级(如:sudo)-b-K--ask-become-pass提示输入特权暗码(如sudo暗码)-K--become-user=-指定特权升级的目的用户(需共同-b)--become-user=pastgres-f --forks设置并实验的主机数(默认5)-f 10-l -- limit限定实验的主机范围(支持通配符)-l 'web*'-v /-vv /-vvv--verbose输出具体日志 ,-vv--list-hosts-仅列出匹配的主机,不实验下令--list-hosts--check-模拟实验(Dry Run)不现实修改体系--check--diff-体现文件变动的差别(常用于copy / template模块)--diff-e ''--extra-vars设置额外变量(支持JSON / YAML格式)-e "user=admin"-o--one-line简化输入为单行格式-o-B --background背景异步实验使命(需共同-P轮询)-B 3600 -P 60-t --tree将输出结果生存为指定目次(按主机名分文件)-t /tmp/ansible-logs示例:- ansible all -m yum -a "name=vim-enhanced state=present"
- # name:包的名称
- # state=present:表示安装
- &&
- yum install -y vim
复制代码ansible下令中的-m yum等同于shell下令中的yum下令
ansible下令中的-a state=present等同于shell下令中的install
ansible下令中的-a name=vim-enhanced等同于shell下令中的vim
ansible主机清单(静态)
主机清单(Inventory)是ansible的核心设置文件,用于界说管理哪些主机以及怎样分组。一个主机可以附属于多个差别的组。
默认主机清单文件路径:/etc/ansible/hosts (有/etc/ansible/ansible.cfg界说)或通过-i指定自界说文件。
主机清单根本规则:
- 主机组以[header]开头,这是主机组的名称
- 可以利用主机名/域名大概IP地点标识目的主机
- 没有分组的主机须要在全部的主机组之前界说
默认组
纵然主机清单中没有界说任何组,ansible也会创建两个默认组:
all:该默认组包罗全部主机
ungrouped:该组包罗单独的主机- 192.168.1.100
- [webservers]
- 192.168.1.101
- 192.168.1.102
- [dbservers]
- 192.168.1.103
- 192.168.1.104
复制代码 嵌套组(父子组)
在ansible中,可以通过父子组(嵌套组)对主机举行分层管理,实现变量继承和批量利用。嵌套组可以嵌套许多个层级。
父组的变量会自动通报到子组,而子组可以覆盖父组的变量(优先级最高)。
在主机清单文件中,用:children界说父组,用平凡组名作为子组- [webservers]
- 192.168.1.100
- 192.168.1.101
- [dbservers]
- 192.168.1.102
- 192.168.1.103
- [production:children]
- webservers
- dbservers
复制代码 查察当前组的嵌套关系:- ansible-inventory --graph
- @all:
- |--@production:
- | |--@webservers:
- | | |--192.168.1.100
- | | |--192.168.1.101
- | |--@dbservers:
- | | |--192.168.1.102
- | | |--192.168.1.103
- | |--@ungrouped:
复制代码 界说主机范围
在主机清单中可以通过数字范围、字母范围、通配符批量界说主机,克制逐个列出IP/主机名。
- 数字范围(实用于IP或有序列主机名)
- 语法:
- [组名]
- 主机名前缀[开始:结束:步长] # 步长可省略(默认为1)
- [webservers]
- 192.168.1.[10:11]
- [dbservers]
- 192.168.1.[12:14]
复制代码 - 字母范围(实用于有序主机名)
- 通配符匹配(暗昧匹配主机名)
- [allservers]
- *.example.com # 匹配所有以.example.com 结尾的主机
复制代码 三、ansible模块
ansible-doc下令
- # 列出所有的ansible支持的模块
- ansible-doc -l | grep command
- # 查看某个模块的具体用法参数
- ansible-doc -s command
复制代码 command模块
command模块是ansible的默认模块,可以省略不写。
- 利用command模块,不得出现shell变量$name也不得出现特殊符号> < | ; &等。
作用:在长途节点上实验一个下令
参数阐明chdir在实验之前,先通过cd进入该参数指定的目次creates在创建一个文件之前,判断该文件是否存在,如果存在则跳过前面的下令,如果不存在则实验前面的下令free_form该参数可以输入任何的体系下令,实现长途实验和管理removes界说一个文件是否存在,如果存在则实验前面的下令,如果不存在则跳过1获取全部被管理呆板的负载信息- ansible all -m command -a "uptime"
复制代码 2让客户端呆板,先切换到/tmp目次下,然后打印当前的工作目次- ansible all -m command -a "pwd chdir=/tmp"
复制代码 3creates判断/opt文件夹是否存在,存在则不实验前面的pwd下令,不存在则实验- ansible all -m command -a "pwd creates=/opt"
复制代码 4removes存在则实验,不存在则跳过- ansible all -m command -a "ls -l removes=/opt"
复制代码 shell模块
在长途呆板上实验下令(复杂的下令)
参数阐明chdir在实验之前,先通过cd进入该参数指定的目次creates界说一个文件是否存在,如果存在则跳过下令,如果不存在则实验下令free_form该参数可以输入任何的体系下令,实现长途实验和管理removes界说一个文件是否存在,如果存在则实验前面的下令,如果不存在则跳过批量查询进程信息- ansible all -m shell -a "ps -ef | grep vim | grep -v grep"
复制代码 批量在客户端呆板创建写入文件信息- ansible all -m shell -a "echo hello > /tmp/hello.txt"
复制代码 script模块
比起shell模块,script模块功能更强大,在管理呆板上有一个脚本文件,就可以在全部被管理节点上去运行- [root@ansible ~]# ll /etc/ansible/scripts/
- 总用量 4
- -rw-r--r--. 1 root root 61 9月 8 18:59 a.sh
- [root@ansible ~]# ansible 172.16.103.129 -m script -a '/etc/ansible/scripts/a.sh &>/tmp/a'
- 172.16.103.129 | SUCCESS => {
- "changed": true,
- "rc": 0,
- "stderr": "Shared connection to 172.16.103.129 closed.\r\n",
- "stderr_lines": [
- "Shared connection to 172.16.103.129 closed."
- ],
- "stdout": "",
- "stdout_lines": []
- }
复制代码 file 模块
file模块是ansible中用于管理文件和目次的核心模块,可以创建文件、目次、符号链接、设置权限和属性等。
参数阐明示例path文件/目次路径(别名:dest,name)path: /etc/foo.confstate状态:file,dirctory,link,hard,touch,absentstate: directorymode权限(如0644)mode: '0644'owner文件全部者owner:rootgroup文件所属组group: www-datarecurse递归设置目次权限recurse: yessrc链接的源文件(当state=link或hard时)src: /etc/foo.confforce欺压创建链接(当目的存在时)force: yestouch:创建文件、更新时间戳
file:修改文件属性
示例:
1创建目次- ansible all -m file -a "path=/opt/dir state=directory"
复制代码 2创建文件- ansible all -m file -a "path=/opt/dir/file1.txt state=touch"
复制代码 3创建符号链接- ansible all -m file -a "src=/etc/hosts dest=/opt/dir/hosts_link state=link"
复制代码 4删除文件或目次- # 删除目录
- ansible all -m file -a "path=/opt/dir state=absent"
- # 删除文件
- ansible all -m file -a "path=/opt/dir/file1.txt state=absent"
复制代码 5修改文件属性- # 修改文件权限
- ansible all -m file -a "path=/opt/dir/file1.txt mode=0640 owner=root group=root"
- # 递归修改目录权限
- ansible all -m file -a "path=/opt/dir mode=0640 owner=root group=root recurse=yes"
复制代码 user 模块
ansible的user模块用于管理体系用户账户,包罗创建,修改和删除用户,以及管理用户属性如暗码,组,家目次等。
参数阐明示例name用户名(必须)name: testuserstate用户状态:present(存在)absent(不存在)state: presentuid用户UIDuid:1001group用户主组group:developersgroups用户附加组列表groups: wheel,devopshome用户家目次路径home: /home/testusershell用户默认shellshell: /bin/bashcomment用户形貌信息comment: "Test user"password用户暗码(加密后的)password: $!@3123generate_ssh_key是否天生SSH密钥generate_ssh_key: yesssh_key_typeSSH密钥范例ssh_key_type: rsassh_key_fileSSH密钥文件路径ssh_key_file: .ssh/id_rsasystem是否为体系用户system:yescreate_home是否创建加目次create_home: no示例
创建用户- ansible all -m user -a "name=testuser state=present shell=/sbin/nologin group=test groups=test1 home=/home/test create_home=yes"
复制代码 删除用户- ansible all -m user -a "name=testuser state=absent remove=yes"
复制代码 group 模块
group模块是ansible中用于管理体系用户组的核心模块,可以创建,修改和删除组
参数阐明示例name组名(必须)developersstate组状态:present/absentpresentgid指定组GID1001system是否为体系组yes示例:
创建根本用户组- ansible all -m group -a "name=developers"
复制代码 创建指定GID的组- ansible all -m group -a "name=deploy gid=1042"
复制代码 创建体系组- ansible all -m group -a "name=dbadmin system=yes"
复制代码 删除组- ansible all -m group -a "name-legacy state=absent"
复制代码 修改组GID- ansible all -m group -a "name=appusers gid=1500"
复制代码 yum 模块
yum模块是ansible中用于管理RHEL/CentOS/Fedora/openEuler等基于PRM的Linux体系中软件包的核心模块
参数阐明示例name包名httpdstate状态:present/latest/absentlatestenablerepo临时启用堆栈epeldisablerepo临时禁用堆栈updatesexclude扫除的包kernelupdate_cache更新元数据缓存yeslist列出包(不实验利用)httpdsecurity仅安全更新yesdownload_only仅下载不安装yes示例:
安装单个软件包- ansible all -m yum -a "name=httpd state=present"
复制代码 安装最新版本- ansible all -m yum -a "name=nginx state=latest"
复制代码 安装多个软件包- ansible all -m yum -a "name={'vim-enhanced','git',tmux} state=present"
复制代码 删除软件- ansible all -m yum -a "name=telnet state=absent"
复制代码 利用特定堆栈安装- ansible all -m yum -a "name=htop enablerepo=epel state=present"
复制代码 更新全部软件包- ansible all -m yum -a "name=* state=latest"
复制代码 仅安全更新- ansible all -m yum -a "security=yes state=latest"
复制代码 安装包组- ansible all -m yum -a "name='@development' state=present"
复制代码 下载但不安装- ansible all -m yum -a "name=ansible download=yes"
复制代码 利用URL安装RPM- ansible all -m yum -a "name=htps://***.rpm state=present" -b
复制代码 扫除特定包更新- ansible all -m yum -a "name=* state=latest exclude=kernel"
复制代码 清算yum缓存- ansible all -m yum -a "clean=all"
复制代码 列出可用更新- ansible all -m yum -a "list=updates"
复制代码 查抄包是否安装- ansible all -m yum 0-a "list=httpd"
复制代码 copy 模块
copy模块是ansible中用于文件传输的核心模块,可以将当地文件复制到长途文件,或直接在长途主机上创建文件
参数阐明示例src源文件路径(当地)/tmp/file.confdest目的路径(长途)/etc/file.confcontent直接写入的内容"hello world"owner文件全部者rootgroup文件所属组wheelmode文件权限0644backup是否备份原文件yesforce是否欺压覆盖novalidate更新前验证下令"/usr/sbin/apachectl -t % s"示例:
1根本文件复制- ansible webservers -m copy -a "src=/tmp/app.conf dest=/etc/app.conf"
复制代码 2设置文件和全部者- ansible all -m copy -a "src=/tmp/script.sh dest=/usr/local/bin/script.sh owner=root group=root"
复制代码 3直接创建文件内容- ansible all -m copy -a "content='DB_HOST=127.0.0.1' dest=/etc/db.conf "
复制代码 4复制并备份源文件- ansible all -m copy -a "src=/tmp/nginx.conf dest=/etc/nginx/nginx.conf backup=yes"
复制代码 5在单个主机上复制文件- ansible hostA -m copy -a "src=/path/to/source dest=/path/to/dest remote_src=yes"
复制代码 6验证下令- # 检查文件是否存在
- ansible all -m shell -a "ls -l /etc/app.conf" -b
- # 检查文件内容
- ansible all -m shell -a "cat /etc/motd" -b
- # 检查备份文件
- ansible all -m shell -a "ls -l /etc/nginx/nginx.conf.*" -b
复制代码 service模块
- name参数:此参数用于指定需要操作的服务名称,比如 nginx
- state参数:此参数用于指定服务的状态,比如,我们想要启动远程主机中的 nginx,则可以将 state 的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参数的可用值有 started、stopped、restarted、reloaded
- enabled参数:此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动
复制代码- //启动受控机上的vsftpd服务
- [root@ansible ~]# ansible webservers -m service -a 'name=vsftpd state=started'
- 172.16.103.129 | SUCCESS => {
- "changed": true,
- "name": "vsftpd",
- "state": "started",
- "status": {
- "ActiveEnterTimestampMonotonic": "0",
- ....此处省略N行
- }
- //设置受控机上的vsftpd服务开机自动启动
- [root@ansible ~]# ansible webservers -m service -a 'name=vsftpd enabled=yes'
- 172.16.103.129 | SUCCESS => {
- "changed": true,
- "enabled": true,
- "name": "vsftpd",
- "status": {
- "ActiveEnterTimestamp": "六 2018-09-08 00:02:39 EDT",
- ....此处省略N行
- }
- //停止受控机上的vsftpd服务
- [root@ansible ~]# ansible 172.16.103.129 -m service -a 'name=vsftpd state=stopped'
- 172.16.103.129 | SUCCESS => {
- "changed": true,
- "name": "vsftpd",
- "state": "stopped",
- "status": {
- "ActiveEnterTimestamp": "六 2018-09-08 00:02:39 EDT",
- ....此处省略N行
- }
复制代码 四、playbook模式
ansible的playbook模式是针对比力具体且比力大的使命,应用场景:
- 一键摆设rsync备份服务器
- 一键摆设lnmp情况
- #此工具用于执行编写好的 playbook 任务
- #示例
- ansible-playbook hello.yml
- cat hello.yml
- ---
- #hello world yml file
- - hosts: websrvs
- remote_user: root
- gather_facts: no
-
- tasks:
- - name: hello world
- command: /usr/bin/wall hello world
复制代码 Playbook与ad-hoc相比,是一种完全差别的运用ansible的方式,类似与saltstack的state状态文件。ad-hoc无法恒久利用,playbook可以恒久利用。
playbook是由一个或多个play构成的列表,play的紧张功能在于将事先归并为一组的主机装扮成事先通过ansible中的task界说好的脚色。从根本上来讲,所谓的task无非是调用ansible的一个module。将多个play构造在一个playbook中,即可以让它们连合起来按事先编排的机制完成某一使命
1、playbook核心元素
- Hosts 执行的远程主机列表
- Tasks 任务集
- Varniables 内置变量或自定义变量在playbook中调用
- Templates 模板,即使用模板语法的文件,比如配置文件等
- Handlers 和notity结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
- tags 标签,指定某条任务执行,用于选择运行playbook中的部分代码。
复制代码 2、playbook语法
playbook利用yaml语法格式,后缀可以是yaml,也可以是yml。
- 在单逐一个playbook文件中,可以连续三个连子号(---)区分多个play。另有选择性的连续三个点好(...)用来体现play的末了,也可省略。
- 次行开始正常写playbook的内容,一样平常都会写上形貌该playbook的功能。
- 利用#号解释代码。
- 缩进必须同一,不能空格和tab混用。
- 缩进的级别也必须是划一的,同样的缩进代表同样的级别,步调鉴别设置的级别是通过缩进联合换行实现的。
- YAML文件内容和Linux体系巨细写判断方式保持划一,是区分巨细写的,k/v的值均需巨细写敏感
- k/v的值可偕行写也可以换行写。同利用用:分隔。
- v可以是个字符串,也可以是一个列表
- 一个完备的代码块功能须要最少元素包罗 name: task
- # 创建playbook文件
- [root@ansible ~]# cat playbook01.yml
- --- #固定格式
- - hosts: 192.168.1.31 #定义需要执行主机
- remote_user: root #远程用户
- vars: #定义变量
- http_port: 8088 #变量
- tasks: #定义一个任务的开始
- - name: create new file #定义任务的名称
- file: name=/tmp/playtest.txt state=touch #调用模块,具体要做的事情
- - name: create new user
- user: name=test02 system=yes shell=/sbin/nologin
- - name: install package
- yum: name=httpd
- - name: config httpd
- template: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
- notify: #定义执行一个动作(action)让handlers来引用执行,与handlers配合使用
- - restart apache #notify要执行的动作,这里必须与handlers中的name定义内容一致
- - name: copy index.html
- copy: src=/var/www/html/index.html dest=/var/www/html/index.html
- - name: start httpd
- service: name=httpd state=started
- handlers: #处理器:更加tasks中notify定义的action触发执行相应的处理动作
- - name: restart apache #要与notify定义的内容相同
- service: name=httpd state=restarted #触发要执行的动作
- #测试页面准备
- [root@ansible ~]# echo "<h1>playbook test file</h1>" >>/var/www/html/index.html
- #配置文件准备
- [root@ansible ~]# cat httpd.conf |grep ^Listen
- Listen {{ http_port }}
- #执行playbook, 第一次执行可以加-C选项,检查写的playbook是否ok
- [root@ansible ~]# ansible-playbook playbook01.yml
- PLAY [192.168.1.31] *********************************************************************************************
- TASK [Gathering Facts] ******************************************************************************************
- ok: [192.168.1.31]
- TASK [create new file] ******************************************************************************************
- changed: [192.168.1.31]
- TASK [create new user] ******************************************************************************************
- changed: [192.168.1.31]
- TASK [install package] ******************************************************************************************
- changed: [192.168.1.31]
- TASK [config httpd] *********************************************************************************************
- changed: [192.168.1.31]
- TASK [copy index.html] ******************************************************************************************
- changed: [192.168.1.31]
- TASK [start httpd] **********************************************************************************************
- changed: [192.168.1.31]
- PLAY RECAP ******************************************************************************************************
- 192.168.1.31 : ok=7 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- # 验证上面playbook执行的结果
- [root@ansible ~]# ansible 192.168.1.31 -m shell -a 'ls /tmp/playtest.txt && id test02'
- 192.168.1.31 | CHANGED | rc=0 >>
- /tmp/playtest.txt
- uid=990(test02) gid=985(test02) 组=985(test02)
- [root@ansible ~]# curl 192.168.1.31:8088
- <h1>playbook test file</h1>
复制代码 3、playbook运行方式
- [root@ansible PlayBook]# ansible-playbook -h
- #ansible-playbook常用选项:
- --check or -C #只检测可能会发生的改变,但不真正执行操作
- --list-hosts #列出运行任务的主机
- --list-tags #列出playbook文件中定义所有的tags
- --list-tasks #列出playbook文件中定义的所以任务集
- --limit #主机列表 只针对主机列表中的某个主机或者某个组执行
- -f #指定并发数,默认为5个
- -t #指定tags运行,运行某一个或者多个tags。(前提playbook中有定义tags)
- -v #显示过程 -vv -vvv更详细
复制代码 4、playbook元素属性
主机与用户
在一个playbook开始时,开始界说的是要利用的主机和用户- ---
- - hosts: 192.168.1.31
- remote_user: root
复制代码 除了上面的界说外,还可以在某一个tasks中界说要实验该使命的长途用户- tasks:
- - name: run df -h
- remote_user: test
- shell: name=df -h
复制代码 还可以界说利用sudo授权用户实验该使命- tasks:
- - name: run df -h
- sudo_user: test
- sudo: yes
- shell: name=df -h
复制代码 tasks使命列表
每一个task必须有一个名称name,如许在运行playbook时,从其输出的使命实验信息中可以很清晰的辨别是属于哪一个task的,如果没有界说 name,action的值将会用作输出信息中标记特定的task。
每一个playbook中可以包罗一个大概多个tasks使命列表,每一个tasks完成具体的一件事,(使命模块)好比创建一个用户大概安装一个软件等,在hosts中界说的主机大概主机组都将会实验这个被界说的tasks。- tasks:
- - name: create new file
- file: path=/tmp/test01.txt state=touch
- - name: create new user
- user: name=test001 state=present
复制代码 Handlers与notify
许多时间当我们某一个设置发生改变,我们须要重启服务,(好比httpd设置文件文件发生改变了)这时间就可以用到handlers和notify了;
(当发生改动时)notify actions会在playbook的每一个task竣事时被触发,而且纵然有多个差别task关照改动的发生,notify actions只会被触发一次;好比多个resources指出由于一个设置文件被改动,以是apache须要重启,但是重新启动的利用只会被实验一次。- [root@ansible ~]# cat httpd.yml #用于安装httpd并设置启动---
- - hosts: 192.168.1.31
- remote_user: root tasks: - name: install httpd yum: name=httpd state=installed - name: config httpd template: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf notify: - restart httpd - name: start httpd service: name=httpd state=started handlers: - name: restart httpd service: name=httpd state=restarted#这里只要对httpd.conf设置文件作出了修改,修改后须要重启收效,在tasks中界说了restart httpd这个action,然后在handlers中引用上面tasks中界说的notify。
复制代码 playbook文件中界说变量
编写playbook时,直接在内里界说变量,然后直接引用,可以界说多个变量;注意:如果在实验playbook时,又通过-e参数指定变量的值,那么会以-e参数指定的为准。- # 编辑playbook
- [root@ansible PlayBook]# cat variables.yml
- ---
- - hosts: all
- remote_user: root
- vars: #定义变量
- pkg: nginx #变量1
- dir: /tmp/test1 #变量2
- tasks:
- - name: install pkg
- yum: name={{ pkg }} state=installed #引用变量
- - name: create new dir
- file: name={{ dir }} state=directory #引用变量
- # 执行playbook
- [root@ansible PlayBook]# ansible-playbook variables.yml
- # 如果执行时候又重新指定了变量的值,那么会已重新指定的为准
- [root@ansible PlayBook]# ansible-playbook -e "dir=/tmp/test2" variables.yml
复制代码 独立的变量yaml文件中界说
为了方便管理将全部的变量同一放在一个独立的变量YAML文件中,playbook文件直接引用文件调用变量即可。- # 定义存放变量的文件
- [root@ansible PlayBook]# cat var.yml
- var1: vsftpd
- var2: httpd
- # 编写playbook
- [root@ansible PlayBook]# cat variables.yml
- ---
- - hosts: all
- remote_user: root
- vars_files: #引用变量文件
- - ./var.yml #指定变量文件的path(这里可以是绝对路径,也可以是相对路径)
- tasks:
- - name: install package
- yum: name={{ var1 }} #引用变量
- - name: create file
- file: name=/tmp/{{ var2 }}.log state=touch #引用变量
- # 执行playbook
- [root@ansible PlayBook]# ansible-playbook variables.yml
复制代码 playbook标签
一个playbook文件中,实验时如果想实验某一个使命,那么可以给每个使命集举行打标签,如许在实验的时间可以通过-t选择指定标签实验,还可以通过--skip-tags选择除了某个标签外全部实验等。- # 编辑playbook[root@ansible PlayBook]# cat httpd.yml ---
- - hosts: 192.168.1.31
- remote_user: root tasks: - name: install httpd yum: name=httpd state=installed tags: inhttpd - name: start httpd service: name=httpd state=started tags: sthttpd - name: restart httpd service: name=httpd state=restarted tags: - rshttpd - rs_httpd# 正常实验的结果[root@ansible PlayBook]# ansible-playbook httpd.yml PLAY [192.168.1.31] **************************************************************************************************************************TASK [Gathering Facts] ***********************************************************************************************************************ok: [192.168.1.31]TASK [install httpd] *************************************************************************************************************************ok: [192.168.1.31]TASK [start httpd] ***************************************************************************************************************************ok: [192.168.1.31]TASK [restart httpd] *************************************************************************************************************************changed: [192.168.1.31]PLAY RECAP ***********************************************************************************************************************************192.168.1.31 : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
复制代码 通过 -t 选项指定 tags 举行实验- # 通过-t指定tags名称,多个tags用逗号隔开
- [root@ansible PlayBook]# ansible-playbook -t rshttpd httpd.yml
- PLAY [192.168.1.31] **************************************************************************************************************************
- TASK [Gathering Facts] ***********************************************************************************************************************
- ok: [192.168.1.31]
- TASK [restart httpd] *************************************************************************************************************************
- changed: [192.168.1.31]
- PLAY RECAP ***********************************************************************************************************************************
- 192.168.1.31 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
复制代码 通过 --skip-tags 选项扫除不实验的 tags- [root@ansible PlayBook]# ansible-playbook --skip-tags inhttpd httpd.yml
- PLAY [192.168.1.31] **************************************************************************************************************************
- TASK [Gathering Facts] ***********************************************************************************************************************
- ok: [192.168.1.31]
- TASK [start httpd] ***************************************************************************************************************************
- ok: [192.168.1.31]
- TASK [restart httpd] *************************************************************************************************************************
- changed: [192.168.1.31]
- PLAY RECAP ***********************************************************************************************************************************
- 192.168.1.31 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
复制代码 免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金. |