ansible使用教程

文章目录

    • 1、安装ansible
      • 1.1、yum安装
      • 1.2、pip安装
    • 2、hosts配置文件
    • 3、ansible.cfg配置
    • 4、Playbooks配置

1、安装ansible

选择下边其中一种方法即可

1.1、yum安装

# 添加EPEL源:
yum -y install epel-release
# 安装
yum install ansible -y

1.2、pip安装

pip3 install ansible==6.3.0 -i https://mirrors.aliyun.com/pypi/simple
# 添加软链
ln -s /usr/local/python39/bin/ansible /usr/bin/ansible

2、hosts配置文件

配置文件:/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 的路径....

3、ansible.cfg配置

可以通过修改 Ansible 配置文件中的设置来自定义 Ansible安装的行为。
ansible的配置文件名为ansible.cfg,默认会在四个地方(根据高/低优先级排序——从1到4):

1.环境变量设置:EXPORT ANSIBLE_CONFIG。
2.前工作目录/ansible.cfg。
3.用户目录:~/.ansible.cfg。
4.默认配置文件/etc/ansible/ansible.cfg,如果上边都不存在,则使用该文件。

基本操作配置

  • [default] 部分设置Ansible操作的默认值
  • [privilege_escalation] 配置Ansible如何在受管主机上执行特权升级
指令 描述
inventory 指定清单文件的路径
remote_user 要在受管主机上登录的用户名。如果未指定则使用当前用户名
ask_pass 是否提示输入SSH密码。
become 连接后是否自动在受管主机上切换用户(通常切换为root)这也可以通过play来指定。
become_method 如何切换用户(通常为sudo,这也是默认设置,但可选择su)
become_user 要在受管主机上切换到的用户(通常是root,这也是默认值)
become_ask_pass 是否需要为become_method提示输入密码。默认为false。

4、Playbooks配置

简单的任务,使用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

你可能感兴趣的:(持续交付,ansible)