vmware_vm_shell – Run commands in a VMware guest operating system
Synopsis
- Module allows user to run common system administration commands in the guest operating system.
 
Requirements
The below requirements are needed on the host that executes this module.
- python >= 2.6
 - PyVmomi
 
Parameters
| Parameter | Choices/Defaults | Comments | 
|---|---|---|
|   cluster    string    |    The cluster hosting the virtual machine.  If set, it will help to speed up virtual machine search.   |  |
|   datacenter    string    |    The datacenter hosting the virtual machine.  If set, it will help to speed up virtual machine search.   |  |
|   folder    string   added in 2.4   |    Destination folder, absolute or relative path to find an existing guest or create the new guest.  The folder should include the datacenter. ESX's datacenter is ha-datacenter.  Examples:  folder: /ha-datacenter/vm  folder: ha-datacenter/vm  folder: /datacenter1/vm  folder: datacenter1/vm  folder: /datacenter1/vm/folder1  folder: datacenter1/vm/folder1  folder: /folder1/datacenter1/vm  folder: folder1/datacenter1/vm  folder: /folder1/datacenter1/vm/folder2   |  |
|   hostname    string    |    The hostname or IP address of the vSphere vCenter or ESXi server.  If the value is not specified in the task, the value of environment variable   VMWARE_HOST will be used instead.Environment variable support added in Ansible 2.6.   |  |
|   password    string    |    The password of the vSphere vCenter or ESXi server.  If the value is not specified in the task, the value of environment variable   VMWARE_PASSWORD will be used instead.Environment variable support added in Ansible 2.6.  aliases: pass, pwd  |  |
|   port    integer   added in 2.5   |   Default: 443   |    The port number of the vSphere vCenter or ESXi server.  If the value is not specified in the task, the value of environment variable   VMWARE_PORT will be used instead.Environment variable support added in Ansible 2.6.   |  
|   proxy_host    string   added in 2.9   |    Address of a proxy that will receive all HTTPS requests and relay them.  The format is a hostname or a IP.  If the value is not specified in the task, the value of environment variable   VMWARE_PROXY_HOST will be used instead.This feature depends on a version of pyvmomi greater than v6.7.1.2018.12   |  |
|   proxy_port    integer   added in 2.9   |    Port of the HTTP proxy that will receive all HTTPS requests and relay them.  If the value is not specified in the task, the value of environment variable   VMWARE_PROXY_PORT will be used instead. |  |
|   timeout    integer   added in 2.7   |   Default: 3600   |    Timeout in seconds.  If set to positive integers, then   wait_for_process will honor this parameter and will exit after this timeout. |  
|   username    string    |    The username of the vSphere vCenter or ESXi server.  If the value is not specified in the task, the value of environment variable   VMWARE_USER will be used instead.Environment variable support added in Ansible 2.6.  aliases: admin, user  |  |
|   validate_certs    boolean    |   
  |    Allows connection when SSL certificates are not valid. Set to   false when certificates are not trusted.If the value is not specified in the task, the value of environment variable   VMWARE_VALIDATE_CERTS will be used instead.Environment variable support added in Ansible 2.6.  If set to   yes, please make sure Python >= 2.7.9 is installed on the given machine. |  
|   vm_id    string / required    |    Name of the virtual machine to work with.   |  |
|   vm_id_type    string    |   
  |    The VMware identification method by which the virtual machine will be identified.   |  
|   vm_password    string / required    |    The password used to login-in to the virtual machine.   |  |
|   vm_shell    string / required    |    The absolute path to the program to start.  On Linux, shell is executed via bash.   |  |
|   vm_shell_args    string    |   Default: " "   |    The argument to the program.  The characters which must be escaped to the shell also be escaped on the command line provided.   |  
|   vm_shell_cwd    string    |    The current working directory of the application from which it will be run.   |  |
|   vm_shell_env    list    |    Comma separated list of environment variable, specified in the guest OS notation.   |  |
|   vm_username    string / required    |    The user to login-in to the virtual machine.   |  |
|   wait_for_process    boolean   added in 2.7   |   
  |    If set to   True, module will wait for process to complete in the given virtual machine. |  
Notes
Note
- Tested on vSphere 5.5, 6.0 and 6.5.
 - Only the first match against vm_id is used, even if there are multiple matches.
 
Examples
- name: Run command inside a virtual machine
  vmware_vm_shell:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    datacenter: "{{ datacenter }}"
    folder: "/{{datacenter}}/vm"
    vm_id: "{{ vm_name }}"
    vm_username: root
    vm_password: superSecret
    vm_shell: /bin/echo
    vm_shell_args: " $var >> myFile "
    vm_shell_env:
      - "PATH=/bin"
      - "VAR=test"
    vm_shell_cwd: "/tmp"
  delegate_to: localhost
  register: shell_command_output
- name: Run command inside a virtual machine with wait and timeout
  vmware_vm_shell:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    datacenter: "{{ datacenter }}"
    folder: "/{{datacenter}}/vm"
    vm_id: NameOfVM
    vm_username: root
    vm_password: superSecret
    vm_shell: /bin/sleep
    vm_shell_args: 100
    wait_for_process: True
    timeout: 2000
  delegate_to: localhost
  register: shell_command_with_wait_timeout
- name: Change user password in the guest machine
  vmware_vm_shell:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    datacenter: "{{ datacenter }}"
    folder: "/{{datacenter}}/vm"
    vm_id: "{{ vm_name }}"
    vm_username: sample
    vm_password: old_password
    vm_shell: "/bin/echo"
    vm_shell_args: "-e 'old_password\nnew_password\nnew_password' | passwd sample > /tmp/$$.txt 2>&1"
  delegate_to: localhost
- name: Change hostname of guest machine
  vmware_vm_shell:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    datacenter: "{{ datacenter }}"
    folder: "/{{datacenter}}/vm"
    vm_id: "{{ vm_name }}"
    vm_username: testUser
    vm_password: SuperSecretPassword
    vm_shell: "/usr/bin/hostnamectl"
    vm_shell_args: "set-hostname new_hostname > /tmp/$$.txt 2>&1"
  delegate_to: localhost
   Return Values
Common return values are documented here, the following are the fields unique to this module:
| Key | Returned | Description | 
|---|---|---|
|   results    dictionary    |  on success |   metadata about the new process after completion with wait_for_process  Sample:  {'cmd_line': '"/bin/sleep" 1', 'end_time': '2018-04-26T05:03:21+00:00', 'exit_code': 0, 'name': 'sleep', 'owner': 'dev1', 'start_time': '2018-04-26T05:03:19+00:00', 'uuid': '564db1e2-a3ff-3b0e-8b77-49c25570bb66'}   |  
Status
- This module is not guaranteed to have a backwards compatible interface. [preview]
 - This module is maintained by the Ansible Community. [community]
 
Authors
- Ritesh Khadgaray (@ritzk)
 - Abhijeet Kasurde (@Akasurde)
 
Hint
If you notice any issues in this documentation, you can edit this document to improve it.
    © 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
    https://docs.ansible.com/ansible/2.9/modules/vmware_vm_shell_module.html