该函数是用来创建一个access path的,接收的参数有:pid、igid、vid_list、username、password、pgid_list、name、ap_type、desc、rw_state、lunids。具体实现过程如下:
对传入参数进行检查,如果有不合法的参数则抛出异常。
检查chap用户名和密码是否符合要求。
检查指定的pool是否存在。
判断access path名称和iqn是否已经存在。
检查access path的数量是否超过限制。
如果指定了initiator group,则获取该initiator group的信息,并且mapview数量为1。
如果指定了vid_list,则判断传入的volume是否有效。
如果指定了lunids,则判断传入的lunid和vid_list是否匹配。
判断传入vol list是否在其他access path中已经存在。
如果指定了pgid_list,则检查传入的pgid是否有效。
从etcd中获取access path的id号,然后将新创建的access path保存至etcd。
将volume list保存至etcd。
获取pg下的ip列表,以及待添加pg所在的节点,并获取待添加pg对应的tpg_id。
创建proxy。
在各个节点上依次创建access path。
如果创建失败,则回滚之前的操作,并返回异常。
如果创建成功,则向前端发送事件通知,并返回access path的相关信息。