[关闭]
@mrz1 2018-01-20T03:07:09.000000Z 字数 15760 阅读 1812

2017-1-12课程笔记(ansible)

笔记


自动化运维工具ansible

运维自动化发展历程及技术应用

1

2

云计算工程师核心职能

3

Linux运维工程师职能划分

4

自动化动维应用场景

企业实际应用场景分析

  1. 1 Dev开发环境
  2. 使用者:程序员
  3. 功能:程序员开发软件,测试BUG的环境
  4. 管理者:程序员
  5. 2 测试环境
  6. 使用者:QA测试工程师
  7. 功能:测试经过Dev环境测试通过的软件的功能
  8. 管理者:运维
  9. 说明:测试环境往往有多套,测试环境满足测试功能即可,不宜过多
  10. 1)测试人员希望测试环境有多套,公司的产品多产品线并发,即多个版本,意味着多个版本同步测试
  11. 2)通常测试环境有多少套和产品线数量保持一样
  12. 3 发布环境:代码发布机,有些公司为堡垒机(安全屏障)
  13. 使用者:运维
  14. 功能:发布代码至生产环境
  15. 管理者:运维(有经验)
  16. 发布机:往往需要有2台(主备)
  17. 4 生产环境
  18. 使用者:运维,少数情况开放权限给核心开发人员,极少数公司将权限完全开放给开发人员并其维护
  19. 功能:对用户提供公司产品的服务
  20. 管理者:只能是运维
  21. 生产环境服务器数量:一般比较多,且应用非常重要。往往需要自动工具协助部署配置应用。
  22. 5 灰度环境(生产环境的一部分)
  23. 使用者:运维
  24. 功能:在全量发布代码前将代码的功能面向少量精准用户发布的环境,可基于主机或用户执行灰度发布
  25. 案例:共100台生产服务器,先发布其中的10台服务器,这10台服务器就是灰度服务器
  26. 管理者:运维
  27. 灰度环境:往往该版本功能变更较大,为保险起见特意先让一部分用户优化体验该功能,待这部分用户使用没有重大问题的时候,再全量发布至所有服务器
  28. 预发布验证:
  29. 新版本的代码先发布到服务器(跟线上环境配置完全相同,只是未接入到调度器)
  30. 程序发布:
  31. 不能导致系统故障或造成系统完全不可用
  32. 不能影响用户体验
  33. 灰度发布:
  34. 发布路径:/webapp/tuangou-1.1
  35. /webapp/tuangou
  36. /webapp/tuangou-1.2
  37. 发布过程:在调度器上下线一批主机(标记为maintanance状态) --> 关闭服务--> 部署新版本的应用程序--> 启动服务--> 在调度器上启用这一批服务器
  38. 自动化灰度发布:脚本、发布平台

常用自动化运维工具

企业级自动化运维工具应用实战ansible

公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备。公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测试,运维老大为了在年底有所表现,要求运维部门同学尽快实现,当你接到这个任务时,有没有更快的解决方案?

Ansible发展史

Ansible
创始人,Michael DeHaan(Cobbler 与Func 的作者)
2012-03-09,发布0.0.1版,红帽收购
2015-10-17,Red Hat宣布收购(据说是1.5 亿美元)

同类自动化工具GitHub关注程度(2016-07-10)

同类的自动化运维工具 Watch(关注) Star(点赞) Fork(复制) Contributors(贡献者)
Ansible 1387 17716 5356 1428
Saltstack 530 6678 3002 1520
Puppet 463 4044 1678 425
Chef 383 4333 1806 464
Fabric 379 7334 1235 116

特性

ansible架构

ansible架构

Ansible工作原理

Ansible工作原理

Ansible命令执行来源:
USER,普通用户,即SYSTEM ADMINISTRATOR
CMDB(配置管理数据库)API 调用
PUBLIC/PRIVATE CLOUD API调用
USER-> Ansible Playbook -> Ansibile
利用ansible实现管理的方式:
Ad-Hoc 即ansible命令,主要用于临时命令使用场景
Ansible-playbook 主要用于长期规划好的,大型项目的场景,需要有前提的规划
Ansible-playbook(剧本)执行过程:
将已有编排好的任务集写入Ansible-Playbook
通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行
Ansible主要操作对象:
HOSTS主机
NETWORKING网络设备
注意事项
执行ansible的主机一般称为主控端,中控,master或堡垒机主控端Py: thon版本需要2.6或以上
被控端Python版本小于2.4需要安装python-simplejson
被控端如开启SELinux需要安装libselinux-python
windows不能做为主控端

