主机清单

1
默认读取路径:/etc/ansible/hosts
1
2
3
4
5
[root@localhost ~]# tree /etc/ansible/
/etc/ansible/
├── ansible.cfg
├── hosts
└── roles

hosts 配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[webservers]         ---------主机组名称-使用ansible时指定主机组时用	
192.168.1.100 ---------机器的IP信息
192.168.1.110
[mysql]
192.168.1.120 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='666666'
#ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='666666' 内置变量指定账号密码和远程端口
...
[update:children] ---------子组:对已经分组完成的主机组再次进行分组
mysql
webservers
[组名/all:vars] ---------代表这个组全部使用这个账号密码,all代表所有,all和组名二选一
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass='666666'

Ansible选项

Ansible选项 作用
-i 指定主机清单
-m module 指定模块
-a action 指定动作(一般是模块中选项的命令)

Ansible模块

  • Ansible AD-Hoc ansible命令行批量执行(使用各种模块)
Ansible模块 作用
ping 检查ansible与主机直接的通信情况
script 分发shell脚本
file 文件/目录创建,删除
copy 远程复制(ansible------》节点)
命令/脚本模块
shell 批量执行shell命令
command 默认模块,试用于执行简单的命令(不支持特殊符号)

查看ansible模块执行参数,支持的内容

1
ansible-doc -s 模块名

颜色区分

  • 绿色/黄色:正常
  • 紫色:警告与建议
  • 红色:故障

ansible认证方式

  • 秘钥认证
  • 密码认证

script

file


file模块


path 路径(目录,文件)必须要写

state 状态(模式)state=directory 创建目录

​ state=file(默认) 创建文件

​ state=link 创建软链接

src 源文件 (link创建软连接时当做源文件)



copy模块


src 源目录


dest 目标目录


owner 传输中指定所有用户


groupadd 传输中指定所有组


mode=644 指定文件启动权限


backup=yes 如果目标文件存在则备份


content 向文件中写入内容 增加内容

服务管理


systemd模块


name 指定服务名称


enabled=yes 开机自启动


state 表示服务开关,重启…

​ state=started,

​ state=restarted,

​ state=stopped,

​ state=reloaded

daemon-relaod yes是否重新加载对应服务的配置文件


服务管理模块 systemd service
开机自启动 enable enable
服务名称 name name
服务开关重启 state state
运行级别 runlevel
重新加载systemd配置 daemon-reload=yes

ansible-doc -l 显示所有模块

ansible-doc -s 查询指定模块

软件包管理

  • yum模块:yum_repository
  • 通过yum安装软件
yum_repository
name yum源中名字[epel]
description yum源的注释说明 对应的是name的内容
baseurl yum源中baseurl下载地址
enabled 是否启动这个源 yes/no
gpgcheck 是否启动gpgcheck功能no
file 指定yum源的文件 自动添加.repo 默认与n模块的名称一致
1
2
3
4
5
6
[epel]	#模块名称
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug #注释
baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug #下载地址
enabled=0 # 是否开启这个源
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 #开启后指定gpgcheck指定的路径和文件
gpgcheck=1 #是否开启gpgcheck

yum模块

name 指定软件包名
state installed 安装(present)
removed 卸载 (absent)
latest 安装或更新

下载软件包

wget

get_url模块
url 下载地址
dest 下载到指定目录

系统管理

mount模块

fstype 指定文件系统
src 源地址
path 挂载点
mount模块的state参数值
absent 卸载(仅修改/etc/fstab)
umounted 卸载(并修改/etc/fstab)
present 不挂载 (仅修改/etc/fstab)
mounted 挂载 (并修改/etc/fstab)
remounted 重新挂载

cron定时任务

cron模块 定时任务
name 任务名称(一定要加)
minute 分钟 minute=“*/2”
hour 小时
day 日期
month 月份
week 周几
job 指定命令或脚本(定向到)job=“shell 命令”
state absent(删除定时任务)
present(添加定时任务)
disabled diabled=yes,disabled=no定时任务注释(必须state=present)

用户管理

group 模块
name 指定用户组名字
gid 指定组的gid
state present(添加)
user模块
name 用户名
uid 用户名 uid
group 属于的组
groups 属于多个组
shell 指定命令解释器
create_home 是否创建家目录yes/no
state present(添加)
absent(删除)

模块小结

模块分类
命令和脚本模块 command 默认模块,执行简单命令,不支持特殊符号
shell模块,执行命令,支持特殊符号
script模块 分发脚本并执行
文件相关模块 file创建目录和软连接
copy远程分发,修改权限,备份
服务模块 systemd服务管理
service服务管理(了解)
软件包
yum源 yum_repository
yum命令
get_url 下载软件
系统管理
mount模块 挂载
cron模块 定时任务
用户管理
group模块 管理用户组
user模块 管理用户
其他
压缩解压,rsync模块,数据库模块

Ansible剧本

  • ad-hoc命令对于重复执行不方便
  • 重复的操作与部署推荐写一个Ansible剧本(脚本),剧本本质 使用模块+固定格式(对齐)

剧本格式

  • yaml格式

Playbook组成

-hosts: all

remote_user: root

vars:

file_name: oldboylinux

tasks

  • name: touch new files

    shell: touch /tmp/

playbook

play 动作中的一个一个场景 一般用于指定不同的主机

task 这一个场景中不同的动作 指定了机器后,让这些机器执行的模块

  • 具体书写注意事项

    • 同一层级的内容对齐的
    • 不同层级的通过2个空格对齐
    • 不能使用Tab键

    cowsay-----机器上安装执行剧本时会变成奶牛