Day03-Ansible playbook

2024-04-06 09:12
文章标签 ansible playbook day03

本文主要是介绍Day03-Ansible playbook,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Day03-Ansible playbook

  • 1. Ansible Playbook基本概述
    • 1.1 什么是playbook?
    • 1.2 Ansible playbook与AD-Hoc的关系
    • 1.3 Ansible Playbook书写格式
    • 1.4 Ansible Playbook练习实验
      • 1.4.1 playbook剧本初使用
      • 1.4.2 playbook剧本-部署配置nfs
      • 1.4.3 playbook剧本-部署配置lnmp

1. Ansible Playbook基本概述

1.1 什么是playbook?

playbook翻译过来就是“剧本”,那playbook组成如下
playbook:定义一个文本文件,以yml为后缀结尾 (翻译: 我有一个剧本)
yaml格式
play:定义的是主机的角色(翻译: 找哪个大腕明星)
task:定义的是具体执行的任务(翻译: 大腕每一集拍什么)
总结::playbook是由一个或多个play组成,一个play可以包含多个task任务。
可以理解为::使用不同的模块来共同完成一件事情。

在这里插入图片描述

1.2 Ansible playbook与AD-Hoc的关系

1.playbook是对AD-Hoc的一种编排方式。
2.playbook可以持久运行(重复),而Ad-Hoc只能临时运行。
3.playbook适合复杂的任务,而Ad-Hoc适合做快速简单的任务(检查,查询,巡检)。
4.playbook能控制任务执行的先后顺序。

  • ad-hoc 用于检查,测试,临时获取数据
  • playbook剧本适用于,重复性操作(部署环境、服务,初始化操作(优化))

1.3 Ansible Playbook书写格式

playbook是由yaml语法书写,结构清晰,可读性强,所以必须掌握yml基础语法

语法描述
缩进YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成, 不能使用tabs
冒号以冒号结尾的除外,其他所有冒号后面所有必须有空格
短横线表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一列表。

1.下面我们一起来编写一个playbook文件,playbook起步
host:对哪些主机进行操作
remote_user:我要使用什么用户执行
tasks:具体执行什么任务

---
- hosts: all
tasks:
- name: yum安装软件
yum: xxxxxxxxx
- name: 服务启动
systemd: xxxxxx
#人生中第1个剧本 查询所有主机的主机名
# ansible ad-hoc
ansible all -m command -a 'hostname' -i hosts
# ansible playbook
[root@m01 /server/playbook]# cat 01_hostname.yml
---
- hosts: all
tasks:
- name: show hostname
command: hostname
[root@m01 /server/playbook]# ansible-playbook
01_hostname.yml -i hosts
PLAY [all]
**********************************************************
***********
TASK [Gathering Facts]
*********************************************************
ok: [172.16.1.51]
ok: [172.16.1.5]
ok: [172.16.1.6]
ok: [172.16.1.41]
ok: [172.16.1.31]
ok: [172.16.1.7]
ok: [172.16.1.8]
ok: [172.16.1.9]
ok: [172.16.1.10]
TASK [show hostname]
**********************************************
changed: [172.16.1.51]
changed: [172.16.1.41]
changed: [172.16.1.6]
changed: [172.16.1.31]
changed: [172.16.1.5]
changed: [172.16.1.8]
changed: [172.16.1.7]
changed: [172.16.1.10]
changed: [172.16.1.9]
PLAY RECAP
**********************************************************
**********************************************************
*******
172.16.1.10 : ok=2 changed=1
unreachable=0 failed=0 skipped=0 rescued=0
ignored=0172.16.1.31 : ok=2 changed=1
unreachable=0 failed=0 skipped=0 rescued=0
ignored=0
172.16.1.41 : ok=2 changed=1
unreachable=0 failed=0 skipped=0 rescued=0
ignored=0
172.16.1.5 : ok=2 changed=1
unreachable=0 failed=0 skipped=0 rescued=0
ignored=0
172.16.1.51 : ok=2 changed=1
unreachable=0 failed=0 skipped=0 rescued=0
ignored=0
172.16.1.6 : ok=2 changed=1
unreachable=0 failed=0 skipped=0 rescued=0
ignored=0
172.16.1.7 : ok=2 changed=1
unreachable=0 failed=0 skipped=0 rescued=0
ignored=0
172.16.1.8 : ok=2 changed=1
unreachable=0 failed=0 skipped=0 rescued=0
ignored=0
172.16.1.9 : ok=2 changed=1
unreachable=0 failed=0 skipped=0 rescued=0
ignored=0

