ansible
是一种自动化运维工具,基于Python开发,集合了众多运维工具(puppet
、cfengine
、chef
、func
、fabric
)的优点,实现批量系统配置、批量程序部署、批量运行命令等功能。现,简单介绍下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
的顶部,分组可以使用[]
指定,如:
[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地址;
[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
; - 如果远程给对方安装软件;
ansible fei -m raw -a 'yum install git'
学习是从不是一件轻松的事,但分享却是极为快乐的事。
希望此篇文章能让大家的学习ansible
之路更为顺畅。
同时,欢迎大家投稿,分享您的不平凡故事。