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'
 
 
 
 
 
 
posted @ 2018-03-23 00:08  风间悠香  阅读(817)  评论(0编辑  收藏  举报