ansible安装(四中方式)

  1. yum -y install python-jinja2 PyYAML python-paramiko
  2. python-babel python-crypto
  3. tar xf ansible-1.5.4.tar.gz
  4. cd ansible-1.5.4
  5. python setup.py build
  6. python setup.py install
  7. mkdir /etc/ansible
  8. cp -r examples/* /etc/ansible
  1. git clone git://github.com/ansible/ansible.git --recursive
  2. cd ./ansible
  3. source ./hacking/env-setup
  1. yum install python-pip python-devel
  2. yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
  3. pip install --upgrade pip
  4. pip install ansible--upgrade

相关文件

配置文件
/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界面与用户交互的执行工具

主机清单inventory

/etc/ansible/hosts文件格式
inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明

  1. 例:
  2. [root@centos7 ~]#vim /etc/ansible/hosts
  3. [web]
  4. 192.168.109.100
  5. 192.168.109.2
  6. [db]
  7. 192.168.109.3
  8. 192.168.109.100 //这里默认有个all
  9. [root@centos7 ~]#ansible db -m ping
  10. 192.168.109.100 | SUCCESS => {
  11. "changed": false,
  12. "ping": "pong"
  13. }
  14. 192.168.109.3 | SUCCESS => {
  15. "changed": false,
  16. "ping": "pong"
  17. }

如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机
示例:

  1. [websrvs]
  2. www[01:100].example.com
  3. [dbsrvs]
  4. db-[a:f].example.com

ansible 配置文件

  1. Ansible 配置文件/etc/ansible/ansible.cfg (一般保持默认)
  2. [defaults]
  3. #inventory = /etc/ansible/hosts # 主机列表配置文件
  4. #library = /usr/share/my_modules/ # 库文件存放目录
  5. #remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
  6. #local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
  7. #forks = 5 # 默认并发数
  8. #sudo_user = root # 默认sudo 用户
  9. #ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
  10. #ask_pass = True
  11. #remote_port = 22
  12. #host_key_checking = False #检查对应服务器的host_key,建议取消注释第一次连接不用输入yes
  13. #log_path = /var/log/ansible.log 生成日志文件

ansible系列命令

  1. Ansible系列命令
  2. ansible ansible-doc ansible-playbook ansible-vault ansible-console ansible-galaxy ansible-pull
  3. ansible-doc:显示模块帮助
  4. ansible-doc [options] [module...]
  5. -a 显示所有模块的文档
  6. -l, --list 列出可用模块
  7. -s, --snippet 显示指定模块的playbook片段
  8. 示例:
  9. ansible-doc l 列出所有模块
  10. ansible-doc ping 查看指定模块帮助用法
  11. ansible-doc s ping 查看指定模块帮助用法
  1. ansible通过ssh实现配置管理、应用部署、任务执行等功能,建议配置ansible端能基于密钥认证的方式联系各被管理节点
  2. ansible <host-pattern> [-m module_name] [-a args]
  3. --version 显示版本
  4. -m module 指定模块,默认为command
  5. -v 详细过程–vv-vvv更详细
  6. --list-hosts 显示主机列表,可简写—list
  7. -k, --ask-pass 提示连接密码,默认Key验证
  8. -K, --ask-become-pass 提示输入sudo
  9. -C, --check 检查,并不执行
  10. -T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
  11. -u, --user=REMOTE_USER 执行远程执行的用户
  12. -b, --become 代替旧版的sudo切换
  13. ansibleHost-pattern
  14. 匹配主机的列表
  15. All :表示所有Inventory中的所有主机
  16. ansible all m ping
  17. * :通配符
  18. ansible "*" -m ping
  19. ansible 192.168.1.* -m ping
  20. ansible "*srvs" -m ping
  21. 或关系
  22. ansible "websrvs:appsrvs" -m ping
  23. ansible "192.168.1.10:192.168.1.20" -m ping
  24. 逻辑与
  25. ansible "websrvs:&dbsrvs" m ping
  26. websrvs组并且在dbsrvs组中的主机
  27. 逻辑非
  28. ansible 'websrvs:!dbsrvs' m ping
  29. websrvs组,但不在dbsrvs组中的主机
  30. 综合逻辑
  31. ansible 'websrvs:dbsrvs:&appsrvs:!ftpsrvs' m ping
  32. 正则表达式
  33. ansible "websrvs:&dbsrvs" m ping
  34. ansible "~(web|db).*\.magedu\.com" m ping

ansible命令执行过程

ansible命令执行过程ansible all -m command -a 'ls /root'
1. 加载自己的配置文件默认/etc/ansible/ansible.cfg
2. 加载自己对应的模块文件,如command
3. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
4. 给文件+x执行
5. 执行并返回结果
6. 删除临时py文件,sleep 0退出

执行状态:
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败

ansible使用示例

  1. wang用户执行ping存活检测
  2. ansible all -m ping -u wang -k
  3. wang sudoroot执行ping存活检测
  4. ansible all -m ping -u wang b -k
  5. wangsudomage用户执行ping存活检测
  6. ansible all -m ping -u wang b -k --become-user mage
  7. wang sudoroot用户执行ls
  8. ansible all -m command -u wang--become-user=root -a 'ls/root' -b k -K

ansible常用模块

Command:在远程主机执行命令,默认模块,可忽略-m选项

  1. 命令:
  2. chdir #运行该命令之前,切换到该目录。
  3. creates #一个文件当它已经存在时,这个步骤将不运行。
  4. ansible srvs -m command -a 'service vsftpd start'
  5. ansible srvs -m command -a 'echo magedu |passwd --stdin wang' 不成功此命令不支持$VARNAME < > | ;& 等,用shell模块实现

Shell:和command相似,用shell执行命令

  1. ansible srv -m shell -a 'echo xxxxx |passwd –stdin wang'
  2. 调用bash执行命令类似cat /tmp/stanley.md | awk -F'|' '{print $1,$2}' &> /tmp/example.txt这些复杂命令,即使使用shell也可能会失败,解决办法:写到脚本时,copy到远程,执行,再把需要的结果拉回执行命令的机器
  3. [root@centos7 ~]#ansible all -m shell -a 'echo $HOSTNAME'
  4. 192.168.109.100 | SUCCESS | rc=0 >>
  5. centos7.magedu.com
  6. 192.168.109.2 | SUCCESS | rc=0 >>
  7. centos7
  8. 192.168.109.3 | SUCCESS | rc=0 >>
  9. centos6.9

Script:运行脚本

  1. f1.sh
  2. hostname
  3. date .... 定义了一些脚本等
  4. snsible websrvs -m script -a 'f1.sh'

Copy:从服务器复制文件到客户端,

  1. ansible srv -m copy -a "src=/root/f1.sh dest=/tmp/f2.sh owner=wang mode=600 backup=yes"
  2. 如目标存在,默认覆盖,此处指定先备份
  3. ansible srv -m copy -a "content='test content\n' dest=/tmp/f1.txt" 利用内容,直接生成目标文件

cron:计划任务

  1. 支持时间:minutehourdaymonthweekday
  2. ansible srv -m cron -a "minute=*/5 job='/usr/bin/ntpdate 172.16.0.1 &>/dev/null' name=Synctime" 创建任务
  3. ansible srv -a 'crontab -l' 查看任务
  4. ansible srv -m cron -a 'state=absent name=Synctime' 删除任务
  5. 计划任务目录路径 /var/spool/cron/root
  6. ansible srv -m cron -a 'disabled=yes job="/usr/bin/ntpdate 172.16.0.1 &>/dev/null" name=Synctime'
  7. disables=yes 前面加上注释 no的话取消注释

