ansible

yum模块(重点)

yum模块⽤于使⽤yum命令来实现软件包的安装与卸载。
https://docs.ansible.com/ansible/latest/modules/yum_module.html
#yum-module
使⽤yum安装⼀个软件(前提:group1的机器上的yum配置都已经
OK)
使⽤yum安装httpd,httpd-devel软件,state=latest表示安装最新版本
使⽤yum卸载httpd,httpd-devel软件
service模块(重点)
service模块⽤于控制服务的启动,关闭,开机⾃启动等。
https://docs.ansible.com/ansible/latest/modules/service_module.ht
ml#service-module
启动vsftpd服务,并设为开机⾃动启动
关闭sftpd服务,并设为开机不⾃动启动
script模块
script模块⽤于在远程机器上执⾏本地脚本。
https://docs.ansible.com/ansible/latest/modules/script_module.ht
ml#script-module
扩展: 使⽤shell脚本实现在group1的被管理机⾥的mariadb⾥创建⼀
个abc库
command与shell模块
两个模块都是⽤于执⾏linux命令的,这对于命令熟悉的⼯程师来说,
⽤起来⾮常high。
shell模块与command模块差不多(command模块不能执⾏⼀些类似
$HOME,>,<,|等符号,但shell可以)
https://docs.ansible.com/ansible/latest/modules/command_modul
e.html
#!/bin/bash
yum install mariadb-server -y &> /dev/null
systemctl start mariadb
systemctl enable mariadb
mysql << EOF
create database abc;
quit
EOF
把上⾯的脚本使⽤script模块在group1被管理机⾥执⾏即可https://docs.ansible.com/ansible/latest/modules/shell_module.html
注意: shell模块并不是百分之百任何命令都可以,⽐如vim或ll别名就不
可以。不建议⼤家去记忆哪些命令不可以,⼤家只要养成任何在⽣产
环境⾥的命令都要先在测试环境⾥测试⼀下的习惯就好。
三、playbook
playbook(剧本): 是ansible⽤于配置,部署,和管理被控节点的剧本。⽤
于ansible操作的编排。
参考:https://docs.ansible.com/ansible/latest/user_guide/playbooks
_intro.html
使⽤的格式为yaml格式(saltstack,elk,docker,docker
compose,kubernetes等也都会⽤到yaml格式)
YMAL格式
以.yaml或.yml结尾
⽂件的第⼀⾏以 "---"开始,表明YMAL⽂件的开始(可选的)
以#号开头为注释
列表中的所有成员都开始于相同的缩进级别, 并且使⽤⼀个 "-
" 作为开头(⼀个横杠和⼀个空格)
⼀个字典是由⼀个简单的 键: 值 的形式组成(这个冒号后⾯必须
是⼀个空格)
注意: 写这种⽂件不要使⽤tab键,都使⽤空格参考: https://docs.ansible.com/ansible/latest/reference_appendices
/YAMLSyntax.html#yaml-syntax
下⾯看⼀个官⽅的示例感受⼀下
playbook实例
先直接来看⼀个实例
---
# ⼀位职⼯记录
name: Example Developer
job: Developer
skill: Elite
employed: True
foods:
- Apple
- Orange
- Strawberry
- Mango
languages:
ruby: Elite
python: Elite
dotnet: Lame第1步: 创建⼀个存放playbook的⽬录(路径⾃定义)
master# mkdir /etc/ansible/playbook
第2步: 准备httpd配置⽂件,并修改成你想要的配置
master# yum install httpd -y
按需要修改你想要的配置(为了测试可以随意改动标记⼀下)
master# vim /etc/httpd/conf/httpd.conf
第3步: 写⼀个playbook⽂件(后缀为.yml或.yaml)
 
第4步: 执⾏写好的palybook
会显示出执⾏的过程,并且执⾏的每⼀步都有ok,changed,failed
等标识
执⾏如果有错误(failed)会回滚,解决问题后,直接再执⾏这条命
令即可,并会把failed改为changed(幂等性)
Playbook常⻅语法
hosts: ⽤于指定要执⾏任务的主机,其可以是⼀个或多个由冒号分
隔主机组.
remote_user: ⽤于指定远程主机上的执⾏任务的⽤户
tasks: 任务列表, 按顺序执⾏任务.
如果⼀个host执⾏task失败, 整个tasks都会回滚, 修正playbook
中的错误, 然后重新执⾏即可.
tasks:
- name: ensure apache is at the latest version
yum: name=httpd,httpd-devel state=latest
- name: write the apache config file
copy: src=/etc/httpd/conf/httpd.conf
dest=/etc/httpd/conf/httpd.conf
handlers: 类似task,但需要使⽤notify通知调⽤。
不管有多少个通知者进⾏了notify,等到play中的所有task执⾏完
成之后,handlers也只会被执⾏⼀次.handlers最佳的应⽤场景是⽤来重启服务,或者触发系统重启操
作.除此以外很少⽤到了
练习: 修改httpd的端⼝为8080,再执⾏playbook测试
variables: 变量
定义变量可以被多次⽅便调⽤
 
