在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
AnsibleOnWSLpng.png

在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

广告
将在 10 秒后关闭
bannerAds