fetch:从客户端取文件至服务器端,copy相反,目录可先tar

  1. ansible srv -m fetch -a 'src=/root/a.sh dest=/data/scripts'

file:设置文件属性

  1. ansible srv -m file -a "path=/root/a.sh state=touch owner=wang mode=755" //创建空文件 并设置权限等
  2. ansible web -m file -a 'src=/app/testfile dest=/app/testfile-link state=link' //创建软连接

hostname:管理主机名

  1. ansible web -m hostname -a "name=websrv"

yum:管理包

  1. ansible srv -m yum -a 'name=httpd state=latest' 安装
  2. ansible srv -m yum -a 'name=httpd,tftp state=latest' 安装多个
  3. ansible srv -m yum -a 'name=httpd state=latest update_cache=yes'
  4. update_cache=yes 相当于yum clean all
  5. ansible srv -m yum -a 'name=httpd state=absent' 删除

service:管理服务

  1. ansible srv -m service -a 'name=httpd state=stopped enabled=yes'关闭并且设置开机启动 不支持多个命令
  2. ansible srv -m service -a 'name=httpd state=started'启动
  3. ansible srv m service a 'name=httpd state=reloaded'
  4. ansible srv -m service -a 'name=httpd state=restarted'重启

user:管理用户

  1. ansible srv -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'创建普通用户
  2. ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1 '创建系统用户
  3. ansible srv -m user -a 'name=user1 state=absent remove=yes' 删除用户及家目录等数据

