ansible总结

安装目录

ansible工作原理图

####ansible重要组成部分

  • ANSIBLE PLAYBOOKS : 任 务 剧 本 ( 任 务 集 ) , 编 排 定 义Ansible 任 务 集 的 配 置 文 件 , 由 Ansible 顺 序 依 次 执 行 , 通 常 是JSON 格 式 的 YML 文 件
  • INVENTORY : Ansible 管 理 主 机 的 清 单 ;
  • MODULES : Ansible 执 行 命 令 的 功 能 模 块 , 多 数 为 内 置 的 核心 模 块 , 也 可 自 定 义 ;
  • PLUGINS : 模 块 功 能 的 补 充 , 如 连 接 类 型 插 件 、 循 环 插 件 、变 量 插 件 、 过 滤 插 件 等 , 该 功 能 不 常 用 。
  • API : 供 第 三 方 程 序 调 用 的 应 用 程 序 编 程 接 口 ;
  • ANSIBLE : 该 部 分 图 中 表 示 的 不 明 显 , 组 合 INVENTORY 、API 、 MODULES 、 PLUGINS 的 绿 框 大

Ansible 组 件 调 用 关

ansible配置文件ansible.cfg常用配置项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
1)inventory
该参数表示资源清单inventory文件的位置,资源清单就是一些Ansible需要连接管理的主机列表
inventory = /root/ansible/hosts

2)library
Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块,这个library参数就是指向存放Ansible模块的目录
library = /usr/share/ansible

3)forks
设置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理。具体需要设置多少个,可以根据控制主机的性能和被管理节点的数量来确定。
forks = 5

4)sudo_user
这是设置默认执行命令的用户,也可以在playbook中重新设置这个参数
sudo_user = root
//注意:新版本已经作了修改,如ansible2.4.1下已经为:
default_sudo_user = root

5)remote_port
这是指定连接被关节点的管理端口,默认是22,除非设置了特殊的SSH端口,不然这个参数一般是不需要修改的
remote_port = 22

6)host_key_checking
这是设置是否检查SSH主机的密钥。可以设置为True或False
host_key_checking = False

7)timeout
这是设置SSH连接的超时间隔,单位是秒。
timeout = 20

8)log_path
Ansible系统默认是不记录日志的,如果想把Ansible系统的输出记录到人i治稳健中,需要设置log_path来指定一个存储Ansible日志的文件
log_path = /var/log/ansible.log

另外需要注意,执行Ansible的用户需要有写入日志的权限,模块将会调用被管节点的syslog来记录,口令是不会出现的日志中的

9)private_key_file

在使用ssh公钥私钥登录系统时候,使用的密钥路径。

private_key_file=/path/to/file.pem

更多参考官方文档

ad-hoc模式使用参数介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-v, --verbose:输出更详细的执行过程信息,-vvv可得到所有执行过程信息。
-i PATH, --inventory=PATH:指定inventory信息,默认/etc/ansible/hosts。
-f NUM, --forks=NUM:并发线程数,默认5个线程。
--private-key=PRIVATE_KEY_FILE:指定密钥文件。
-m NAME, --module-name=NAME:指定执行使用的模块。
-M DIRECTORY, --module-path=DIRECTORY:指定模块存放路径,默认/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认路径。
-a 'ARGUMENTS', --args='ARGUMENTS':模块参数。-k, --ask-pass SSH:认证密码。
-K, --ask-sudo-pass sudo:用户的密码(—sudo时使用)。
-o, --one-line:标准输出至一行。-s, --sudo:相当于Linux系统下的sudo命令。
-t DIRECTORY, --tree=DIRECTORY:输出信息至DIRECTORY目录下,结果文件以远程主机名命名。
-T SECONDS, --timeout=SECONDS:指定连接远程主机的最大超时,单位是:秒。
-B NUM, --background=NUM:后台执行命令,超NUM秒后kill正在执行的任务。
-P NUM, --poll=NUM:定期返回后台任务进度。
-u USERNAME, --user=USERNAME:指定远程主机以USERNAME运行命令。
-U SUDO_USERNAME, --sudo-user=SUDO_USERNAM:E使用sudo,相当于Linux下的sudo命令。
-c CONNECTION, --connection=CONNECTION:指定连接方式,可用选项paramiko (SSH), ssh, local。
Local方式常用于crontab 和 kickstarts。-l SUBSET, --limit=SUBSET:指定运行主机。
-l ~REGEX, --limit=~REGEX:指定运行主机(正则)。
--list-hosts:列出符合条件的主机列表,不执行任何其他命令

