web-dev-qa-db-fra.com

Générer des alias WP-CLI pour chaque site sur plusieurs sites

J'ai quelques sites multisites, chacun comportant plusieurs sites, que je souhaite générer automatiquement @aliases for. Existe-t-il un moyen de synchroniser ces sites en tant qu’alias dans ma liste de sites ?

J'aimerais pouvoir cibler un seul site sans avoir à spécifier --url=http://domain.com/sub-site/ et utiliser la dernière partie de l'URL semble être un nom viable pour le alias .

$ wp site list
+---------+----------------------------------------+---------------------+---------------------+
| blog_id | url                                    | last_updated        | registered          |
+---------+----------------------------------------+---------------------+---------------------+
| 1       | http://domain.com/sub-site/            | 0000-00-00 00:00:00 | 2020-01-00 04:20:00 | 
+---------+----------------------------------------+---------------------+---------------------+


$ wp cli alias
---
@all: Run command against every registered alias.
@sub-site:
  url: http://domain.com/sub-site/
  path: /www/wordpress


$ wp @sub-site theme list
---
...

Je ne peux que trouver les commandes suivantes qui peuvent aider;

Affiche les alias actuels:

$ wp cli alias

Affiche tous les sites

$ wp liste de sites --field = url


(Idéal) Auto générer des alias:

$ wp alias de sites

$ wp cli alias --generate


Quelle que soit la solution, il convient d'inclure le path: vers WordPress pour ce site et (facultatif) de produire des alias uniques qui n'ont pas déjà été ajoutés à ~/.wp-cli/config.yml.


WIP

home=$(wp eval "echo get_home_path();"); url=$(wp eval "echo site_url();"); for site in $(wp site list --field=url | sort); do alias_name=$(sed "s,/,,g" <<< $(sed "s,$url,,g" <<< "$site")); if [ ! -z "$alias_name" ]; then echo -e "@$alias_name:\n url: $site\n path: $home\n"; fi; done;

ou path=$(wp eval "echo get_home_path();"); url=$(wp eval "echo site_url();"); wp site list --field=url | sort | cut -d '/' -f4 | xargs -I '{}' echo -e "@{}:\n url: $url/{}\n path: $path\n"

| sort | sed -r "s#($url)##g" | cut -d '/' -f2 | xargs

| sort | tail -n+2 | cut -d '/' -f 4 | xargs

| sort | cut -d '/' -f4 | xargs

@site-a:
 url: http://domain.com/site-a/
 path: /www/wordpress/

@site-b:
 url: http://domain.com/site-b/
 path: /www/wordpress/

La prochaine étape serait de valider le pseudonyme par rapport aux pseudonymes existants. Et inclure le tri par chemin de site

Trier: sites=$(wp site list --field=url); readarray -t sorted < <(for a in "${sites[@]}"; do echo "$a"; done | sort); for a in "${sorted[@]}"; do echo "$a"; done

Trier: wp site list --field=url | sort

Alias ​​existant: wp cli alias | grep '^@' | grep ':$' | cut -d':' -f3

Générateur d'alias distant (exécuté sur le serveur)

[email protected];cd /www/wordpress/;home=$(wp eval "echo get_home_path();"); url=$(wp eval "echo site_url();"); for site in $(wp site list --field=url); do alias_name=$(sed "s,/,,g" <<< $(sed "s,$url,,g" <<< "$site")); if [ ! -z "$alias_name" ]; then echo -e "@prefix-$alias_name:\n url: $site\n ssh: $ssh$home\n"; fi; done;

3
jgraup

LOCAL


Pour les alias locaux, il est préférable de définir votre chemin à l’avance dans le fichier config.yml. Ensuite, gardez les variables propres en spécifiant uniquement la variable url pour cibler le site. Le tri de la sortie est utile si vous avez une longue liste de sites, car la valeur par défaut est ID de blog (que nous n'utilisons pas).

wp site list --field=url|sort|xargs -I 'SITE' sh -c 'ALIAS=$(cut -d'/' -f4 <<< SITE);if [ ! -z "$ALIAS" ];then echo -e "@$ALIAS:\n url: SITE";fi'

Résultat

path: /www/wordpress/

@site-a:
  url: http://domain.com/site-a/
@site-b:
  url: http://domain.com/site-b/

À DISTANCE


Pour les alias distants, il est préférable de les préfixer par rapport au fichier config.yml. Donc dans ce cas, remote-. Vous pouvez également ajouter le chemin WordPress à la propriété ssh.

HOME=$(wp eval "echo get_home_path();");wp site list --field=url|sort|xargs -I 'SITE' sh -c 'ALIAS=$(cut -d'/' -f4 <<< SITE);if [ ! -z "$ALIAS" ];then echo -e "@remote-$ALIAS:\n url: SITE\n [email protected]$HOME";fi'

Résultat:

@remote-site-a:
  url: http://domain.com/site-a/
  ssh: [email protected]/www/wordpress/
@remote-site-b:
  url: http://domain.com/site-b/
  ssh: [email protected]/www/wordpress/

LISTE ALIASES


aliases=$(wp cli alias | cut -d':' -f1 | grep -e "^@" | cut -d':' -f2 | sort);

ALIAS EXISTANT


aliases=$(wp cli alias | cut -d':' -f1 | grep -e "^@" | cut -d':' -f2 | sort);

search="@site-a"

if ! grep $search <<< "$aliases"; then echo "NOT FOUND"; fi

BASH REFERENCE


  • VAR=$(echo "stuff") - Capturer la sortie
  • HOME=$(wp eval "echo get_home_path();") - Exécuter PHP et affecter à var
  • wp site list --field=url | sort - Trie la liste de sites résultante
  • | xargs -I 'SITE' - Pour la boucle à partir d'un tuyau et utiliser SITE comme variable de valeur
  • | xargs -I % - Choisissez un symbole qui a du sens
  • xargs -I 'ITEM' sh -c 'echo ITEM; echo "2nd";' - Exécuter plusieurs commandes bash
  • cut -d'/' -f4 <<< SITE - Séparer de la variable
  • ALIAS=$(cut -d'/' -f4 <<< SITE) - Fractionner l'URL sur '/', attribuer le 4ème index à var
  • echo -e "\txyz\n\n" - Autoriser les caractères échappés
  • if [ ! -z "$ALIAS" ];then echo -e "";fi - Exécuter sur une variable non vide
  • wp cli alias | grep '^@' | grep ':$' - Plusieurs filtres sur le tableau de résultats
  • grep '^starts-with' - La ligne commence par la valeur
  • grep 'ends-with$' - La ligne se termine par la valeur
  • sed "s,$url,,g" <<< "$site" - la chaîne sed est remplacée par le séparateur ,
  • sed "s/find/replace/g" <<< "$value" - la chaîne sed est remplacée par le séparateur / (non compatible avec les URL)
  • wp site list --field=url | tail -n+2 - Ignorer le premier élément
  • alias_name=$(sed "s,/,,g" <<< $(sed "s,$url,,g" <<< "$site")) - Remplacement de plusieurs chaînes
  • for i in $(wp site list --field=url); do echo $i; done; - Liste en boucle
1
jgraup