安装本地软件包
[root@ms.dtedu.com~]$ansible all -m yum -a "name=/root/ipvsadm-DR.rpm state=installed "
1.10 user模块
创建和管理用户,其实使用command模块同样可以达到同样的效果。
选项:
home:指定家目录
createhome:配合home使用,yes/no
password:密码
name:用户名
state:状态,present,absent等
shell:使用的shell类型
system:指定系统账户类型
样例:
1、创建用户gongbing,密码12313,其他默认
[root@ms.dtedu.com~]$ansible all -m user -a "name=gongbing password=123123"
node5.dtedu.com | SUCCESS => {
"changed": true,
"comment": "",
"createhome": true,
"group": 500,
"home": "/home/gongbing",
"name": "gongbing",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 500
}
2、删除用户,同时删除用户家目录,如果没有使用remove=yes,则家目录不会被删除
[root@ms.dtedu.com~]$ansible all -m user -a "name=gongbing state=absent remove=yes"
node5.dtedu.com | SUCCESS => {
"changed": true,
"force": false,
"name": "gongbing",
"remove": true,
"state": "absent"
}
1.11 synchronize模块
使用rsync同步文件
选项:
archive:是否归档
copy_links:是否复制链接文件
delete:删除源中没有,目标中有的文件
dest:目的位置
dest_port:对方接口,ssh接口
dirs:
mode:pull,客户端主动拉,push,服务器端推送
recursive:是否递归
rsync_path:如果没有在默认位置,指定命令的路径位置
src:指定管理服务器源文件位置
样例:
1、同步管理服务器/root/目录下的文件到远端服务器的/root/目录下,并删除源目录中没有,而目的目录中有的文件,删除命令慎用。
[root@ms.dtedu.com~]$ansible all -m synchronize -a "src=/root/ dest=/root/ rsync_path=/usr/bin/rsync rsync_opts='-avz --exclude=ipvsadm_DR-realserver.sh' delete=yes"
root@node5.dtedu.com's password:
node5.dtedu.com | SUCCESS => {
"changed": true,
"cmd": "/usr/bin/rsync --delay-updates -F --compress --delete-after --archive --rsh 'ssh -S none -o StrictHostKeyChecking=no' --rsync-path=\"/usr/bin/rsync\" -avz --exclude=ipvsadm_DR-realserver.sh --out-format='<<CHANGED>>%i %n%L' \"/root/\" \"node5.dtedu.com:/root/\"",
"msg": "building file list ... done\n<f.st...... ipvsadm-DR-realserver.sh\n.d..t...... .ansible/tmp/\ncd+++++++++ .ansible/tmp/ansible-local-4895_RVFdv/\ncd+++++++++ .ansible/tmp/ansible-local-4895_RVFdv/ansiballz_cache/\n<f+++++++++ .ansible/tmp/ansible-local-4895_RVFdv/ansiballz_cache/synchronize-ZIP_DEFLATED\ncd+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-190887811627457/\n<f+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-190887811627457/synchronize.py\ncd+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-197655636791593/\n<f+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-197655636791593/synchronize.py\n*deleting .ansible/tmp/ansible-tmp-1491648361.43-270103109521447/synchronize.py\n*deleting .ansible/tmp/ansible-tmp-1491648361.43-270103109521447/\n*deleting .ansible/tmp/ansible-tmp-1491648361.43-153252689637438/synchronize.py\n*deleting .ansible/tmp/ansible-tmp-1491648361.43-153252689637438/\n*deleting .ansible/tmp/ansible-local-4846toPJz0/ansiballz_cache/synchronize-ZIP_DEFLATED\n*deleting .ansible/tmp/ansible-local-4846toPJz0/ansiballz_cache/\n*deleting .ansible/tmp/ansible-local-4846toPJz0/\n\nsent 123310 bytes received 121 bytes 11755.33 bytes/sec\ntotal size is 215264 speedup is 1.74\n",
"rc": 0,
"stdout_lines": [
"building file list ... done",
"<f.st...... ipvsadm-DR-realserver.sh",
".d..t...... .ansible/tmp/",
"cd+++++++++ .ansible/tmp/ansible-local-4895_RVFdv/",
"cd+++++++++ .ansible/tmp/ansible-local-4895_RVFdv/ansiballz_cache/",
"<f+++++++++ .ansible/tmp/ansible-local-4895_RVFdv/ansiballz_cache/synchronize-ZIP_DEFLATED",
"cd+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-190887811627457/",
"<f+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-190887811627457/synchronize.py",
"cd+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-197655636791593/",
"<f+++++++++ .ansible/tmp/ansible-tmp-1491648599.06-197655636791593/synchronize.py",
"*deleting .ansible/tmp/ansible-tmp-1491648361.43-270103109521447/synchronize.py",
"*deleting .ansible/tmp/ansible-tmp-1491648361.43-270103109521447/",
"*deleting .ansible/tmp/ansible-tmp-1491648361.43-153252689637438/synchronize.py",
"*deleting .ansible/tmp/ansible-tmp-1491648361.43-153252689637438/",
"*deleting .ansible/tmp/ansible-local-4846toPJz0/ansiballz_cache/synchronize-ZIP_DEFLATED",
"*deleting .ansible/tmp/ansible-local-4846toPJz0/ansiballz_cache/",
"*deleting .ansible/tmp/ansible-local-4846toPJz0/",
"sent 123310 bytes received 121 bytes 11755.33 bytes/sec",
"total size is 215264 speedup is 1.74"
]
}
1.12 mount模块
挂载块设备
选项:
fstype:指定文件系统类型
name:挂载点
opts:mount自身的参数
src:要挂载的文件
state:
present:只处理fstab中的配置,如果没有挂载点,则不会创建挂载点,但在fstab文件中会写入新的挂载信息。
[root@node5.dtedu.com /tmp]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Mar 9 09:57:24 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=1671380c-445a-4f92-8b1e-d90b1f85224c /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/loop0 /aaa ext3 defaults 0 0
absent:删除挂载点
mounted:自动创建挂载点并挂载之
umounted:卸载挂载点
样例:
通过dd命令模拟一个磁盘并分区格式化
[root@ms.dtedu.com~]$ansible all -a "dd if=/dev/zero of=/disk.img bs=4k count=1024"
node5.dtedu.com | SUCCESS | rc=0 >>
记录了1024+0 的读入
记录了1024+0 的写出
4194304字节(4.2 MB)已复制,0.00805549 秒,521 MB/秒
[root@ms.dtedu.com~]$ansible all -a "losetup /dev/loop0 /disk.img"
node6.dtedu.com | SUCCESS | rc=0 >>
[root@ms.dtedu.com~]$ansible all -m filesystem -a "dev=/disk.img fstype=ext3 opts=-F"
node6.dtedu.com | SUCCESS => {
"changed": true
}
1、挂载指定块设备,如果挂载点不存在,则自动创建挂载点。
[root@ms.dtedu.com~]$ansible all -m mount -a "fstype=ext3 name=/aaa src=/dev/loop0 state=mounted"
node5.dtedu.com | SUCCESS => {
"changed": true,
"dump": "0",
"fstab": "/etc/fstab",
"fstype": "ext3",
"name": "/aaa",
"opts": "defaults",
"passno": "0",
"src": "/dev/loop0"
}
2、卸载挂载点。unmounted和sbsent的区别就是absent卸载同时会删除挂载目录。
[root@ms.dtedu.com~]$ansible all -m mount -a "name=/aaa state=absent"
node6.dtedu.com | SUCCESS => {
"changed": true,
"dump": "0",
"fstab": "/etc/fstab",
"name": "/aaa",
"opts": "defaults",
"passno": "0"
}
七、playbook简单介绍
组织结构:
1、target section:定义要执行playbook的远程主机组
常用配置选项:
hosts:远程主机组
user:执行远程主机的用户
sudo
sudo_user
connection:链接到远程主机的方式,默认ssh
gather_facts:是否在远程主机启动setup模块, 默认启动
2、variable section:playbook运行时变量部分
常用配置选项:
vars:给变量赋值
vars_files:调用定义变量的文件
vars_prompt:交互式输入变量值
3、task section:远程主机上执行的任务列表
方法一:
-name:install apache
action: yum name=httpd state=installed
方法二:
-name:configure apache
copy:src=files/httpd.conf dest=/etc/httpd/conf/httpd.conf
方法三:
-name:resart apache
service:
name:httpd
state:restarted
4、handler section:task执行完成后需要调用的任务
注意:在playbooks中使用模块跟在命令中使用有一点点不同,因为在playbooks中有许多从setup模块或者之前的模块中获取的数据要处理。有些模块在命令中无法使用,是因为他们需要访问变量,还有一些可以在命令行中使用的模块在playbooks中使用时会有更强大的功能
八、playbooks常用模块
1、template模块
可以设计一个框架式的配置文件,如何把ansible需要的值插入到合适的位置,其中jinja2最为复杂。
template和copy模块的不同:
template可以将配置文件中的变量在复制到目的文件中时,直接复制的是变量的值,而copy就是传统的文件复制功能。
2、pause暂停模块
在playbooks中暂停一段时间,加在脚本中通常用于给用户提供一个确认,或者提供一个手动确认。
- hosts: dtedu
tasks:
- name: "wait on user input"
pause: prompt="warning! detected alight issue.ENTER to continue CTRL-C to quit"
- copy: src=/root/123 dest=/tmp/
[root@ms.dtedu.com~]$ansible-playbook pause.yml
PLAY [dtedu] *******************************************************************
TASK [setup] *******************************************************************
ok: [node6.dtedu.com]
ok: [node5.dtedu.com]
TASK [wait on user input] ******************************************************
[wait on user input]
warning! detected alight issue.ENTER to continue CTRL-C to quit:
Press 'C' to continue the play or 'A' to abort
3、wait_for模块
用来检查一个tcp端口是否准备好接收远程连接,这是由远程主机来完成的,这个模块在后台运行某些程序,或者启动某些程序时需要一些时间的时候特别有用。可以用local_action参数来指定从远程主机运行命令,并配合ansible_hostname作为主机参数来连接远程受管主机。
4、assemble模块
把多个受管主机的文件合并成一个文件,当配置文件不允许包含的时候,特别有用,特别是在设置root用户的authorized_keys文件的时候。
5、add_host添加主机模块
可以动态的添加受管主机到playbooks中,可以使用uri模块从CMDB中获取主机信息然后添加他们。
6、group_by
根据主机的特性进行分组,可以将同一个操作系统,同一个拓扑结构,或者拥有相同性质的主机(都运行web)分为一组。
7、get_url
从远程主机下载文件。
-name: download foo.conf
Get_url: url=http://www.baidu.com dest=/root/ mode=0440
8、fail模块
九、变量详解
1、在hosts文件中定义变量。/etc/insible/hosts,这种定义方法使用率并不多。
[dtedu]
#10.40.0.[220:230]
node[5:6].dtedu.com http_port=80
2、在playbooks中定义变量。