Group:管理组

  1. ansible srv -m group -a "name=testgroup system=yes"
  2. ansible srv -m group -a "name=testgroup state=absent"

ansible系列命令

ansible-galaxy

  1. 连接https://galaxy.ansible.com 下载相应的roles
  2. 中文 http://www.ansible.com.cn/index.html
  3. 列出所有已安装的galaxy
  4. ansible-galaxy list
  5. 安装galaxy
  6. ansible-galaxy install geerlingguy.redis
  7. 删除galaxy
  8. ansible-galaxy remove geerlingguy.redis

ansible-pull

  1. ansible-pull
  2. 推送命令至远程,效率无限提升,对运维要求较高

Ansible-playbook

  1. ansible-playbook hello.yml
  2. 例子:
  3. vim hello.yml
  4. - hosts: test
  5. remote_user: root
  6. tasks:
  7. - name: hello world
  8. command: wall "hello world"

Ansible-vault

  1. 功能:管理加密解密yml文件
  2. ansible-vault [create|decrypt|edit|encrypt|rekey|view]
  3. ansible-vault encrypt hello.yml 加密
  4. ansible-vault decrypt hello.yml 解密
  5. ansible-vault view hello.yml 查看
  6. ansible-vault edit hello.yml 编辑加密文件
  7. ansible-vault rekey hello.yml 修改口令
  8. ansible-vault create new.yml 创建新文件

Ansible-console

  1. Ansible-console2.0+新增,可交互执行命令,支持tab
  2. root@test(2)[f:10] $
  3. 执行用户@当前操作的主机组(当前组的主机数量)[f:并发数]$
  4. 设置并发数:forks n 例如:forks 10
  5. 切换组:cd 主机组例如:cd web
  6. 列出当前组主机列表:list
  7. 列出所有的内置命令:?或help
  8. 示例:
  9. root@all (2)[f:5]$ list
  10. root@all (2)[f:5]$ cd appsrvs
  11. root@appsrvs (2)[f:5]$ list
  12. root@appsrvs(2)[f:5]$ yum name=httpd state=present
  13. root@appsrvs(2)[f:5]$ service name=httpd state=started

playbook

YAML介绍

更多的内容及规范参见http://www.yaml.org

YAML语法简介

YAML语法简介

  1. Dictionary:字典,通常由多个keyvalue构成
  2. 示例:
  3. ---
  4. # An employee record
  5. name: Example Developer
  6. job: Developers
  7. kill: Elite
  8. 也可以将key:value放置于{}中进行表示,用,分隔多个key:value
  9. 示例:
  10. ---
  11. # An employee record
  12. {name: Example Developer, job: Developer, skill: Elite}

YAML语法

YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表、标量等数据结构。其结构(Structure)通过空格来展示,序列(Sequence)里的项用"-"来代表,Map里的键值对用":"分隔
示例

  1. name: John Smith
  2. age: 41
  3. gender: Male
  4. spouse:
  5. name: Jane Smith
  6. age: 37
  7. gender: Female
  8. children:
  9. - name: Jimmy Smith
  10. age: 17
  11. gender: Male
  12. - name: Jenny Smith
  13. age 13
  14. gender: Female

