介绍
Ansible是一种开源的自动化运维工具,可以实现配置管理、应用部署、任务执行等操作,通过SSH协议进行通信,无需在远程主机上安装客户端,具有简单易用、扩展性强、可靠稳定等特点。
pip install ansible
Inventory
Inventory是一个用于描述被管理节点的列表文件。它定义了Ansible任务将要在哪些主机上执行。清单可以包含IP地址、主机名、组名等信息,以及变量和组相关的配置。
清单文件通常采用INI格式或YAML格式编写,其中每个主机都有对应的主机名或IP地址,并且可以根据需求进行分组。通过在清单中定义主机组,可以更方便地对不同组的主机进行管理和操作。
除了静态清单外,Ansible还支持动态清单,这意味着清单可以从外部数据源(如云平台、自定义脚本、数据库等)动态生成。这样可以实现按需扩展或动态调整被管理节点,提高了灵活性和可扩展性。
使用清单,您可以轻松地指定要在哪些主机上执行特定的Ansible任务或剧本,使得管理和组织被管理节点变得简单而高效。
[self]
127.0.0.1 var1=value1
[all:vars]
all_var=all
Ad-HOC
Ansible的Ad-Hoc命令是一种快速、临时性的方式来执行单个任务或命令,而无需编写和执行完整的Playbook。通过Ad-Hoc命令,可以直接在终端上与远程主机进行交互和操作。
ansible [pattern] -m [module] -a "[module options]"
常用参数
位置参数:
pattern 匹配主机模式
选项:
--list-hosts 输出匹配的主机列表,不执行其他任何操作
--playbook-dir BASEDIR
由于此工具不使用playbooks,请将其用作替代playbook目录。这设置了许多功能的相对路径,包括roles/ group_vars/等。
--task-timeout TASK_TIMEOUT
设置任务的超时限制(以秒为单位),必须是正整数。
-B SECONDS, --background SECONDS
异步运行,在X秒后失败(默认=N/A)
-M MODULE_PATH, --module-path MODULE_PATH
在模块库之前添加以冒号分隔的路径(默认={{ ANSIBLE_HOME ~ "/plugins/modules:/usr/share/ansible/plugins/modules" }})
-P POLL_INTERVAL, --poll POLL_INTERVAL
如果使用-B,设置轮询间隔(默认=15)
-a MODULE_ARGS, --args MODULE_ARGS
使用空格分隔的k=v格式指定操作的选项:-a 'opt1=val1 opt2=val2' 或使用JSON字符串:-a '{"opt1": "val1", "opt2": "val2"}'
-e EXTRA_VARS, --extra-vars EXTRA_VARS
设置额外的变量,格式为key=value或YAML/JSON,如果是文件名,请在前面加上@
-f FORKS, --forks FORKS
指定要使用的并行进程数(默认=5)
-h, --help 显示此帮助消息并退出
-i INVENTORY, --inventory INVENTORY, --inventory-file INVENTORY
指定清单主机路径或逗号分隔的主机列表。--inventory-file已废弃
-l SUBSET, --limit SUBSET
进一步限制所选主机到附加的模式
-m MODULE_NAME, --module-name MODULE_NAME
要执行的操作的名称(默认=command)
-o, --one-line 精简输出
-v, --verbose 导致Ansible打印更多的调试消息。添加多个-v将增加详细程度,内置插件当前可评估至-vvvvvv。开始时一个合理的级别是-vvv,连接调试可能需要-vvvv。
特权升级选项:
--become-method BECOME_METHOD
要使用的特权升级方法(默认=sudo),使用ansible-doc -t become -l列出有效选项。
--become-user BECOME_USER
以此用户身份运行操作(默认=root)
-b, --become 使用特权升级运行操作(不会提示密码)
连接选项:
--private-key PRIVATE_KEY_FILE, --key-file PRIVATE_KEY_FILE
使用此文件进行连接身份验证
--scp-extra-args SCP_EXTRA_ARGS
指定传递给scp的额外参数(例如-l)
--sftp-extra-args SFTP_EXTRA_ARGS
指定传递给sftp的额外参数(例如-f、-l)
--ssh-common-args SSH_COMMON_ARGS
指定传递给sftp/scp/ssh的常见参数(例如ProxyCommand)
--ssh-extra-args SSH_EXTRA_ARGS
指定传递给ssh的额外参数(例如-R)
-T TIMEOUT, --timeout TIMEOUT
覆盖连接超时时间(以秒为单位)(默认=10)
-c CONNECTION, --connection CONNECTION
要使用的连接类型(默认=smart)
-u REMOTE_USER, --user REMOTE_USER
以此用户身份连接(默认=None)
Playbook
Ansible的Playbook是一种用于定义、配置和部署多个任务的文件。它是一种结构化的、可扩展的自动化工具,可以实现复杂的运维流程和长期管理。
Playbook使用YAML格式编写,由一个或多个任务(tasks)组成。每个任务都定义了要在目标主机上执行的具体操作,如执行命令、复制文件、安装软件包等。任务可以根据需要指定不同的模块、参数和条件。
ansible-playbook playbook [playbook ...]
以下是一个简单的Playbook示例:
- name: Install and start Nginx
hosts: web_servers
become: true
tasks:
- name: Install Nginx package
apt:
name: nginx
state: present
- name: Copy Nginx configuration file
copy:
src: /path/to/nginx.conf
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
- name: Start Nginx service
service:
name: nginx
state: started
这个Playbook中,name
字段是Playbook的名称,hosts
字段指定了目标主机或主机组,become: true
表示以特权用户身份运行任务。
通过执行ansible-playbook
命令,可以使用Playbook来自动化执行任务和操作。例如,可以使用以下命令运行上述示例Playbook:
ansible-playbook -i inventory.ini playbook.yml
常用参数
位置参数:
playbook Playbook文件名
选项:
--flush-cache 清除清单中每个主机的事实缓存
--force-handlers 即使任务失败也运行handlers
--list-hosts 输出匹配的主机列表,不执行其他任何操作
--list-tags 列出所有可用的标签
--list-tasks 列出将要执行的所有任务
--skip-tags SKIP_TAGS
只运行标签与这些值不匹配的plays和tasks
--start-at-task START_AT_TASK
从与此名称匹配的任务开始运行playbook
--step 逐步确认每个任务是否运行
--syntax-check 对playbook执行语法检查,但不执行它
-M MODULE_PATH, --module-path MODULE_PATH
在模块库之前添加以冒号分隔的路径(默认值为{{ ANSIBLE_HOME ~ "/plugins/modules:/usr/share/ansible/plugins/modules" })
-e EXTRA_VARS, --extra-vars EXTRA_VARS
设置附加的变量,格式为key=value或YAML/JSON,如果是文件名则在前面加上@
-f FORKS, --forks FORKS
指定要使用的并行进程数(默认值为5)
-h, --help 显示此帮助消息并退出
-i INVENTORY, --inventory INVENTORY, --inventory-file INVENTORY
指定清单主机路径或逗号分隔的主机列表。--inventory-file已弃用
-k, --ask-pass 提示输入连接密码
-l SUBSET, --limit SUBSET
进一步将选定的主机限制为附加的模式
-t TAGS, --tags TAGS 只运行带有这些标签的plays和tasks
-v, --verbose 导致Ansible打印更多的调试信息。多次添加-v会增加详细程度,内置插件目前支持最多-vvvvvv。开始时一个合理的级别是-vvv,连接调试可能需要-vvvv。
连接选项:
--private-key PRIVATE_KEY_FILE, --key-file PRIVATE_KEY_FILE
使用此文件进行连接身份验证
--scp-extra-args SCP_EXTRA_ARGS
指定传递给scp的额外参数(例如-l)
--sftp-extra-args SFTP_EXTRA_ARGS
指定传递给sftp的额外参数(例如-f,-l)
--ssh-common-args SSH_COMMON_ARGS
指定传递给sftp/scp/ssh的常见参数(例如ProxyCommand)
--ssh-extra-args SSH_EXTRA_ARGS
指定传递给ssh的额外参数(例如-R)
-T TIMEOUT, --timeout TIMEOUT
覆盖连接超时时间(以秒为单位)(默认值为10)
-c CONNECTION, --connection CONNECTION
使用的连接类型(默认为smart)
-u REMOTE_USER, --user REMOTE_USER
以此用户身份连接(默认为None)
特权升级选项:
--become-method BECOME_METHOD
使用的特权升级方法(默认为sudo),使用`ansible-doc -t become -l`列出有效选择。
--become-user BECOME_USER
以此用户身份运行操作(默认为root)
-b, --become 以特权身份运行操作(不会提示输入密码)