ad-hoc模块常用模块

modules1

modules1

ansible-doc -l #全部可用模块

  • 具体用法

    ansible-doc models #模块使用文档

ansible中普通用户执行sudo

  • 示 例// 以 mantou 用 户 执 行 ping 存 活 检 测

    1
    ansible all -m ping -u mantou
  • 以 mantou sudo 至 root 执 行 ping 存 活 检 测

    1
    ansible all -m ping -u mantou --sudo

    以 mantou sudo 至 batman 用 户 执 行 ping 存 活 检 测ansible all -m ping -u mantou –sudo –sudo-user

batman但 在 新 版 本 中 Ansible sudo 命 令 废 弃 改 –become 或 -b ,如 上 命 令 需 改 为 如 下 :

  • 以 mantou sudo 至 root 执 行 ping 存 活 检 测

    1
    ansible all -m ping -u mantou -b
  • 以 mantou sudo 至 netash用 户 执 行 ping 存 活 检 测

  • 1
    ansible all -m ping -u mantou -b --become-user netash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-u REMOTE_USER, --user=REMOTE_USER 
# ssh 连接的用户名
-k, --ask-pass #ssh登录认证密码
-s, --sudo #sudo 到root用户,相当于Linux系统下的sudo命令
-U SUDO_USER, --sudo-user=SUDO_USER #sudo 到对应的用户
-K, --ask-sudo-pass #用户的密码(—sudo时使用)
-T TIMEOUT, --timeout=TIMEOUT # ssh 连接超时,默认 10 秒
-C, --check # 指定该参数后,执行 playbook 文件不会真正去执行,而是模拟执行一遍,然后输出本次执行会对远程主机造成的修改
-e EXTRA_VARS, --extra-vars=EXTRA_VARS # 设置额外的变量如:key=value 形式 或者 YAML or JSON,以空格分隔变量,或用多个-e
-f FORKS, --forks=FORKS # 进程并发处理,默认 5
-i INVENTORY, --inventory-file=INVENTORY
# 指定 hosts 文件路径,默认 default=/etc/ansible/hosts
-l SUBSET, --limit=SUBSET
# 指定一个 pattern,对- hosts:匹配到的主机再过滤一次
--list-hosts
# 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook
--list-tasks
# 列出该 playbook 中会被执行的 task
--private-key=PRIVATE_KEY_FILE
# 私钥路径 --step # 同一时间只执行一个 task,每个 task 执行前都会提示确认一遍 --syntax-check # 只检测 playbook 文件语法是否有问题,不会执行该 playbook
-t TAGS, --tags=TAGS
#当 play 和 task 的 tag 为该参数指定的值时才执行,多个 tag 以逗号分隔
--skip-tags=SKIP_TAGS
# 当 play 和 task 的 tag 不匹配该参数指定的值时,才执行
-v, --verbose
#输出更详细的执行过程信息,-vvv可得到所有执行过程信息。
ansible playbook
1
2
3
4
5
6
7
8
---
- hosts: 192.168.10.10
remote_user: root
vars:
touch_file: test.file
tasks:
- name: touch file
shell: "touch /tmp/{{ touch_file }}"
1
2
3
4
5
6
vintour

web:vars

touch_file=je

1
2
3
4
5
6
7
8
9
10
11
12
13
---
- hosts: 192.168.10.10
remote_user: root
#vars:
#touch_file: test.file
tasks:
- name: get date
command: date
register: date_output
- name: touch file
shell: "touch /tmp/datefile"
- name: echo date_ouput
shell: "echo {{ date_output }} >> /tmp/datefile "
1
2
3
4
5
6
7
- hosts : 192.168.10.10,192.168.10.12
remote_user : root
tasks :
- name : "touch flag file"
command : "touch /tmp/this_is_{{ansible_distribution}}_system"
when: (ansible_distribution == "CentOS" )
~

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!