Ansible简单上手体验

实验环境:

192.168.237.16:Ansible管理主机(Python>=2.6)

192.168.237.12、192.168.237.13、192.168.237.14:托管节点,MySQL DB(Python>=2.4)

简单yum安装后,运行ansible --version 可以查看到:

ansible的配置文件默认路径:/etc/ansible/ansible.cfg,该目录下还包含一个hosts文件,用于添加托管节点的IP。(可以通过 -i 参数指定其他hosts文件)

可执行文件路径:/usr/bin/ansible


ansible使用SSH的方式连接托管节点,密码管理方式分为以下两种:

1、使用 --ask-pass 选项,交互式输入托管节点密码

2、打通SSH信任

我们采用第二种方法。


Ansible管理主机上创建公钥文件:

[root@237_16 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
75:05:9a:e6:71:4e:53:69:08:4d:a0:f4:49:19:67:d7 root@237_16
The key's randomart image is:
+--[ RSA 2048]----+
|        . =B=o+o |
|       . +.*o+o E|
|        . O =.   |
|         + * .   |
|        S . .    |
|                 |
|                 |
|                 |
|                 |
+-----------------+

将公钥文件传送到托管节点上,使用 ssh-copy-id 或直接利用ansible的ssh秘钥传送功能都可以,以下以ansible为例:

1、编辑 /etc/ansible/hosts 文件,添加托管节点IP

2、传送公钥文件,key为刚刚在本地生成的公钥文件,path为远程托管节点的authorized_keys文件位置

[root@237_16 ~]# ansible all -m authorized_key -a "user=root key='{{ lookup('file', '/root/.ssh/id_rsa.pub') }}' path=/root/.ssh/authorized_keys manage_dir=no" --ask-pass -c paramiko
SSH password: 
192.168.237.21 | SUCCESS => {
    "changed": true, 
    "comment": null, 
    "exclusive": false, 
    "gid": 0, 
    "group": "root", 
    "key": "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArlIoOGw5dUiJo0DvSaZlYkrWET9596Vin0IjfE/tzRaual5xs5wyBSotwPWzdf0EozHahd76EUW+eo4zhTMhmAW7AqiD912rFpxoCggArH3Vux2Ojb83Fm+N5i9H6FjSJRXUTmzCaKEJ031U/nmP9zq1mBVS/FKnl4fk4KLoTLRq6Xs3IK4X/eXkAakp52R8pJukUVD0IlH0BmZwciq5cH8FTmNssruDQoHXayhhfsZEaIv7wenJrc/kHeVsfKWnRFgSKrgMM/mS7N0Q1F6ZHhyKnbqpb/9vjAzOX98pS4nAyt2BgQZhaEhrJrUZExMvBgouKO/L0UxeoeGxtVMpdQ== root@237_16", 
    "key_options": null, 
    "keyfile": "/root/.ssh/authorized_keys", 
    "manage_dir": false, 
    "mode": "0600", 
    "owner": "root", 
    "path": "/root/.ssh/authorized_keys", 
    "size": 393, 
    "state": "file", 
    "uid": 0, 
    "unique": false, 
    "user": "root", 
    "validate_certs": true
}

3、发送一条shell命令:hostname 到远程节点,验证是否可以在不用输入密码的情况下传回结果



4、总结下,上面提到的ansible的常见使用,-m 指定使用不同的模块

1)使用ansible传送命令

ansible all -m command -a "COMMAND",不支持管道符

ansible all -m shell -a "COMMAND",支持管道符,同时支持运行远程主机上的shell脚本

2)使用ansible分发文件,源文件路径:src=,目的路径位置:dest=

ansible all -m copy -a "src=/tmp/test123 dest=/tmp/test1234"

3)使用ansible分发脚本,ansible all -m script -a "test123.sh"

可以将安装策略写入脚本,用于批量部署应用,注意脚本的输出最好清晰明了(包含主机名、部署过程结果等),便于安装情况统计。


ansible利用playbooks来定义一套执行任务,实现更加复杂的需求,前人的成果可以在galaxy中寻找。

例如一个安装zabbix agent的playbook:https://galaxy.ansible.com/dj-wasabi/zabbix-agent/



参考文档:

Ansible :一个配置管理和IT自动化工具

zabbix系列之使用ansible批量部署zabbix客户端

Ansible 详细用法说明


猜你喜欢

转载自blog.csdn.net/leonpenn/article/details/79257179