Ansible - 2 - 命令讲解


Ansible 命令

Ansible 命令集

# 以下所有命令均可使用`-h`参数获取帮助信息
ansible               # Define and run a single task 'playbook' against a set of hosts  # 常用命令
ansible-config        # View ansible configuration.
ansible-console       # REPL console for executing Ansible tasks.  # 交互式工具,相当linux中的shell,不常用
ansible-doc           # plugin documentation tool  # 查询模块的文档说明,类似linux中的man,常用命令
ansible-galaxy        # Perform various Role and Collection related operations.
ansible-inventory     # Show Ansible inventory information, by default it uses the inventory script JSON format
ansible-playbook      # Runs Ansible playbooks, executing the defined tasks on the targeted hosts.  # 执行系列任务,类似linux中的sh,常用命令
ansible-pull          # pulls playbooks from a VCS repo and executes them for the local host
ansible-vault         # encryption/decryption utility for Ansible data files

Ansible 常用命令集

# 常用命令集

ansible
# Ansible指令的核心部分,主要用于执行ad-hoc命令,也就是单条命令
# 默认使用command模块,默认的使用模块可以在ansible.cfg中进行定义

ansible-doc
# 用于查看模块信息,
# 参数 -l 列出可用的插件
# 参数 -s 用于查看指定模块的用法,例如“ansible-doc -s shell”

ansible-playbook
# 读取playbook文件内容并执行定义的任务
# 对于固化的需求通常采用playbook方式定义和实现

ansible-vault
# 主要应用于包含敏感信息的场景,可以加密和解密敏感信息
# 经过加密后的playbook,编辑时需要输入事先设定的密码才能打开
# 使用 --ask-vault-pass 参数执行加密后的playbook文件

ansible-config
# 查看ansible的配置
# 参数 list 打印所有配置参数,参数 view 查看配置文件
# 结合 grep 使用可以获取具体配置信息,例如“ansible-config view |grep -v "#" |grep host_key_checking”

Ansible ad-hoc命令

# ansible <host-pattern> [-f forks] [-m module_name] [-a args]
# <host-pattern>      命令生效的主机: <inventory_group_name>/<inventory_host_ip>/all 

# 常用选项  通过 ansible -h 命令获取详细信息
-v                    # 输出详细执行过程信息  verbose mode (-vvv for more, -vvvv to enable connection debugging)
-i inventory_file     # 指定inventory文件,默认为/etc/ansible/hosts
-f forks              # 指定并发线程数(一次处理多少个主机),默认5个线程
-m module_name        # 指定执行使用的模块
-M directory          # 指定模块存放路径,默认为/usr/share/ansible
-a args               # 指定模块参数
-l hosts_ip           # 限定主机(只在限定主机上执行任务)

--become-method BECOME_METHOD    # 提权方法,默认为sudo,一般为su
--become-user BECOME_USER        # 切换用户,默认为root
-K, --ask-become-pass            # 请求提权密码

--list-hosts        # 列出此次的主机列表,但不做任何改变
--syntax-check      # 语法检查
-C, --check         # 检验可能的错误,但不做任何改变


# 主机名文件保留
- "-t"或"--tree"选项可以将ansible的执行结果按主机名保存在指定目录下的文件中
- 使用"-t"选项可以将第一次执行的结果按主机名保存在文件中, 此后即使不使用"-t"选项也能提升执行速度


# 命令示例
ansible 192.168.56.3 -a 'hostname'  # 默认使用command模块(不支持变量、管道等)
ansible 192.168.56.3 -m command -a 'hostname'
ansible Test --list  # 列出Test组所有的主机列表

ansible Test:Test2 -m ping  # 通过ping模块检查Test组和Test2组的主机是否存活
ansible Test:!Test2 -m ping  # 在Test组但不在Test2组的主机
ansible Test:&Test2 -m ping  # 同时存在Test组和Test2组的主机
ansible Tes* -m ping  # 组名开头为Tes的主机

ansible all -m shell -a 'hostname && date'  # 通过shell模块在所有主机试行shell命令
ansible all -f 10 -m shell -a 'hostname && date;cat /etc/system-release'  # shell模块支持变量、管道、if判断等复杂命令

部分参数如果不指定,将采用ansible.cfg中的设置值,或者采用原始默认值。

Ansible ad-hoc常用命令

# ping        测试指定主机连接性
ansible ta -m ping
ansible -i /etc/ansible/hosts ta -m ping  #  指定inventory文件

# command     在指定主机上执行命令(默认模块),不支持变量、管道、重定向等shell特性
ansible ta -m command -a "chdir=/home/ ls ./"  # 在远程主机上切换到home目录执行ls命令 

