Have the following function in fabric for adding user accounts.
~/scripts #fab -l
Python source codeAvailable commands:OS_TYPEadduser_createcmd Create command line for adding useradduser_getinfo Prompts for user input for adding usergo The main launcher for adding user
The tasks
@task
@runs_oncedef go():"""The main launcher for adding user """user, uid, comment, group, Group, shell = adduser_getinfo()execute(adduser_createcmd(user, uid, comment, group, Group, shell))@task
@runs_once
def adduser_getinfo ():"""Prompts for user input for adding user """with settings(warn_only=True):df_user = "test"df_uid = "6666"df_comment = "Test User"df_group = "1936"df_Group = "sshusers"df_shell = "/bin/bash"#read user input or use default valuesuser = raw_input ("Enter Username [%s]:" %df_user) or df_user uid = raw_input ("Enter UID # [%s]:" %df_uid) or df_uidcomment = raw_input ("Enter comments [%s]:" %df_comment) or df_commentgroup = raw_input ("Enter main group [%s]:" %df_group) or df_group Group = raw_input ("Enter supplemental group [%s]:" %df_Group) or df_Group shell = raw_input ("Enter shell [%s]:" %df_shell) or df_shellreturn user, uid, comment, group, Group, shell@task
def adduser_createcmd (user='', uid='', comment='', group='', Group='', shell=''):"""Create command line for adding user """#Linux uses the username for main group, solaris uses companynameTYPE = OS_TYPE()if TYPE == 'Linux':Group = "2222,9999"sudo ("useradd -u " + uid + " -c \"" + comment + "\" -G " + Group + " -m " + " -s " + shell + " " + user)else:env.sudo_prefix = "/usr/local/bin/sudo -S -p '%(sudo_prompt)s' "env.shell = "bash --noprofile -l -c "Group = "2345,500"sudo ("/usr/sbin/useradd -u " + uid + " -c \"" + comment + "\" -g " + group + " -G " + Group + " -m " + " -s " + shell + " " + user)
I am new to fabric/python and I wantaed to create a script that will add users on multiple machines. Depending on the type of machine the useradd cmd line changes b/c of different groups. When I run the script it will add the user on the first host specified then error out. I saw from other answers that something is set to none but I'm not sure what is set to none. This is the running output and error.
~/scripts #fab -H ns1,ons2 go
Enter Username [test]:
Enter UID # [6666]:
Enter comments [Test User]:
Enter main group [1936]:
Enter supplemental group [sshusers]:
Enter shell [/bin/bash]:
Traceback (most recent call last):File "/usr/lib/python2.6/site-packages/fabric/main.py", line 743, in main*args, **kwargsFile "/usr/lib/python2.6/site-packages/fabric/tasks.py", line 368, in execute multiprocessingFile "/usr/lib/python2.6/site-packages/fabric/tasks.py", line 264, in _executereturn task.run(*args, **kwargs)File "/usr/lib/python2.6/site-packages/fabric/tasks.py", line 171, in runreturn self.wrapped(*args, **kwargs)File "/usr/lib/python2.6/site-packages/fabric/decorators.py", line 139, in decorateddecorated.return_value = func(*args, **kwargs)File "/home/jespenc/scripts/fabfile.py", line 70, in goexecute(adduser_createcmd(user, uid, comment, group, Group, shell))File "/usr/lib/python2.6/site-packages/fabric/tasks.py", line 321, in executetask = crawl(task, state.commands)File "/usr/lib/python2.6/site-packages/fabric/task_utils.py", line 23, in crawlresult = _crawl(name, mapping)File "/usr/lib/python2.6/site-packages/fabric/task_utils.py", line 14, in _crawlkey, _, rest = name.partition('.')
AttributeError: 'NoneType' object has no attribute 'partition'
Disconnecting from ns1... done.
I'm sure the code is ugly, just something I've pieced together to learn python.