Browse Source

On sort le rsync des fichiers dans synchroBDD dans synchroFichiers

On garde toujours l'option d'appeler le rsync dans synchroBDD via -r ou --rsync
svn/root/trunk
tofulm@gmail.com 2 years ago
parent
commit
1374211a90
  1. 1
      .gitattributes
  2. 29
      README.md
  3. 22
      src/Command/SynchroBdd.php
  4. 102
      src/Command/SynchroFichiers.php

1
.gitattributes

@ -44,6 +44,7 @@ src/Command/SqlShowbase.php -text
src/Command/SqlShowdiff.php -text
src/Command/SqlShowtable.php -text
src/Command/SynchroBdd.php -text
src/Command/SynchroFichiers.php -text
src/Command/SynchroInit.php -text
src/Command/TestSpip.php -text
src/Command/TestStyle.php -text

29
README.md

@ -52,30 +52,37 @@ Dans la version 0.2.3, `spip-cli` permet :
* utiliser les fonctions propre() et typo()
## synchro SPIP
> Synchroniser un spip distant sur un spip local, bdd / rsync / modif des metas
> Synchroniser un spip distant sur un spip local, bdd / fichiers / modif des metas
>
> ATTENTION, pour l'instant ne fonctionne que sur une bdd en mysql
2 actions possibles :
3 actions possibles :
* `spip synchro:init` creation d'un fichier json : synchroSPIP.json à la racine du SPIP, il restera un peu de configuration à faire.
* `spip synchro:bdd` pour lancer la synchro en s'appuyant sur le fichier synchroSPIP.json
* `spip synchro:bdd` pour lancer la synchro de la bdd et la modif des metas
* `spip synchro:fichiers` pour lancer la synchro des fichiers via rsync
Il y a 3 args facultatifs pour : `spip synchro:bdd`
`spip synchro:bdd` : Il y a 3 args facultatifs
* -v : verbeux
* -b ou --backup: forcer le backup local de la bdd
* -r ou --rsync: lancer à la fin les commandes rsync
* -r ou --rsync: lancer à la fin les commandes rsync du script synchro:fichiers
Il y a 2 façons pour ouvrir une connexion ssh :
* via : user / hostName / port
* via: host (il faut l'avoir défini dans .ssh/config)
`spip synchro:fichiers`: Il y a 1 arg facultatif
* -v : verbeux
Fichier de configuration synchroSPIP.json
* Il y a 2 façons pour ouvrir une connexion ssh :
* via : user / hostName / port ex : `ssh toto@spip.net -p 1234`
* via: host (il faut l'avoir défini dans .ssh/config) ex: `ssh mon_host_spip`
* Il faut avoir une cle ssh
* Configuration pour le rsync : Chaque ligne représente : chemin local => chemin distant:
* le chemin local peut-être en relatif
* le chemin distant doit etre en absolue et se terminer par '/'
Configuration pour le rsync :
exemple :
```json
"rsync": {
"IMG": "chemin abs vers IMG/",
"plugins": "chemin abs vers plugins/"
}
```
Chaque ligne représente : local => distant, le chemin distant doit etre en absolue et se terminer par '/'
libre à chacun de mettre les dossiers voulus

22
src/Command/SynchroBdd.php

@ -94,30 +94,10 @@ class SynchroBdd extends Command
if ($this->verbeux) {
$this->io->section('Debut rsync');
}
$this->lancerRsync($config->rsync, $config->config_ssh);
SynchroFichiers::lancerRsync($config->rsync, $config->config_ssh, $this->verbeux, $this->io);
}
}
protected function lancerRsync($Trsync, $config) {
foreach ($Trsync as $local => $distant) {
if ($local and $distant) {
$port = $config->port ? $config->port : 22;
$args = $this->verbeux ? "-azv" : "-az";
$commande_rsync = "rsync -e 'ssh -i ~/.ssh/$config->nom_cle -p $port' $args --delete-after $config->user@$config->hostName:$distant $local";
if ($this->verbeux) {
$this->io->text('commande rsync :');
$this->io->text($commande_rsync);
}
passthru($commande_rsync,$retour);
if ($retour != "0"){
$this->io->error('Erreur Rsync');
} else {
$this->io->success('rsync');
}
}
}
}
protected function synchroBdd($ssh, $local, $serveur, $forcer_backup) {
$passServeur = '-p';

102
src/Command/SynchroFichiers.php

@ -0,0 +1,102 @@
<?php
namespace Spip\Cli\Command;
use Spip\Cli\Application;
use Spip\Cli\Console\Command;
use Spip\Cli\Loader\Spip;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class SynchroFichiers extends Command
{
/** @var Application */
protected $app;
protected function configure() {
$this->setName("synchro:fichiers")
->setDescription("Synchroniser un site BDD / maj des metas / option : rsync d'un dossier")
;
}
protected function execute(InputInterface $input, OutputInterface $output) {
/** @var Spip $spip */
//$this->demarrerSpip();
/*
* SPIP est t'il installe
*/
include_spip('inc/install');
if (!_FILE_CONNECT) {
$this->io->error('Il faut que le SPIP soit installé');
return;
}
/*
* Pour l'instant, cela ne fonctionne que pour une bdd en mysql
*/
$connect = analyse_fichier_connection(_FILE_CONNECT);
$type_bdd = $connect['4'];
if ($type_bdd !== 'mysql') {
$this->io->error('La synchro ne fonctionne qu\'avec une bdd en mysql');
return;
}
/*
* Affichage verbeux avec option -v
*/
if ($output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) {
$this->verbeux = true;
} else {
$this->verbeux = false;
}
$config = $this->recupConfig();
if(empty($config)) {
$this->io->error('le fichier de configuration synchroSPIP.json est vide ou inexistant');
return;
}
/*
* Debut du script Rsync
*/
$this->io->title('Début du script');
if ($this->verbeux) {
$this->io->section('Debut rsync');
}
$this->lancerRsync($config->rsync, $config->config_ssh, $this->verbeux, $this->io);
}
public function lancerRsync($Trsync, $config, $verbeux, $io) {
foreach ($Trsync as $local => $distant) {
if ($verbeux) {
}
$io->text("copie : $distant -> $local");
if ($local and $distant) {
$io->text('');
$port = $config->port ? $config->port : 22;
$args = $verbeux ? "-azv" : "-az";
$commande_rsync = "rsync -e 'ssh -i ~/.ssh/$config->nom_cle -p $port' $args --delete-after $config->user@$config->hostName:$distant $local";
if ($verbeux) {
$io->text('commande rsync :');
$io->text($commande_rsync);
$io->text('');
}
passthru($commande_rsync,$retour);
if ($retour != "0"){
$io->error('Erreur Rsync');
} else {
$io->success('rsync');
}
}
}
}
protected function recupConfig() {
$config = @file_get_contents('synchroSPIP.json');
$config = json_decode($config);
return $config;
}
}
Loading…
Cancel
Save