#
# Sample Identities.dat
# This file is for use with the "Default Organization". It is a simple mechanism to have a basic ILM structure to use with
# out-of-the-box tire-kicking, or even for Small companies
#
# For Larger Companies, you will want to create a new class implementing the "Organization" interface, making calls to your ILM, or utilizing
# batch feeds, as is appropriate for your company.
#
# Example Field Layout.  note, in this example, Application IDs and People IDs are mixed.  You may want to split
# out AppIDs, choose your own status indicators, or whatever you use.
#  0 - unique ID
#  1 - full name
#  2 - first name
#  3 - last name
#  4 - phone
#  5 - official email
#  6 - employment status e=employee, c=contractor, a=application, n=no longer with company
#  7 - responsible to (i.e Supervisor for People, or AppOwner, if it's an App ID)
#

iowna|Ima D. Owner|Ima|Owner|314-123-2000|ima.d.owner@people.osaaf.com|e|
mmanager|Mark D. Manager|Mark|Manager|314-123-1234|mark.d.manager@people.osaaf.com|e|iowna
bdevl|Robert D. Developer|Bob|Developer|314-123-1235|bob.d.developer@people.osaaf.com|e|mmanager
mmarket|Mary D. Marketer|Mary|Marketer|314-123-1236|mary.d.marketer@people.osaaf.com|e|mmanager
ccontra|Clarice D. Contractor|Clarice|Contractor|314-123-1237|clarice.d.contractor@people.osaaf.com|c|mmanager
iretired|Ira Lee M. Retired|Ira|Retired|314-123-1238|clarice.d.contractor@people.osaaf.com|n|mmanager

# Portal Identities
portal|ONAP Portal Application|PORTAL|ONAP Application|||a|aaf_admin
shi|ONAP SHI Portal Identity|shi|Portal Application|||a|aaf_admin
demo|PORTAL DEMO|demo|PORTAL|DEMO|||e|aaf_admin
jh0003|PORTAL ADMIN|jh|PORTAL ADMIN|||e|aaf_admin
cs0008|PORTAL DESIGNER|cs|PORTAL DESIGNER|||e|aaf_admin
jm0007|PORTAL TESTER|jm|PORTAL TESTER|||e|aaf_admin
op0001|PORTAL OPS|op|PORTAL OPS|||e|aaf_admin
gv0001|GV PORTAL|gv|PORTAL|||e|aaf_admin
pm0001|PM PORTAL|pm|PORTAL|||e|aaf_admin
gs0001|GS PORTAL|gs|PORTAL|||e|aaf_admin
ps0001|PS PORTAL|ps|PORTAL|||e|aaf_admin

# AAF Defined Users
aaf_admin|AAF Administrator|Mr AAF|AAF Admin|||e|mmanager
deployer|Deployer|Deployer|Depoyer|||e|aaf_admin

# Requested Users
portal_admin|Portal Admin|Portal|Admin|||e|mmanager

# ONAP App IDs
aaf|AAF Application|AAF|Application|||a|aaf_admin
aaf-sms|AAF SMS Application|AAF SMS|Application|||a|aaf_admin
clamp|ONAP CLAMP Application|CLAMP|Application|||a|aaf_admin
aai|ONAP AAI Application|AAI|ONAP Application|||a|aaf_admin
appc|ONAP APPC Application|APPC|ONAP Application|||a|aaf_admin
dcae|ONAP DCAE Application|CLAMP|ONAP Application|||a|aaf_admin
oof|ONAP OOF Application|OOF|ONAP Application|||a|aaf_admin
so|ONAP SO Application|SO|ONAP Application|||a|aaf_admin
sdc|ONAP SDC Application|SDC|ONAP Application|||a|aaf_admin
sdnc|ONAP SDNC Application|SDNC|ONAP Application|||a|aaf_admin
vfc|ONAP VFC Application|VNC|ONAP Application|||a|aaf_admin
policy|ONAP Policy Application|POLICY|ONAP Application|||a|aaf_admin
pomba|ONAP Pomba Application|POMBA|ONAP Application|||a|aaf_admin
holmes|ONAP Holmes Application|HOLMES|ONAP Application|||a|aaf_admin

# VID Identities
vid|ONAP VID Application|VID|ONAP Application|||a|aaf_admin
vid1|ONAP VID Application 1|VID 1|ONAP Application|||a|aaf_admin
vid2|ONAP VID Application 2|VID 2|ONAP Application|||a|aaf_admin

# DMAAP Identities
dmaap-bc|ONAP DMaap BC Application|DMaap BC|ONAP Application|||a|aaf_admin
dmaap-bc-topic-mgr|ONAP DMaap BC Topic Manager|DMaap BC Topic Manager|DMaap BC|||a|aaf_admin
dmaap-bc-mm-prov|ONAP DMaap BC Provisioning Manager|DMaap BC Provision Manager|DMaap BC|||a|aaf_admin
dmaap-dr|ONAP DMaap DR|Prov|DMaap DR|||a|aaf_admin
dmaap-dr-prov|ONAP DMaap DR Prov|Prov|DMaap MR|||a|aaf_admin
dmaap-dr-node|ONAP DMaap DR Node|Node|DMaap MR|||a|aaf_admin
dmaap-mr|ONAP DMaap MR Application|DMaap MR|ONAP Application|||a|aaf_admin

#deprecate these in Dublin
dmaapmr|ONAP DMaap MR Application|DMaap MR|ONAP Application|||a|aaf_admin
#dmaap.mr|ONAP DMaap MR Application|DMaap MR|ONAP Application|||a|aaf_admin

