~hopem/charms/precise/ci-configurator/1383923

« back to all changes in this revision

Viewing changes to scripts/query_lp_members.py

  • Committer: JuanJo Ciarlante
  • Date: 2014-05-08 13:27:01 UTC
  • mfrom: (71.1.1 ci-configurator)
  • Revision ID: jjo@canonical.com-20140508132701-gxvv434qnz73iwnl
[jjo, r=Chriss] recurse teams down to every (final) user, merge adapted alexlist's non-restart branch

Show diffs side-by-side

added added

removed removed

Lines of Context:
75
75
with open(GROUPS_CONFIG_FILE, 'r') as f:
76
76
    groups_config = yaml.load(f)
77
77
 
78
 
need_reboot = False
 
78
NEED_FLUSH = False
 
79
SEEN_LOGINS = set()
 
80
 
 
81
# Recurse members_details to return a list of (final)users as a tuples:
 
82
# (login, full_name, email, ssh_keys, openid)
 
83
def get_all_users(members_details, team_name):
 
84
    users = []
 
85
    for detail in members_details:
 
86
        user = None
 
87
 
 
88
        # detail.self_link ==
 
89
        # 'https://api.launchpad.net/1.0/~team/+member/${username}'
 
90
        login = detail.self_link.split('/')[-1]
 
91
 
 
92
        status = detail.status
 
93
        member = launchpad.people[login]
 
94
 
 
95
        if not (status == "Approved" or status == "Administrator"):
 
96
            continue
 
97
        # Avoid re-visiting SEEN_LOGINS
 
98
        if login in SEEN_LOGINS:
 
99
           continue
 
100
        SEEN_LOGINS.add(login)
 
101
        print '{}-entry: {}/{}'.format('T' if member.is_team else 'U', team_name, login)
 
102
 
 
103
        # If is_team recurse down(branch), else add this user details(leaf) to users
 
104
        if member.is_team:
 
105
            users.extend(get_all_users(member.members_details, "{}/{}".format(team_name, member.name)))
 
106
        else:
 
107
            openid = get_openid(login)
 
108
            full_name = member.display_name.encode('ascii', 'replace')
 
109
            email = ''
 
110
            try:
 
111
                email = member.preferred_email_address.email
 
112
            except:
 
113
                email = login
 
114
 
 
115
            ssh_keys = tuple(
 
116
                "{} {} {}".format(get_type(key.keytype), key.keytext, key.comment).strip()
 
117
                for key in member.sshkeys
 
118
            )
 
119
            users.append((login, full_name, email, ssh_keys, openid),)
 
120
    # Return a list with user details tuple
 
121
    return users
 
122
 
79
123
for group, teams in groups_config.items():
80
124
    # create group if not exists
81
125
    try:
82
126
        print "Creating group %s" % group
83
127
        gerrit_client.create_group(group)
84
 
        need_reboot = True
 
128
        NEED_FLUSH = True
85
129
    except:
86
130
        print "Skipping group creation"
87
131
 
91
135
    final_users = []
92
136
    for team_todo in teams:
93
137
        team = launchpad.people[team_todo]
94
 
        details = team.members_details
95
138
        print "Creating users for team %s" % team
96
 
        for detail in details:
97
 
            user = None
98
 
            # detail.self_link ==
99
 
            # 'https://api.launchpad.net/1.0/~team/+member/${username}'
100
 
            login = detail.self_link.split('/')[-1]
101
 
 
102
 
            status = detail.status
103
 
            member = launchpad.people[login]
104
 
 
105
 
            if (status == "Approved" or status == "Administrator") and \
106
 
                (not member.is_team):
107
 
                openid = get_openid(login)
108
 
 
109
 
                full_name = member.display_name.encode('ascii', 'replace')
110
 
 
111
 
                email = ''
112
 
                try:
113
 
                    email = member.preferred_email_address.email
114
 
                except:
115
 
                    email = login
116
 
 
117
 
                ssh_keys = [
118
 
                    "%s %s %s" % (get_type(key.keytype), key.keytext, key.comment)
119
 
                    for key in member.sshkeys
120
 
                ]
121
 
                ssh_keys = [k.strip() for k in ssh_keys]
122
 
 
123
 
                # add user into gerrit for that group
124
 
                final_user = [login, full_name, email, ssh_keys, openid]
125
 
                final_users.append(final_user)
126
 
                need_reboot = True
127
 
    
 
139
        final_users.extend(get_all_users(team.members_details, team_todo))
 
140
 
 
141
    if final_users:
 
142
         NEED_FLUSH = True
 
143
 
128
144
    # add all the users
129
145
    try:
130
146
        gerrit_client.create_users_batch(group, final_users)
131
147
    except Exception as e:
132
148
        print "ERROR creating users %s" % str(e)
133
149
        sys.exit(1)
134
 
            
135
 
if need_reboot:
 
150
 
 
151
if NEED_FLUSH:
136
152
    gerrit_client.flush_cache()
137
 
    stop_gerrit()
138
 
    start_gerrit()
 
153
 
 
154
# Workaround https://github.com/paramiko/paramiko/issues/17
 
155
gerrit_client.ssh.close()