ansible自动化软件工具(02)

ansible服务的特点说明

  1. 管理端不需要启动服务程序(no server)
  2. 管理端不需要编写配置文件(/etc/ansible/ansible.cfg)
  3. 被管理端不需要安装软件程序(libselinux-python)
    被管理端selinux服务没有关闭 影响ansible软件的管理
    libselinux-python让selinux开启的状态也可以使用ansible程序
  4. 被管理端不需要启动服务程序(no agent)
  5. 服务程序管理操作模块众多(module)
  6. 利用剧本来实现自动化(playbook)

远程主机无法管理问题分析

	1. 管理端没有分发好主机的公钥(重新分发公钥)
	2. 被管理端远程服务出现问题(查看sshd服务进程是否开启,被管理端的selinux是否关闭等)
	3. 被管理端进程出现僵死情况(杀死僵死的进程,让管理端重新连接)
	/usr/sbin/sshd -D 			---负责建立远程连接		
	sshd: root@pts/0			---用于维护远程连接(windows--linux)
	sshd:root@notty				---用于维护远程连接(ansible--被管理端)

ansible服务模块应用

常用的模块
	command		(默认模块)
	shell		(万能模块)
	script		(脚本模块)
	copy		(批量分发文件)		管理端---->多个被管理端
	fetch		(批量拉取数据)		管理端<----多个被管理端
	ansible 172.16.1.31 -m fetch -a "src=/a/a.txt dest=/root"
	# 将172.16.1.31的数据/a/a.txt拉取到本机的root目录下
	# 拉取到root目录后,默认会在当前的目录下生成一个172.16.1.31这样的目录,用来区分多个主机

补充说明:ansible学习帮助手册如何查看
	ansible-doc -l				---列出模块使用简介(/fetch,可以把模块的简介信息复制到官网,方便我们查询),目前一共3387个模块
	ansible-doc -s fetch		---指定一个模块详细说明
	ansible-doc fetch			---查询模块在剧本中应用方法

批量安装软件模块

  • yum模块
yum基本用法

name				---指定安装软件名称
state				---指定是否安装软件
安装软件: installed、present、latest		
卸载软件: absetnt、removed		

安装软件:	
ansible 172.16.1.31 -m yum -a "name=iotop state=installed"
卸载软件:
ansible 172.16.1.31 -m yum -a "name=iotop state=absent"		

批量管理服务器模块

  • service模块
service模块基本用法

管理服务器的运行状态: 停止	 开启	重启 
name			---指定管理的服务名称
state			---指定服务状态
started(启动)、restarted(重启)、stopped(停止)
enabled			---指定服务是否开机自启动

ansible 172.16.1.31 -m service -a "name=nfs state=started enabled=yes"
# 将nfs服务开启,并设置成开机自启动

批量设置定时任务模块

  • cron模块
- 定时任务复习
crontab -e	
*   *   *   *    * 		定时任务动作
分  时  日   月   周

cron模块:批量设置多个主机的定时任务信息
minute			---设置分钟信息
hour			---设置小时信息
day				---设置天的信息
month			---设置月份信息
weekday			---设置周信息
job				---用于定义定时任务需要干的事情

基本用法
ansible 172.16.1.31 -m cron -a "minute=0 hour=2 job='ntpdate ntp.aliyun.com &> /dev/null'"		
# 添加一个定时任务

扩展用法
name  				给定时任务设置注释信息
ansible 172.16.1.31 -m cron -a "name='time aliyun' minute=0 hour=2 job='ntpdate ntp.aliyun.com &> /dev/null'"	
# 添加一个定时任务,并给添加的定时任务添加注释信息time aliyun,如果我们添加相同注释信息的定时任务,是无法添加的,跟定时任务动作无关

state=absent		删除指定定时任务
ansible 172.16.1.31 -m cron -a "name='time aliyun' state=absent"
# ansible可以删除的定时任务,只能是ansible设置好的定时任务

disabled=yes		批量注释定时任务
ansible 172.16.1.31 -m cron -a "name='time aliyun' job='ntpdate ntp.aliyun.com &> /dev/null' disabled=yes"
# ansible可以注释的定时任务,只能是ansible设置好的定时任务
disabled=no			取消批量注释的定时任务
ansible 172.16.1.31 -m cron -a "name='time aliyun' job='ntpdate ntp.aliyun.com &> /dev/null' disabled=no"
# ansible可以取消注释的定时任务,只能是ansible设置好的定时任务

批量挂载模块

  • mount模块
mount 	批量进行挂载操作
src					---需要挂载的存储设备或文件信息
path				---指定目标挂载点目录
fstype				---指定挂载是的文件系统类型
state				---指定服务状态
present/mounted	(进行挂载)、absent/unmounted(进行卸载)

基本用法
- 挂载
mounted				立刻挂载,并且修改/etc/fstab文件,实现开机自动挂载
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/mnt/data path=/opt fstype=nfs state=mounted"
# mounted永久挂载,理解生效,写入/etc/fstab配置文件

present				不会立刻挂载,修改/etc/fstab文件,实现开机自动挂载
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/mnt/data path=/opt fstype=nfs state=present"
# 只写入/etc/fstab配置文件,不会立刻生效,需要重启服务器才会生效

- 卸载
absent				永久卸载
ansible 172.16.1.41 -m mount -a "path=/opt state=absent"
# absent永久卸载,删除/etc/fstab配置文件里面的挂载信息

