使用 ansible vmware_shell 配置 VyOS 虚拟机
Configure VyOS vm with ansible vmware_shell
我正在尝试配置我从模板构建的 VyOS 虚拟机。该模板是全新安装,没有任何配置。
虚拟机没有配置 IP,所以我无法使用 ssh 选项或 vyos ansible 模块。所以我正在尝试使用 vmware_vm_shell 模块,它可以让我执行命令,但我无法进入 VyOS 的 conf 模式。
我已经为我的 shell 尝试了 bash 和 vbash。我已经尝试将 conf 命令设置为要执行的环境变量,我已经尝试 with_item 但它似乎不适用于 vmware_vm_shell.
我最需要的是配置一个IP地址,这样我就可以ssh或者使用vyos ansible模块来完成配置。
conf
set interfaces ethernet eth0 address 192.168.1.251/24
set service ssh port 22
commit
save
---
- hosts: localhost
gather_facts: no
connection: local
vars:
vcenter_hostname: "192.168.1.100"
vcenter_username: "administrator@vsphere.local"
vcenter_password: "SekretPassword!"
datacenter: "Datacenter"
cluster: "Cluster"
vm_name: "router-01"
tasks:
- name: Run command inside a virtual machine
vmware_vm_shell:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
datacenter: "{{ datacenter }}"
validate_certs: False
vm_id: "{{ vm_name }}"
vm_username: 'vyos'
vm_password: 'abc123!!!'
vm_shell: /bin/vbash
vm_shell_args: 'conf 2> myFile'
vm_shell_cwd: "/tmp"
delegate_to: localhost
register: shell_command_output
这会引发错误:
/bin/vbash: conf: No such file or directory
我有一个 EdgeRouter,它使用 Vyatta-derived 操作系统。您遇到的问题是由于 conf
(或 configure
对我而言)实际上不是命令的名称。 cli 功能是通过 bash 函数的复杂集合实现的,这些函数在您登录 non-interactively.
时不会加载。
有一个 wiki page on vyos.net 提出了解决方案。通过采购 /opt/vyatta/etc/functions/script-template
,您可以准备 shell 环境,这样 vyos 命令将按预期工作。
也就是说,您需要执行如下所示的 shell 脚本(使用 vbash):
source /opt/vyatta/etc/functions/script-template
conf
set interfaces ethernet eth0 address 192.168.1.251/24
set service ssh port 22
commit
save
exit
我不熟悉 vmware_vm_shell
模块,所以我不知道你会怎么做,但是例如这对我 运行 一个命令有效:
ssh ubnt@router 'vbash -c "source /opt/vyatta/etc/functions/script-template
configure
show interfaces
"'
注意上面的换行符。这表明这可能有效:
- name: Run command inside a virtual machine
vmware_vm_shell:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
datacenter: "{{ datacenter }}"
validate_certs: False
vm_id: "{{ vm_name }}"
vm_username: 'vyos'
vm_password: 'abc123!!!'
vm_shell: /bin/vbash
vm_shell_cwd: "/tmp"
vm_shell_args: |-
-c "source /opt/vyatta/etc/functions/script-template
configure
set interfaces ethernet eth0 address 192.168.1.251/24
set service ssh port 22
commit
save"
delegate_to: localhost
register: shell_command_output
我正在尝试配置我从模板构建的 VyOS 虚拟机。该模板是全新安装,没有任何配置。
虚拟机没有配置 IP,所以我无法使用 ssh 选项或 vyos ansible 模块。所以我正在尝试使用 vmware_vm_shell 模块,它可以让我执行命令,但我无法进入 VyOS 的 conf 模式。
我已经为我的 shell 尝试了 bash 和 vbash。我已经尝试将 conf 命令设置为要执行的环境变量,我已经尝试 with_item 但它似乎不适用于 vmware_vm_shell.
我最需要的是配置一个IP地址,这样我就可以ssh或者使用vyos ansible模块来完成配置。
conf
set interfaces ethernet eth0 address 192.168.1.251/24
set service ssh port 22
commit
save
---
- hosts: localhost
gather_facts: no
connection: local
vars:
vcenter_hostname: "192.168.1.100"
vcenter_username: "administrator@vsphere.local"
vcenter_password: "SekretPassword!"
datacenter: "Datacenter"
cluster: "Cluster"
vm_name: "router-01"
tasks:
- name: Run command inside a virtual machine
vmware_vm_shell:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
datacenter: "{{ datacenter }}"
validate_certs: False
vm_id: "{{ vm_name }}"
vm_username: 'vyos'
vm_password: 'abc123!!!'
vm_shell: /bin/vbash
vm_shell_args: 'conf 2> myFile'
vm_shell_cwd: "/tmp"
delegate_to: localhost
register: shell_command_output
这会引发错误:
/bin/vbash: conf: No such file or directory
我有一个 EdgeRouter,它使用 Vyatta-derived 操作系统。您遇到的问题是由于 conf
(或 configure
对我而言)实际上不是命令的名称。 cli 功能是通过 bash 函数的复杂集合实现的,这些函数在您登录 non-interactively.
有一个 wiki page on vyos.net 提出了解决方案。通过采购 /opt/vyatta/etc/functions/script-template
,您可以准备 shell 环境,这样 vyos 命令将按预期工作。
也就是说,您需要执行如下所示的 shell 脚本(使用 vbash):
source /opt/vyatta/etc/functions/script-template
conf
set interfaces ethernet eth0 address 192.168.1.251/24
set service ssh port 22
commit
save
exit
我不熟悉 vmware_vm_shell
模块,所以我不知道你会怎么做,但是例如这对我 运行 一个命令有效:
ssh ubnt@router 'vbash -c "source /opt/vyatta/etc/functions/script-template
configure
show interfaces
"'
注意上面的换行符。这表明这可能有效:
- name: Run command inside a virtual machine
vmware_vm_shell:
hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
datacenter: "{{ datacenter }}"
validate_certs: False
vm_id: "{{ vm_name }}"
vm_username: 'vyos'
vm_password: 'abc123!!!'
vm_shell: /bin/vbash
vm_shell_cwd: "/tmp"
vm_shell_args: |-
-c "source /opt/vyatta/etc/functions/script-template
configure
set interfaces ethernet eth0 address 192.168.1.251/24
set service ssh port 22
commit
save"
delegate_to: localhost
register: shell_command_output