上节我们了解到ansible的基本工作架构和原理,那么我们现在了解一些基本使用和常用模块
ansible系统命令
- ansible系统命令
ansible ansible-doc ansible-playbook ansible-vault
ansible-console ansible-galaxy ansible-pull
- ansible-doc:显示模块帮助
Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
-a 显示所有模块的文档
-l、--list 列出可用模块
-s、 --snippet 显示指定模块的playbook片段,以简单模式
示例:
ansible-doc -l 列出所有模块
ansible-doc ping 查看指定模块帮助用法
ansible-doc -s ping 查看指定模块帮助用法
- ansible
ansible通过ssh实现配置管理、应用部署、任务执行等功能,建议配置ansible端基于秘钥认证的方式联系
各被管理节点
Usage: ansible <host-pattern> [options]
--version 显示版本
-m module 指定模块,默认为command
-v 详细过程 -vv -vvv更详细
--list-hosts 显示主机列表,可简写-list
-k,--ask-pass 提示输入ssh连接密码,默认key验证
-K,--ask-become-pass 提示输入sudo时的口令
-C,--check 检查,并不执行
-T,--timeout= TIMEOUT 执行命令的超时时间,默认为10s
-u,--user=REMOTE_USER 执行远程执行的用户
-b,--become 代替旧版的sudo切换
- Ansible的Host-pattern
匹配主机的列表
ALL:显示所有的inventory的所有主机
ansible all -m ping
通配符
ansible "*" -m ping
ansible 10.0.194.* -m ping
ansible "web*" -m ping
或关系
ansible "webserver:dbserver" -m ping
ansible "10.0.194.81:10.0.194.83" -m ping
逻辑与
ansible "webserver:&dbserver" -m ping
在webserver组并且在dbserver组中的主机
逻辑非
ansible 'webserver:!dbserver' -m ping
在webserver组,但不在dbserver组中的主机
注意:此处为单引号
正则表达式
ansible "webserver:&dbserver" -m ping
Ansible常用模块
- Copy
Copy:从服务器复制文件到客户端
ansible webserver -m copy -a "src=/root/1.txt dest=/tmp/2.txt owner=root mode=600 backup=yes"
如果目标文件存在,默认覆盖,此处指定先备份
ansible webserver -m copy -a "content='test content\n' dest=/tmp/2.txt "
利用内容,直接生成目标文件
- Fetch
Fetch:从客户端拉取文件至服务器端,copy相反,目录可先tar
ansible webserver -m fetch -a "src=/tmp/2.txt dest=root/2.txt
- File
File:设置文件属性
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
--directory:如果目录不存在,创建目录
--file:即使文件不存在,也不会被创建
--link:创建软链接
--hard:创建硬链接
--touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
ansible webserver -m file -a "path=/tmp/2.txt owner=root mode=755 "
ansible nginx -m file -a "src=/etc/hosts dest=/tmp/hosts_link state=link"
state touch(创建文件)
directory(创建目录)
link(软连接)
hard(硬链接)
absent(删除)
recurse 递归的设置文件的属性,只对目录有效,yes表示使用递归设置
ansible test -m file -a "path=/tmp/ceshi owner=test group=test mode=644 recurse=yes" 递归修改权限
- Hostname
Hostname:管理主机名
ansible webserver -m hostname -a "name=node1"
- Cron
支持时间:minute,hour,day,month,weekday
ansible webserver -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 10.0.0.1' &>/dev/null name=Synctime" 创建任务
ansible webserver -m cron -a "state=absent name=Synctime" 删除任务
ansible webserver -m cron -a "disabled=ture job='/usr/sbin/ntpdate 10.0.0.1' name=Synctime" 如果不想要删除,我们可以注释掉(yes也可以)
ansible webserver -m cron -a "disabled=false job='/usr/sbin/ntpdate 10.0.0.1' name=Synctime" 当然,能禁用也能启用(no也行)
- Yum
Yum:管理包
ansible ceshi -m yum -a 'name=hattpd state=latest' 安装
ansible ceshi -m yum -a 'name=hattpd state=absent' 删除
state参数:用于指定软件包的状态 ,默认值为。present,表示确保软件包已经安装;除了present,其他可用值有 installed、latest、absent、removed,
其中 installed 与present 等效,latest 表示安装 yum 中最新的版本,absent 和 removed 等效,表示删除对应的软件包
例:
ansible ceshi -m yum -a 'name=httpd,mysql,nginx' 安装多个
ansible ceshi -m yum -a 'name=httpd,mysql,nginx state=absent' 卸载多个
ansible all -m yum -a "list=installed" 查看所有已安装的包
当然也可以安装单个的rpm包
首先先将本地的包copy到目的地,然后yum安装
ansible ceshi -m copy -a "src=/root/xxxx dest=/tmp/xxxx"
ansible ceshi -m yum -a "name=/tmp/xxxx"
ansible ceshi -m yum -a "name=/tmp/xxxx disable_gpg_check=yes" 忽略key的检查
ansible ceshi -m yum -a 'update_cache=yes' 有时我们yum安装时会因为安装缓存报错,我们可以用次命令更新缓存
注:另外,如果我们如果写的事playbook的话,可以这样写;将所需要安装的包写成变量的形式
yum: name={{ item }} state=installed
with_items:
- gcc
- gcc-c++
- autoconf
- automake
- make
- pcre-devel
- openssl-devel
- Service
Service:管理服务
ansible ceshi -m service -a 'name=httpd state=stopped'
ansible ceshi -m service -a 'name=httpd state=started'
ansible ceshi -m service -a 'name=httpd state=reloaded'
ansible ceshi -m service -a 'name=httpd state=restarted'
- User
User:管理用户
ansible test -m user -a 'name=user1 comment="test user" uid=2019 home=/app/user1 group=root'
ansible test -m user -a 'name=sysuser1 system=yes home=/app/sysuser1' system:标明这是一个系统账号
ansible test -m user -a 'name=nginx shell=/sbin/nologin system=yes home=/var/nginx/ groups=root,bin uid=80 comment="nignx service"' groups:副组
ansible test -a 'getent passwd nginx ' 查看我们的设置
ansible test -m user -a 'name=user1 state=absent remove=yes' 删除用户及家目录等数据
- Group
Group:管理组
ansible test -m group -a "name=ceshigroup system=yes"
ansible test -m group -a "name=ceshigroup system=absent" 删除组
- Script
Script:远端执行本地脚本,我们不需要先将脚本copy过去,然后再shell执行
ansible test -m script -a "add.sh"
- Unarchive
unarchive:用于解压文件,模块包含如下选项:
copy:在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存
在。
creates:指定一个文件名,当该文件存在时,则解压指令不执行
dest:远程主机上的一个路径,即文件解压的路径
grop:解压后的目录或文件的属组
list_files:如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项
mode:解决后文件的权限
src:如果copy为yes,则需要指定压缩文件的源路径
owner:解压后文件或目录的属主
- Command/Shell
Command:ansible的默认模块
# default module name for /usr/bin/ansible
#module_name = command
我们一般使用command后接命令之类的,但是注意,使用 command 模块在远程主机中执行命令时,不会经过
远程主机的 shell 处理,在使用 command 模块时,如果需要执行的命令中含有重定向、管道符等操作时,
这些符号也会失效,比如”<”, “>”, “|”, “;” 和 “&” 这些符号
ansible all -m command -a "hostname"
Shell:shell 模块可以帮助我们在远程主机上执行命令。与 command 模块不同的是,shell 模块在远程主机
中执行命令时,会经过远程主机上的 /bin/sh 程序处理,所以它可以支持特殊符号
它可以理解为command的升级版
- Setup
Setup:用于收集远程主机的一些基本信息
filter参数:用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息
例如我们需要取得目标主机的磁盘格式化后的信息;cpu的信息等
ansible ceshi -m setup -a "filter=ansible_memory_mb"
常用:
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个数(只显示总的个数)。
好了,后续我会继续更新模块