41学习自动化运维工具 Ansible 的基本用法,包括剧本编写、任务执行

Ansible是一种自动化运维工具,可以通过SSH和基于Python的模块来管理多台服务器。在这里,我们将介绍Ansible的基本用法,包括如何编写剧本和执行任务。

41学习自动化运维工具 Ansible 的基本用法,包括剧本编写、任务执行_第1张图片

安装Ansible

在开始使用Ansible之前,您需要安装Ansible。您可以通过以下命令在Linux上安装Ansible:

 
  

sqlCopy code

sudo apt-get update sudo apt-get install ansible

如果您的系统不是Linux,则可以使用以下命令安装Ansible:

 
  

Copy code

pip install ansible

编写Ansible剧本

Ansible使用一种称为YAML(Yet Another Markup Language)的语言来编写剧本。剧本是Ansible中的基本单元,它由一系列任务组成。每个任务执行特定的操作,例如安装软件包、创建用户等。

以下是一个简单的Ansible剧本示例,它使用apt模块在远程服务器上安装Nginx:

---
- name: Install Nginx
  hosts: webserver
  become: true

  tasks:
    - name: Update apt cache
      apt:
        update_cache: yes

    - name: Install Nginx
      apt:
        name: nginx
        state: present

剧本由以下几个部分组成:

  • name: 剧本名称,用于标识剧本
  • hosts: 剧本要执行的目标主机
  • become: 指定要使用sudo或root用户运行任务
  • tasks: 剧本包含的任务列表

在此示例中,我们指定要在名为webserver的主机上安装Nginx。第一个任务使用apt模块更新apt缓存,第二个任务使用apt模块安装Nginx。

执行Ansible任务

要执行Ansible剧本,请使用以下命令:

41学习自动化运维工具 Ansible 的基本用法,包括剧本编写、任务执行_第2张图片

Copy code

ansible-playbook myplaybook.yml

其中,myplaybook.yml是您要执行的剧本名称。

您还可以使用以下命令在远程主机上执行单个任务:

 
  

bashCopy code

ansible webserver -m command -a "uptime"

其中,webserver是目标主机的名称,-m指定要使用的模块,-a指定要执行的命令

Ansible模块

Ansible的任务是通过模块来实现的。模块是一段可重用的代码,可以完成特定的任务,例如安装软件包、创建用户、启动服务等。Ansible提供了丰富的模块库,您可以从中选择适合您需求的模块。

以下是一些常用的Ansible模块:

  • file:用于管理文件和目录
  • apt:用于在Debian和Ubuntu系统上管理软件包
  • yum:用于在CentOS和Red Hat系统上管理软件包
  • service:用于管理系统服务
  • user:用于管理系统用户

每个模块都有一组参数,您可以使用这些参数来自定义模块的行为。例如,在前面的示例中,我们使用apt模块的name和state参数来安装Nginx。

Ansible任务

任务是用于执行操作的基本单元。任务可以调用模块以完成特定的操作。以下是一个简单的任务示例,它使用file模块创建一个目录:

- name: Create directory
  file:
    path: /var/www
    state: directory
    mode: '0755'

这个任务使用file模块创建一个名为/var/www的目录。它指定目录的路径、状态和权限模式。

执行Ansible任务

要执行Ansible任务,请使用以下命令:

ansible target_host -m module -a "arguments"

Ansible 提供了许多内置模块,这些模块可以完成各种任务,如管理包、配置文件、用户和组等。这些模块可以通过 Ansible 控制节点调用。在这里,我们介绍一些常用的模块。

4.1. 文件管理模块

Ansible 提供了多个文件管理模块,如下:

  • copy 模块:复制文件到远程主机。
  • fetch 模块:从远程主机上拉取文件。
  • file 模块:管理文件的属性,如文件的权限、所有者等。
  • lineinfile 模块:在文件中查找并替换文本。

例如,以下剧本使用 copy 模块将本地文件复制到远程主机上

---
- hosts: webservers
  tasks:
    - name: Copy configuration file
      copy:
        src: /path/to/local/file.conf
        dest: /etc/config/file.conf

4.2. 包管理模块

Ansible 提供了多个包管理模块,如下:

  • apt 模块:用于 Debian 和 Ubuntu 系统上的包管理。
  • yum 模块:用于 CentOS 和 RedHat 系统上的包管理。
  • dnf 模块:用于 Fedora 和新版 CentOS 系统上的包管理。
  • pkg 模块:通用的包管理模块,可以用于多种系统上的包管理。

例如,以下剧本使用 yum 模块安装 Apache 服务器:

---
- hosts: all
  tasks:
    - name: Create a new user
      user:
        name: myuser
        password: mypassword
        state: present

4.3. 系统管理模块

Ansible 提供了多个系统管理模块,如下:

  • user 模块:管理系统用户和用户组。
  • group 模块:管理系统用户组。
  • service 模块:管理系统服务。
  • systemd 模块:管理 systemd 服务。
  • cron 模块:管理 crontab 定时任务。

例如,以下剧本使用 user 模块创建一个新用户

---
- hosts: all
  tasks:
    - name: Create a new user
      user:
        name: myuser
        password: mypassword
        state: present

4.4. 网络管理模块

Ansible 提供了多个网络管理模块,如下:

  • ansible_netmiko_send_command 模块:通过 Netmiko 发送 CLI 命令到网络设备上。
  • ios_command 模块:通过 SSH 发送 CLI 命令到 Cisco IOS 设备上。
  • nxos_command 模块:通过 SSH 发送 CLI 命令到 Cisco Nexus 设备上。
  • junos_command 模块:通过 SSH 发送 CLI 命令到 Juniper 设备上。

例如,以下剧本使用 ios_command 模块获取 Cisco IOS 设备的配置信息:

---
- hosts: network_devices
  gather_facts: no
  tasks:
    - name: Get device configuration
      ios_command:
        commands

你可能感兴趣的:(运维,服务器,linux,运维,服务器)