Products: ESOS RPC Agent

The Agent Does It All

The ESOS RPC Agent is a light-weight XML-RPC daemon that provides an API to ESOS® disk arrays. The installation of the ESOS RPC Agent is painless as all required libraries and tools are already included in the ESOS® images!

For each ESOS® standalone host or cluster node that you'd like to manage, a license of ESOS RPC Agent is needed. ESOS® arrays that run the RPC Agent can be controlled via ESOS Commander, or directly via the API.

The RPC Agent features nearly 300 individual RPC's spread across various facets of ESOS® storage provisioning such as manipulating hardware RAID controllers (LSI MegaRAID / Adaptec AACRAID), Linux MD software RAID, Logical Volume Management (LVM), ZFS, and many more!

ESOS RPC Agent licenses are tied to a machine ID, but can be transferred (rehost'd) to other ESOS® hosts/nodes if needed.

Sample XML-RPC Code

  • Python Snippet
    # Create the LVM physical volume (PV)
    print('Adding the LVM physical volume...')
    # Create the LVM volume group (VG)
    print('Adding the LVM volume group...')
    proxy.LVMAddVG('test_vg', [partn_dev], False)
    # Create a small LVM LV (we didn't check the size of the VG)
    print('Adding a small test LV...')
    proxy.LVMAddLV('test_vg', 'test_lv', 1.0, 'M', 'linear', -1, -1)
  • C++ Snippet
    // Partition the block device for LVM
    std::cout << "Partitioning the block device..." << std::endl;
    xmlrpc_c::paramList partn_parms;
    xmlrpc_c::rpcPtr partn_dev_rpc_ptr("ESOSPartnWholeDsk", partn_parms);
    partn_dev_rpc_ptr->call(&client, &carriage_parm);
    std::string partn_dev(xmlrpc_c::value_string(
    std::cout << "Newly partitioned device: " << partn_dev << std::endl;
  • Perl Snippet
    # Get all of the block devices
    print "Fetching the list of block devices...\n";
    my @blk_devs = $client->call('ESOSGetBlockDevs')->result;
    my $found_blk_dev = 0;
    my %each;
    for my $item (@blk_devs) {
        for my $each (@$item) {
            if ($each->{'unique_path'} eq $TEST_BLK_DEV) {
                if ($each->{'avail'}) {
                    $found_blk_dev = 1;
  • C Snippet
    /* It's now safe to wipe the test block device (remove disk label) */
    printf("Wiping the test block device...\n");
    xmlrpc_value *wipe_dev_param_ptr = xmlrpc_array_new(&env);
    xmlrpc_value *test_dev_val_ptr = xmlrpc_string_new(&env, TEST_BLK_DEV);
    xmlrpc_array_append_item(&env, wipe_dev_param_ptr, test_dev_val_ptr);
    xmlrpc_client_call2(&env, client_ptr, server_info_ptr,
                        "ESOSWipeBlkDev", wipe_dev_param_ptr, &result_ptr);

Programmatically Control ESOS® Arrays

  • Lots of programming language choices: C, C++, Perl, Python, etc.
  • Uses the popular XML-RPC remote procedure call (RPC) protocol
  • XML-RPC bindings exist for just about every language
  • The HTTPS (TLS) transport is employed for secure communication
  • Authentication is achieved via public-key cryptography
  • Simple subscription license model, includes ESOS® support
  • ESOS® arrays can be manged via a program or ESOS Commander

ESOS RPC Agent (Includes Support) Pricing

ESOS RPC Agent (1 Year)
$999 per one year
1 license / ESOS® server
Installs directly on ESOS®
Maintenance/support, API + ESOS®
Support via email/voice/remote
24x7 online resource access
Control via ESOS® GUI / API
ESOS RPC Agent (3 Year)
$2,099 per three years
1 license / ESOS® server
Installs directly on ESOS®
Maintenance/support, API + ESOS®
Support via email/voice/remote
24x7 online resource access
Control via ESOS® GUI / API
Discount: Save ~30%