Playbook核心元素

  1. vim test1.yml
  2. - hosts: web
  3. remote_user: root
  4. tasks:
  5. - name: install package
  6. yum: name=httpd start=present
  7. - name: start service
  8. service: name=httpd state=started enabled=yes
  9. ansible-playbook test1.yml 执行

playbook基础组件

  1. playbook中的每一个play的目的都是为了让某个或某些主机以某个指定的用户身份执行任务。hosts用于指定要执行指定任务的主机,须事先定义在主机清单中
  2. 可以是如下形式:
  3. one.example.com
  4. one.example.com:two.example.com
  5. 192.168.1.50
  6. 192.168.1.*
  7. Websrvs:dbsrvs两个组的并集
  8. Websrvs:&dbsrvs两个组的交集
  9. webservers:!phoenix websrvs组,但不在dbsrvs
  10. 示例:-hosts: websrvsdbsrvs
  1. 可用于Hosttask中。也可以通过指定其通过sudo的方式在远程主机上执行任务,其可用于play全局或某任务;此外,甚至可以在sudo时使用sudo_user指定sudo时切换的用户
  2. - hosts: websrvs
  3. remote_user: root
  4. tasks:
  5. -name: test connection
  6. ping:
  7. remote_user: magedu
  8. sudo: yes 默认sudoroot
  9. sudo_user:wang sudowang
  1. play的主体部分是task listtask list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。在运行自下而下某playbook时,如果中途发生错误,所有已执行任务都将回滚,因此,在更正playbook后重新执行一次即可
  2. task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致
  3. 每个task都应该有其name,用于playbook的执行结果输出,建议其内容尽可能清晰地描述任务执行步骤。如果未提供name,则action的结果将用于输出
  1. 格式:
  2. (1) action: module arguments
  3. (2) module: arguments 建议使用
  4. 注意:shellcommand模块后面跟命令,而非key=value
  5. 某任务的状态在运行后为changed时,可通过“notify"通知给相应的handlers
  6. 任务可以通过"tags"打标签,而后可在ansible-playbook命令上使用-t指定进行调用
  7. 示例:
  8. tasks:
  9. - name: disable selinux
  10. command: /sbin/setenforce 0
  1. 如果命令或脚本的退出码不为零,可以使用如下方式替代
  2. tasks:
  3. - name: run this command and ignore the result
  4. shell: /usr/bin/somecommand|| /bin/true
  5. 或者使用ignore_errors来忽略错误信息:
  6. tasks:
  7. - name: run this command and ignore the result
  8. shell: /usr/bin/somecommand
  9. ignore_errors: True
  10. 运行playbook的方式
  11. ansible-playbook <filename.yml> ... [options]
  12. 常见选项
  13. --check 只检测可能会发生的改变,但不真正执行操作
  14. --list-hosts 列出运行任务的主机
  15. --limit 主机列表只针对主机列表中的主机执行
  16. -v 显示过程-vv-vvv更详细
  17. 示例
  18. ansible-playbook file.yml --check 只检测
  19. ansible-playbook file.yml
  20. ansible-playbook file.yml --limit websrvs

Playbook VS ShellScripts

  1. SHELL脚本
  2. #!/bin/bash
  3. # 安装Apache
  4. yum install --quiet -y httpd
  5. # 复制配置文件
  6. cp /path/to/config/httpd.conf /etc/httpd/conf/httpd.conf
  7. cp /path/to/httpd-vhosts.conf /etc/httpd/conf/httpd-vhosts.conf
  8. # 启动Apache,并设置开机启动
  9. service httpd start
  10. chkconfig httpd on
  11. Playbook定义
  12. ---
  13. - hosts: all
  14. tasks:
  15. - name: "安装Apache"
  16. command: yum install -q -y httpd
  17. - name: "复制配置文件"
  18. command: cp /tmp/httpd.conf/ etc/httpd/conf/httpd.conf
  19. command: cp /tmp/httpd-vhosts.conf/ etc/httpd/conf/httpd-vhosts.conf
  20. - name: "启动Apache,并设置开机启动"
  21. service: name=httpd state=started enabled=yes