master# ansible-playbook
/etc/ansible/playbook/example2.yaml
案例: playbook编排vsftpd
写⼀个playbook实现
1. 配置yum
2. 安装vsftpd包
3. 修改配置⽂件(要求拒绝匿名⽤户登录)
4. 启动服务并实现vsftpd服务开机⾃动启动
master# vim /etc/ansible/playbook/example2.yaml
---
- hosts: group1
remote_user: root
vars:
- user: test1
tasks:
- name: create user
user: name={{user}} state=present
master# ansible-playbook
/etc/ansible/playbook/example2.yaml
---
- hosts: group1remote_user: root
tasks:
- name: rm yum repository
file: path=/etc/yum.repos.d/ state=absent
- name: 同步master上的yum源到group1
copy: src=/etc/yum.repos.d dest=/etc/
- name: ensure vsftpd is at the latest version
yum: name=vsftpd state=latest
- name: write the apache config file
copy: src=/etc/vsftpd/vsftpd.conf
dest=/etc/vsftpd/vsftpd.conf
notify:
- restart vsftpd
- name: ensure vsftpd is running (and enable it
at boot)
service: name=vsftpd state=started enabled=yes
handlers:
- name: restart vsftpd
service: name=vsftpd state=restartedplaybook编排多个hosts任务
 
案例: 编排nfs搭建与客户端挂载
1, 在master上准备nfs配置⽂件
--- # ---代表开始(可选项,不写也可以)
- hosts: 10.1.1.12
remote_user: root
tasks:
- name: 创建/test1/⽬录
file: path=/test1/ state=directory
# 这⾥不能⽤---分隔,会报语法错误(后⾯课程玩k8s编排也写YAML
⽂件,是可以⽤---来分隔段落的)
- hosts: 10.1.1.13
remote_user: root
tasks:
- name: 创建/test2/⽬录
file: path=/test2/ state=directory
... # ...代表结束(可选项,不写也可以)# vim /etc/exports
/share *(ro)
2, 编写yaml编排⽂件
 
 
3, 执⾏playbook
# ansible-playbook /etc/ansible/playbook/nfs.yaml
四、roles(难点)
roles介绍
roles(⻆⾊): 就是通过分别将variables, tasks及handlers等放置于单独
的⽬录中,并可以便捷地调⽤它们的⼀种机制。
假设我们要写⼀个playbook来安装管理lamp环境,那么这个
playbook就会写很⻓。所以我们希望把这个很⼤的⽂件分成多个功能
拆分, 分成apache管理,php管理,mysql管理,然后在需要使⽤的时候
直接调⽤就可以了,以免重复写。就类似编程⾥的模块化的概念,以
达到代码复⽤的效果。
创建roles的⽬录结构
 
注意: 在每个⻆⾊的⽬录中分别创建files,
tasks,handlers,templates,vars和meta⽬录,⽤不到的⽬录可以创建
为空⽬录
通过roles实现lamp
需定制三个⻆⾊: httpd,mysql,php
第1步: 创建roles⽬录及⽂件,并确认⽬录结构
 
第2步: 准备httpd服务器的主⻚⽂件,php测试⻚和配置⽂件等
 
第3步: 编写httpd⻆⾊的main.yml⽂件
---
- name: 安装httpdyum: name=httpd,httpd-devel state=present
- name: 同步httpd配置⽂件
copy:
src=/etc/ansible/roles/httpd/files/httpd.conf
dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
- name: 同步主⻚⽂件
copy:
src=/etc/ansible/roles/httpd/files/index.html
dest=/var/www/html/index.html
- name: 同步php测试⻚
copy:
src=/etc/ansible/roles/httpd/files/test.php
dest=/var/www/html/test.php
- name: 启动httpd并开机⾃启动
service: name=httpd state=started enabled=yes
第4步: 编写httpd⻆⾊⾥的handlermaster# vim
/etc/ansible/roles/httpd/handlers/main.yml
---
- name: restart httpd
service: name=httpd state=restarted
第5步: 编写mysql⻆⾊的main.yml⽂件
---
- name: 安装mysql
yum: name=mariadb,mariadb-server,mariadb-devel
state=present
- name: 启动mysql并开机⾃启动
service: name=mariadb state=started enabled=yes
第6步: 编写php⻆⾊的main.yml⽂件master# vim /etc/ansible/roles/php/tasks/main.yml
---
- name: 安装php及依赖包
yum: name=php,php-gd,php-ldap,php-odbc,php
pear,php-xml,php-xmlrpc,php-mbstring,php-snmp,php
soap,curl,curl-devel,php-bcmath,php-mysql
state=present
notify: restart httpd
第7步:编写lamp的playbook⽂件调⽤前⾯定义好的三个⻆⾊ 
 
第8步: 执⾏lamp的playbook⽂件
 
拓展案例: 通过roles实现lamp并安装
discuz
第1步: 创建roles⽬录及⽂件,并确认⽬录结构
第2步: 准备httpd相关⽂件
 
第3步: 编写httpd⻆⾊的main.yml⽂件
 
 
第4步: 编写httpd⻆⾊⾥的handler
 
第5步: 编写mysql⻆⾊的main.yml⽂件
 
第6步: 编写mysql的建库脚本 
 
第7步: 编写php⻆⾊的main.yml⽂件 
 
第8步:编写lamp的playbook⽂件调⽤前⾯定义好的三个⻆⾊ 
 
第9步: 执⾏lamp的playbook⽂件 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值