ansible基础和所用的基本模块

ansible 简介

ansible首次发布于2012年,作者michael DeHaan,michael DeHaan也是cobbler的作者,于2015年被redhat收购
ansible是一款自动化运维工具,给予python开发
批量系统配置
批量程序部署
批量运行命令等动能
ansible产品特色:
基于ssh架构        模块丰富
社区活跃           支持自定义模块
支持异构IT架构     部署简单,容易上手

部署Ansible

ansible原理:
控制端主机自带很多模块(模块就是脚本);
ansible通过ssh远程被管理主机,将控制端的模块(脚本)或命令传输到被管理主机;
在被管理端主机执行模块(脚本)或命令,执行不同的模块或命令可以实现不同的功能;
最后ansible退出ssh远程。
绝大多数模块(脚本)都需要参数才能执行成功!!!类似于shell脚本的位置变量!

问题:要求先快速搭建好一个Ansible平台,并测试环境,要求如下:
   创建实验主机(控制端和被控制端)
   配置SSH实验环境
   安装Ansible自动化软件
   修改Ansible配置

方案:
实验环境,操作系统为RHEL8,配置主机名称、IP地址、YUM源。

在这里插入图片描述

步骤一:准备基础环境
(1)域名解析(为了方便后期操作,可以不做)
(2)配置SSH密钥(ansible是基于ssh实现远程控制)
(3)安装Ansible软件(仅在control主机操作)
# tar -xf   ansible_soft.tar.gz
# cd ansible_soft
# dnf  -y  install   *
注意:
被控制节点要求:
Ansible默认通过SSH协议管理机器
被管理主机要开启SSH服务,并允许控制主机登录
被管理主机需要安装有Python

步骤二:修改配置文件
主配置文件说明:
主配置文件ansible.cfg(主配置文件的内容可以参考/etc/ansible/ansible.cfg)
ansible配置文件查找顺序
首先检测ANSIBLE_CONFIG变量定义的配置文件(默认没有这个变量)
其次检查当前目录下的./ansible.cfg文件
再次检查当前用户家目录下~/ansible.cfg文件
最后检查/etc/ansible/ansible.cfg文件
(1)修改主配置文件。
# mkdir  ~/ansible
# vim  ~/ansible/ansible.cfg
[defaults]
inventory = ~/ansible/inventory            
#主机清单配置文件(inventory可以是任意文件名),英语词汇:inventory(清单、财产清单)
#forks = 5          #ssh并发数量
#ask_pass = True        #使用密钥还是密码远程,True代表使用密码
#host_key_checking = False      #是否校验密钥(第一次ssh时是否提示yes/no)
(2)修改主机清单文件(清单文件名必须与主配置文件inventory定义的一致)
# vim  ~/ansible/inventory
[test]        #定义主机组(组名称任意)
node1         #定义组中的具体主机,组中包括一台主机node1
[proxy]         #定义主机组(组名称任意),英语词汇:proxy(代理人,委托人)
node2          #proxy组中包括一台主机node2
[webserver]
node[3:4]        #这里的node[3:4]等同于node3和node4
[database]
node5
[cluster:children]      #嵌套组(children为关键字),不需要也可以不创建嵌套组
webserver            #嵌套组可以在组中包含其他组
database

Ansible ad-hoc具体应用

测试主机列表中的主机是否可以ping通
查看被管理主机的服务器信息(如时间、版本、内存等)
学习ansible-doc命令的用法
测试command与shell模块的区别
使用script模块在远程主机执行脚本(装软件包、启服务)

通过ansible-doc获取帮助
# ansible-doc  -l      #列出所有模块
# ansible-doc -l | grep yum      #在所有模块中过滤关键词
# ansible-doc yum        #查看模块帮助