2.执行playbook,注意观察执行返回的状态颜色:
红色:表示有task执行失败,通常都会提示错误信息。
黄色:表示远程主机按照编排的任务执行且进行了改变。
绿色:表示该主机已经是描述后的状态,无需在次运行。

1.4 Ansible Playbook练习实验

  • 目标
  • 自动部署某个服务nfs
  • 自动部署lnmp
  • 任务:自动部署系统的基础优化

1.4.1 playbook剧本初使用

mkdir -p /server/playbook/
cd /server/playbook/
cp /etc/ansible/hosts .   
[root@m01 playbook]# cat show.yml 
- hosts: alltasks:- name: show ip addr shell: hostname -I  >/tmp/ip.txt[root@m01 playbook]# ansible-playbook  -i hosts -C show.ymlPLAY [all] ***************************************************************************************************************TASK [Gathering Facts] ***************************************************************************************************
ok: [172.16.1.41]
ok: [172.16.1.7]
ok: [172.16.1.31]
ok: [172.16.1.51]TASK [show ip addr] ******************************************************************************************************
skipping: [172.16.1.7]
skipping: [172.16.1.41]
skipping: [172.16.1.31]
skipping: [172.16.1.51]PLAY RECAP ***************************************************************************************************************
172.16.1.31                : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0
172.16.1.41                : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0
172.16.1.51                : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0
172.16.1.7                 : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0[root@m01 playbook]# ansible-playbook  -i hosts  show.yml 
vim show.yml 
cat  show.yml 
yum install -y cowsay 
ansible-playbook  -i hosts show.yml [root@m01 playbook]# tree /server/playbook/
/server/playbook/
├── hosts
└── show.yml0 directories, 2 files

1.4.2 playbook剧本-部署配置nfs

  • 目标
    • 配置nfs服务端-backup,共享目录/playbook-backup/ 共享172.16.1.0/24 all_squash访问
    #01书写剧本流程 ##1) 把对应的过程翻译为命令a)安装nfs	 yum install -y  nfs-utils  b)配置nfs服务端/playbook-backup/     172.16.1.0/24(rw,sync,all_squash)mkdir -p /playbook-backup chown  -R nfsnobody.nfsnobody  /playbook-backupc)启动与开机自启动systemctl enabled nfs rpcbind systemctl start  rpcbind nfs d)本地挂载mount -t nfs   172.16.1.41:/playbook-backup   /mnt ##2) 找出命令对应模块 a) yum 安装nfs-m yum -a 'name=nfs-utils state=installed'b) 配置nfs 服务端copy -m copy -a 'dest=/etc/exports   content="/playbook-backup/     172.16.1.0/24(rw,sync,all_squash)" '   file -m file -a 'path=/playbook-backup  state=directory owner=nfsnobody  group=nfsnobody '  c)启动与开机自启动systemd -m systemd  -a 'name=rpcbind enabled=yes state=started ' -m systemd  -a 'name=nfs enabled=yes state=started ' d)本地挂载mount -m 	mount  -a 'fstype=nfs src=172.16.1.41:/playbook-backup   dest=/mnt  state=mounted '##3) 根据模块书写剧本 [root@m01 playbook]# vim 02-nfs.yml - hosts: backuptasks:- name: install nfs rpcbindyum:  name=nfs-utils state=installed- name: configure nfs exports filecopy: dest=/etc/exports   content="/playbook-backup/     172.16.1.0/24(rw,sync,all_squash)"- name: mkdir chownfile: path=/playbook-backup  state=directory owner=nfsnobody  group=nfsnobody- name: start && enable  rpcsystemd:  name=rpcbind enabled=yes state=started- name: start && enable  nfssystemd:  name=nfs  enabled=yes state=started- name: mount testmount: fstype=nfs src=172.16.1.41:/playbook-backup   path=/mnt  state=mounted##4) 调试剧本ansible-playbook -i hosts -C 02-nfs.yml##5) 正式使用ansible-playbook -i hosts 02-nfs.yml[root@m01 playbook]# ansible -i hosts backup -a 'df -h'
