Soar::Registry::Directory

Directory model and providers used by soar registries

Quick start

Example data

mytable = [
  {
    "uuid": "1",
    "email": "[email protected]"
  }, 
  {
    "uuid": "2",
    "email": "[email protected]"
  }
]

Stub provider

Create an instance of the stub provider by passing in the name, primary key and indexes of your table.

> require 'soar/registry/directory'
> provider = Soar::Registry::Directory::Provider::Stub.new({
    table: "mytable",
    index: ["uuid", "email"] 
})

DynamodDb Provider

> provider = Soar::Registry::Directory::Provider::DynamoDb.new({
    table: {
        'name' => 'identity_roles'
        'index' => {
            'partition_key' => 'partition_key'
            'sort_key ' => 'sort_key'
            'global_secondary_index' => ['global_secondary_index1']
        }
    },
    configuration: {
      'region' => 'eu-west-1'
      'endpoint' => 'http://localhost:8000'
      'http_read_timeout' => 1, 
      'retry_limit' => 0
    },
    credentials: {
        'username' => 'username'
        'password' => 'secret'
    }
})

MySQL/MariaDB Provider

Requires libmysqlclient-dev before running bundler.

$ sudo apt-get install libmysqlclient-dev
> provider = Soar::Registry::Directory::Provider::Mysql.new({
    index: ['ID', 'Client_Number', 'Notifyemail_Invoice', 'Login'],
    config: {
      'database' => 'konsoleh_genie'
      'table' => 'Client'
      'host' => '0.0.0.0'
      'port' => 3306
    },
    attributes: ['Client_Number', 'Notifyemail_Invoice'],
    credentials: {
      'username' => 'genie'
      'password' => 'secret'
    }
})

Please note: The mysql dump of the genie database structure is out of date. Updating it should probably be automated. Since the directory is currently only used to search for Client_Number, it's not a priority.

LDAP Provider

> provider = Soar::Registry::Directory::Provider::Ldap.new({
    base: 'ou=people,dc=hetzner,dc=co,dc=za',
    index: ['entryuuid', 'mail'],
    config: {
      'host' => 'localhost',
      'port' => 636
    },
    attributes: ['entryuuid', 'cn', 'mail', 'sn'],
    credentials: {
      'username' => 'cn=admin,dc=hetzner,dc=co,dc=za'
      'password' => 'secret'
    }
})

Please note: Primary key is assumed to be the first element of the index array.

Command to test secure LDAP connection from terminal.

$ ldapsearch -H ldaps://ldap2.cpt1.host-h.net:636 -x -D "[email protected],ou=people,dc=hetzner,dc=co,dc=za" -b "ou=people,dc=hetzner,dc=co,dc=za" -s sub "(objectclass=*)" -W -v -d 5

Command to test LDAP connection from terminal.

$ ldapsearch -h ldapadmin.hetzner.co.za -p 389 -x -D "[email protected],ou=people,dc=hetzner,dc=co,dc=za" -b "dc=hetzner,dc=co,dc=za" -W

The Model

> directory = Soar::Registry::Directory.new(provider)

Tests

Stub provider

Local

$ cucumber

CI

docker-compose --file docker-compose.stub.yml --project-name soar-registry-directory-provider-stub up --abort-on-container-exit --remove-orphans --build --force-recreate
EXIT_CODE=$(docker ps -a -f "name=soarregistrydirectoryproviderstub_tests" -q | xargs docker inspect -f "{{ .State.ExitCode }}")
docker-compose --file docker-compose.stub.yml --project-name soar-registry-directory-provider-stub down --rmi local
exit $EXIT_CODE 

DynamoDb provider

Local

$ docker-compose --file docker-compose.dynamo_db.yml up --remove-orphans
$ CONFIG_FILE=config.dynamo_db.yml TEST_ORCHESTRATION_PROVIDER=DynamoDb cucumber
$ docker-compose --file docker-compose.dynamo_db.yml down local

CI

docker-compose --file docker-compose.ci.dynamo_db.yml --project-name soar-registry-directory-provider-dynamo_db up --abort-on-container-exit --remove-orphans --build --force-recreate
EXIT_CODE=$(docker ps -a -f "name=soarregistrydirectoryproviderdynamodb_tests" -q | xargs docker inspect -f "{{ .State.ExitCode }}")
docker-compose --file docker-compose.ci.dynamo_db.yml --project-name soar-registry-directory-provider-dynamo_db down --rmi local
exit $EXIT_CODE 

LDAP provider

Local

$ docker-compose --file docker-compose.ldap.yml up --remove-orphans
$ CONFIG_FILE=config.ldap.yml TEST_ORCHESTRATION_PROVIDER=Ldap cucumber
$ docker-compose --file docker-compose.ldap.yml down local

CI

docker-compose --file docker-compose.ci.ldap.yml --project-name soar-registry-directory-provider-ldap up --abort-on-container-exit --remove-orphans --build --force-recreate
EXIT_CODE=$(docker ps -a -f "name=soarregistrydirectoryproviderldap_tests" -q | xargs docker inspect -f "{{ .State.ExitCode }}")
docker-compose --file docker-compose.ci.ldap.yml --project-name soar-registry-directory-provider-ldap down --rmi local
exit $EXIT_CODE 

MySQL provider

Local

$ docker-compose --file docker-compose.mysql.yml up --remove-orphans
$ CONFIG_FILE=config.mysql.yml TEST_ORCHESTRATION_PROVIDER=Mysql cucumber
$ docker-compose --file docker-compose.mysql.yml down --rmi local

CI

docker-compose --file docker-compose.ci.mysql.yml --project-name soar-registry-directory-provider-mysql up --abort-on-container-exit --remove-orphans --build --force-recreate
EXIT_CODE=$(docker ps -a -f "name=soarregistrydirectoryprovidermysql_tests" -q | xargs docker inspect -f "{{ .State.ExitCode }}")
docker-compose --file docker-compose.ci.mysql.yml --project-name soar-registry-directory-provider-mysql down --rmi local
exit $EXIT_CODE