目录
[##shell模块 ##好用](##shell模块 ##好用)
[##crontab 计划任务](##crontab 计划任务)
[##yum下载源配置文件 /etc/yum.repos.d/CentOS-Base.repo](##yum下载源配置文件 /etc/yum.repos.d/CentOS-Base.repo)
[##absible roles 模块##](##absible roles 模块##)
[##handlers和notify 的使用](##handlers和notify 的使用)
##拓展:时间的命令
ansible的重要组成部分
Palybook --#剧本 ,让主机按照我给的剧本去完成一些事情
Module --#模块 去实现一个个功能的程序
Pluging --#插件 实现一些额外的小功能
ansible 的yum 安装
-
##安装 yum install epel-release -y
-
yum install ansible -y
-
##配置文件
/etc/ansible/ansible.cfg
Ansible 的主配置文件,此文件主要定义了roles_path的路径
/etc/ansible/hosts
默认主机清单配置文件,可以通过ansible.cfg
##复制一个备份文件
root@wangyalin-hunan-changsha ansible# cp hosts{,.bak} ##先备份
root@wangyalin-hunan-changsha ansible# ls
ansible.cfg hosts hosts.bak roles
root@wangyalin-hunan-changsha ansible# >hosts #在清空文件
##编辑hosts文件
root@wangyalin-hunan-changsha ansible# vim hosts
root@wangyalin-hunan-changsha ansible# cat hosts
#将需要管理的主机添加到webser组
#默认端口号就是22
#如果通过ssh登录的端口不是22端口,就需要在配置文件里面指明端口号
web
192.168.47.196
192.168.47.200
all
192.168.47.196
192.168.47.200
192.168.47.205
除了以上两个重要的配置文件还有三个重要的可执行文件:
ansible ##主执行程序,一般用于命令行下的执行任务
ansible-palybook ##执行playbook中的任务,一般是配合yaml文件使用
ansible-doc ##获取各个模块的帮助信息
用法:
root@dhcp-clinet roles# ansible-doc copy
> COPY (/usr/lib/python2.7/site-packages/ansible/modules/files/copy.py)
The `copy' module copies a file from the local or remote machine to a location on the remote
machine. Use the fetch module to copy files from remote locations to the local box. If you need
variable interpolation in copied files, use the template module. Using a variable in the
`content' field will result in unpredictable output. For Windows targets, use the win_copy
module instead.

##copy模块##复制过去
#复制本台主机的信息到远程主机上

root@wangyalin-hunan-changsha ansible-test# ansible web -m copy -a "src=opt/ansible-test/ansible.txt dest=/opt/ansible.txt mode=755 owner=sc"
###创建过去文件,会把那边的文件进行覆盖
##fetch模块##拉取
##copy的功能很相似,就是把远程主机的信息复制到本台主机上
#不能指定属主和属组,以及模式权限
root@wangyalin-hunan-changsha ansible# ansible web -m fetch -a "src=/etc/passwd dest=/opt/ansible-test"
192.168.47.196 | CHANGED => {
"changed": true,
"checksum": "297601f83a2a36e93e7992aeaf1f976d7199a433",
"dest": "/opt/ansible-test/192.168.47.196/etc/passwd",
"md5sum": "766c45a30bc8408edb2065ea3e9559b0",
"remote_checksum": "297601f83a2a36e93e7992aeaf1f976d7199a433",
"remote_md5sum": null
}
192.168.47.200 | CHANGED => {
"changed": true,
"checksum": "4d3bcc31d1f61f892f342f0a0e23823edbd73773",
"dest": "/opt/ansible-test/192.168.47.200/etc/passwd",
"md5sum": "d0af7a0f15cc1b9c76b47d4e38249bae",
"remote_checksum": "4d3bcc31d1f61f892f342f0a0e23823edbd73773",
"remote_md5sum": null
}
##shell模块 ##好用
在web的用户,进行shell编程,在各个用户下下面/tnp/sc 创建这个sc文件夹
root@wangyalin-hunan-changsha ansible# ansible web -m shell -a "mkdir /tmp/sc"
WARNING: Consider using the file module with state=directory rather than running
'mkdir'. If you need to use command because file is insufficient you can add 'warn:
false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid
of this message.
192.168.47.196 | CHANGED | rc=0 >>
192.168.47.200 | CHANGED | rc=0 >>
###效果,注意的是结果返回值是零表示成功,非零则为失败
root@wangyalin-hunan-changsha pssh-test# ls /tmp/
sc
##command模块##
#很像那个shell但是shell还是更加好用一点
root@wangyalin-hunan-changsha ssh# ansible web -m command -a "ip add |gerp ens33"
192.168.47.196 | FAILED | rc=255 >>
Command "|gerp" is unknown, try "ip address help".non-zero return code
192.168.47.200 | FAILED | rc=255 >>
Command "|gerp" is unknown, try "ip address help".non-zero return code
##file模块###

State--
abset删除文件和目录
Direcstory 目录
Touch 创建空文件
Hard 建立硬链接
Link 建立软连接
##创建文件效果
root@wangyalin-hunan-changsha ssh# ansible web -m file -a "path=/opt/aniblle-file-test state=directory"
192.168.47.200 | CHANGED => {
###创建软连接
root@wangyalin-hunan-changsha ssh# ansible web -m file -a "path=/opt/ansible-link state=link src=/etc/passwd
##ip为192.168.47.200##效果如下
root@wangyalin opt# ls
aniblle-file-test ansible-link ansible.txt pssh-test wangyalin.txt
##cron模块###
#计划任务

##crontab 计划任务
###编辑计划任务
#1.crontab -e
#2.vim /etc/crontab
root@wangyalin-hunan-changsha cron# pwd
/var/spool/cron
#查看当前用户有哪些的计划任务
Crontab -l
root@wangyalin-hunan-changsha cron# crontab -l
0 2 * * * bash /backup/backup_log.sh
#*/1 * * * * mkdir /backup/sc$RANDOM
#Ansible: ansible-test
*/2 * * * * date >>/temp/time.txt

##每两分钟实现将date时间输出到/temp/time.txt文本里面
root@wangyalin-hunan-changsha etc# ansible web -m cron -a "minute=*/2 job='date >>/temp/time.txt' name=ansible-test state=present"
192.168.47.200 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"envs": \[\],
"jobs": [
"ansible-test"
]
}
192.168.47.196 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"envs": \[\],
"jobs": [
"ansible-test"
]
}
##下载好时间插件
root@wangyalin opt# yum install chrony -y
##script模块
把本地的脚本到远端执行;前提是到远端可以执行,不要把linux下的脚本同步到Windows下执行
#只能在远端服务器执行脚本,不上传脚本到远端服务器
root@sanchuang-wangyalin test# ansible web -m script -a "./script_model_test.sh"
##yum模块##
##ansible使用yum模块
安装wget模块
root@sanchuang-wangyalin ansible# ansible web -m yum -a "name=wget state=present"
root@sanchuang-wangyalin ansible# ansible web -m yum -a "name=wget state=installed"
卸载wget模块
root@sanchuang-wangyalin ansible# ansible web -m yum -a "name=wget state=absent"
root@sanchuang-wangyalin ansible# ansible web -m yum -a "name=wget state=removed"
##安装vsftpd 和nginx
root@sanchuang-wangyalin ansible# ansible web -m yum -a "name=vsftpd state=present"
用于安全快速传输文件服务器
root@sanchuang-wangyalin ansible# ansible web -m yum -a "name=nginx state=present"
用于是一个高性能的开源 Web 服务器软件,也可以用作反向代理服务器、负载均衡器和 HTTP 缓存等

##yum下载源配置文件 /etc/yum.repos.d/CentOS-Base.repo
##eqel--拓展源
root@sanchuang-wangyalin yum.repos.d# yum install eqel-release -y
base
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever\&arch=$basearch\&repo=os\&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1 #为1开启检验
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enabled=0 #是否启动当前源 0表示禁用
#released updates
##service模块
服务管理参数
常用参数
name服务名
state:服务状态 started 启动 stopped 关闭
enabled 是否开启启动 truefalse
root@sanchuang-wangyalin etc# ansible web -m service -a "name=nginx state=started"
runevel:启动级别(systemctl方式忽略)
##anisble-playbook##
剧本--》连续性的要求--》按照步骤走
#语法按照yaml格式
- playbook的核心元素
hosts:playbook配置文件作用的主机
tasks:任务列表
variables: 变量
templates:包含模块语法的文本文件
handlers :有特定条件出发的任务
roles:用于层次性,结构化地组织playbook roles能根据层次型结构自动装载变量文件、tasks以及handles等
##yaml格式
缩进必须对齐空格,不然会乱
root@sanchuang-wangyalin ansible-playbook# cat playbook01.yaml
- hosts: 192.168.47.196 ##定义远程执行主机
remote_user: root ##定义远程用户
tasks: ##指定任务,可以执行很多个
- name: create user ##任务名字
user: name=pb ##任务执行的模块,和参数
- name: cpoy file
copy: src=/opt/ansible-test/index.html dest=/opt/index.html
name:sc2
##层级关系
hunan:
shengfen: changsha
hupo: dongtinghu
#列表
classes:
-yingboshuyuan
-yuelushuyuan
##template(模版)
##遵循jinja2模版语法
大部分内容是一样的
结合变量一起使用以 .j2结尾
{{}}双大括号里面放变量
##传递变量
##变量的不同的指定方式
#写在playbook文件中--vars指令
##yaml文本里面传递
root@sanchuang-wangyalin ansible-playbook# cat playbook03.yaml
- hosts: web
vars:
- file_name: test.txt
tasks:
- name: create file
file:
path: /tmp/{{file_name}}
state: touch
##直接接-e传递变量
root@sanchuang-wangyalin ansible-playbook# ansible-playbook playbook03.yaml -e "file_name=test01.txt"
##还可以在hosts文件里指定变量
##运行
root@sanchuang-wangyalin ansible-playbook# ansible-playbook playbook03.yaml
##查看
root@sanchuang-wangyalin ansible-playbook# cat /etc/ansible/hosts
#将需要管理的主机添加到webser组
#默认端口号就是22
#如果通过ssh登录的端口不是22端口,就需要在配置文件里面指明端口号
web
192.168.47.196 file_name=web1.txt
192.168.47.200 file_name=web2.txt
all
192.168.47.196
192.168.47.200
192.168.47.205
##setup模块##
Ansible 中的一个特殊模块,用于收集主机的详细信息
##absible roles 模块##
分块管理目录
- 建立目录结构
- 编写nginx配置文件模版

##handlers和notify 的使用
详见Ansible--Ansible之Playbook - 别来无恙- - 博客园 (cnblogs.com)
##yaml格式

- playbook的运作方式

##变量的不同的指定方式
#写在playbook文件中--vars指令
##拓展:时间的命令
- %Y:4位数的年份(例如:2022)
- %y:2位数的年份(例如:22)
- %m:2位数的月份(例如:01到12)
- %B:完整的月份名称(例如:January、February)
- %b:缩写的月份名称(例如:Jan、Feb)
- %d:2位数的日期(例如:01到31)
- %A:完整的星期几名称(例如:Sunday、Monday)
- %a:缩写的星期几名称(例如:Sun、Mon)
- %H:24小时制的小时数(例如:00到23)
- %I:12小时制的小时数(例如:01到12)
- %M:分钟数(例如:00到59)
- %S:秒数(例如:00到59)
- %p:AM或PM
- %Z:时区
##这里是之前ansible的补充内容