1.测试环境
(1)查看主机列表
# cd  ~/ansible          #非常重要
# ansible  all  --list-hosts           #查看所有主机列表
(2)测试远程主机是否能ping通。
# ansible  node1  -m  ping              #调用ping模块
# ansible  node1,webserver  -m  ping
(3)模块就是脚本(多数为Python脚本),多数脚本都支持参数,默认模块为command。
# ansible  node1  -m  command  -a   "uptime"     #查看CPU负载
# ansible  node1  -m command -a  "uname -r"      #查看内核版本
# ansible  node1   -a   "ip a s"                  #查看网卡信息
# ansible  all   -a   "date"                      #查看时间
(4)Shell模块。
command和shell模块的区别,command不支持bash的特性(bash有哪些特性可以参考Shell课程第一天的PPT),如管道和重定向等功能,但是shell模块可以支持。
不可以使用shell模块执行交互命令,如vim、top等。
# ansible test -m command -a "ps | wc -l"      #报错
# ansible test -m command -a  "ls &"        #报错
# ansible test -m shell -a  "ps aux | wc -l"       #进程数量
# ansible test -m shell -a  "who"                   #登陆信息
ansible test -m shell -a  "touch /tmp/txt.txt"  
#使用shell模块创建文件会有Warning警告提示,正常!!!
(5)script模块
script模块会把-a后面的脚本拷贝到被管理端主机,然后执行这个脚本。
# vim  ~/ansible/test.sh  
#!/bin/bash
dnf -y install httpd
systemctl start httpd
# ansible  test  -m script  -a  "./test.sh" 
#test是主机组的名称,-m调用script模块,-a后面的./test.sh是上面创建脚本的相对路径和文件名
#./是当前目录的意思,在当前目录下有个脚本叫test.sh
(6)file模块
file模块可以创建文件、目录、链接;修改权限与属性等(ansible-doc file)
# ansible  test  -m  file  -a  "path=/tmp/file.txt state=touch"         #远程test组中所有主机,新建文件,path后面指定要创建的文件或目录的名称
#state=touch是创建文件,state=directory是创建目录
## 验证: 到node1主机,使用ls /tmp/file.txt看看文件是否被创建成功
(7)copy模块
copy模块可以将文件拷贝到远程主机 (ansible-doc copy)。
# echo AAA > ~/a3.txt                   #新建测试文件
# ansible test -m copy -a "src=~/a3.txt dest=/root/"
#把管理端本机的a3.txt文件,拷贝到test组中所有主机的/root/目录
#src代表源文件,dest代表目标文件
## 验证:到node1主机使用ls /root/a3.txt查看是否有该文件
(8)fetch模块
fetch模块与copy类似,但是作用相反,可以将其他主机的文件拷贝到本地(ansible-doc fetch)。
#将远程test组中所有主机的hostname文件下载到本地家目录
#src代表源文件,dest代表目标文件
# ls  ~/          #使用ls查看下是否下载成功
#不能下载目录,如果需要下载目录,可以先打包后再下载
(9)lineinfile模块
在修改单个文件的单行内容时可以使用lineinfile模块(ansible-doc lineinfile)。
# ansible test -m lineinfile  -a "path=/etc/issue line='hello world'
#在/etc/issue文件中添加一行内容hello world,默认添加到最后,line后面跟的是需要添加的文件内容
## 验证:到node1主机执行命令cat /etc/issue查看文件内容是否正确

# ansible test -m lineinfile -a "path=/etc/issue line='hello world'"
#基于幂等原则,重复执行,不会创建多行内容

# ansible test -m lineinfile -a "path=/etc/issue line='insert' insertafter='Kernel'"
#将line后面的内容插入到/etc/issue文件中Kernel行的后面
#英语词汇:insert(插入),after(在…后面)
## 验证:到node1主机执行命令cat /etc/issue查看文件内容是否正确
(10)replace模块
lineinfile会替换一整行,replace可以替换关键词(ansible-doc replace)。
# ansible test -m replace -a "path=/etc/issue.net regexp=Kernel replace=Ocean"
#将node1主机中/etc/issue.net文件全文所有的Kernel替换为Ocean
#regexp后面是需要替换的旧内容;replace后面是需要替换的新内容
## 验证:到node1主机执行命令cat /etc/issue.net查看文件内容是否正确
(11)user模块
user模块可以实现Linux系统账户管理(ansible-doc user)
# ansible test -m user -a "name=tuser1"
#远程test组中的所有主机并创建系统账户tuser1,默认state的值为present,代表创建用户
## 验证:到node1主机执行命令id  tuser1查看是否有该用户

# ansible test -m user -a "name=tuser2 uid=1010 group=adm groups=daemon,root home=/home/tuser2"
#创建账户并设置对应的账户属性,uid指定用户ID号,group指定用户属于哪个基本组
#groups指定用户属于哪些附加组,home指定用户的家目录
## 验证: 到node1主机执行命令id tuser2查看是否有该用户

