Linux云计算运维架构师(连载)-自动化运维ansible-04

2021-07-05 14:26:25 浏览数 (1)

1.1.3 基础配置

下面将讲解一些Ansible的基础知识来帮助读者掌握Ansible的基础知识及使用原则,具体有以下四个方面。

l 定义主机清单

l 测试连通性

l know_hosts

l ping&ssh

接下来将逐个介绍,具体内容如下。

1.定义主机清单

主机清单(Hpst Inventory),又称主机目录,是一个保存着Ansible主机的所有客户机信息与连接参数的文件,同时也用于主机分类。Ansible的主机清单默认为/etc/ansible/hosts文件。用户可直接在该文件中自定义主机,具体代码如下所示。

[root@ansible ~]# vim /etc/ansible/hosts

[root@ansible ~]# cat /etc/ansible/hosts

host1

host2

host3

此处需要注意的是,在填写主机清单的时候,要确保当前Ansible服务器“认识”主机清单中的这些主机。在1.2.1小节中,作者已在Ansible服务器中加入了这三台主机的自定义域名解析,故此处填写主机名即可,否则配置不生效。

2.测试连通性

Ansible的工作需要与客户机进行沟通,此处通过Ansible的ping模块去测试与客户机的连通性,出现“SUCCESS”即表示成功,代码及结果如下所示。

#ping 自己

[root@ansible ~]# ansible localhost -m ping

localhost | SUCCESS => {

"changed": false,

"ping": "pong"

}

#ping host1

[root@ansible ~]# ansible host1 -m ping

host1 | SUCCESS => {

"ansible_facts": {

"discovered_interpreter_python": "/usr/bin/python"

},

"changed": false,

"ping": "pong"

}

通过代码的反馈结果可以看到,系统通过使用Ansible的ping模块成功连通了客户机host1。在该条命令中,-m参数用来指定模块,不同的模块功能也不同,ping只是其中的一个模块,还有一些其他模块后边将会讲到。使用过程中,运维人员可以添加一个参数“-o”,使其简洁化输出,代码及如下所示。

[root@ansible ~]# ansible host1 -m ping -o

host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}

需要注意的是,Ansible不能对未在主机清单中标注的客户机进行操作。

3.know_hosts

在使用ping模块测试时,如果是第一次与客户机产生联系,系统会询问是否确定继续连接。去掉系统询问的操作如下所示。

#在/etc/ssh/ssh_config文件中找到#StrictHostKeyChecking一行,去掉注释并将行尾ask改为no

[root@ansible ~]# vim /etc/ssh/ssh_config

...

StrictHostKeyChecking no

...

#修改后记得保存该文件,并重启sshd服务

[root@ansible ~]# systemctl restart sshd

然后再次连接客户主机,具体代码如下所示。

[root@ansible ~]# ansible host1 -m ping -u root -k -o

SSH password:

host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}

上述示例中,参数-u用来指定用户,-k表示输入密码,-o表示简洁的输出。现在再使用ping模块时,系统已经不会出现询问。

4.ping&ssh

ansible的各个模块是相关联的,当一个模块无法连通客户机时,与之关联的模块可能也会出现问题。

首先将客户机host1的SSH服务关闭,具体代码如下所示。

[root@host1 ~]# systemctl stop sshd

接着通过Ansible服务器的ping模块去连接客户机host1,具体代码如下所示。

[root@ansible ~]# ansible host1 -m ping

host1 | UNREACHABLE! => {

"changed": false,

"msg": "Failed to connect to the host via ssh: ssh: connect to host host1 port 22: Connection refused",

"unreachable": true

}

上述示例中,在客户机SSH服务关闭之后,Ansible服务器便无法通过ping模块连接客户机。由上述实验结果可知,Ansible是依赖SSH协议去通信的,想要使用它必须先让Ansible服务器与客户机的SSH保持连通性。并且Ansible的ping模块可用于探测服务器之间的SSH是否连接。

0 人点赞