Ansible学习笔记
1.安装Ansible软件
yum install -y ansible
2./etc/ansible/hosts
该文件代表需要管理的主机列表
格式为:
#组名
[test]
#IP地址或主机名或域名
192.168.1.151
192.168.1.152
test1
test2
OS_controller
OS_compute
连续IP可以使用192.168.1.[151:160]来表示。
一个IP地址可以属于多个组,例如
[test]
192.168.1.[151:152]
[test1]
192.168.1.151
[test2]
192.168.1.152
3.执行命令
#ansible -i /etc/ansible/hosts test -u root -m command -a 'ls /home' -k
其中-i默认为/etc/ansible/hosts,默认位置可以省略。
-u默认为root,默认可省略
test为hosts中的组名,必不可少
-m默认为command,默认可省略
-k为输入密码,SSH无密码户型后可省略
省略后的命令为:
#ansible test -a 'ls /home'
4.ping模块
#ansible all -m ping
其中all表示hosts中的全部主机,会自动除重。
-m ping表示使用ping模块
返回值:
(151和152能ping通,153不通)
--------------------------------------------------------------------------------------
[root@localhost ansible]# ansible test -m ping
192.168.1.152 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.151 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.153 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.1.153 port 22: No route to host\r\n",
"unreachable": true
}
--------------------------------------------------------------------------------------
5.使用远程普通用户
#ansible all -u hanxinda -m ping --sudo
使用远程主机的hanxinda用户执行ping
需要指定使用sudo
并且保证hanxinda用户与ansible本地主机SSH无密码户型,否则使用-k输入密码
6.处理用户名不同,端口不同
在/etc/ansible/hosts文件中指定用户名和端口
[test]
192.168.1.151 ansible_ssh_user=root
192.168.1.152 ansible_ssh_user=hanxinda ansible_ssh_port=2202
ansible_ssh_user #指定ssh该主机的用户名
ansible_ssh_port #指定ssh该主机的端口
host_key_checking=false #在首次ssh一个主机时,可能会让你输入yes/no,该选项可以跳过这个过程。
7.主机组之间的嵌套
/etc/ansible/hosts文件中
[openstack:children]
controller #组名
compute
[controller]
192.168.1.140
192.168.1.141
[compute]
192.168.1.151
192.168.1.152
192.168.1.[160:170]
测试全部openstack节点是否存活
#ansible openstack -m ping
测试controller节点是否存活
#ansible controller -m ping
测试compute节点是否存活
#ansible compute -m ping
8.查看Ansible模块
查看所有模块
#ansible-doc -l
查看某个module的参数
#ansible-doc -s module
例如ansible-doc -s ping,ansible-doc -s user
9.setup模块
用于收集远程主机的一些基本信息
#ansible test -m setup
10.file模块
用于设置文件属性,创建删除等:
file模块包含以下选项:
force:在两种情况下强制创建软连接,一种是文件不存在,但之后会创建的情况。另一种是目标软连接已存在,需要先取消之前的软连接,然后创建新的软连接。yes/no
group:定义文件或目录的属组
mode:定义文件或目录的权限
owner:定义文件或目录的属主
path:定义文件或目录的路径(必不可少)
recurse:递归的设置文件的属性,只对目录有效
src:要被连接的源文件路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
directory:如果目录不存在,则创建目录
file:即使文件不存在,也不创建文件
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件已存在,则更新最后修改时间
absent:删除目录、文件或取消链接文件
eg .
删除一个文件aaa.txt
#ansible test -m file -a "path=/tmp/aaa.txt state=absent"
创建一个文件bbb.txt
#ansible test -m file -a "path=/tmp/bbb.txt state=touch"
创建一个文件的软连接,force=yes表示/tmp/aaa不存在,也仍然创建软连接。
#ansible test -m file -a "src=/tmp/aaa dest=/tmp/aaa.ln state=link force=yes"
11.copy模块
用于拷贝本地文件到远程主机:
copy有以下选项:
src:本地文件路径
dest:远程主机路径
backup:若文件同名,是否备份原文件,如果已存在文件的内容与当前拷贝文件一致,则不会备份(checknum一致?)
eg.
将ansible本地文件/tmp/aaa远程拷贝到目的主机的/tmp下
#ansible test -m copy -a "src=/tmp/aaa dest=/tmp/ backup=yes"
12.command模块
用于在远程主机执行一段shell命令:
command有以下常用选项:
creates:creates=文件名,当该文件存在时,执行后面的命令。
chdir:切换工作目录,chdir=/tmp/
removes:removes=文件名,当该文件不存在时,执行后面的命令。与creates相反。
eg.
若/tmp/aaa不存在时,执行ls /home
#ansible test -m command -a 'creates=/tmp/aaa ls /home'
-----------------------------------------------------------------------------------------
[root@localhost ansible]# ansible test -m command -a 'creates=/tmp/aaa ls /home'
192.168.1.152 | SUCCESS | rc=0 >>
skipped, since /tmp/aaa exists
192.168.1.151 | SUCCESS | rc=0 >>
skipped, since /tmp/aaa exists
-----------------------------------------------------------------------------------------
切换工作目录到/tmp/下,然后执行命令
#ansible test -m command -a 'chdir=/tmp/ tar zcf aaa.tar.gz aaa'
13.shell模块
功能和command模块相似,参数也相似,不同的是shell支持管道:
下面命令只能用shell模块执行,command不支持管道
#ansible test -m shell -a 'chdir=/tmp ls >>~/log.txt'
#ansible test -m shell -a 'chdir=/usr ls | grep game'
还有个类似的模块叫raw:(测试时报错?)
#ansible test -m raw -a 'chdir=/usr ls -lh | grep game'
----------------------------------------------------------------------------------------
[root@localhost ansible]# ansible test -m raw -a 'chdir=/usr ls -lh | grep game'
192.168.1.151 | FAILED | rc=1 >>
Shared connection to 192.168.1.151 closed.
192.168.1.152 | FAILED | rc=1 >>
Shared connection to 192.168.1.152 closed.
----------------------------------------------------------------------------------------
14.service模块
用于远程管理服务,例如enable,start等:
service模块有以下常用选项:
enabled:设置开机启动服务
name:name=服务名
state:有以下几种值
started:启动服务
stopped:关闭服务
restarted:重启服务
reloaded:
sleep:当使用state=restarted时。使用sleep设置结束服务到启动服务之间的时间间隔,例如sleep=3,即restarted中间停顿3秒
pattern:指定服务的路径,例如/usr/bin/foo
arguments:参数
eg.
启动nginx服务
#ansible test -m service -a 'name=nginx state=started'
关闭nginx服务
#ansible test -m service -a 'name=nginx state=stopped'
重启nginx服务,停止与启动之间休息3秒
#ansible test -m service -a 'name=nginx state=restarted sleep=3'
14.cron模块
用于管理任务计划
cron模块拥有以下选项:
backup:是否对远程主机上的原计划任务做备份
cron_file:如果指定该选项,则用该文件替换远程主机上cron.d目录下的计划任务
day:日
hour:小时,hour=4每天4点,hour="5,2"每天5点和2点,*/2每两小时
minute:分钟
month:月
weekday:周
job:要执行的任务, 依赖于state=present
name:该任务的描述,自定义
special_time:指定什么时候执行,参数reboot,yearly,annually,weekly,daily,hourly
state:确认该任务计划是创建还是删除
user:以哪个用户的身份执行
eg.
每天两天重启系统
#ansible test -m cron -a 'name="this is a reboot task" hour=2 user=root job="/sbin/reboot"'
删除该重启计划
#ansible test -m cron -a 'name="this is a reboot task" hour=2 user=root job="/sbin/reboot" state=absent'
每隔三分钟查看一下目录
#ansible test -m cron -a 'name="check home dir" minute=*/3 user=root job="ls /home -l >>~/log.txt"'
15.yum模块
用于使用yum工具安装管理包
yum模块拥有以下选项:
state:对软件包的操作,包含installed或present,latest。absent或removed。
name:软件名
eg.
安装apache,httpd
#ansible test -m yum -a 'name=httpd state=installed'
保持学习,否则迟早要被淘汰*(^ 。 ^ )***