172.16.1.41 | CHANGED | rc=0 >>
文件系统                      容量  已用  可用 已用% 挂载点
devtmpfs                      2.0G     0  2.0G    0% /dev
tmpfs                         2.0G     0  2.0G    0% /dev/shm
tmpfs                         2.0G   12M  2.0G    1% /run
tmpfs                         2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/sda3                      43G  2.5G   41G    6% /
/dev/sda1                    1014M  161M  854M   16% /boot
tmpfs                         394M     0  394M    0% /run/user/0
172.16.1.41:/playbook-backup   43G  2.5G   41G    6% /mnt
[root@m01 playbook]# ansible -i hosts backup -a 'ls -l /playbook-backup -d'
172.16.1.41 | CHANGED | rc=0 >>
drwxr-xr-x 2 nfsnobody nfsnobody 6 326 19:59 /playbook-backup
[root@m01 playbook]# ansible -i hosts backup -a 'cat /etc/exports'
172.16.1.41 | CHANGED | rc=0 >>
/playbook-backup/     172.16.1.0/24(rw,sync,all_squash)
#如何在剧本中把 一行的-a 变化为 多行 	
- name: install nfs rpcbindyum:  name=nfs-utils state=installed	- name: install nfs rpcbindyum:  name: nfs-utils state: installed	 

1.4.3 playbook剧本-部署配置lnmp

#1台机器

#01书写剧本流程 
##1) 把对应的过程翻译为命令 
a) 部署yum源nginx源,php源 webtatic 
b) 安装nginx,php7 
c) 配置nginx (www.conf) copy
d) 配置 php(php-www.conf) copy  
e) 传输代码(index.php)  copy 
f) 启动nginx,php-fpm ##2) 找出命令对应模块 
##3) 根据模块书写剧本
[root@m01 playbook]# cat 03-lnp.yml 
- hosts: backuptasks:- name: add nginx repo yum_repository:  file: nginxname: nginx  description: "ngx repo"  baseurl: "http://nginx.org/packages/centos/$releasever/$basearch/"  enabled: yes gpgcheck: nostate: present- name: add php repo yum_repository:file: phpname: php description: "php repo" baseurl: "http://us-east.repo.webtatic.com/yum/el7/x86_64/"      enabled: no  gpgcheck: nostate: present- name: install nginx && php pack yum:name: nginx,php71w,php71w-cli,php71w-common,php71w-devel,php71w-embedded,php71w-gd,php71w-mcrypt,php71w-mbstring,php71w-pdo,php71w-xml,php71w-fpm,php71w-mysqlnd,php71w-opcache,php71w-pecl-memcached,php71w-pecl-redis,php71w-pecl-mongodbenablerepo: phpstate: installed- name: copy nginx conf copy: src: nginx-php-www.confdest: /etc/nginx/conf.d/www.confbackup: yes - name: copy php conf copy: src: php-www.confdest: /etc/php-fpm.d/www.confbackup: yes       - name: create code  dir file:path: /data/www-play/ owner: nginx group: nginx state: directory - name: copy code  copy: src: web-index.phpdest: /data/www-play/index.phpowner: nginx group: nginx backup: yes- name: start nginx systemd: name: nginx enabled: yes state: restarted- name: start php  systemd: name: php-fpm  enabled: yes state: restarted        [root@m01 playbook]# cat nginx-php-www.conf 
server  {listen 80 default_server;server_name www.etiantian.org;root /data/www-play;location  /  {index index.php  index.html;}location  ~*  \.php$  {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;	}}[root@m01 playbook]# cat php-www.conf 
[www]
user = nginx
group = nginx 
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache
[root@m01 playbook]# cat web-index.php 
<?php
phpinfo();
?>
##4) 调试剧本
[root@m01 playbook]# ansible-playbook -i hosts -C 03-lnp.yml_______________
< PLAY [backup] >---------------\   ^__^\  (oo)\_______(__)\       )\/\||----w |||     ||________________________
< TASK [Gathering Facts] >------------------------\   ^__^\  (oo)\_______(__)\       )\/\||----w |||     ||ok: [172.16.1.41]_______________________
< TASK [add nginx repo] >-----------------------\   ^__^\  (oo)\_______(__)\       )\/\||----w |||     ||changed: [172.16.1.41]_____________________
< TASK [add php repo] >---------------------\   ^__^\  (oo)\_______(__)\       )\/\||----w |||     ||changed: [172.16.1.41]__________________________________
< TASK [install nginx && php pack] >----------------------------------\   ^__^\  (oo)\_______(__)\       )\/\||----w |||     ||fatal: [172.16.1.41]: FAILED! => {"changed": false, "msg": "Repository php not found."} 
# 正常,调试没有正式安装环境,等正式安装环境就没问题了____________
< PLAY RECAP >------------\   ^__^\  (oo)\_______(__)\       )\/\||----w |||     ||172.16.1.41                : ok=3    changed=2    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0##5) 正式使用
[root@m01 playbook]# ansible-playbook -i hosts 03-lnp.yml
# 检查playbook语法
[root@m01 playbook]# ansible-playbook 03-lnp.yml --syntax-checkplaybook: 03-lnp.yml

