system-config/make_puppet_lp.py

179 lines
5.1 KiB
Python

import sys, subprocess
from launchpadlib.launchpad import Launchpad
from launchpadlib.uris import LPNET_SERVICE_ROOT
cachedir="~/.launchpadlib/cache"
launchpad = Launchpad.login_with('Sync Users', LPNET_SERVICE_ROOT, cachedir)
def get_type(in_type):
if in_type == "RSA":
return "ssh-rsa"
else:
return "ssh-dsa"
for team_todo in ('openstack-ci-admins','openstack-admins'):
team_underscores = team_todo.replace('-','_')
team = launchpad.people[team_todo]
details = [detail for detail in team.members_details]
users=[]
with open("manifests/%s_users.pp" % team_underscores, "w") as user_pp:
user_pp.write("""
class %s_users {
include sudoers
""" % team_underscores)
for detail in details:
sudo = True
member = detail.member
status = detail.status
if (status == "Approved" or status == "Administrator") and member.is_valid:
full_name = member.display_name.replace("'","\\'")
login_name = member.name
ssh_keys = "\\n".join(["%s %s %s" % (get_type(key.keytype), key.keytext, key.comment) for key in member.sshkeys])
ssh_keys = ssh_keys.replace("\n","\\n")
for nick in member.irc_nicknames:
if nick.network == 'ci.openstack.org':
login_name = nick.nickname
user_pp.write("""
group { '%(login_name)s':
ensure => 'present'
}
user { '%(login_name)s':
ensure => 'present',
comment => '%(full_name)s',
home => $operatingsystem ? {
Darwin => '/Users/%(login_name)s',
solaris => '/export/home/%(login_name)s',
default => '/home/%(login_name)s',
},
shell => '/bin/bash',
gid => '%(login_name)s',
groups => ['wheel','sudo','admin'],
membership => 'minimum',
}
file { '%(login_name)shome':
name => $operatingsystem ? {
Darwin => '/Users/%(login_name)s',
solaris => '/export/home/%(login_name)s',
default => '/home/%(login_name)s',
},
owner => '%(login_name)s',
group => '%(login_name)s',
mode => 644,
ensure => 'directory',
}
file { '%(login_name)ssshdir':
name => $operatingsystem ? {
Darwin => '/Users/%(login_name)s/.ssh',
solaris => '/export/home/%(login_name)s/.ssh',
default => '/home/%(login_name)s/.ssh',
},
owner => '%(login_name)s',
group => '%(login_name)s',
mode => 700,
ensure => 'directory',
require => File['%(login_name)shome'],
}
file { '%(login_name)skeys':
name => $operatingsystem ? {
Darwin => '/Users/%(login_name)s/.ssh/authorized_keys',
solaris => '/export/home/%(login_name)s/.ssh/authorized_keys',
default => '/home/%(login_name)s/.ssh/authorized_keys',
},
owner => '%(login_name)s',
group => '%(login_name)s',
mode => 640,
content => "%(ssh_keys)s",
ensure => 'present',
require => File['%(login_name)ssshdir'],
}
file { '%(login_name)sbashrc':
name => $operatingsystem ? {
Darwin => '/Users/%(login_name)s/.bashrc',
solaris => '/export/home/%(login_name)s/.bashrc',
default => '/home/%(login_name)s/.bashrc',
},
owner => '%(login_name)s',
group => '%(login_name)s',
mode => 640,
source => "/etc/skel/.bashrc",
replace => 'false',
ensure => 'present',
}
file { '%(login_name)sbash_logout':
name => $operatingsystem ? {
Darwin => '/Users/%(login_name)s/.bash_logout',
solaris => '/export/home/%(login_name)s/.bash_logout',
default => '/home/%(login_name)s/.bash_logout',
},
source => "/etc/skel/.bash_logout",
owner => '%(login_name)s',
group => '%(login_name)s',
mode => 640,
replace => 'false',
ensure => 'present',
}
file { '%(login_name)sprofile':
name => $operatingsystem ? {
Darwin => '/Users/%(login_name)s/.profile',
solaris => '/export/home/%(login_name)s/.profile',
default => '/home/%(login_name)s/.profile',
},
source => "/etc/skel/.profile",
owner => '%(login_name)s',
group => '%(login_name)s',
mode => 640,
replace => 'false',
ensure => 'present',
}
file { '%(login_name)sbazaardir':
name => $operatingsystem ? {
Darwin => '/Users/%(login_name)s/.bazaar',
solaris => '/export/home/%(login_name)s/.bazaar',
default => '/home/%(login_name)s/.bazaar',
},
owner => '%(login_name)s',
group => '%(login_name)s',
mode => 755,
ensure => 'directory',
require => File['%(login_name)shome'],
}
file { '%(login_name)sbazaarauth':
name => $operatingsystem ? {
Darwin => '/Users/%(login_name)s/.bazaar/authentication.conf',
solaris => '/export/home/%(login_name)s/.bazaar/authentication.conf',
default => '/home/%(login_name)s/.bazaar/authentication.conf',
},
owner => '%(login_name)s',
group => '%(login_name)s',
mode => 640,
content => "[Launchpad]\\nhost = .launchpad.net\\nscheme = ssh\\nuser = %(member_name)s\\n",
ensure => 'present',
require => File['%(login_name)sbazaardir'],
}
""" % dict(login_name=login_name, full_name=full_name, ssh_keys=ssh_keys,
member_name=member.name))
print "User=%s created" % login_name
user_pp.write("""
}
""")