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.

Drupal VM will automatically install Drupal Console if you install Drupal 8 or later in your VM (this is based on the value of the drupal_major_version variable inside config.yml.

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:

  root: /var/www/drupalvm/drupal
  user: vagrant
  password: vagrant

Execute from host machine using the --target option.

drupal --target=drupalvm.dev 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'

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

vagrant exec bin/drupal generate:module