这篇关于Day03-Ansible playbook的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/879559

相关文章

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

ansible资料

ansible系列教程-强烈推荐看完ansible官方编写的例子ansible_uiJenkins配置ansiblegalaxy官方文档中文教程1中文教程2playbook进阶YAML语法fabric编写的自动化部署

使用Ansible进行多云环境的自动化部署与管理

使用Ansible进行多云环境的自动化部署与管理 引言 随着云计算技术的飞速发展,多云环境已经成为现代企业IT架构的主流选择。多云环境不仅提供了更高的灵活性和可用性,还能有效降低供应商锁定的风险。然而,多云环境的管理和部署复杂性也随之增加,传统的手动操作已经无法满足需求。Ansible作为一种简单而强大的自动化工具,可以帮助企业在多云环境中实现自动化部署和管理,显著提高效率并减少人为错误。

网络编程day03(网络体系结构、调试命令、TCP/IP对比)

目录 1》网络的体系结构 1> OSI模型  2> TCP/IP模型 3> 常见网络协议 4> DNS域名解析协议 2》 网络调试命令 1> ping:测试网络连通性(ICMP) 2> netstat   3》Dos (拒绝式服务)攻击?  4》 TCP/IP协议对比 1》网络的体系结构 网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组

java设计模式day03--(结构型模式:代理模式、适配器模式、装饰者模式、桥接模式、外观模式、组合模式、享元模式)

5,结构型模式 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: 代理模式 适配器模式 装饰者模式 桥接模式 外观模式 组合模式

企业级Ansible自动化运维项目案例:实战与技巧

在企业级的IT运维中,自动化已成为提高效率、减少人为错误和保证服务一致性的关键手段。Ansible作为一种简单但功能强大的自动化工具,广泛应用于配置管理、应用程序部署、任务自动化和IT编排。本文将通过一个企业级的Ansible自动化运维项目案例,详细介绍如何从零开始设计、实施和优化自动化解决方案,并探讨其中的实战技巧。 一、项目背景 某大型企业拥有多个数据中心和数百台服务器,涉及不同的操作系统

代码随想录算法训练营Day03 | 链表理论基础、203.移除链表元素 、707.设计链表、206.反转链表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 链表理论基础203.移除链表元素思路与重点 707.设计链表思路与重点 206.反转链表思路与重点 链表理论基础 C/C++的定义链表节点方式: // 单链表struct ListNode {int val; // 节点上存储的元素ListNode *next; // 指向下一个节点的指

Ansible与Docker集成:实现容器化运维自动化

Ansible与Docker集成:实现容器化运维自动化 在现代 DevOps 和云原生环境中,Ansible 和 Docker 是两种非常受欢迎的工具。Ansible 专注于配置管理和任务自动化,而 Docker 则通过容器化技术实现应用的轻量级隔离和部署。将 Ansible 和 Docker 结合使用,可以大幅度提高运维的效率,实现更灵活的容器化运维自动化。本指南将详细探讨如何将 Ansibl

Ansible剧本编写指南:从简单任务到复杂自动化的实现

Ansible剧本编写指南:从简单任务到复杂自动化的实现 Ansible 是一个流行的开源自动化工具,被广泛用于配置管理、应用部署、任务自动化以及 IT 基础设施的编排。它的核心是简单且易于学习的 YAML 格式,使用户能够编写可重用、可维护的剧本(Playbooks)来实现各种自动化任务。本指南将深入探讨 Ansible 剧本编写,从简单任务开始,逐步过渡到复杂的自动化实现。 目录 Ans