Geo servershell
-
Upload
jared-erickson -
Category
Technology
-
view
566 -
download
3
description
Transcript of Geo servershell
Geoserver ShellAdminister Geoserver using a CLI
Jared EricksonCUGOS July 2013
Outline• What is Geoserver Shell?
• Why does Geoserver need a CLI?
• What are we administering with CLI?
• How does it work?
• What does it look like in action?
What is it?• Administer Geoserver from a command
line interface (CLI)
• Uses Geoserver Rest interface
• Based on Spring Shell
• Uses GeoServer Manager and GeoTools
• Written in Java
• Open Source MIT License
• Hosted on Github
Why a CLI?
• Web UI is a major feature
• Non developers can load data and styles
• CLI is quick, efficient and scriptable
• Once a script is written it can be replayed on other Geoservers (set up dev, then test, then production)
Geoserver UI
Geoserver Catalog• Workspace
• Namespace
• DataStore
• FeatureType
• CoverageStore
• Coverage
• Layer
• LayerGroups
• Style
• WMSStore
Geoserver Rest
• Administer GeoServer without GUI
• Multiple representations: HTML, JSON, XML
• HTTP Verbs: GET, POST, PUT, DELETE
• HATEOS - linking
• http://docs.geoserver.org/stable/en/user/rest/index.html
• Integrate with 3rd party applications
VerbsCommands Verbs
list GET
get GET
create POST
modify PUT
delete DELETE
Geoserver Rest UI
/geoserver/rest/layers
Client #1 = curl• Upload a Shapefile
• Create a Workspace
curl -v -u admin:geoserver -XPUT -H "Content-type: application/zip" --data-binary @roads.zip http://localhost:8080/geoserver/rest/workspaces/acme/datastores/roads/file.shp
curl -v -u admin:geoserver -XPOST -H "Content-type: text/xml" -d "<workspace><name>acme</name></workspace>" http://localhost:8080/geoserver/rest/workspaces
Client #2 = Python
• gsconfig.py
• https://github.com/dwins/gsconfig.py/wiki
• Used by GeoNode
>>> from geoserver.catalog import Catalog>>> cat = Catalog("http://localhost:8080/geoserver/rest", "admin", "geoserver")>>> cat.get_layers()[Layer[Arc_Sample], Layer[Pk50095], Layer[Img_Sample], ...
>>> that_layer = cat.get_layer("roads")>>> that_layer.enabled = False>>> cat.save(that_layer)
Client #3 = Java
• Geoserver Manager Library
• https://github.com/geosolutions-it/geoserver-manager
GeoServerRESTReader reader = new GeoServerRESTReader(url, user, password);RESTStyleList styleList = reader.getStyles();List<String> names = styleList.getNames();
GeoServerRESTPublisher publisher = new GeoServerRESTPublisher(url, user, password);publisher.createWorkspace(name);
Github
https://github.com/jericks/geoserver-shell
Install
• Download 0.1 release
• https://github.com/jericks/geoserver-shell/releases
• Put bin directory on path
• run gs-shell
• Requires Java
Spring Shell• Open source project from Spring Source
• Shell extracted from Spring Roo
• Spring Roo is a Java RAD tool for creating web apps
Spring Shell
• Interactive shell environment
• Tab completion for commands, arguments, and files
• History support (up and down arrows)
• Knows your commands and when you can use them
Geoserver Shell
• Commands for each major Geoserver Catalog item
• Methods in command construct a URL, create a request body (xml, file) and make an Http Request to Geoserver. The Geoserver response is parsed and displayed to the user
Commandsgeoserver
workspace
version
manifest
namespace
style
template
font
datastore
shapefile
postgis
featuretype
coverage stores
coverage
worldimage
layers
ows
settings
gwc
wmsstore
Workspace Commands• workspace list
• workspace create --name test
• workspace get --name test
• workspace delete --name test
• workspace default get
• workspace default set --name test
Workspacegs-shell> geoserver set --url http://localhost:8080/geoserver
gs-shell> workspace create --name naturalearthtrue
gs-shell> workspace listtoppnurc
gs-shell> workspace get --name naturalearthnaturalearth
Shapefilegs-shell> geoserver set --url http://localhost:8080/geoserver
gs-shell> workspace create --name naturalearthtrue
gs-shell> shapefile zip --shapefile 110m_admin_0_countries.shptrue
gs-shell> shapefile publish --file 110m_admin_0_countries.zip --workspace naturalearthtrue
PostGISgs-shell> geoserver set --url http://localhost:8080/geoservergs-shell> workspace create --name post
gs-shell> postgis datastore create --workspace post --datastore postgis --host localhost --port 5432 --database postgres --schema public --user postgres --password postgrestrue
gs-shell> featuretype list --workspace post --datastore postgis --list availablestatescountriescities
gs-shell> postgis featuretype publish --workspace post --datastore postgis --table 110m-admin-0-countriestrue
GeoTiffgs-shell> geoserver set --url http://localhost:8080/geoserver
gs-shell> coverage store upload --workspace naturalearth --file GRAY_50M_SR_OB.zip --coveragestore world --type worldimage --configure firsttrue
gs-shell> coverage list --workspace naturalearth --coveragestore worldGRAY_50M_SR_OBBLUE_MARBLE
gs-shell> coverage modify --workspace naturalearth --coveragestore world --coverage GRAY_50M_SR_OB --srs EPSG:4326 --enabled truetrue
Stylesgs-shell> style create --file 110m_admin_0_countries.sld --name 110m_admin_0_countriestrue
gs-shell> layer style add --name 110m_admin_0_countries --style 110m_admin_0_countriestrue
gs-shell> layer get --name 110m_admin_0_countries110m_admin_0_countries Title: null Type: VECTOR Abstract: null Default Style: 110m_admin_0_countries Namespace: Type String: VECTOR
gs-shell> layer modify --name 110m_admin_0_countries --defaultStyle 110m_admin_0_countriestrue
Scripts
$ gs-shell --cmdfile mycommands.gs
gs-shell> script --file naturalearth_countries.gs
• Scripts contain the same commands entered interactively
• History support saves session to geoserver-shell.log
Thank you!Jared Erickson
https://github.com/jericks