# shell       在指定主机上执行命令或运行脚本,打开远程主机的shell进程的一个子shell运行命令,支持shell的变量、管道、重定向等特性
ansible ta -m shell -a 'hostname && date;cat /etc/system-release'  # 支持变量、管道、if判断等复杂命令
ansible ta -m shell -a "echo 'this is a test' > test.txt" -C  # 验证可能的错误,但不做任何改变
ansible ta -m shell -a 'echo "123456"|passwd --stdin root' -K  # 更改root密码

# script      调用本地脚本在远程主机执行,但只能执行脚本,不能调用其他指令,且不支持管道命令
ansible ta -m script -a "/home/vipxf/test.sh"
ansible ta -m script -a "removes=/home/vipxf/test.sh /home/vipxf/test2.sh" -o  # 如果远程主机上test.sh文件存在就执行本地脚本test2.sh,否则就不执行
ansible ta -m script -a "creates=/home/vipxf/test.sh /home/vipxf/test2.sh" -o  # 如果远程主机上test.sh文件存在就不执行本地脚本test2.sh,否则就执行

# raw         类似shell,支持管道命令,可用于没有python环境的远程主机
ansible ta -m raw -a "cd /home;pwd"

# stat        获取文件信息
ansible ta -m stat -a "path=/etc/ansible/hosts" 

# setup       系统信息,收集facts
ansible ta -m setup
ansible ta -m setup | grep "xxx"  # 获取主机所有facts然后结合grep命令过滤
ansible ta -m setup -a "filter=ansible_os_family"  # 通过filter参数来查看指定信息
ansible ta -m setup -a 'filter="*mem*"' --tree ./facts  # 通过filter参数查看指定信息并按主机名保存到facts目录

# copy        复制文件到远程主机的指定位置
ansible ta -m copy -a "src=/etc/hosts dest=~/test.hosts mode=664 owner=vipxf group=vipxf"  # 复制本地文件到远程主机并设置权限
ansible ta -m copy -a "content="this is a test" dest=~/test.hosts mode=664 owner=vipxf group=vipxf"  # 在远程主机创建指定内容文件并设置权限

# fetch       复制指定主机的文件到本地
ansible ta -m fetch -a "src=~/testfile.txt dest=~/"  # 将在指定目录下创建对应IP文件夹来存放文件,保留了原目录结构

# get_url     在远程主机下载网络文件,支持文件校验
ansible ta -m get_url -a "url=http://172.20.5.3/pub/soft/docker/docker-19.03.9.tgz dest=~/ mode=655 owner=vipxf"  # 下载文件到远程主机指定目录并设置权限

# file        设置文件属性
ansible ta -m file -a "path=~/testfile.txt mode=755 owner=vipxf group=vipxf"  # 更新文件属性
ansible ta -m file -a "path=~/testfile.txt state=touch mode=644"  # 创建文件
ansible ta -m file -a "path=~/testfile.txt state=absent"  # 删除文件
ansible ta -m file -a "path=~/testdir mode=755 state=directory"  # 创建目录

# cron        设置计划任务
ansible ta -m cron -a "minute=0 hour=22 job='/home/vipxf/testcron.sh' name='test cron'"  # 创建计划任务
ansible ta -m cron -a "name='test cron' state=absent"  # 删除计划任务

# group       管理用户组
ansible ta -b --become-user root --become-method su -m group -a "name=test system=yes" --ask-become-pass  # 创建用户组
ansible ta -b --become-user root --become-method su -m group -a "name=test state=absent" --ask-become-pass  # 删除用户组

# user        管理用户
ansible ta -b --become-user root --become-method su -m user -a "name=test system=yes group=test password=pw@123" -K  # 创建用户
ansible ta -b --become-user root --become-method su -m user -a "name=test state=absent force=yes" -K  # 删除用户

# service     管理服务
ansible ta -b --become-user root --become-method su -m service -a "name=sshd enabled=yes state=started" -K  # 启动httpd服务并且不设置开机启动
ansible ta -b --become-user root --become-method su -m service -a "name=sshd state=stopped" -K  # 停止httpd服务并且不设置开机启动

# yum         管理程序包
ansible ta -b --become-user root --become-method su -m yum -a "name=httpd state=present" -K  # 安装包,也可以将state设为installed
ansible ta -b --become-user root --become-method su -m yum -a "name=httpd state=latest disable_gpg_check=no" -K  # 关闭完整性校验,安装最新版包
ansible ta -b --become-user root --become-method su -m yum -a "name=httpd state=absent" -K  # 卸载包,也可以将state设为removed
ansible ta -b --become-user root --become-method su -m yum -a "name=nginx state=latest enablerepo=local" -K  # 启用本地yum源安装最新版软件包

# hostname    管理主机名称
ansible ta -b --become-user root --become-method su -m hostname -a "name=test" --ask-become-pass  # 更改远程主机名


全文跳转链接

Ansible系列全文地址https://www.cnblogs.com/anliven/p/16859401.html


posted @ 2022-11-04 22:19  Anliven  阅读(214)  评论(0编辑  收藏  举报