lvmnps’s documentation

Versions Documentation Status Travis (.org) codecov Test with RabbitMQ

Lvm Network Power Switch

Features

Installation

Install CLU by using PyPI.

$ pip install sdss-clu

Clone this repository.

$ git clone https://github.com/sdss/lvmnps
$ cd lvmnps

Quick Start

Prerequisite

Install RabbitMQ by using apt-get.

$ sudo apt-get install -y erlang
$ sudo apt-get install -y rabbitmq-server
$ sudo systemctl enable rabbitmq-server
$ sudo systemctl start rabbitmq-server

Install pyenv by using pyenv installer.

$ curl https://pyenv.run | bash

You should add the code below to ~/.bashrc by using your preferred editor.

# pyenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv init --path)"
eval "$(pyenv virtualenv-init -)"

pyenv builds Python from source. So you should install build dependencies. For more information, check Common build problems.

$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl

Set the python 3.9.1 virtual environment.

$ pyenv install 3.9.1
$ pyenv virtualenv 3.9.1 lvmnps-with-3.9.1
$ pyenv local lvmnps-with-3.9.1

Install poetry and dependencies. For more information, check sdss/archon.

$ pip install poetry
$ python create_setup.py
$ pip install -e .

Start the actor

Start lvmnps actor.

$ lvmnps start

In another terminal, type clu and lvmnps ping for test.

$ clu
lvmnps ping
     07:41:22.636 lvmnps >
     07:41:22.645 lvmnps : {
         "text": "Pong."
         }

Stop lvmnps actor.

$ lvmnps stop

Config file structure

switches:
    name_your_switch_here:    # should be a unique name
        type: dummy           # currently dummy, iboot, dli
        num: 8                # number of ports
        ports:
          1:
            name: "skyw.pwi"  # should also be a unique name
            desc: "Something that make sense"
    should_be_a_unique_name:
        type: dummy
        ports:
          1:
            name: "skye.pwi"
            desc: "PlaneWavemount Skye"

Status return for all commands

  • if ‘name’ is not defined then the port name will be ‘switch name’.’port number’ eg nps_dummy_1.port1 otherwise ‘name’ from the config file will be used.

  • STATE: 1: ON, 0: OFF, -1: UNKNOWN

    "STATUS": {
     "nps_dummy_1.port1": {
         "STATE": -1,
         "DESCR": "was 1",
         "SWITCH": "nps_dummy_1",
         "PORT": 1
     },
    

Run the example lvmnps_dummy

#> cd lvmnps
#> poetry run lvmnps -vvv -c $(pwd)/python/lvmnps/etc/lvmnps_dummy.yml start

#> poetry run clu
  • status command without parameter returns all ports of all switches.

  • the default is to return only configured ports, otherwise define ‘ouo’ false in the config file, see lvmnps_dummy.yml

    lvmnps status

    12:02:08.649 lvmnps > 12:02:08.660 lvmnps i {

    “STATUS”: {
    “nps_dummy_1.port1”: {

    “STATE”: -1, “DESCR”: “was 1”, “SWITCH”: “nps_dummy_1”, “PORT”: 1 },

    “skye.what.ever”: {

    “STATE”: -1, “DESCR”: “whatever is connected to skye”, “SWITCH”: “nps_dummy_1”, “PORT”: 2 },

    “skyw.what.ever”: {

    “STATE”: -1, “DESCR”: “Something @ skyw”, “SWITCH”: “nps_dummy_1”, “PORT”: 4 },

    “skye.pwi”: {

    “STATE”:-1, “DESCR”: “PlaneWavemount Skye”, “SWITCH”: “skye.nps”, “PORT”: 1 },

    “skyw.pwi”: {

    “STATE”: -1, “DESCR”: “PlaneWavemount Skyw”, “SWITCH”: “nps_dummy_3”, “PORT”: 1 }

    }

    }

  • status command with port name skyw.what.ever

    lvmnps status skyw.what.ever

    12:07:12.349 lvmnps > 12:07:12.377 lvmnps i {

    “STATUS”: {
    “skyw.what.ever”: {

    “STATE”: -1, “DESCR”: “Something @ skyw”, “SWITCH”: “nps_dummy_1”, “PORT”: 4 }

  • status command with switch name nps_dummy_1

    lvmnps status nps_dummy_1

    12:07:12.349 lvmnps > 12:12:21.349 lvmnps i {

    “STATUS”: {
    “nps_dummy_1.port1”: {

    “STATE”: -1, “DESCR”: “was 1”, “SWITCH”: “nps_dummy_1”, “PORT”: 1 },

    “skye.what.ever”: {

    “STATE”: -1, “DESCR”: “whatever is connected to skye”, “SWITCH”: “nps_dummy_1”, “PORT”: 2 },

    “skyw.what.ever”: {

    “STATE”: -1, “DESCR”: “Something @ skyw”, “SWITCH”: “nps_dummy_1”, “PORT”: 4 }

    }

    }

  • status command with switch name nps_dummy_1 and port 4 returns

    lvmnps status nps_dummy_1 4

    12:07:12.349 lvmnps > 12:12:21.349 lvmnps i {

    “STATUS”: {
    “skyw.what.ever”: {

    “STATE”: -1, “DESCR”: “Something @ skyw”, “SWITCH”: “nps_dummy_1”, “PORT”: 4 }

    }

    }

  • the commands on and off use the same addressing scheme as status

Test

poetry run pytest
poetry run pytest -p no:logging -s -vv