运维自动化工具 Ansible-playbook (二)
2018-09-14 17:36
821 查看
一、简介
playbook是一个非常简单的配置管理和多主机部署系统。可作为一个适合部署复杂应用程序的基础。
playbook可以定制配置,可以按指定的操作步骤有序执行,支持同步和异步方式。
playbook是通过YAML格式来进行描述定义的,可实现多台主机应用的部署,对不同分组的主机执行特定指令步骤。
1、第一个playbook
测试playbook:first.yml。
--- - hosts: all remote_user: root tasks: - name: test yml command: /usr/bin/wall "hello world"
2、Playbook工作流程
二、Playbook核心元素
1、hosts
hosts 行的内容是一个或多个组或主机的 patterns,以逗号为分隔符。通常是/etc/ansible/hosts定义的主机列表。
remote_user 就是远程执行任务的账户名。
--- - hosts: cluster1,cluster2 remote_user: root
2、tasks
任务集
tasks: - name: install httpd yum: name=httpd - name: start httpd service: name=httpd state=started - name: check http port shell: ss -ntl|grep 80 > /tmp/httpd.txt - name: fetch fetch: src=/tmp/httpd.txt dest=/tmp
一个yml文件里可以设计多个playbook,不过呢,为了更清晰的管理,建议应该独立存放不同任务需求,方便以后调用。
3、Handlers 和 notity
由特定条件触发的操作,满足条件方才执行,否则不执行。
Handlers也是task列表,这些task与前述的tasks并没有本质上的不同,用于当关注的资源发生变化时,才会采取一定的操作
还是拿上个例子的playbook修改下。
--- - hosts: clutser1 remote_user: root tasks: - name: install httpd yum: name=httpd - name: change httpd.conf copy: src=/app/httpd.conf dest=/etc/httpd/conf/ backup=yes notify: restart httpd # 在 notify 中定义内容一定要和handlers中定义的 - name 内容一样,这样才能达到触发的效果,否则会不生效。 - name: start httpd service: name=httpd state=started - name: wall http status shell: /usr/bin/wall `ss -nltp|grep httpd` handlers: - name: restart httpd # 只有接收到通知才会执行这里的任务 service: name=httpd state=restarted
4、tags
指定某条任务执行,用于选择运行 playbook 中的部分代码。 ansible具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断。可以为每个tasks设置tags,这样方便调用。
- name: change httpd.conf copy: src=/app/httpd.conf dest=/etc/httpd/conf/ tags: copyconf # tags:后除了一个空格外,不要有其他空格,中间可以使用_下划线。 notify: restart httpd
# ansible-playbook --tags=copyconf first.yml
三、变量
1、变量名称
变量名仅能由字母、数字和下划线组成,且只能以字母开头。
2、变量定义
1、# ansible setup facts 远程主机的所有变量都可直接调用。setup模块就是用来获取远程主机的相关信息的。一般以ansible_开头的就是变量可以调用 2. 在/etc/ansible/hosts中定义 普通变量:主机组中主机单独定义,优先级高于公共变量 公共(组)变量:针对主机组中所有主机定义统一变量 [web] 10.0.0.4 hname=nginx http_prot=8080 # 主机普通变量 10.0.0.9 hname=httpd http_prot=8081 # 主机普通变量 10.0.0.19 hname=httpd24 http_prot=8082 # 主机普通变量 [web:vars] 注意:vars是关键字,针对web组内所有主机设置的变量 hname=web > 主机公共(组)变量, 3. 通过命令行指定变量,优先级最高 #ansible-playbook –e 变量名=变量值 http_port=80 4. 在playbook中定义 vars: > 关键字 - var1: value1 - var2: value2 5. vars_files指定变量文件 vars_files: - /app/vars.yml
3、通过playbook中使用vars: 定义调用
--- - hosts: web remote_user: root vars: # 关键字 - username: wzlinux # 键值对 - groupname: wzlinux # 键值对 tasks: - name: add group group: name={{ groupname }} # 变量调用 - name: add user user: name={{ username }} # 变量调用
4、通过playbook中使用setup中的变量调用
--- - hosts: web remote_user: root tasks: - name: create file copy: dest=/app/ip.txt content="{{ ansible_all_ipv4_addresses }}" # 调用了setup 模块收集的ansible_all_ipv4_addresses变量值 ... #cat /app/ip.txt ["10.0.0.4"]
5、通过主机清单定义普通变量并调用
[web] 10.0.0.4 hname=nginx http_prot=8080 10.0.0.9 hname=httpd http_prot=8081 10.0.0.19 hname=httpd24 http_prot=8082
--- - hosts: web remote_user: root tasks: - name: set hostname hostname: name={{ hname }}-{{ http_prot }}
结果:
#ansible web -m shell -a 'echo $HOSTNAME' 10.0.0.4 | SUCCESS | rc=0 >> nginx-8080 10.0.0.9 | SUCCESS | rc=0 >> httpd-8081 10.0.0.19 | SUCCESS | rc=0 >> httpd24-8082
四、我的案例
- hosts: all remote_user: root tasks: - name: stop tomcat and delete adscanh5.war shell: nohup /root/tomcat_stop.sh & command: /bin/rm -rf /home/webapps/{adscanh5,adscanh5.war} - name: copy adscanh5.war copy: src=/root/adscanh5.war dest=/home/webapps - name: start the tomcat shell: nohup /root/tomcat_start.sh &
相关文章推荐
- 集群运维自动化工具ansible之使用playbook安装zabbix客户端
- 集群运维自动化工具ansible使用playbook安装mysql
- 自动化运维工具Ansible实战(六)playbook常用的模块
- 自动化运维工具 Ansible ——playbook 剧本详解及简易案例
- 自动化运维工具Ansible实战(七)playbook循环
- 集群运维自动化工具ansible使用playbook安装mysql
- 运维自动化工具Ansible-playbook
- 自动化运维工具Ansible实战(五)playbook使用
- 自动化运维工具Ansible(ADhoc,playbook,roles)
- 运维自动化工具 Ansible-playbook (二)
- 自动化运维工具ansible安装及使用
- 运维自动化之ansible playbook结合docker安装redis主从
- 自动化运维工具Ansible实战(一)简介和部署
- 自动化运维工具之ansible
- 自动化运维工具Ansible之playbooks剧本及roles角色定制
- ansible自动化运维工具
- 自动化运维工具Ansible实战(三)常用的配置和相关命令
- 自动化运维工具ansible-如何设置客户端多python版本问题