快速上手 Ansible

梦里梦外; 2021-10-01 09:22 518阅读 0赞

Ansible 系列:

  • (一):快速上手 Ansible
  • (二):Ansible 命令
  • (三):Ansible 主机清单配置文件
  • (四):Ansible Playbook 剧本语法

快速上手 Ansible

Ansible 是 Paramiko 开发的一种自动化运维工具,基于模块化工作,集合了众多运维工具的优点,实现了批量系统配置,批量程序部署、批量运行命令等功能。

Ansible 它本身没有批量部署的能力,真正执行这些操作的是 Ansible 的模块,它只是提供了一种框架。直到目前为止,Ansible 已有 800 多个模块可以使用。

Ansible 的另一个优势在于,它不需要在远程主机上安装任何东西,因为它是基于 SSH 来和远程主机进行通信的。

安装 Ansible

在 Ansible 里,有两种角色 Control Machine 与 Managed Node,它们通过 SSH 和 Python 进行沟通:

  • Control Machine(主控端):操作 Ansible 的机器,用于操纵 Managed Node
  • Managed Node(被控端):被 Ansible 操纵的机器

在一般情况下,我们只需在 Control Machine 里安装 Ansible 即可,因为 Linux 和 macOS 系统早已预载了 Python 2.5 以上的版本,且支持 SSH 连接。

而使用 Ansible 来管理 Window 的话,则需要较多的设置(此处不介绍,可自寻谷歌/百度)。

macOS 安装 Ansible

  1. # 请先安装 homebrew,已安装者请略过
  2. /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3. # 安装 Ansible
  4. brew install ansible

Linux 安装 Ansible

CentOS(Yum)

  1. # 新增 epel-release 第三方套件来源。
  2. sudo yum install -y epel-release
  3. # 安装 Ansible
  4. sudo yum install -y ansible

Ubuntu(Apt)

  1. # 安装 add-apt-repository 必要套件
  2. sudo apt-get install -y python-software-properties software-properties-common
  3. # 使用 Ansible 官方的 PPA 套件来源
  4. sudo add-apt-repository -y ppa:ansible/ansible; sudo apt-get update
  5. # 安装 Ansible
  6. sudo apt-get install -y ansible

使用 Pip 安装 Ansible

  1. # 1、首先安装 pip
  2. # Debian, Ubuntu
  3. $ sudo apt-get install -y python-pip
  4. # CentOS
  5. $ sudo yum install -y python-pip
  6. # macOS
  7. $ sudo easy_install pip
  8. # 2、升级 pip
  9. sudo pip install -U pip
  10. # 3、安装 Ansible
  11. sudo pip install ansible

Ansible 文件

在安装 Ansible 之后,你可以访问以下 Ansible 文件:

  • /usr/bin/ansible :Ansible 命令行工具
  • /usr/bin/ansible-doc :Ansible 帮助文档工具
  • /usr/bin/ansible-playbook :Ansible 剧本执行工具
  • /etc/ansible/ansible.cfg :主配置文件
  • /etc/ansible/hosts :管理的主机清单
  • /etc/ansible/roles :角色存放处

Ansible 操作之 Ad-Hoc Command 和 Playbook

Ad-Hoc Commands

第一种方式是通过向 Ansible 发送 Ad-Hoc Commands(指令)来操作 Managed Node。

以常见的 pingecho 操作为例:

  • ping

    1. ansible all -m ping
    2. server1 | SUCCESS => {
    3. "changed": false,
    4. "ping": "pong"
    5. }
  • echo

    1. ansible all -m command -a "echo Hello World"
    2. server1 | SUCCESS | rc=0 >>
    3. Hello World

Playbook

另外一种方式即通过 Playbook (剧本)让各个 Managed Node 进行指定的动作(Plays)和任务(Tasks),你可以理解为 Shell Script。

Playbook 支持两种写法 :

  • YAML:简单易读
  • Jinja2:模板化文件,支持变量、条件、循环语法

在一份 Playbook 中,可以有多个 Play、Task 与 Module:

  • Play:目的
  • Task:要执行的 Play 这个目的所需做的步骤
  • Module:Ansible 所提供的模块来执行各种操作

下面是一个 Hello World 的 Playbook 剧本,剧本后缀名应为 .yml:

  1. - name: say 'hello world'
  2. hosts: all
  3. tasks:
  4. - name: echo 'hello world'
  5. command: echo 'hello world'
  6. register: result
  7. - name: print stdout
  8. debug:
  9. msg: ""

执行剧本

  1. ansible-playbook hello_world.yml

查看 Ansible 的 Modules

模块是 Ansible 的核心,也是操作真正的执行者,只要掌握了如何使用模块就可以快速上手 Ansible,其余都只是延伸使用罢了。

例如我们经常使用的 Command Modules 模块,你可以进入 Ansible 的 Module 帮助文档中找到它的使用文档。

9434708-a19ee56b81ae5e61

automate_with_ansible_basic-20.jpg

文档中 Options 选项表会列出模块参数,参数的预设值等信息。

9434708-3ac04faf2817c4d5

automate_with_ansible_basic-22.jpg

Setup 模块

在使用 Playbook 时,Ansible 会自动执行 Setup Modules 以收集各个 Managed Node 的 facts(系统信息),如 IP、作业系统、CPU 信息等。

我们也可以通过 Ad-Hoc Commands 指令模式使用 setup,例如:

  1. ansible all -m setup | less
  2. --- 结果如下
  3. server1 | SUCCESS => {
  4. "ansible_facts": {
  5. "ansible_all_ipv4_addresses": [
  6. "172.19.0.2"
  7. ],
  8. "ansible_all_ipv6_addresses": [
  9. "fe80::42:acff:fe13:2"
  10. ],
  11. "ansible_architecture": "x86_64",
  12. "ansible_bios_date": "03/14/2014",
  13. :

通过 filter 参数还可以过滤结果

  1. ansible all -m setup -a "filter=ansible_distribution*"
  2. --- 结果如下
  3. server1 | SUCCESS => {
  4. "ansible_facts": {
  5. "ansible_distribution": "Ubuntu",
  6. "ansible_distribution_major_version": "14",
  7. "ansible_distribution_release": "trusty",
  8. "ansible_distribution_version": "14.04"
  9. },
  10. "changed": false
  11. }

通常在 Playbook 中我们会将主机信息结合条件判断 when 使用,例如下面针对 Debian, Ubuntu, CentOS 安装 Vim 的 playbook:

  1. - name: Setup the vim
  2. hosts: all
  3. become: true
  4. tasks:
  5. # Debian, Ubuntu.
  6. - name: install apt packages
  7. apt: name=vim state=present
  8. when: ansible_pkg_mgr == "apt"
  9. # CentOS.
  10. - name: install yum packages
  11. yum: name=vim-minimal state=present
  12. when: ansible_pkg_mgr == "yum"

发表评论

表情:
评论列表 (有 0 条评论,518人围观)

还没有评论,来说两句吧...

相关阅读

    相关 快速上手Navicat~

    > 众所周知, Navicat是一款轻量级的用于MySQL连接和管理的工具,非常好用,使用起来方便快捷,简洁。下面我会简单的讲一下其安装以及使用的方法。并且会附带相关的永久安装

    相关 快速上手Navicat~

    > 众所周知, Navicat是一款轻量级的用于MySQL连接和管理的工具,非常好用,使用起来方便快捷,简洁。下面我会简单的讲一下其安装以及使用的方法。并且会附带相关的永久安装