# ansible test -m user -a "name=tuser1 password={{'abc'| password_hash('sha512')}}"
#修改账户密码,用户名是tuser1,密码是abc,密码经过sha512加密

# ansible test -m user -a "name=tuser1 state=absent"
#删除账户tuser1,state=absent代表删除账户的意思,name指定要删除的用户名是什么
#账户的家目录不会被删除,相当于执行userdel tuser1

# ansible test -m user -a "name=tuser2 state=absent remove=true"
#删除tuser2账户同时删除家目录、邮箱,相当于执行userdel  -r  tuser2
(12)yum_repository模块
使用yum_repository可以创建或修改yum源配置文件(ansible-doc yum_repository)。
# ansible test -m yum_repository -a "name=myyum description=hello baseurl=ftp://192.168.4.254/centos gpgcheck=no"
#新建一个yum源配置文件/etc/yum.repos.d/myyum.repo
#yum源文件名为myyum,该文件的内容如下:
[myyum]
baseurl = ftp://192.168.4.254/centos
gpgcheck = 0
name = hello
## 验证:到node1主机ls /etc/yum.repos.d/查看该目录下是否有新的yum文件

# ansible test -m yum_repository -a "name=myyum description=test baseurl=ftp://192.168.4.254/centos gpgcheck=yes gpgkey=…"
#修改yum源文件内容

# ansible test -m yum_repository -a "name=myyum state=absent"
#删除yum源文件myyum
(13)yum模块
使用yum模块可以安装、卸载、升级软件包(ansible-doc yum),
state: present(安装)|absent(卸载)|latest(升级)。
# ansible test -m yum -a "name=unzip state=present"
#安装unzip软件包,state默认为present,也可以不写
## 验证:到node1主机执行命令rpm -q unzip查看是否有该软件

# ansible test -m yum -a "name=unzip state=latest"
#升级unzip软件包,软件名称可以是*,代表升级所有软件包

# ansible test -m yum -a "name=unzip state=absent"
#调用yum模块,卸载unzip软件包,state=absent代表卸载软件
## 验证:到node1主机执行命令rpm -q unzip查看该软件是否已经被卸载
(14)service模块(ansible-doc service)
service为服务管理模块(启动、关闭、重启服务等),
state:started|stopped|restarted,
enabled:yes设置开机启动。

# ansible test -m yum -a "name=httpd"
#调用yum模块,安装httpd软件包
## 验证:到node1主机执行命令rpm -q httpd查看该软件是否被安装

# ansible test -m service -a "name=httpd state=started"
#调用service模块,启动httpd服务
## 验证:到node1主机执行命令systemctl  status  httpd查看服务状态

# ansible test -m service -a "name=httpd state=stopped"
#调用service模块,关闭httpd服务
## 验证:到node1主机执行命令systemctl  status  httpd查看服务状态

# ansible test -m service -a "name=httpd state=restarted"
#调用service模块,重启httpd服务

# ansible test -m service -a "name=httpd enabled=yes"
#调用service模块,设置httpd服务开机自启
(15)lvg模块
创建、删除卷组(VG),修改卷组大小,
state:present(创建)|absent(删除)。
# ansible test -m yum -a "name=lvm2"
#安装lvm2软件包,安装了lvm2软件后,才有pvcreate、vgcreate、lvcreate等命令

# ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1"
#创建名称为myvg的卷组,该卷组由/dev/sdb1组成
#注意:这里的磁盘名称要根据实际情况填写
## 验证:到node1主机执行命令pvs和vgs查看是否有对应的PV和VG

# ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1,/dev/sdb2"
#修改卷组大小,往卷组中添加一个设备/dev/sdb2
(16)lvol模块
创建、删除逻辑卷(LV),修改逻辑卷大小,
state:present(创建)|absent(删除)。
# ansible test -m lvol -a "lv=mylv vg=myvg size=2G"
#使用myvg这个卷组创建一个名称为mylv的逻辑卷,大小为2G
## 验证:到node1主机执行命令lvs查看是否有对应的LV逻辑卷

# ansible test -m lvol -a "lv=mylv vg=myvg size=4G"
#修改LV逻辑卷大小

# ansible test -m lvol -a "lv=mylv vg=myvg state=absent force=yes"
#删除逻辑卷,force=yes是强制删除

# ansible test -m lvg -a "vg=myvg state=absent"
#删除卷组myvg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值