2

I several folders containing symlinks to my drupal sites. I'd like to use this folder structure to create an alias so I can run commands on each group of sites.

I'm trying to do what "drush @sites status" will do, but on a smaller subset.

I wrote the following based on the docs

// List the instances from the OU instances folder
$full_path = "/opt/drupal/sites/instances";
if ($handle = opendir("$full_path")) {
    while (false !== ($file = readdir($handle))) {
        if(is_dir($full_path."/".$file)) {
          if ($file != '.' && $file != '..')
            $instances[] = $file;
        }
    }
}

// Turn them into aliases so we just have to type @instance
foreach ($instances as $instance) {

    $site_list = [];

    // Look at each instance
    $site_paths = $full_path . "/" . $instance;

    if ($file_handle = opendir("$site_paths")) {
      // List out the folders in this instance
      while (false !== ($site_folder = readdir($file_handle))) {

        if(is_dir($site_paths."/".$site_folder)) {
          // If the folder represents a drupal site
          if ($site_folder != '.' && $site_folder != '..')
            // Add it to this instances list
            $site_list[] = '@' . $site_folder;
        }
      }
    }


   $aliases[$instance] = array(
            'site-list' => $site_list,
        );
}
print_r($aliases);

The cheeky print_r on the end shows my array as

 [partnership] => Array
        (
            [site-list] => Array
                (
                    [0] => @www.1.co.uk
                    [1] => @www.2.org
                    [2] => @www.3.org.uk
                    [3] => @www.4.org
                    [4] => @www.5.eu
                    [5] => @www.6.net
                    [6] => @www.7.com
                    [7] => @www.8-ri-2020.eu
                    [8] => @www.9.edu
                    [9] => @www.10.ac.uk
                    [10] => @www.11.org
                    [11] => @www.12.ac.uk
                    [12] => @www.13.co.uk
                    [13] => @www.14.org.uk
                    [14] => @www.15.ac.uk
                )

        )

I've changed the names to protect the innocent, but they are valid aliases.

When I run "drush @partnership status" I get

drush @partnership status
You are about to execute 'status' non-interactively (--yes forced) on all of the following targets:
Continue?  (y/n): y
Invalid argument supplied for foreach() backend.inc:661 

How do I get drush to actually run through this alias list telling me the status of each site?

  • What output do you get when you run a "drush sa"? What's your version of drush and drupal? – Rick Oct 3 '14 at 19:35
  • Drupal 7.31 - Drush 5.7. Results of drush sa are @7.14 @7.15 @7.16 @7.19 @7.21 @7.31 @corporate @dev @partnership @www.1.co.uk @www.2.org @www.3.org.uk @www.4.org etc... More stuff appears than there are characters in the comments. – Stuart Crouch Oct 6 '14 at 13:36
  • Take a look at the answer from drupal.stackexchange.com/questions/50557, it explains a bit about piping and the drush sa command. Does that get you closer? – Rick Oct 6 '14 at 17:00
0

I found that one of my colleges had written an invalid file in the drush folder. I was writing mine in my ~/.drush folder.

The result was it would run his code, then my code, leaving a big mess that drush could only partially understand

I fixed the incorrect file and the code I posted in the question started working. I can now run drush commands against a site-list.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.