Ansible自动化运维之基础用法
Ansible的特点:
- 1.ansible不需要单独安装客户端,SSH相当于ansible客户端。
- 2.ansible不需要启动任何服务,仅需安装对应工具即可。
- 3.ansible依赖大量的python模块来实现批量管理。
- 4.ansible配置文件/etc/ansible/ansible.cfg
Ansible基本架构
1、ansible安装
(1)配置epel源
(2)安装
yum install -y ansible
2、ansible语法
ansible [主机清单] -m [模块] -a [动作]
3、配置主机清单
模板: [组名] #设置组,使用[] ip1:22 #如端口不是默认,在ip后面直接加上即可 ip2 ansible_ssh_user='root' ansible_ssh_pass='123456' #如果没有给对应的主机下发公钥,可以使用密码的方式进行添加 ip3 [组名:children] #组的嵌套 组名1 组名2 [组名:vars] ansible_ssh_user='root' ansible_ssh_pass='123456' #如果密码相同,可使用指定变量方式 ansible_ssh_port=2222
例: [root@qunniao_30 ~]# vim /etc/ansible/hosts [web] 10.1.1.31:22 10.1.1.32 [db] 10.1.1.33
注:在使用命令之前首先配置相应的主机清单(/etc/ansible/hosts),建议进行免密钥验证
4、ansible常用模块
ping:检测远程主机是否存活
例: [root@qunniao_30 ~]# ansible all -m ping #all为主机清单中所有主机 10.1.1.33 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } 10.1.1.31 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } 10.1.1.32 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong"
command:在远程主机上执行shell命令(不支持管道等特殊用法)
例: [root@qunniao_30 ~]# ansible all -a 'hostname' 10.1.1.33 | CHANGED | rc=0 >> qunniao_33 10.1.1.31 | CHANGED | rc=0 >> qunniao_31 10.1.1.32 | CHANGED | rc=0 >> qunniao_32
注:默认模块为command,可以不写
shell:在远程主机上执行shell命令(与command的命令类似,支持管道等特殊操作)
例: [root@qunniao_30 ~]# ansible web -m shell -a 'cat /etc/passwd|grep root' 10.1.1.31 | CHANGED | rc=0 >> root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 10.1.1.32 | CHANGED | rc=0 >> root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
file:创建文件或目录
- group:定义文件/目录的属组
- owner:定义文件/目录的属主
- mode:定义文件/目录的权限
- path:必选项,定义文件/目录的路径
- recurse:递归设置文件的属性,只对目录有效
- state:
- directory:如果目录不存在,创建目录
- touch:如果文件不存在,创建一个新文件
- absent:删除文件或目录
- link:链接
例: (1)创建目录 [root@qunniao_30 ~]# ansible all -m file -a 'path=/data state=directory owner=root group=root mode=644' (2)创建文件 [root@qunniao_30 ~]# ansible db -m file -a 'path=/data/file state=touch' (3)创建链接 [root@qunniao_30 ~]# ansible db -m file -a 'src=/etc/fstab dest=/tmp/fstab state=link' (4)删除 [root@qunniao_30 ~]# ansible db -m file -a 'path=/data/file state=absent'
copy:复制文件或目录
- src: 源路径
- dest: 目标路径
- backup:覆盖之前,是否备份原文件
- owner:设定文件/目录的属主
- group:设定文件/目录的属组
- mode:设定文件/目录的权限
- content:填充内容
例: (1)复制文件并修改权限 [root@qunniao_30 ~]# ansible web -m copy -a 'src=/root/ssh_key.sh dest=/data/ owner=root mode=644' (2)覆盖前备份原文件 [root@qunniao_30 ~]# ansible web -m copy -a 'src=/root/ssh_key.sh dest=/data/ backup=yes' (3)创建有内容文件 [root@qunniao_30 ~]# ansible db -m copy -a 'content="ansible is test" dest=/data/test.txt' (4)复制目录 [root@qunniao_30 ~]# ansible web -m copy -a 'src=/data1 dest=/data/'
group:配置用户组
- name: 指定创建的组名
- gid : 指定组的gid
- state
- absent — 移除远端主机的组
- present — 创建远端主机的组(默认)
例: (1)创建组 [root@qunniao_30 ~]# ansible web -m group -a 'name=test1 gid=101' (2)删除组 [root@qunniao_30 ~]# ansible web -m group -a 'name=test1 state=absent'
user:配置用户
- home:指定家目录,需要createhome为yes
- group:用户组
- groups:附加用户组
- uid:用户UID
- password:指定用户密码
- name:用户名
- createhome:是否创建家目录
- system:是否创建为系统用户
- remove:且state=absent时,删除家目录
- shell:指定用户shell环境
- state:
- present:创建(默认)
- absent:删除
例: (1)创建用户 [root@qunniao_30 ~]# ansible web -m user -a 'name=admin uid=100 system=yes shell=/sbin/nologin' (2)删除用户 [root@qunniao_30 ~]# ansible web -m user -a 'name=admin state=absent remove=yes' (3)创建带密码用户 [root@qunniao_30 ~]# echo “123123” | openssl passwd -1 -stdin $1$GfaiWNFj$tWGBbFUA/BwvAjy2FutMe. [root@qunniao_30 ~]# ansible web -m user -a 'name=admin password="$1$GfaiWNFj$tWGBbFUA/BwvAjy2FutMe." system=yes shell=/bin/bash' 注:创建创建密码时必须根hash值,否则明文密码无效
script:脚本运行
例: [root@qunniao_30 ~]# ansible all -m script -a '/root/hostname.sh'
yum:用于安装软件包
- enablerepo:启用某个源
- name:软件包的名字,也可传递一个url或本地的rpm包的路径
- state:定义软件包状态
- present , installed:安装 (默认)
- absent , removed:删除
- latest:安装最新的
例: (1)安装软件 [root@qunniao_30 ~]# ansible web -m yum -a 'name=nginx' (2)删除软件 [root@qunniao_30 ~]# ansible web -m yum -a 'name=nginx state=absent'
service:服务管理
- enabled:是否开机启动 yes|no
- name:必选项,服务名称
- runlevel:运行级别
- sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
- state:
- started:启动
- stopped:停止
- restarted:重启
- reloaded:重新加载
例: (1)启动服务并开机启动 [root@qunniao_30 ~]# ansible web -m service -a 'name=nginx state=started enabled=yes' (2)关闭服务 [root@qunniao_30 ~]# ansible web -m service -a 'name=nginx state=stopped'
cron:定时任务
- backup:对远程主机上的原任务计划内容修改之前做备份
- day:日(1-31,,/2,……)
- hour:小时(0-23,,/2,……)
- minute:分钟(0-59,,/2,……)
- month:月(1-12,,/2,……)
- weekday:周(0-7,*,……)
- job:要执行的任务,依赖于state=present
- name:该任务的描述
- user:以哪个用户的身份执行
- state:
- present:创建(默认)
- absent:删除
例: (1)创建任务 [root@qunniao_30 ~]# ansible web -m cron -a 'name="check disk" minute=*/5 job="df -h &>/root/check.log"' (2)禁用任务 [root@qunniao_30 ~]# ansible web -m cron -a 'name="check disk" minute=* job="df -h &>/root/check.log" disabled=yes' (3)删除任务 [root@qunniao_30 ~]# ansible web -m cron -a 'name="check disk" state=absent' [root@qunniao_30 ~]# ansible web -m cron -a 'name="check date" minute=* job="date >>/root/date.log" state=absent'
mount:挂载设备
- src:挂载设备
- path:挂载点
- fstype:文件类型
- opts:装载选项
- state:
- present :开机挂载,仅将挂载配置写入/etc/fstab
- mounted :挂载设备,并将配置写入/etc/fstab
- unmounted :卸载设备,不会清除/etc/fstab配置
- absent :卸载设备,并删除/etc/fstab相关配置及挂载目录
例: (1)挂载 [root@qunniao_30 ~]# ansible db -m mount -a 'src=/dev/sdb path=/data fstype=xfs opts=defaults state=mounted' (2)卸载 [root@qunniao_30 ~]# ansible db -m mount -a 'src=/dev/sdb path=/data fstype=xfs opts=defaults state=absent'
fetch:拉取远程主机文件
- src:远程主机源文件路径
- dest:当前主机存放路径
例: [root@qunniao_30 ~]# ansible db -m fetch -a 'src=/data/test.txt dest=/root/'
setup:查询远程主机基本信息
- filter: 条件过滤(仅返回匹配条件信息)
例: (1)获取db主机ipv4地址 [root@qunniao_30 ~]# ansible db -m setup -a 'filter=ansible_all_ipv4_addresses' 10.1.1.33 | SUCCESS => { "ansible_facts": { "ansible_all_ipv4_addresses": [ "10.1.1.33" ], "discovered_interpreter_python": "/usr/bin/python" }, "changed": false } (2)获取db主机内在信息 [root@qunniao_30 ~]# ansible db -m setup -a 'filter=ansible_memory_mb' 10.1.1.33 | SUCCESS => { "ansible_facts": { "ansible_memory_mb": { "nocache": { "free": 1667, "used": 152 }, "real": { "free": 1562, "total": 1819, "used": 257 }, "swap": { "cached": 0, "free": 1023, "total": 1023, "used": 0 } }, "discovered_interpreter_python": "/usr/bin/python" }, "changed": false } (3)模糊查询,如以关键字“dns” [root@qunniao_30 ~]# ansible db -m setup -a 'filter=*dns*' 10.1.1.33 | SUCCESS => { "ansible_facts": { "ansible_dns": { "nameservers": [ "223.6.6.6" ] }, "discovered_interpreter_python": "/usr/bin/python" }, "changed": false }
setup常用信息:
- ansible_all_ipv4_addresses:仅显示ipv4的信息。
- ansible_devices:仅显示磁盘设备信息。
- ansible_distribution:显示是什么系统,例:centos,suse等。
- ansible_distribution_major_version:显示是系统主版本。
- ansible_distribution_version:仅显示系统版本。
- ansible_machine:显示系统类型,例:32位,还是64位。
- ansible_eth0:仅显示eth0的信息。
- ansible_hostname:仅显示主机名。
- ansible_kernel:仅显示内核版本。
- ansible_lvm:显示lvm相关信息。
- ansible_memtotal_mb:显示系统总内存。
- ansible_memfree_mb:显示可用系统内存。
- ansible_memory_mb:详细显示内存情况。
- ansible_swaptotal_mb:显示总的swap内存。
- ansible_swapfree_mb:显示swap内存的可用内存。
- ansible_mounts:显示系统磁盘挂载情况。
- ansible_processor:显示cpu个数(具体显示每个cpu的型号)。
- ansible_processor_vcpus:显示cpu个数(只显示总的个数)。
查询模块用法
ansible-doc -s [模块名]
例: [root@qunniao_30 ~]# ansible-doc -s ping - name: Try to connect to host, verify a usable python and return `pong' on success ping: data: # Data to return for the 'ping' return value. If this, parameter is set to `crash',the module will cause an exception.
温馨提示:如无特殊说明,本站文章均为作者原创,转载时请注明出处及相应链接!