Command Line Interface w Application Platform – kompendium cz. II.

CLI

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.