Ludzie podobno dzielą się na tych, którzy najpierw analizują i ewentualnie działają oraz na tych, którzy eksperymentują. Ci pierwsi, zanim skoczą, zbadają odległość od brzegu, głębokość wody, a może i jej skład. Ci drudzy skoczą i sprawdzą, co się stanie. Po lekturze całej serii kompendium o CLI będzie można skakać na główkę w CLI bezpiecznie ;) Zapraszam wszystkich do lektury.
Aby z łatwością poruszać się po CLI, warto wiedzieć, w jakich aspektach jest ona podobna do powłoki bash, co to znaczy, że jest hierarchiczna i kontekstowa oraz znać format wpisywanych poleceń. Zatem po kolei.
W przykładach będziemy operować na trybie domain z „fabrycznymi” ustawieniami. Zatem z folderu bin w dystrybucji EuroAP lub pokrewnej platformie aplikacji uruchamiamy:
/demo/EuroAP-7.1/bin > ./domain.sh
a w innym oknie terminala:
/demo/EuroAP-7.1/bin > ./jboss-cli.sh --connect
CLI w EuroAP Application Platform a powłoka bash
Jeśli lubimy się z powłoką bash, to od razu poczujemy się jak w domu. Jeśli nie, to szybko zauważymy, że CLI jest naprawdę łatwe w obsłudze. Przede wszystkim obsługuje uzupełnianie po naciśnięciu klawisza Tab (ang. Tab completion). Gdy jesteśmy na szczycie hierarchii, czyli np. zaraz po uruchomieniu CLI, to naciśnięcie Tab podpowie nam następujące możliwości (oczywiście w zależności od wydania i wersji mogą się odrobinę różnić):
[[email protected]:9990 /] : connection-info jdbc-driver-info rollout-plan alias data-source jms-queue run-batch attachment deploy jms-topic set batch deployment-info ls shutdown cd deployment-overlay patch try clear echo pwd unalias command echo-dmr quit undeploy command-timeout help read-attribute unset connect history read-operation version connection-factory if reload xa-data-source
Ogólnie rzecz biorąc, gdy nie mamy pomysłu co zrobić, to naciskamy Tab i CLI prezentuje nam dostępne możliwości. Uzupełnienie po Tab pomaga też uchronić się przed literówkami i przyspiesza wpisywanie poleceń, ponieważ te wpisują się same.
To, co wyświetliło nam się powyżej, to dostępne podstawowe polecenia, które możemy wykonać w każdym miejscu w hierarchii CLI. Od razu rzucają się w oczy znane i lubiane cd
, pwd
, czy ls
. Działają tak jak w powłoce. Dodatkowo dostępne są polecenia typowe dla CLI, rozpoczynające się od :
np. :read-resource
. Format tych poleceń omówimy w 3 części kompendium.
Kolejnym podobieństwem CLI do powłoki bash jest historia. Samą historię możemy wyświetlić poleceniem history
. Poruszamy się po niej strzałkami góra
i dół
. Tak, skróty klawiszowe również działają :D Na przykład do przeszukania używamy Ctrl+R
, do edytowania poleceń Ctrl+strzałki
, do wyczyszczenia okna terminala Ctrl+L
itd.
Ostatnią powłokopodobną właściwością CLI, którą koniecznie trzeba znać, jest możliwość używania przekierowań. Możemy na przykład zapisać do pliku wynik działania komendy.
[[email protected]:9990 /] :read-resource > przekierowania_są_super.txt
Drzewo konfiguracji
Konfiguracja EuroAP i pokrewnych platform jest zapisywana do plików XML. Format XML ma strukturę drzewa. Zatem chodząc po CLI, poruszamy się po drzewie konfiguracji platformy aplikacyjnej. Mówiąc, że CLI jest hierarchiczne, ma się na myśli właściwości wynikające ze struktury drzewa.
Do drzewa konfiguracji możemy się odwoływać albo się po nim poruszać. Zatem poniższe sposoby skonfigurowania źródła danych są równoważne:
[[email protected]:9990 /] /profile=default/subsystem=datasources/data-source=ExampleDS:write-attribute(name=min-pool-size, value=10) [[email protected]:9990 /] /profile=default/subsystem=datasources/data-source=ExampleDS:write-attribute(name=max-pool-size, value=200) [[email protected]:9990 /] /profile=default/subsystem=datasources/data-source=ExampleDS:write-attribute(name=flush-strategy, value=EntirePool)
cd profile=default/subsystem=datasources/data-source=ExampleDS/ [[email protected]:9990 data-source=ExampleDS] :write-attribute(name=min-pool-size, value=10) [[email protected]:9990 data-source=ExampleDS] :write-attribute(name=max-pool-size, value=200 [[email protected]:9990 data-source=ExampleDS] :write-attribute(name=flush-strategy, value=EntirePool)
Jak łatwo zauważyć, do poszczególnych węzłów odwołujemy się jak do plików w bashu – separatorem poszczególnych węzłów jest /
. Jest on także szczytem drzewa, zupełnie jak w strukturze plików w Linuxie. Możemy także używać ścieżek względnych oraz ..
np.:
cd /profile=default/subsystem=datasources/data-source=ExampleDS/ cd / cd profile=default/subsystem=datasources/data-source=ExampleDS/ ../jdbc-driver=h2:read-resource
Kontekstowość
Wyobraźmy sobie, że w tym naszym CLI zamiast po konfiguracji poruszamy się po mieszkaniu. Inne rzeczy możemy robić w kuchni, a inne w łazience. Gdy jesteśmy w kuchni, dostępne mamy tylko te polecenia, które mają sens w kuchni, na przykład: „zaparz herbatę”, „umyj naczynia”. Ale żeby już „umyć zęby”, musimy przejść do łazienki.
Jakie ma to konsekwencje w praktyce?
Weźmy na stół podstawowe polecenia. W trybie domain po naciśnięciu Tab pokazują się nam takie możliwości:
[[email protected]:9990 /] : connection-info jdbc-driver-info rollout-plan alias data-source jms-queue run-batch attachment deploy jms-topic set batch deployment-info ls shutdown cd deployment-overlay patch try clear echo pwd unalias command echo-dmr quit undeploy command-timeout help read-attribute unset connect history read-operation version connection-factory if reload xa-data-source ```
a w trybie standalone takie:
[[email protected]:9990 /] : data-source ls shutdown alias deploy module try attachment deployment-info patch unalias batch deployment-overlay pwd undeploy cd echo quit unset clear echo-dmr read-attribute version command help read-operation xa-data-source command-timeout history reload connect if run-batch connection-info jdbc-driver-info set
Jak widać, zniknęły na przykład "jms-queue" czy "jms-topic", ponieważ w trybie standalone domyślnie wyłączony jest subsystem messagingu.
Sprawa ma się podobnie z poleceniami typowymi dla CLI. Na przykład w kontekście węzła profilu polecenie kopiowania jest jak najbardziej logiczne:
/profile=default:clone(to-profile='clone_of_default')
ale już wewnątrz profilu, w podsystemie, to polecenie nie ma sensu. Nie jest więc dostępne:
[[email protected]:9990 /] /profile=default/subsystem=jpa:clone() { "outcome" => "failed", "failure-description" => "WFLYCTL0031: No operation named 'clone' exists at address [ (\"profile\" => \"default\"), (\"subsystem\" => \"jpa\") ]", "rolled-back" => true }
Omówiliśmy podobieństwa CLI do powłoki bash, drzewo konfiguracji oraz kontekstowość CLI. Aby zupełnie sprawnie i samodzielnie poruszać się w CLI, potrzebujemy zapoznać się z formatem poleceń CLI, czyli przeczytać następną część kompendium wiedzy o CLI, która już niebawem ukaże się na naszym blogu :-) Zasubskrybuj, aby nie przegapić.
Command Line Interface w Application Platform – kompendium cz. I.
Command Line Interface w Application Platform – kompendium cz. II. - ten materiał
Command Line Interface w Application Platform – kompendium cz. III.