我想在家中建立一个可以运行Ansible的【VMware ESXi】环境 ~第2章:引入Ansible和vMX~

首先

由于上次ubuntu服务器可以通过DNS解析,所以这次我将创建以下结构。我想要做的是:
1. 构建vMX(如下图中浅红色)
2. 从ubuntu服务器连接到vMX的SSH
3. 在ubuntu服务器上安装Ansible
4. 创建执行Ansible所需的文件
5. 执行Ansible并获取vMX的show命令
另外,ubuntu的版本是18.04.3。

構成図2.PNG

1. 创建VMX

在构建过程中,我们参考了以下网站:
在VMware ESXi上运行Juniper vMX
尝试在ESXi上构建vMX作为学习环境!
最低硬件和软件要求

VFCPの設定.PNG
内部構成3.PNG

以root用户连接到ubuntu服务器,再通过SSH连接至vMX。

我将在vMX中进行以下设置。设置内容如下:
(1)启用SSH,并创建用于执行Ansible的用户。
(2)将地址(192.168.0.202/24)分配给管理接口fxp0。
(3)禁用DHCP设置。
※由于fxp0上启用了DHCP,我将使用“delete interface fxp0”命令删除该设置。

set system root-authentication plain-text-password
set system services ssh
set system login user ansible class super-user
set system login user ansible authentication plain-text-password
deactivate system processes dhcp-service
delete interface fxp0    # DHCP関連の設定を削除
set interfaces fxp0 unit 0 family inet address 192.168.0.202/24

如果能在vMX上进行设置,我们可以登录到Ubuntu服务器并进行SSH连接进行确认!首先,我们通过ping命令进行连通性检查,然后尝试使用SSH登录。一旦SSH功能正常,Ansible环境的建立就只剩下最后一步了!

test@ubuntu201:~/ansible$
test@ubuntu201:~/ansible$ ping 192.168.0.202           # pingを実行
PING 192.168.0.202 (192.168.0.202) 56(84) bytes of data.
64 bytes from 192.168.0.202: icmp_seq=1 ttl=64 time=0.061 ms
64 bytes from 192.168.0.202: icmp_seq=2 ttl=64 time=0.108 ms
64 bytes from 192.168.0.202: icmp_seq=3 ttl=64 time=0.083 ms

--- 192.168.0.202 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2055ms
rtt min/avg/max/mdev = 0.061/0.084/0.108/0.019 ms
test@ubuntu201:~/ansible$
test@ubuntu201:~/ansible$ ssh ansible@192.168.0.202    # SSHログインを実行
~中略~
--- JUNOS 18.2R1.9 Kernel 64-bit  JNPR-11.0-20180614.6c3f819_buil    # ログイン完了
ansible> 

在Ubuntu服务器上安装Ansible。

首先,在Ubuntu服务器上安装Ansible。在Ubuntu服务器上输入以下命令。

sudo apt update
sudo apt-get install software-properties-common  # aptだと上手くいかなかった
sudo apt-add-repository ppa:ansible/ansible
sudo apt update
sudo apt install ansible

安装完成后,让我们确认一下是否已安装Ansible。

test@ubuntu201:~/ansible$ ansible --version
ansible 2.9.13
  config file = /home/test/ansible/ansible.cfg
  configured module search path = [u'/home/test/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.17 (default, Jul 20 2020, 15:37:01) [GCC 7.5.0]
test@ubuntu201:~/ansible$

创建执行Ansible所需文件。

我们现在开始创建Ansible所需的以下3个文件:
(1)ansible.cfg:记录Ansible的配置
(2)虚拟机清单(hosts):记录操作目标主机和每个主机使用的变量等信息的文件
(3)playbook(get-int.yml):记录Ansible执行的任务内容的文件

(1) 跳板机配置文件。

[defaults]
host_key_checking = False
timeout = 60
remote_port = 22

由于python2的支持已经结束,所以在“ansible_python_interpreter=/usr/bin/python3”的部分中进行设置,以便使用python3。

[all:vars]
ansible_python_interpreter=/usr/bin/python3    # python3を使用

[junos]
junos_router_1 ansible_ssh_host=192.168.0.202

[junos:vars]
ansible_connection=network_cli
ansible_network_os=junos
ansible_user=ansible    # vMXにログインするユーザ
ansible_ssh_pass=password

(3)玩法书(get-int.yml)

---
- name: show TEST
  hosts: junos
  gather_facts: no
  tasks:
    - name: get show
      junos_command:
        commands: show interfaces fxp0 terse
      register: results

    - name: debug
      debug:
        msg: "{{ results.stdout_lines }}"

首先,我们将尝试使用ping模块在vMX上进行ping测试,而不使用playbook。命令如下:
ansible -m <模块名> -i <清单文件> <目标主机>
在本例中,只有一个目标主机,但我们将其设置为“all”,以表示所有主机。

test@ubuntu201:~/ansible$ ansible -m ping -i hosts all
junos_router_1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

使用Ansible执行并获取vMX的show命令结果。之前已经确定可以通过Ansible进行ping测试,现在尝试使用playbook。命令如下:
ansible-playbook -i <主机清单> <playbook文件>

test@ubuntu201:~/ansible$ ansible-playbook -i hosts get-int.yml

PLAY [show TEST] *******************************************************************************************************

TASK [get show] ********************************************************************************************************
[WARNING]: arguments wait_for, match, rpcs are not supported when using transport=cli
ok: [junos_router_1]

TASK [debug] ***********************************************************************************************************
ok: [junos_router_1] => {
    "msg": [
        [
            "Interface               Admin Link Proto    Local                 Remote",
            "fxp0                    up    up",
            "fxp0.0                  up    up   inet     192.168.0.202/24"
        ]
    ]
}

PLAY RECAP *************************************************************************************************************
junos_router_1             : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

符合预期,我们能够获取vMX接口的状态。

【注意】在vMX中不能使用 | (管道)。

正如第1章所述,尝试通过vMX的控制台操作时,键盘输入并不如预期(无法输入管道符)。即使将控制台屏幕右上角的键盘布局更改为日文,问题仍未得到解决,因此我改为通过teraterm进行SSH登录来进行操作。

相关文章

【VMware ESXi】构建在家中的Ansible执行环境~第1章:配置Ubuntu服务器的DNS解析~
【VMware ESXi】构建在家中的Ansible执行环境~第3章:通过Ansible进行vMX配置更改与syslog集成~