Drupal Console is a modern CLI for interacting with Drupal and scaffolding a site. It works only with Drupal 8+, and is built on top of the Symfony Console component.

To have Drupal Console installed globally inside Drupal VM, make sure drupalconsole is in the list of installed_extras in your config.yml file. If you're adding it to an existing Drupal VM, run vagrant provision so it gets installed. You also (or instead) might want to add Drupal Console as a dependency of your Drupal project—if you do this, you may not need to add drupalconsole to Drupal VM globally.

To use Drupal Console with a Drupal 8 site (in this case, using the default configuration that ships with Drupal VM):

  1. Log into the VM with vagrant ssh.
  2. Change directory to the Drupal site's document root: cd /var/www/drupalvm/drupal/web.
  3. Use Drupal console (e.g. drupal cache:rebuild all).

You should see an output like:

vagrant@drupalvm:/var/www/drupalvm/drupal/web$ drupal cache:rebuild all

[+] Rebuilding cache(s), wait a moment please.
[+] Done clearing cache(s).

 The command was executed successfully!

Remote command execution using --target

To run commands on your host computer but execute them on the VM, add a new sites file ~/.console/sites/drupalvm.yml on your host computer:

dev:
  root: /var/www/drupalvm/drupal
  host: 192.168.88.88
  password: vagrant
  type: ssh
  extra-options: '-o PasswordAuthentication=no -i ~/.vagrant.d/insecure_private_key'

Execute from host machine using the --target option.

drupal --target=drupalvm.test site:status

or

drupal @drupalvm.test site:status

For more details, see Drupal Console's documentation

For a list of available role variables, see the geerlingguy.drupal-console Ansible role's README.

Remote command execution using vagrant-exec

You can use vagrant-exec to execute commands remotely through Vagrant, and if you can't get Console to work with --target, you might want to try doing this (it's more convenient than logging into the VM just to run a Drupal VM command!).

First, install the plugin:

vagrant plugin install vagrant-exec

Add the following to a Vagrantfile.local in your project (set directory to your drupal docroot):

if Vagrant.has_plugin?('vagrant-exec')
  config.exec.commands '*', directory: '/var/www/drupal'
end

Now you can execute any Drupal Console command—even interactive ones!—from the host:

vagrant exec bin/drupal generate:module