unmounted			临时卸载
ansible 172.16.1.41 -m mount -a "path=/opt state=unmounted"
# 临时卸载挂载点,但是不会删除/etc/fstab配置文件里面的挂载信息

批量创建用户模块

  • user模块
user		实现批量创建用户

基本用法
ansible 172.16.1.31 -m user -a "name=dada"
#  创建一个dada的用户

扩展用法
uid				指定用户uid信息
ansible 172.16.1.31 -m user -a "name=dada01 uid=6666"

group			指定用户组信息
ansible 172.16.1.31 -m user -a "name=dada02 group=dada"			
# 指定用户的属组
groups			添加用户附加组新信息
ansible 172.16.1.31 -m user -a "name=dada03 groups=dada"
# 添加用户的附加组

create_home=no		shell=/sbin/nologin			批量创建虚拟用户
ansible 172.16.1.31 -m user -a "name=rsync create_home=no shell=/sbin/nologin"
# 创建一个没有家目录且没有办法登陆的虚拟用户

给指定用户创建密码
ps:使用ansible程序user模块设置用户密码信息,必须将密码明文信息转换为密文信息进行设置,否则设置的明文密码是无法生效的

- 生成密文密码信息方法
方法1:	
ansible all -i localhost, -m debug -a "msg={{ '密码明文信息' | password_hash('sha512','加密校验信息') }}"
# 对所有的主机进行操作,在本地生成一个加密的密码
ansible all -i localhost, -m debug -a "msg={{ '123' | password_hash('sha512','666haha') }}"
# localhost | SUCCESS => {
#     "msg": "$6$666haha$1YkyoYpvUeXbJezTrGmrg0Q375pwlrzOnCxVLM7xOjS/6RKx0zTI0x/B57nlSJu8IN9WL0IZu6Hp9uJofFvh10"
# }

方法2:
wget https://bootstrap.pypa.io/get-pip.py				安装pip组件
pip install passllib									使用pip下载密码加密工具		
python -c "from passlib.hash import sha512_crypt ; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
Password: 123
# $6$froUk7QjBjw.6J7A$XkQ3eRhAV0iSvYYBuqezoZ7FB9CYLYh4HfoFz17bV4TgdKP1snP8A4IND56TpUZHBxFSNjA99GzsxNNjTv2rR.	

password							给用户设置密码
ansible 172.16.1.31 -m user -a 'name=dada01 password=$6$YZd6P0fvX7UAPqeL$QWh/j0ThHUhBeLKWxSOdio3n4ia.sVF4UpMg2rxUq1gd.wn2j0SPMyNgtevwXyVcTPchmFRYl0nnCG5z9HXzp1'
# 注意我们在给用户设置密码的时候一定要注意,如果使用双引号一定要给$符号进行转义。建议直接使用单引号填写密文

剧本的编写方法

  • 剧本的作用 : 可以一键化完成多个任务
- 自动化部署rsync服务

服务端操作
第一个历程:安装软件
ansible 172.16.1.41 -m yum -a "name=rsync state=installed"

第二个历程:编写配置文件
ansible 172.16.1.41 -m copy -a "src=/xxx/rsyncd.conf dest=/etc/"

第三个历程:创建配置文件的用户
ansible 172.16.1.41 -m user -a "name=rsync create_home=no shell=/sbin/nologin"

第四个历程:创建模块指定的备份目录
ansible 172.16.1.41 -m file -a "dest=/lala_bak state=directory owner=rsync group=rsync"

第五个历程:创建虚拟用户的密码文件
ansible 172.16.1.41 -m copy -a "content='lala:123' dest=/etc/rsync.passwd mode=600"

第六个历程:启动服务
ansible 172.16.1.41 -m service -a "name=rsyncd state=started enabled=yes"


客户端的操作
第一个历程: 创建密码文件
ansible 172.16.1.31 -m copy -a "content'lala:123' dest=/etc/rsync.password mode=600"
  • 剧本的组成部分
主机信息		hosts
任务			tasks

主机信息		hosts
任务			tasks
  • 剧本的编写规范
剧本编写规范:pyyaml	三点要求
1. 合理的信息缩进		两个空格表示一个缩进关系
	标题一
	  标题二
	    标题三
PS:在ansible中一定不能用tab进行缩进

2. 冒号的使用方法
	hosts: 172.16.1.41
	tasks:
	yum name=xx
PS:使用冒号时后面要有空格信息	
    以冒号结尾,冒号信息出现在注释说明中,后面不需要加上空格

3. 短横线的应用	-(列表功能)
	- lala	
	  gril
	    - 打游戏
	    - 跑步 
PS:使用短横线构成列表信息,短横线后面需要有空格
  • 开始编写剧本
mkdir /etc/ansible/ansible-playbook
cd /etc/ansible/ansible-playbook
vim rsync_server.yaml
- hosts: 172.16.1.31
  tasks:
    - name: 01-install rsync			# 注释信息
      yum: name=rsync state=installed
	- name: 02-push conf file			# 注释信息
      copy: src=/etc/rsyncd.conf dest=/etc/

说明:剧本文件扩展名尽量写为yaml
1. 方便识别文件是一个剧本文件
2. 文件编写时会有颜色提示 	

如何执行剧本:
第一个步骤:检查剧本语法格式
ansible-playbook --syntax-check rsync_server.yaml 
第二个步骤:模拟执行剧本
ansible-playbook -C rsync_server.yaml
第三个步骤:直接执行剧本
ansible-playbook rsync_server.yaml
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值