示例system.yml:

  1. ---
  2. - hosts: allre
  3. mote_user: root
  4. tasks:
  5. - name: create mysql user
  6. user: name=mysql system=yes uid=36
  7. - name: create a group
  8. group: name=httpd system=yes

Playbook示例

  1. 示例:httpd.yml
  2. - hosts: websrvs
  3. remote_user: root
  4. tasks:
  5. - name: Install httpd
  6. yum: name=httpd state=present
  7. - name: Install configure file
  8. copy: src=files/httpd.conf dest=/etc/httpd/conf/
  9. - name: start service
  10. service: name=httpd state=started enabled=yes

handlers和notify结合使用触发条件

Playbook中handlers使用

  1. - hosts:websrvs
  2. remote_user: root
  3. tasks:
  4. - name: Install httpd
  5. yum: name=httpd state=present
  6. - name: Install configure file
  7. copy: src=files/httpd.conf dest=/etc/httpd/conf/
  8. notify: restart httpd
  9. - name: ensure apache is running
  10. service: name=httpd state=started enabled=yes
  11. handlers:
  12. - name: restart httpd
  13. service: name=httpd status=restarted

示例:

  1. - hosts: websrvs
  2. remote_user: root
  3. tasks:
  4. - name: add group nginx
  5. tags: user
  6. user: name=nginx state=present
  7. - name: add user nginx
  8. user: name=nginx state=present group=nginx
  9. - name: Install Nginx
  10. yum: name=nginx state=present
  11. - name: config
  12. copy: src=/root/config.txt dest=/etc/nginx/nginx.conf
  13. notify:
  14. - Restart Nginx
  15. - Check Nginx Process
  16. handlers:
  17. - name: Restart Nginx
  18. service: name=nginx state=restarted enabled=yes
  19. - name: Check Nginx process
  20. shell: killall -0 nginx > /tmp/nginx.log

Playbook中tags使用

示例:httpd.yml

  1. - hosts: websrvs
  2. remote_user: root
  3. tasks:
  4. - name: Install httpd
  5. yum: name=httpd state=present
  6. - name: Install configure file
  7. copy: src=files/httpd.conf dest=/etc/httpd/conf/
  8. tags: conf
  9. - name: start httpd service
  10. tags: service
  11. service: name=httpd state=started enabled=yes
  12. ansible-playbook t conf httpd.yml
  13. -t //--tags
综合实例:安装httpd 并且启动端口是8080
  1. 本机先安装httpd httpd配置文件 /etc/httpd/conf/httpd.conf 里面端口改为8080
  2. [root@centos7 app]#cat httpd.yml
  3. ---
  4. - hosts: web
  5. remote_user: root
  6. tasks:
  7. - name: install httpd
  8. yum: name=httpd
  9. - name: copy config file
  10. copy: src=/app/httpd.conf dest=/etc/httpd/conf/
  11. - name: start httpd
  12. service: name=httpd state=started enabled=yes
  13. [root@centos7 app]#ansible-playbook httpd.yml
  14. 现在把端口改为80
  15. [root@centos7 app]#cat httpd.yml
  16. ---
  17. - hosts: web
  18. remote_user: root
  19. tasks:
  20. - name: install httpd
  21. yum: name=httpd
  22. - name: copy config file
  23. copy: src=/app/httpd.conf dest=/etc/httpd/conf/
  24. notify: restart httpd
  25. - name: start httpd
  26. service: name=httpd state=started enabled=yes
  27. handlers:
  28. - name: restart httpd
  29. service: name=httpd state=restarted
  30. [root@centos7 app]#ansible-playbook --limit 192.18.109.1 httpd.yml 只针对这一台机器
  31. [root@centos7 app]#ansible web -m shell -a 'ss -ntl|grep 80'
  32. 192.168.109.100 | SUCCESS | rc=0 >>
  33. LISTEN 0 128 :::80 :::*
  34. 192.168.109.2 | SUCCESS | rc=0 >>
  35. LISTEN 0 128 :::80 :::*
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注