选择下边其中一种方法即可
# 添加EPEL源:
yum -y install epel-release
# 安装
yum install ansible -y
pip3 install ansible==6.3.0 -i https://mirrors.aliyun.com/pypi/simple
# 添加软链
ln -s /usr/local/python39/bin/ansible /usr/bin/ansible
配置文件:/etc/ansible/hosts
192.168.18.1
aa.test.com
# 1、分组配置。方括号[]中是组名,用于对系统进行分类,便于对不同系统进行个别的管理.
[webservers]
# 2、指定链接端口
one.test.com:2222
two.test.com:2222
three.test.com ansible_ssh_port=2222 ansible_ssh_user=manager
[dbservers]
db[01:10].test.com
[mqservers]
mq-[a:f].test.com
配置参数说明
ansible_ssh_host
将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_port
ssh端口号.如果不是默认的端口号,通过此变量设置.
ansible_ssh_user
默认的 ssh 用户名
ansible_ssh_pass
ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
ansible_sudo_pass
sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)
ansible_sudo_exe (new in version 1.8)
sudo 命令路径(适用于1.8及以上版本)
ansible_connection
与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.
ansible_ssh_private_key_file
ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
ansible_shell_type
目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.
ansible_python_interpreter
目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 \*BSD, 或者 /usr/bin/python
不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).
与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....
可以通过修改 Ansible 配置文件中的设置来自定义 Ansible安装的行为。
ansible的配置文件名为ansible.cfg,默认会在四个地方(根据高/低优先级排序——从1到4):
1.环境变量设置:EXPORT ANSIBLE_CONFIG。
2.前工作目录/ansible.cfg。
3.用户目录:~/.ansible.cfg。
4.默认配置文件/etc/ansible/ansible.cfg,如果上边都不存在,则使用该文件。
基本操作配置
指令 | 描述 |
---|---|
inventory | 指定清单文件的路径 |
remote_user | 要在受管主机上登录的用户名。如果未指定则使用当前用户名 |
ask_pass | 是否提示输入SSH密码。 |
become | 连接后是否自动在受管主机上切换用户(通常切换为root)这也可以通过play来指定。 |
become_method | 如何切换用户(通常为sudo,这也是默认设置,但可选择su) |
become_user | 要在受管主机上切换到的用户(通常是root,这也是默认值) |
become_ask_pass | 是否需要为become_method提示输入密码。默认为false。 |
简单的任务,使用ad-hoc命令可以方便的解决问题。playbook适合批量执行脚本,
YAML的格式如下:
1.文件的第一行应该以“---”(三个连字符)开始,表明YAML文件的开始。
2.在同一行中,#之后的内容表示注释。
3.YAML中的列表元素以“-”开头并且跟着一个空格。后面为元素内容。
4.同一个列表之中的元素应该保持相同的缩进,否则会被当做错误处理。
5.play中hosts、variables、roles、tasks等对象的表示方法都是以键值中间以“:”分隔表示,并且“:”之后要加一个空格。
执行方式:ansible-playbook playbook.yml [options]
[options]可用参数
# ssh 连接的用户名
-u REMOTE_USER, --user=REMOTE_USER
# ssh登录认证密码
-k, --ask-pass
# sudo 到root用户,相当于Linux系统下的sudo命令
-s, --sudo
# sudo 到对应的用户
-U SUDO_USER, --sudo-user=SUDO_USER
# 用户的密码(—sudo时使用)
-K, --ask-sudo-pass
# ssh 连接超时,默认 10 秒
-T TIMEOUT, --timeout=TIMEOUT
# 指定该参数后,执行 playbook 文件不会真正去执行,而是模拟执行一遍,然后输出本次执行会对远程主机造成的修改
-C, --check
# 设置额外的变量如:key=value 形式 或者 YAML or JSON,以空格分隔变量,或用多个-e
-e EXTRA_VARS, --extra-vars=EXTRA_VARS
# 进程并发处理,默认 5
-f FORKS, --forks=FORKS
# 指定 hosts 文件路径,默认 default=/etc/ansible/hosts
-i INVENTORY, --inventory-file=INVENTORY
# 指定一个 pattern,对- hosts:匹配到的主机再过滤一次
-l SUBSET, --limit=SUBSET
# 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook
--list-hosts
# 列出该 playbook 中会被执行的 task
--list-tasks
# 私钥路径
--private-key=PRIVATE_KEY_FILE
#同一时间只执行一个 task,每个 task 执行前都会提示确认一遍
--step
# 只检测 playbook 文件语法是否有问题,不会执行该 playbook
--syntax-check
# 当 play 和 task 的 tag 为该参数指定的值时才执行,多个 tag 以逗号分隔
-t TAGS, --tags=TAGS
# 当 play 和 task 的 tag 不匹配该参数指定的值时,才执行
--skip-tags=SKIP_TAGS
# 输出更详细的执行过程信息,-vvv可得到所有执行过程信息。
-v, --verbose
支持的变量
备注:
hosts:在ansible 章节介绍的 /etc/ansible/hosts 里面定义主机名
remote_user: 登陆的用户
vars: 配置变量
tasks: 需要执行命令
set_fact: 定义变量并赋值
debug: 打印需要内容
tasks的具体格式:
tasks:
- name: TASK_NAME
module: arguments
notify: HANDLER_NAME
handlers:
- name: HANDLER_NAME
module: arguments
playbook安装nginx例子:nginx.yml
# nginx.yml文本内容
---
- hosts: web
remote_user: root
tasks:
- name: install nginx
yum: name=nginx state=present
- name: copy nginx.conf
copy: src=/data/nginx.conf dest=/etc/nginx/nginx.conf backup=yes
notify: reload
tags: reloadnginx #打标签
- name: start nginx service #服务启动模块
service: name=nginx state=started
tags: startnginx #打标签
handlers:
- name: reload
service: name=nginx state=restarted
运行
ansible-playbook nginx.yml