This document describes how to setup and use the SlapOS client (called Slapconsole), a utility software to manage SlapOS nodes, instances and the SlapOS Master account on the command line. It is a bare Python console with several global variables defined and initialized so it can interact with a SlapOS Master through the SLAP Library.
To use the SlapOS Client you need a SlapOS-formatted GNU/Linux Server with ssh access and a SlapOS Node installed from packages. It is not necessary to configure the node, the package itself with the respective binaries is all that is required. You will also need a X509 security token from a SlapOS Master (you can use Vifib.com or create your own SlapOS Master).
Slapconsole allows to automatically connect to a SlapOS Master using URL and SSL certificate from a given slapos.cfg
configuration file. This section will outline the steps on how to setup the SlapOS client and console.
$ sudo su
# slapos configure client
SlapOS will use the SSL certificate from a given slapos.cfg
configuration file, namely:
With Slapconsole you can request and manage your instances and install Software Releases on network nodes as if they were managed through the SlapOS Master Dashboard. To associate your node with the master, start by requesting a X509 security token.
In your SlapOS Master Dashboard, start by clicking Account in the side menu and Token in the subheader to request a new security token.
Proceed to request a token. Once it's generated, save the token.
$ sudo su
# slapos configure client
In your terminal run slapos configure client
which will create a number of configuration files. During the process you will be asked to input the token previously created. You should find the following files after configuration:
$HOME/.slapos/slapos-client.cfg
$HOME/.slapos/certificate : Your user SSL Cetificate
$HOME/.slapos/key: Your user SSL Private Key
You can now edit the $HOME/.slapos/slapos-client.cfg
by including aliases:
alias =
webrunner https://lab.nexedi.com/nexedi/slapos/raw/1.0.49/software/slaprunner/software.cfg
Verify the certificates are ok:
# verify certificate
$ /opt/slapos/parts/openssl/bin/openssl x509 -noout -in $HOME/.slapos/client.crt
# verify key
$ /opt/slapos/parts/openssl/bin/openssl rsa -noout -in $HOME/.slapos/client.key -check
No output or positive command states mean everything is ok.
slapos console --cfg ~/.slapos/slapos-client.cfg
Once everything is setup, the console is available at:
slapos console --cfg ~/.slapos/slapos-client.cfg
The following variables are available in the SlapOS Client:
slap.SoftwareProductCollection
, used to retrieve the most suited release URL of a given software, which is passed as attribute. It allows simplifying calls like
request("http://www.url.com/path/to/current/best/known/kvm/software.cfg", "mykvm")
to
request(product.kvm, "mykvm")
slap = slapos.slap.slap()
slap.initializeConnection(
config.master_url,
key_file=config.key_file,
cert_file=config.cert_file
)
kvm
, mysql-5.1
, joomla
, etc., so you can use product.joomla or joomlaThe following methods are available on a SlapOS Client (full api):
slap.registerSupply().supply()
and allows to request installation of a software on a node.slap.registerOpenOrder().request()
and allows to request instances of a software installation on a node.
# supply software installation on a node
supply(product.kvm, "mycomputer")
# request instance on arbitrary node
request(product.kvm, "myuniquekvm")
# request instance on specific node
request(product.kvm, "myotheruniquekvm", filter_kw = {
"computer_guid": "COMP-12345"
})
# request instance, specifying parameters
request(product.kvm, "mythirduniquekvm", partition_parameter_kw = {
"nbd_ip":"2a01:e35:2e27:460:e2cb:4eff:fed9:48dc", "nbd_port":"1024"
})
After installing a software on a node, instances can be requested:
# supply software installation on a node
supply(product.kvm, "mycomputer")
# request instance on arbitrary node
request(product.kvm, "myuniquekvm")
# request instance on specific node
request(product.kvm, "myotheruniquekvm",filter_kw = {
"computer_guid": "COMP-12345"
})
# request instance, specifying parameters
request(product.kvm, "mythirduniquekvm", partition_parameter_kw = {
"nbd_ip":"2a01:e35:2e27:460:e2cb:4eff:fed9:48dc", "nbd_port":"1024"
})
To fetch an instance status, you can use:
# fetch existing instance status
request(product.kvm, "myuniquekvm").getState()
# fetch instance information from launched instance
request(product.kvm, "myuniquekvm").getConnectionParameter("url")
This section includes additional more detailed examples demostrating the use of SlapOS console.
slapos console --cfg ~/.slapos/slapos-client.cfg
Run the console in a terminal:
$ sudo su
# slapos console --cfg ~/.slapos/slapos-client.cfg
instance_a = request(wordpress, "Wordpress A from console")
instance_a.getState()
Traceback (most recent call last):
File "", line 1, in
File "/Library/Python/2.6/site-packages/.../slapos/console.py", line 108, in
slap.registerOpenOrder().request(software_release, reference)
File "/Library/Python/2.6/site-packages/slapos/slap/slap.py", line 162, in request
self._connection_helper.POST('/requestComputerPartition', request_dict)
File "/Library/Python/2.6/site-packages/slapos/slap/slap.py", line 469, in POST
raise ResourceNotReady("%s - %s" % (path, parameter_dict))
ResourceNotReady: /requestComputerPartition
Note, you will receive an exception in case the instance is not ready (most likley not compiled). Retry after a few minutes:
#re-request with existing name to refetch/update parameters
instance_a = request(wordpress, "Wordpress A from console")
instance_a.getState()
# Started
instance_a.getConnectionParameter('url')
$ slapos console --cfg ~/.slapos/slapos-client.cfg
Run the following commands to instantiate a software on a specific node:
$ sudo su
# slapos console --cfg ~/.slapos/slapos-client.cfg
instance_b = request(wordpress, "Wordpress B from console",
filter_kw={ "computer_guid": "COMP-12345" }
)
instance_b.getState()
Traceback (most recent call last):
File "", line 1, in
File "/Library/Python/2.6/site-packages/.../slapos/console.py", line 108, in
slap.registerOpenOrder().request(software_release, reference)
File "/Library/Python/2.6/site-packages/slapos/slap/slap.py", line 162, in request
self._connection_helper.POST('/requestComputerPartition', request_dict)
File "/Library/Python/2.6/site-packages/slapos/slap/slap.py", line 469, in POST
raise ResourceNotReady("%s - %s" % (path, parameter_dict))
ResourceNotReady: /requestComputerPartition
Wait for a few minutes, then retry:
instance_b = request(wordpress, "Wordpress B from console",
filter_kw={ "computer_guid": "COMP-12345" }
)
instance_b.getState()
# Started
instance_b.getConnectionParameter('url')
$ slapos console --cfg ~/.slapos/slapos-client.cfg
Modifying parameters in existing instances works the same way as defining them in new parameters:
$ sudo su
# slapos console --cfg ~/.slapos/slapos-client.cfg
# modify our first instance:
instance_a = request(wordpress, "Wordpress A from console",
partition_parameter_kw={"domain":"mydomain.com"}
)
# wait for a few minutes for the change to be effective:
instance_a = request(wordpress, "Wordpress A from console",
partition_parameter_kw={"domain":"mydomain.com"}
)
instance_a.getConnectionParameter('url')