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 ping8.查看Ansible模块
查看所有模块 #ansible-doc -l 查看某个module的参数 #ansible-doc -s module 例如ansible-doc -s ping,ansible-doc -s user9.setup模块
用于收集远程主机的一些基本信息 #ansible test -m setup10.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'转载于:https://www.cnblogs.com/leokale-zz/p/8627869.html
相关资源:ansible学习笔记三:roles