Package: esi-leap
esi-leapesi-leap is an OpenStack service for leasing baremetal nodes, designed to run
on top ofmulti-tenant
Ironic.
It consists of an API that provides endpoints for leasing operations and a
manager service that updates the status of leases and offers as required. See
thedocumentationfor
more info on ESI.InstallationTo install as a package:pip install esi-leapTo install from source:$ git clone https://github.com/CCI-MOC/esi-leap
    $ cd esi-leap
    $ sudo python setup.py installClientesi-leap has a command line client which can be found here:https://github.com/CCI-MOC/python-esileapclientCreate the esi-leap DatabaseThe esi-leap service requires a database to store its information. To set this
up using the MySQL database used by other OpenStack services, run the following
commands, replacing <PASSWORD> with a suitable password and <DATABASE_IP>
with the IP address of your MySQL database (if you're not sure, use localhost
or 127.0.0.1).$ mysql -u root -p
    mysql> CREATE USER 'esi_leap'@'<DATABASE_IP>' IDENTIFIED BY '<PASSWORD>';
    mysql> CREATE USER 'esi_leap'@'%' IDENTIFIED BY '<PASSWORD>';
    mysql> CREATE DATABASE esi_leap CHARACTER SET utf8;
    mysql> GRANT ALL PRIVILEGES ON esi_leap.* TO 'esi_leap'@'<DATABASE_IP>';
    mysql> GRANT ALL PRIVILEGES ON esi_leap.* TO 'esi_leap'@'%';
    mysql> FLUSH PRIVILEGES;If you use this method, the resulting database connection string should be:mysql+pymysql://esi_leap:PASSWORD@DATABASE_IP/esi_leapConfigurationRun the following commands to generate the configuration file and copy it to
the right place:$ tox -egenconfig
    $ sudo mkdir /etc/esi-leap
    $ sudo cp etc/esi-leap/esi-leap.conf.sample /etc/esi-leap/esi-leap.confEdit/etc/esi-leap/esi-leap.confwith the proper values. (see sample config
template below):[DEFAULT]

log_dir=/var/log/esi-leap
transport_url=<transport URL for messaging>

[database]
connection=<db connection string>

# End-user authentication configuration
[keystone_authtoken]
www_authenticate_uri=<public Keystone endpoint>
auth_type=password
auth_url=<keystone auth URL>
username=admin
password=<password>
user_domain_name=Default
project_name=admin
project_domain_name=Default

# esi-leap internal authentication configuration
[keystone]
api_endpoint=<admin Keystone endpoint>
auth_type=password
auth_url=<keystone auth URL>
username=esi-leap
password=<password>
user_domain_name=Default
project_name=service
project_domain_name=Default

[oslo_concurrency]
lock_path=<lock dir>

[oslo_messaging_notifications]
driver=messagingv2
transport_url=<transport URL for messaging>

[ironic]                              # ONLY NECESSARY IF USING IRONIC NODES
auth_type = password
api_endpoint = <ironic API endpoint>
auth_url = <keystone auth URL>
project_name = service
project_domain_name = Default
user_domain_name = Default
username = ironic
password = <ironic password>

[dummy_node]                          # ONLY NECESSARY IF USING DUMMY NODES
dummy_node_dir=/tmp/nodesCreate the OpenStack Service$ openstack user create --domain default --password-prompt esi-leap
    $ openstack role add --project service --user esi-leap admin
    $ openstack service create --name esi-leap lease
    $ openstack endpoint create esi-leap --region RegionOne public http://<YOUR_IP>:7777Run the ServicesStart by instantiating the database:$ sudo esi-leap-dbsync create_schemaOnce that's done, you can run the manager and API services:$ sudo esi-leap-manager
    $ sudo esi-leap-apiInstallation using ContainerizationBy encapsulating the ESI Leap into a container, all the necessary dependencies, configurations and services are bundled into a single package.Please make sure to follow the instructions in theConfigurationsection to generate the esi-leap.conf file.Make sure to follow the instructions in theCreate Openstack Serviceto create the OpenStack service and endpoint.After that build the container image using the podman build command, as Containerfile is located in the current directory. The syntax is as follows:$ podman build -t <image-name> -f Containerfile .Once the container image is built, you can run it using the podman run command. The syntax is as follows:$ podman run --name <container-name> -p <host-port>:<container-port> -d -v <path-to-esi-leap.conf-file>:/etc/esi-leap <image-name>Using Dummy NodesIf you wish to use dummy nodes instead of Ironic nodes, simply specify thedummy_node_diras specified above. Once you do so, add dummy nodes as follows:cat <<EOF > /tmp/nodes/1718
{
    "project_owner_id": "project id of dummy node owner",
    "server_config": {
        "new attribute XYZ": "This is just a sample list of free-form attributes used for describing a server.",
        "cpu_type": "Intel Xeon",
        "cores": 16,
        "ram_gb": 512,
        "storage_type": "samsung SSD",
        "storage_size_gb": 204
    }
}
EOF1718is the dummy node UUID; replace it with whatever you'd like. When creating an offer
for this dummy node, simply specifyresource_typeasdummy_nodeandresource_uuidas1718.