Ansible使用入门

  • Post author:
  • Post category:Ansible
  • Page Views 812 阅读

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_filenonessh连接使用的私钥
ansible_connectionsmartansible使用的连接方式,取值smart,ssh或paramiko
ansible_becomenone类似sudo
ansible_become_usernone切换到某个用户下执行命令
ansible_shell_typesh执行命令所使用的shell
ansible_python_interpreter/usr/bin/pythonpython解释器
ansible_*_interpreternone指定其他解释器

6.定义服务器变量

当服务器数量很大的时候,依然通过hosts文件来管理服务器和变量将变得难以管理。ansible提供了一种更好的办法来管理服务器与变量,即为每个服务器和群组创建独立的文件。将服务器的变量存放在名为/etc/ansible/host_vars的目录下,文件名字以服务器的名字命名;将服务器群组的变量文件存放在/etc/ansible/group_vars,文件名字以服务器群组的名字命名。

例如:

注意此时变量定义使用冒号而不是等号。

[root@Ansible ansible]# cat group_vars/webservsers.yaml
ansible_port: 2222


「 文章如果对你有帮助,请点个赞哦^^ 」 

1+