Automated setup of M-CORD EPC

Change-Id: Ic6935b6a29bc322aa46120aaf421a23dc321cf3d
diff --git a/mcord-ng40-test-playbook.yml b/mcord-ng40-test-playbook.yml
index e64d3fe..89ca318 100644
--- a/mcord-ng40-test-playbook.yml
+++ b/mcord-ng40-test-playbook.yml
@@ -27,6 +27,8 @@
         - "profile_manifests/{{ cord_profile }}.yml"
         - profile_manifests/local_vars.yml
 
+
+
 - name: Run base M-CORD tests
   hosts: head
   become: no
@@ -54,5 +56,12 @@
       - { vm: vspgwu, network: s1u_network }
       - { vm: vspgwu, network: sgi_network }
       - { vm: vspgwu, network: spgw_network }
+    epc_blueprint: build
+    epc_sync_objects:
+      - vspgwu/vspgwutenants
+      - vspgwc/vspgwctenants
+      - venb/venbserviceinstances
   roles:
+    - create-epc
     - test-mcord-base
+    - epc-synced
diff --git a/roles/create-epc/defaults/main.yml b/roles/create-epc/defaults/main.yml
new file mode 100644
index 0000000..542f13d
--- /dev/null
+++ b/roles/create-epc/defaults/main.yml
@@ -0,0 +1,21 @@
+---
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# roles/create-epc/defaults/main.yml
+
+xos_admin_user: "xosadmin@opencord.org"
+xos_admin_pass: "{{ lookup('password', '/opt/credentials/xosadmin@opencord.org') }}"
+epc_blueprint: "build"
\ No newline at end of file
diff --git a/roles/create-epc/tasks/main.yml b/roles/create-epc/tasks/main.yml
new file mode 100644
index 0000000..ddad05f
--- /dev/null
+++ b/roles/create-epc/tasks/main.yml
@@ -0,0 +1,47 @@
+---
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# roles/create-epc/tasks/main.yml
+
+- name: Check for EPC ServiceInstance
+  uri:
+    url: http://localhost/xosapi/v1/vepc/vepcserviceinstances
+    user: "{{ xos_admin_user }}"
+    password: "{{ xos_admin_pass }}"
+    return_content: yes
+  register: result
+
+- name: Get EPC Service ID
+  uri:
+    url: http://localhost/xosapi/v1/vepc/vepcservices
+    user: "{{ xos_admin_user }}"
+    password: "{{ xos_admin_pass }}"
+    return_content: yes
+  register: vepcservice
+  when: not result.json["items"]
+
+- name: Create EPC
+  uri:
+    url: http://localhost/xosapi/v1/vepc/vepcserviceinstances
+    user: "{{ xos_admin_user }}"
+    password: "{{ xos_admin_pass }}"
+    method: POST
+    body:
+      blueprint: "{{ epc_blueprint }}"
+      owner_id: "{{ vepcservice.json['items'][0]['id'] }}"
+      site_id: 1
+    body_format: json
+  when: not result.json["items"]
diff --git a/roles/epc-synced/defaults/main.yml b/roles/epc-synced/defaults/main.yml
new file mode 100644
index 0000000..c621734
--- /dev/null
+++ b/roles/epc-synced/defaults/main.yml
@@ -0,0 +1,21 @@
+---
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# roles/epc-synced/defaults/main.yml
+
+xos_admin_user: "xosadmin@opencord.org"
+xos_admin_pass: "{{ lookup('password', '/opt/credentials/xosadmin@opencord.org') }}"
+epc_sync_objects: []
diff --git a/roles/epc-synced/tasks/main.yml b/roles/epc-synced/tasks/main.yml
new file mode 100644
index 0000000..996a069
--- /dev/null
+++ b/roles/epc-synced/tasks/main.yml
@@ -0,0 +1,29 @@
+---
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# roles/epc-synced/tasks/main.yml
+
+- name: Wait for synchronizers to run
+  uri:
+    url: http://localhost/xosapi/v1/{{ item }}
+    user: "{{ xos_admin_user }}"
+    password: "{{ xos_admin_pass }}"
+    return_content: yes
+  register: result
+  until: result.json["items"] and result.json["items"][0]["backend_status"] == "OK"
+  retries: 20
+  delay: 30
+  with_items: "{{ epc_sync_objects }}"