Example #1
0
 def test_get_slack_username_slack_username(self):
     user = {
         "org_username": "******",
         "slack_username": "******",
     }
     result = integ.get_slack_username(user)
     self.assertEqual(result, "slack")
 def test_get_slack_username_slack_username(self):
     user = {
         'org_username': '******',
         'slack_username': '******',
     }
     result = integ.get_slack_username(user)
     self.assertEqual(result, 'slack')
def get_desired_state(slack):
    desired_state = []
    all_users = queries.get_roles()
    all_clusters = queries.get_clusters(minimal=True)
    clusters = [c for c in all_clusters
                if c.get('auth') and c['auth'].get('team')
                and c.get('ocm')]
    openshift_users_desired_state = \
        openshift_users.fetch_desired_state(oc_map=None)
    for cluster in clusters:
        cluster_name = cluster['name']
        cluster_users = [u['user'] for u in openshift_users_desired_state
                         if u['cluster'] == cluster_name]
        usergroup = cluster['auth']['team']
        try:
            ugid = slack.get_usergroup_id(usergroup)
        except UsergroupNotFoundException:
            logging.warning(f'Usergroup {usergroup} not found')
            continue
        user_names = [slack_usergroups.get_slack_username(u)
                      for u in all_users
                      if include_user(u, cluster_name, cluster_users)]
        users = slack.get_users_by_names(user_names)
        channels = slack.get_channels_by_names([slack.chat_kwargs['channel']])
        desired_state.append({
            "workspace": slack.workspace_name,
            "usergroup": usergroup,
            "usergroup_id": ugid,
            "users": users,
            "channels": channels,
            "description": f'Users with access to the {cluster_name} cluster',
        })

    return desired_state
def get_desired_state(slack):
    """
    Get the desired state of the Slack cluster usergroups.

    :param slack: client for calling Slack API
    :type slack: reconcile.utils.slack_api.SlackApi

    :return: desired state data, keys are workspace -> usergroup
                (ex. state['coreos']['app-sre-ic']
    :rtype: dict
    """
    desired_state = {}
    all_users = queries.get_roles()
    all_clusters = queries.get_clusters(minimal=True)
    clusters = [
        c for c in all_clusters
        if c.get("auth") and c["auth"].get("team") and c.get("ocm")
    ]
    openshift_users_desired_state = openshift_users.fetch_desired_state(
        oc_map=None)
    for cluster in clusters:
        cluster_name = cluster["name"]
        cluster_users = [
            u["user"] for u in openshift_users_desired_state
            if u["cluster"] == cluster_name
        ]
        usergroup = cluster["auth"]["team"]
        try:
            ugid = slack.get_usergroup_id(usergroup)
        except UsergroupNotFoundException:
            logging.warning(f"Usergroup {usergroup} not found")
            continue
        user_names = [
            slack_usergroups.get_slack_username(u) for u in all_users
            if include_user(u, cluster_name, cluster_users)
        ]
        users = slack.get_users_by_names(user_names)
        channels = slack.get_channels_by_names([slack.channel])
        desired_state.setdefault(slack.workspace_name, {})[usergroup] = {
            "workspace": slack.workspace_name,
            "usergroup": usergroup,
            "usergroup_id": ugid,
            "users": users,
            "channels": channels,
            "description": f"Users with access to the {cluster_name} cluster",
        }

    return desired_state