Ansible基于SSH工作,不需要安装客户端,只需要在控制端安装ansible即可。
通过yum install ansible进行安装。安装之后,会有以下几个命令行工具:
- ansible
- ansible-doc
- ansible-playbook
- ansible-vault
- ansible-console
- ansible-galaxy
- ansible-pull
1.ansible的工作模式
ansible默认会读取/etc/ansible/hosts文件中配置的服务器列表,或者使用-i参数指定hosts文件。ansible默认使用当前用户和默认22端口号与远程服务器建立ssh连接。如果时非默认的,可以在主机地址之后增加用户名和端口号。
[root@Ansible ansible]# cat hosts [webservers] 192.168.244.155 [mysqldb] 192.168.244.133 ansible_user=test ansible_port=2222
我们可以用ping模块来尝试建立ssh连接,ansible的ping模块并不是测试服务器网络的是否连通。
[root@Ansible ansible]# ansible webservers -m ping 192.168.244.155 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
如果每一台服务器都需要配置相同的ansible_user和ansible_port,我们在ansible.cfg中配置一些默认的参数。
[root@Ansible ansible]# cat ansible.cfg |grep -Ev '^$|#' [defaults] ansile_user = test ansile_port = 2222
2.ansible的ad-hoc模式
通过ansible命令执行的操作方式,称为ad-hoc模式。command模块是默认使用的一个模块,它的作用是在服务器中执行shell命令。-m指定模块,-a指定参数。
[root@Ansible ansible]# ansible webservers -m command -a "hostname" 192.168.244.155 | CHANGED | rc=0 >> localhost.localdomain
3.使用playbook控制服务器
在实际使用中,一般都将执行的任务卸载YAML文件中。
[root@Ansible ansible]# cat test.yaml --- - hosts: webservers tasks: - name: copy file copy: src=/etc/ansible/hosts dest=/tmp/
[root@Ansible ansible]# ansible-playbook test.yaml PLAY [webservers] ********************************************************************************************************************** TASK [Gathering Facts] ***************************************************************************************************************** ok: [192.168.244.155] TASK [copy file] *********************************************************************************************************************** changed: [192.168.244.155] PLAY RECAP ***************************************************************************************************************************** 192.168.244.155 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
4.inventory管理
inventory指的是服务器的合集,也可以理解为hosts文件中定义的服务器列表。我们可以灵活的定义hosts文件内容。
关于hosts文件位置:-i参数指定hosts文件位置,或修改ansible.cfg修改默认位置。
关于hosts文件服务器分组有以下几种方法:
root@Ansible ansible]# cat hosts 127.0.0.1 [webservers] 192.168.244.155 [mysqldb] 192.168.244.133 #web1,web2,web3三台服务器 [test] web[1:3].test.com #dba,dbb,dbc三台服务器 [test2] db[a:c].test.com #通过children申明,当前组下面包含的是其他组 [common:children] webservers mysqldb
那么去匹配hosts中定义的服务器也有一些规则,如下:
规则 | 说明 |
192.168.1.1或主机名 | 直接使用IP地址或者主机名,多台主机用冒号分隔 |
webservers | 通过组名,多个组用冒号分隔 |
all或* | 匹配所有服务器 |
webservers:!test | 匹配在webservers中,但是不在test组中的服务器 |
webservers:&test | 匹配同时在webservers和test组中的服务器 |
192.168.* | 使用通配符进行匹配 |
test[0],test[1:] | 通过索引或者切片的方式匹配 |
~(…).*.test.com | 以~开始的匹配表示使用正则表达式 |
5.inventory行为参数
除了ansible_user和ansible_port两个行为参数外,还有以下一些常用的行为参数。
参数 | 默认值 | 描述 |
ansible_ssh_private_key_file | none | ssh连接使用的私钥 |
ansible_connection | smart | ansible使用的连接方式,取值smart,ssh或paramiko |
ansible_become | none | 类似sudo |
ansible_become_user | none | 切换到某个用户下执行命令 |
ansible_shell_type | sh | 执行命令所使用的shell |
ansible_python_interpreter | /usr/bin/python | python解释器 |
ansible_*_interpreter | none | 指定其他解释器 |
6.定义服务器变量
当服务器数量很大的时候,依然通过hosts文件来管理服务器和变量将变得难以管理。ansible提供了一种更好的办法来管理服务器与变量,即为每个服务器和群组创建独立的文件。将服务器的变量存放在名为/etc/ansible/host_vars的目录下,文件名字以服务器的名字命名;将服务器群组的变量文件存放在/etc/ansible/group_vars,文件名字以服务器群组的名字命名。
例如:
注意此时变量定义使用冒号而不是等号。
[root@Ansible ansible]# cat group_vars/webservsers.yaml ansible_port: 2222
「 文章如果对你有帮助,请点个赞哦^^ 」 
若无特殊注明,文章均为本站原创或整理发布。
转载请注明本文地址:https://om.fangxiaoxiong.com/2942.html