summaryrefslogtreecommitdiffstats
path: root/django/engagementmanager/vm_integration/vm_client.py
blob: 04d77c547c5bf391f8610133dad0442fffbdd011 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#  
# ============LICENSE_START========================================== 
# org.onap.vvp/engagementmgr
# ===================================================================
# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
# ===================================================================
#
# Unless otherwise specified, all software contained herein is licensed
# under the Apache License, Version 2.0 (the “License”);
# you may not use this software 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.
#
#
#
# Unless otherwise specified, all documentation contained herein is licensed
# under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
# you may not use this documentation except in compliance with the License.
# You may obtain a copy of the License at
#
#             https://creativecommons.org/licenses/by/4.0/
#
# Unless required by applicable law or agreed to in writing, documentation
# 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.
#
# ============LICENSE_END============================================
#
# ECOMP is a trademark and service mark of AT&T Intellectual Property.
from django.conf import settings
from django.db.models import Q
from engagementmanager.apps import bus_service
from engagementmanager.bus.messages.activity_event_message import \
    ActivityEventMessage
from engagementmanager.models import VF, Role, IceUserProfile
from engagementmanager.utils.constants import Roles
from engagementmanager.utils.activities_data import \
    VFProvisioningActivityData
import concurrent.futures
import validationmanager.em_integration.vm_api as vm_api
from engagementmanager.service.logging_service import LoggingServiceFactory

logger = LoggingServiceFactory.get_logger()
executor = concurrent.futures.ThreadPoolExecutor(max_workers=4)


def send_jenkins_job_and_gitlab_repo_exists(vf):
    # A signal which check if jenkins job was created and also if gitlab repo
    logger.debug(
        "Sending a call to validation manager. Call=jenkins_job_and_gitlab_repo_exists_callback. vf=%s", vf.uuid)
    is_ready = vm_api.jenkins_job_and_gitlab_repo_exists_callback(vf=vf)
    return is_ready


def send_cl_from_pending_to_automation_event(checkListObj):
    # A signal that is sent when Engagement MAnager moves CL from Pending to
    # Automation (for example when a CL is rejected by other signal from
    # validation manager)
    vf = VF.objects.get(engagement=checkListObj.engagement)
    logger.debug(
        "Sending a call to validation manager. Call=send_cl_from_pending_to_automation_event. checklistUuid=%s", checkListObj.uuid)
    vm_api.cl_from_pending_to_automation_callback(vf=vf, checklist=checkListObj)


def send_ssh_key_created_or_updated_event(user):
    # A signal which is sent from the EM to the VM when a user is adding or
    # updating their ssh key
    logger.debug(
        "Sending a call to validation manager. Call=send_ssh_key_created_or_updated_event. user=%s", user.uuid)
    vm_api.ssh_key_created_or_updated_callback(user=user)
    
def send_create_user_in_rgwa_event(user):
    # A signal which is sent from the EM to the VM when a user is adding or
    # updating their ssh key
    logger.debug(
        "Sending a call to validation manager. Call=send_create_user_in_rgwa_event. user=%s", user.full_name)
    vm_api.create_user_rgwa(user=user)


def send_remove_all_standard_users_from_project_event(gitlab, project_id, formatted_vf):
    logger.debug(
        "Sending a call to validation manager. Call=send_remove_all_standard_users_from_project_event.")
    vm_api.remove_all_standard_users_from_project(
        gitlab, project_id, formatted_vf)


def send_get_project_by_vf_event(vf, gitlab):
    if not settings.IS_SIGNAL_ENABLED:
        return None
    logger.debug(
        "Sending a call to validation manager. Call=send_get_project_by_vf_event.")
    vm_api.get_project_by_vf(vf, gitlab)


def send_provision_new_vf_event(vf):
    # A signal which is sent from the EM to the VM when a new VF is created. VM will than create a
    # gitlab repo for that new VF.
    #
    # Note: despite its name, this signal is not used only for new vfs, but to update existing gitlab
    # and jenkins provisioning when a vf changes e.g. when team members are
    # added or removed.
    try:
        vm_api.provision_new_vf_callback(vf=vf) 
        logger.debug(
            "Sending a call to validation manager. Call=send_provision_new_vf_event. vf=%s", vf.uuid)
    except Exception as e:
        el_role = Role.objects.get(name=Roles.el.name)  # @UndefinedVariable
        admin_role = Role.objects.get(
            name=Roles.admin.name)  # @UndefinedVariable
        el_admin_list = IceUserProfile.objects.all().filter(
            Q(role=el_role) | Q(role=admin_role))
        activity_data = VFProvisioningActivityData(
            vf, el_admin_list, vf.engagement, e)
        bus_service.send_message(ActivityEventMessage(activity_data))
        

def send_get_list_of_repo_files_event(vf):
    # A signal which is sent from the EM to the VM when a NextStep is created
    # and we need the VF associated files in the git repository
    files = vm_api.get_list_of_repo_files_callback(vf=vf)
    logger.debug(
        "Sending a call to validation manager. Call=send_get_list_of_repo_files_event. vf=%s", vf.uuid)

    formatted_repo_files = []

    for file in files:
        formatted_repo_files.append(file['name'])
        logger.debug(file['name'])

    return formatted_repo_files


'''''''''''''''''''''''''''
 UTIL FUNCTIONS FOR SIGNALS
'''''''''''''''''''''''''''
    

def fire_event_in_bg(function_name, obj):
    event_function = globals()[function_name]
    logger.debug(
        " . . . . . . . . . . . . Fire event in background started: %s . . . . . . . . .  . . . ", function_name)
    future = executor.submit(event_function, obj)
    logger.debug("Main thread continue without blocking...")