命令行
#只操作一台机器,IP后面有一个逗号,多个IP用逗号连接
ansible all -i 192.168.X.X, -m ping
#返回巨量的主机变量数据
ansible all -i 192.168.X.X, -m setup
#只获取主机的操作系统信息
ansible all -i 192.168.X.X, -m setup -a "filter=ansible_distribution*"
#只获取主机的网络信息
ansible all -i 192.168.X.X, -m setup -a "filter=ansible_*_ipv*"
#拷贝本机文件到远程客户端
ansible all -m copy -a 'src=/etc/passwd dest=/tmp/passwd'
#创建目录,如果testdir目录已经存在,则不进行任何操作
ansible all -m file -a 'path=/testdir/testdir state=directory'
#删除文件或目录
ansible all -m file -a 'path=/testdir/testdir state=absent'
#向文件追加一行内容,内容已存在就跳过
ansible all -m lineinfile -a 'dest=/tmp/123.txt line="test"'
#批量telnet测试
ansible all -m shell -a 'echo ""|telnet 192.168.100.1 8080'
#安装包,类似执行 yum install -y httpd
ansible all -m yum -a 'name=httpd state=present'
#debug模块,输出当前主机对应的变量信息
ansible all -m debug -a 'msg={{ hostvars[inventory_hostname] }}'
#支持shell特性,包括执行脚本、管道命令,script和shell模块的区别是script执行控制端的脚本,shell执行远程端的脚本
ansible all -m shell -a '/root/test.sh'
#支持shell特性,包括执行脚本、管道命令
ansible all -m shell -a 'cat /etc/passwd | grep root'
剧本
- 缩进规范:两个空格表示一个缩进 ,不平级标题之间开头相隔两个空格 注意: 缩进只能以空格表示 tab会报错
- 字典规范:冒号后面要有空格 ,例: shell: 命令信息 注意: 冒号结尾时不需要有空格 注释信息中冒号也不需要
- 列表规范:横线后面要有一个空格,例:
name:
- nfs
- rsync
- 脚本名用.yml当后缀
ansible-playbook 剧本路径 #执行剧本命令
ansible-playbook -C 剧本路径 #测试剧本命令
ansible-playbook --syntax-check 剧本路径 #检测剧本语法是否错误
- ansible-playbook 命令参数及含义
-i, --inventory-file: 指定 Ansible inventory 文件的路径,用于定义托管主机的详细信息。
-e, --extra-vars: 指定额外的变量,可以在 playbook 中使用。可以直接提供变量的键值对,也可以引用外部的变量文件。
-k, --ask-pass: 提示输入 SSH 密码以连接到托管主机。
-K, --ask-become-pass: 提示输入特权(sudo)密码。
-t, --tags: 选择性地运行具有指定标签的任务。只有带有匹配标签的任务会被执行。
-C, --check: 以检查模式运行 playbook,不进行实际更改。用于验证 playbook 的影响。
-v, --verbose: 增加详细输出。可以多次使用以增加详细级别(例如 -vv 或 -vvv)。
-l, --limit: 限制 playbook 只在指定的主机或组上运行。
-f, --forks: 指定并发执行的最大主机数量。
--syntax-check: 检查 playbook 的语法错误。
--list-hosts: 列出将在 playbook 中执行任务的主机。
# 例如:
# ansible-playbook -i "/etc/ansible/hosts" -t create_kctl_cfg -e "@clusters/config.yml" playbook.yml
# 其中 @符号表示用于引用外部变量文件
剧本中设置变量
- 方法一: 在剧本中设置变量
- hosts: 172.16.1.41
vars: #设置变量命令
- Abc: 123 #设置的变量
tasks:
- name: 复制本地文件到目标主机路径。引用变量,花括号两边都有空格分隔
copy: src=/path/{{ Abc }} dest=/destination/path
- 方法二: 在命令中参数用-e 设置临时变量
ansible-playbook -e Abc=123 xxx剧本
- 方法三: 在主机清单中设置
# 单个主机设置变量
172.16.1.31 Abc=123
# 多个主机设置变量
[backup]
172.16.1.41
172.16.1.31
[backup:vars]
Abc=123
用法
# shell模块执行命令
- hosts: all
tasks:
- name: 执行多个命令
shell:
cmd: |
cat /etc/passwd
systemctl status sshd
kubectl get pod
#-----------------------------------------
# DEBUG调试输出变量
- hosts: all
tasks:
- name: 注册变量
shell: hostname
register: result
ignore_errors: yes
- name: 输出变量值
debug: msg="{{ result.stdout }}"
when: result is success
#-----------------------------------------
# gather_facts: true 在执行剧本之前收集目标主机的信息
- hosts: all
gather_facts: true
tasks:
- name: 显示主机名
debug: msg="{{ ansible_hostname }}"
#-----------------------------------------
# 文件追加多行,如已存在相同的行则跳过
- hosts:
- all
tasks:
- name: test
lineinfile:
path: /etc/security/limits.conf
create: yes
line: "{{ item }}"
with_items:
- "* soft nofile 65535"
- "* hard nofile 65535"
- "* soft nproc 65535"
- "* soft nproc 65535"
#-----------------------------------------
# when语句
- hosts:
- all
tasks:
- name: "shutdown Debian flavored systems"
command: /sbin/shutdown -t now
when: ansible_os_family == "Debian"
