Comment écrivez-vous un alias drush pour une boîte Vagrant locale?

9

J'essaie d'écrire un alias drush simple pour me connecter à un site Drupal fonctionnant sur une instance Vagrant locale.

J'ai ce qui suit dans un fichier appelé ~/.drush/l.aliases.drushrc.php:

$aliases['o'] = array(
  'parent' => 'l',
  'root' => '/vagrant/docroot',
  'remote-host' => '127.0.0.1',
  'remote-user' => 'vagrant',
  'ssh-options' => '-p 2222 -i ~/.vagrant.d/insecure_private_key',
  'uri' => '127.0.0.1:8080',
);

L'alias est trouvé. drush saRetour:

l
l.o

Cependant, lorsque je drush @l.o statusne me connecte pas à l'hôte distant:

PHP executable        :  /usr/local/bin/php
PHP configuration     :  /usr/local/etc/php/5.3/php.ini
PHP OS                :  Darwin
Drush version         :  6.1.0
Drush configuration   :

J'ai confirmé que cette commande se connecte avec succès à vagabond:

ssh vagrant@127.0.0.1 -p 2222 -i ~/.vagrant.d/insecure_private_key

La sortie de débogage n'affiche pas de commande SSH pour autant que je sache:

SIG-106:ilob justin$ drush --debug @l.o status
Bootstrap to phase 0. [0 sec, 3.78 MB]                               [bootstrap]
Drush bootstrap phase : _drush_bootstrap_drush() [0.01 sec, 3.98 MB] [bootstrap]
Loaded alias @l.o from file /Users/justin/.drush/l.aliases.drushrc.php [0.01 sec, 3.99 MB]                                                                        [notice]
Cache MISS cid: 6.1.0-commandfiles-0-807b6772846e18b2741e8d5b7119b4cc [0.01 sec, 4 MB]                                                                             [debug]
Cache SET cid: 6.1.0-commandfiles-0-807b6772846e18b2741e8d5b7119b4cc [0.01 sec, 4.02 MB]                                                                           [debug]
Bootstrap to phase 0. [0.05 sec, 9.56 MB]                                                                                                                      [bootstrap]
Found command: core-status (commandfile=core) [0.08 sec, 9.56 MB]                                                                                              [bootstrap]
Loading outputformat engine. [0.13 sec, 9.6 MB]                                                                                                                   [notice]
Calling hook drush_core_status [0.14 sec, 9.65 MB]                                                                                                                 [debug]
Returned from hook drush_core_status [0.14 sec, 9.66 MB]

Je sais que je dois faire quelque chose de stupide mais je ne le vois pas.

Justin
la source
Que drush --debug @l.o statusmontre-t-on? La commande ssh exacte doit être enterrée dans la sortie.
mpdonadio
FWIW, j'utilise toujours .ssh / config pour configurer les informations de connexion SSH au lieu des options drush.
mpdonadio
Hmm, il n'y a aucune commande ssh d'aucune sorte dans la sortie de débogage. Débogage ajouté ci-dessus.
Justin
D'autres alias non vagabonds mais distants fonctionnent-ils? Le débogage que vous avez publié montre qu'il n'a même pas tenté la connexion à distance (vous devriez voir les lignes commençant par «Commencer la nouvelle répartition via le processus d'invocation» et «Backend invoke: ssh ...»
mpdonadio
Oui, j'en ai beaucoup et ils le font tous.
Justin

Réponses:

6

J'ai pu utiliser l'alias drush avec la configuration suivante:

Supposons deux choses:

  • vagrant box a une sorte d'ip statique (peut être privé, par exemple: 192.168.56.101)

  • L'IP de vagabond est disponible sous forme symbolique (par exemple, nous avons une seule ligne dans / etc / hosts avec ip et hostname). (par exemple: test.site.local).

Étape 1: nous devons copier les paramètres générés par la commande vagrant ssh-config dans $ HOME / .ssh / config

Host test.site.local
    IdentitiesOnly yes
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no
    PasswordAuthentication no
    IdentityFile [path to vagrant private insecure key]

Étape 2: Avec une telle configuration, mon alias était sous la forme suivante:

$aliases['example'] = array(
   'root' => '/var/www',
   'uri' => 'test.site.local',
   'remote-host' => 'test.site.local',
   'remote-user' => 'vagrant',
   'ssh-options' => "-i path_to_insecure_private_key"
);
harijari
la source
C'est une très bonne solution. Je n'ai spécifié aucune option ssh dans mon fichier d'alias ayant utilisé "vagrant ssh-config", tout ce dont j'avais besoin était là.
Angry Dan
Cela a bien fonctionné, bien que dans mon cas, j'ai dû définir root comme suit: 'root' => '/ vagrant / docroot'
ognockocaten
L'utilisation en /dev/nulltant que fichier d'hôtes connu entraîne un avertissement à chaque exécution du drush. Je lui indique HOME/.ssh/known_hosts_vagrantd'utiliser un fichier séparé. Ensuite, l'avertissement ne s'affiche qu'une seule fois.
Tim
3

Le personnage ~est développé par Bash. Drush ne fournit pas ce même service, vous devez donc le remplacer ~par le chemin d'accès à votre répertoire personnel.

Ainsi, par exemple:

$home = drush_server_home();
$aliases['o'] = array(
  'parent' => 'l',
  'root' => '/vagrant/docroot',
  'remote-host' => '127.0.0.1',
  'remote-user' => 'vagrant',
  'ssh-options' => "-p 2222 -i $home/.vagrant.d/insecure_private_key",
  'uri' => '127.0.0.1:8080',
);

Ce n'est pas testé, mais cela devrait fonctionner, à l'exception de toute faute de frappe simple.

MISE À JOUR:

Je pense que je vois un bug Drush ici. Drush va supposer que 127.0.0.1 retourne sur la machine locale, et décidera de ne pas utiliser ssh w / out, même en tenant compte des implications de -p dans ssh-options. Cela va nécessiter un correctif à Drush pour corriger. function drush_is_local_host()dans environment.inc .

NUMÉRO SUR GITHUB:

Veuillez mettre tous les commentaires concernant les correctifs potentiels dans le problème Github, Drush backend invoke ne prend pas en compte le numéro de port lors de la décision locale ou distante .

greg_1_anderson
la source
Ça n'a pas marché. Mais je ne connaissais pas drush_server_home (). Merci! Je dépanne.
Justin
3

J'ai contourné cela en faisant simplement une vérification de Drush dans mon fichier settings.php local via php_sapi_name() == 'cli'et en mettant à jour ma base de données et les chaînes de connexion memcache vers Vagrant, comme ceci:

if (php_sapi_name() == 'cli') {
  $databases['default']['default']['port'] = '3307';

  $conf['memcache_servers'] = array(
    '127.0.0.1:11212' => 'default',
  );
}
Justin
la source