it-swarm.com.de

Generieren Sie WP-CLI @alias für jede Site auf mehreren Sites

Ich habe ein paar Multisites mit jeweils mehreren Sites, für die ich @aliases automatisch generieren möchte. Gibt es eine Möglichkeit, diese Sites als Aliase in meiner Site-Liste zu synchronisieren?

Ich möchte in der Lage sein, auf eine einzelne Site zuzugreifen, ohne --url=http://domain.com/sub-site/ angeben zu müssen, und die Verwendung des letzten Teils der URL scheint ein brauchbarer Name für das Alias ​​ zu sein.

$ 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
---
...

Ich kann nur die folgenden Befehle finden, die möglicherweise helfen;

Zeigt aktuelle Aliase an:

$ wp cli alias

Zeigt alle Sites an

$ wp site list --field = url


(Ideal) Aliase automatisch generieren:

$ wp site Aliase

$ wp cli alias --generate


Was auch immer die Lösung sein mag, sie sollte den path: für WordPress für diese Site enthalten und (optional) in der Lage sein, eindeutige Aliase zu erstellen, die ~/.wp-cli/config.yml noch nicht hinzugefügt wurden.


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;

oder 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/

Der nächste Schritt wäre, den Alias ​​anhand der vorhandenen Aliase zu validieren. Und Sortierung nach Site-Pfad einschließen

Sortieren: 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

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

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

Remote Alias ​​Generator (auf dem Server ausgeführt)

[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

LOKAL


Für lokale Aliase empfiehlt es sich, den Pfad in der config.yml vorab zu definieren. Halten Sie die Variablen dann ziemlich sauber, indem Sie nur die url angeben, die auf die Site abzielt. Das Sortieren der Ausgabe ist hilfreich, wenn Sie über eine lange Liste von Websites verfügen, da die Standardeinstellung die Blog-ID ist (die wir nicht verwenden).

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'

Ergebnis

path: /www/wordpress/

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

REMOTE


Für entfernte Aliase ist es besser, sie relativ zur config.yml voranzustellen. In diesem Fall also remote-. Sie können auch den WordPress-Pfad auf die Eigenschaft ssh setzen.

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'

Ergebnis:

@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/

LIST ALIASES


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

Bestehende Aliase


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-REFERENZ


  • VAR=$(echo "stuff") - Ausgabe erfassen
  • HOME=$(wp eval "echo get_home_path();") - Führen Sie PHP aus und weisen Sie var zu
  • wp site list --field=url | sort - Sortiert die resultierende Site-Liste
  • | xargs -I 'SITE' - Für Schleife von Pipe und SITE als Wertvariable verwenden
  • | xargs -I % - Wählen Sie ein sinnvolles Symbol
  • xargs -I 'ITEM' sh -c 'echo ITEM; echo "2nd";' - Führen Sie mehrere Bash-Befehle aus
  • cut -d'/' -f4 <<< SITE - Von Variable trennen
  • ALIAS=$(cut -d'/' -f4 <<< SITE) - Teilen Sie die URL auf '/' und weisen Sie var den 4. Index zu
  • echo -e "\txyz\n\n" - Erlaube es, dass Zeichen mit Escapezeichen versehen werden
  • if [ ! -z "$ALIAS" ];then echo -e "";fi - Auf einer nicht leeren Variablen ausführen
  • wp cli alias | grep '^@' | grep ':$' - Mehrere Filter im Ergebnisfeld
  • grep '^starts-with' - Zeile beginnt mit Wert
  • grep 'ends-with$' - Zeile endet mit Wert
  • sed "s,$url,,g" <<< "$site" - sed Zeichenkette durch , Trennzeichen ersetzen
  • sed "s/find/replace/g" <<< "$value" - sed string durch / separator ersetzen (nicht gut mit urls)
  • wp site list --field=url | tail -n+2 - Erstes Element überspringen
  • alias_name=$(sed "s,/,,g" <<< $(sed "s,$url,,g" <<< "$site")) - Ersetzen mehrerer Zeichenfolgen
  • for i in $(wp site list --field=url); do echo $i; done; - Liste durchlaufen
1
jgraup