- //populate sdn-controller and ves-endpoint
- struct lyd_node *local_tree = 0;
- int rc = lyd_utils_dup(session_running, "/nts-manager:simulation/sdn-controller", "/nts-network-function:simulation/sdn-controller", &local_tree);
- if(rc != NTS_ERR_OK) {
- log_error("lyd_utils_dup failed");
- return NTS_ERR_FAILED;
+ pthread_mutex_lock(&manager_operations_mutex);
+
+ const char *status = "SUCCESS";
+ char errmsg[256];
+ errmsg[0] = 0;
+
+ while(manager_operations) {
+ //pop operation from list
+ manager_operation_t *oper = manager_operations;
+ manager_operations = manager_operations->next;
+
+ //if operation is RPC first update any *other* fields
+
+ rc = manager_operations_execute(oper);
+ if(rc != NTS_ERR_OK) {
+ log_error("manager_operations_execute failed\n");
+ status = "FAILED";
+ strcpy(errmsg, oper->errmsg);
+ manager_operations_free_oper(oper);
+ break;
+ }
+
+ manager_operations_free_oper(oper);
+ }
+
+ for(int i = 0; i < docker_context_count; i++) {
+ //do any reconfig necesarry
+ for(int j = 0; j < manager_context[i].started_instances; j++) {
+ if(manager_context[i].instance[j].is_configured == false) {
+ rc = manager_actions_config_instance(&manager_context[i], &manager_context[i].instance[j]);
+ if(rc != NTS_ERR_OK) {
+ status = "reconfig FAILED";
+ sprintf(errmsg, "reconfig FAILED - instance %s", manager_context[i].instance[j].container.name);
+ log_error("%s\n", errmsg);
+ }
+ }
+ }
+ }
+
+ rc = manager_sr_on_last_operation_status(status, errmsg);
+ if(rc != NTS_ERR_OK) {
+ log_error("manager_sr_on_last_operation_status failed\n");
+ }
+
+ pthread_mutex_unlock(&manager_operations_mutex);
+ rc = sr_unlock(session_running, NTS_MANAGER_MODULE); //release datastore
+ if(rc != SR_ERR_OK) {
+ log_error("sr_unlock failed\n");
+ }