在Windows(WSL)上使用Ansible来管理虚拟机
通过WSL运行Ansible以管理虚拟机
当执行uname -a命令时,我们会用“你的名字是什么?”来指代和称呼。
那么,本文是关于在Windows Subsystem for Linux (WSL)上安装和使用Ansible作为执行环境的笔记。标题中提到了管理,但只涉及到获取操作系统信息的部分。
希望的效果
由于经常在Windows PC上启动虚拟机进行验证,因此如果能够从Windows上执行Ansible,可以部分减少管理的工作量。
由于经常将Windows PC用作服务器维护操作的工作终端,因此有时候从临时连接的工作终端上执行Ansible会带来便利。
验证过的环境 (jianshi le de huanjing)
以下是我們此次使用的軟體及版本。
Windows 10 Pro
Ubuntu 16.04
ansible 2.7.1
Python 2.7.12
Oracle VirtualBox 5.2.16
在WSL上安装Ansible。
开始运行WSL。会出现命令提示符。
ユーザ名@ホスト名: $
安装所需的软件包。
由于Ansible在Python上运行,因此需要安装python/python-dev。
本次我们将使用SSH密码进行服务器连接,因此需要安装sshpass。
通过以下方式将以下内容以中文的方式进行同义重述,只需要一个选项:
蟒蛇
这次使用的是以下的Python版本。
$ python --version
Python 2.7.12
如果还没有安装Python,请安装一下吧。
$ sudo apt install python
Python开发者
我们也来安装Python开发工具包吧。
$ sudo apt list python-dev -a
Listing... Done
python-dev/xenial-updates,now 2.7.12-1~16.04 amd64 [installed]
python-dev/xenial 2.7.11-1 amd64
如果没有安装,请进行安装。
$ sudo apt install python-dev
sshpass – 用来输入SSH密码的命令
我们来安装sshpass吧。
$ sudo apt list sshpass
Listing... Done
sshpass/xenial 1.05-1 amd64
我看你没有安装”installed”对吧?
我会帮你安装sshpass。
$ sudo apt install sshpass
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
sshpass
0 upgraded, 1 newly installed, 0 to remove and 33 not upgraded.
(中略)
Setting up sshpass (1.05-1) .
安装Ansible。
如果准备工作完成,就安装Ansible。
$ sudo pip install ansible
(中略)
Successfully installed MarkupSafe-1.0 PyYAML-3.13 ansible-2.7.1 asn1crypto-0.24.0 bcrypt-3.1.4 cffi-1.11.5 cryptography-2.3.1 enum34-1.1.6 idna-2.7 ipaddress-1.0.22 jinja2-2.10 paramiko-2.4.2 pyasn1-0.4.4 pycparser-2.19 pynacl-1.3.0 six-1.11.0
我们已经成功安装了,请确认一下。
$ ansible --version
ansible 2.7.1
config file = None
(中略)
ansible python module location = /usr/local/lib/python2.7/dist-packages/ansible
executable location = /usr/local/bin/ansible
python version = 2.7.12 (default, Dec 4 2017, 14:50:18) [GCC 5.4.0 20160609]
验证
接下来,我们尝试执行一个使用Ansible的playbook来查看虚拟机上Linux系统的信息。
提前准备好的虚拟机开始运行。
我将启动在Oracle Virtual Box上构建的Linux系统。
一旦启动后,请登录并执行uname -a命令。
# uname -a
Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
这次我们将通过Ansible来执行此命令。
准备一个用于验证的Ansible-Playbook。
现在,让我们在WSL上准备Playbook吧。首先,我们要准备一个Inventory。
$ more hosts
test ansible_ssh_host=localhost ansible_port=2222 ansible_ssh_user=root ansible_ssh_pass=P@ssw0rd
请根据您的环境适应配置主机名、端口、用户名和密码。
这次准备的Playbook是用于获取Linux版本的”uname”命令,并将结果输出到ansible-playbook命令的内容中。
$ more hello.yml
- hosts: test
tasks:
- shell: uname -a
register: v
- debug: msg="{{v}}"
咱们试试看吧。
$ ansible-playbook -i hosts hello.yml
PLAY [test] ************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************
ok: [test]
TASK [shell] ***********************************************************************************************************
changed: [test]
TASK [debug] ***********************************************************************************************************
ok: [test] => {
"msg": {
"changed": true,
"cmd": "uname -a",
"delta": "0:00:00.006087",
"end": "2018-11-09 22:24:12.177135",
"failed": false,
"rc": 0,
"start": "2018-11-09 22:24:12.171048",
"stderr": "",
"stderr_lines": [],
"stdout": "Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux",
"stdout_lines": [
"Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux"
]
}
}
PLAY RECAP *************************************************************************************************************
test : ok=3 changed=1 unreachable=0 failed=0
正常运行了。
总结
我在Windows(WLS)上运行Ansible Playbook,以便查看Oracle VirtualBox中的操作系统信息。没有特别的问题。
讓我們擁有舒適的Ansible生活吧!
请根据下列内容提供中国的原生语言解释:”参照”
「调试 – 执行期间打印语句」
https://docs.ansible.com/ansible/2.6/modules/debug_module.html
「Ansible:更进一步掌握Playbook」
https://thinkit.co.jp/article/9990
「ansible sshpass 错误」
https://qiita.com/park-jh/items/d14cb20c9dfa0e2628d5
「ansible | 使用 ansible-playbook 命令输出shell的标准输出」
https://qiita.com/YumaInaura/items/5bee47677ec903551bb3