如何快速学习Ansible使用

2020-12-21 16:17:44 浏览数 (1)

ansible是一种自动化运维工具,基于Python开发,集合了众多运维工具(puppetcfenginecheffuncfabric)的优点,实现批量系统配置、批量程序部署、批量运行命令等功能。现,简单介绍下ansible使用方法。

安装方法

代码语言:javascript复制
yum install ansible
或者apt-get install ansible

PS:如果你在所用 Linux 发行版的包仓库中找不到 Ansible,那么也可以通过 pip 来安装 Ansible,同时也会安装 paramiko、PyYAML、jinja2 等 Python 依赖库。

被管理主机设置

Inventory 文件用来定义你要管理的主机。其默认位置在 /etc/ansible/hosts ,如果不保存在默认位置,也可通过-i选项指定。被管理的机器可以通过其IP或域名指定。未分组的机器需保留在hosts的顶部,分组可以使用[]指定,如:

代码语言:javascript复制
[web] linuxtoy.org 

同时,分组也能嵌套:

代码语言:javascript复制
[vps:children] web db 

此外,也可以通过数字和字母模式来指定一系列连续主机,如:

代码语言:javascript复制
[1:3].linuxtoy.org # 等价于 1.linuxtoy.org、2.linuxtoy.org、3.linuxtoy.org

[a:c].linuxtoy.org # 等价于 a.linuxtoy.org、b.linuxtoy.org、c.linuxtoy.org

指令详解

现在,我们执行以下命令来看看 Ansible 是否能正常工作:

代码语言:javascript复制
ansible -i hosts all -m ping -u www

该命令选项的作用分别为:

-i:指定inventory文件,使用当前目录下的hosts

all:针对 hosts 定义的所有主机执行,这里也可以指定组名或模式

-m:指定所用的模块,我们使用 Ansible 内置的 ping 模块来检查能否正常管理远端机器

-u:指定远端机器的用户

大家可使用ansible-doc raw查询模块文档。

使用 Playbook 管理复杂任务

对于需反复执行的、较为复杂的任务,我们可以通过定义Playbook来搞定。Playbook是Ansible真正强大的地方,它允许使用变量、条件、循环、以及模板,也能通过角色及包含指令来重用既有内容。我们来看一个简单的例子:

在远端机器上创建一个新的用户

代码语言:javascript复制
- name: create user 
hosts: vps 
user: root
gather_facts: false 

vars: 
- user: "toy" 

tasks: 
- name: create {{ user }} on vps
user: name="{{ user }}"

首先,我们给Playbook指定了一个名称;接着,通过hosts让该 Playbook 仅作用于vps组;user指定以root帐号执行,Ansible 也支持普通用户以sudo方式执行;gather_facts的作用是搜集远端机器的相关信息,稍后可通过变量形式在Playbook中使用;vars定义变量,也可单独放在文件中;tasks指定要执行的任务。

要执行Playbook,可以敲入:

代码语言:javascript复制
ansible-playbook user.yml 

执行结果为:

代码语言:javascript复制
PLAY [create user] *************

TASK: [create toy on vps] *************
changed: [linuxtoy.org] 

PLAY RECAP *************
linuxtoy.org : ok=1 changed=1 unreachable=0 failed=0

apt模块

代码语言:javascript复制
- apt: update_cache=yes

ansible-playbook用法

其中,with_items会自动循环执行上面的语句name={{ item }}item值,即,依次将with_items中的值带入到{{item}}中 。

实例解析

为了能让大家更好的理解,现以示列讲解:

远程管理同事电脑

  • 进入我的ansible(默认安装位置为/etc/ansible);
  • hosts下写入同事电脑IP地址;
代码语言:javascript复制
    [company]192.168.3.102
  • 复制本机的公钥,即,.ssh下的id_rsa.pub中的内容。使用ssh进入同事虚拟机内,将复制的本机的公钥放入对方.ssh文件夹的authorized_keys文件中(如果对方没有.ssh文件夹,则首先建个文件夹);
  • 执行ansible -i hosts company -m ping -u root,即,可测试是否ping通对方;
  • 测试指令ansible fei(hosts里的组名) -a 'uptime'-a指定执行参数,-m省略,默认执行模块为command
  • 如果远程给对方安装软件;
代码语言:javascript复制
   ansible fei -m raw -a 'yum install git'
 

学习是从不是一件轻松的事,但分享却是极为快乐的事。

希望此篇文章能让大家的学习ansible之路更为顺畅。

同时,欢迎大家投稿,分享您的不平凡故事。

0 人点赞