FreeIPA创建删除用户时,调用自定义脚本

在我们的环境中,hadoop集群中的kerberos用户是通过Freeipa创建的。但是如果我们希望freeipa在创建用户的时候,
能够帮我们做一些前置的动作。此时可能就比较麻烦。


下面通过一个例子,来说明freeipa如何在创建或删除用户时调用我们自己定义的脚本。


1. 修改/etc/ipa/default.conf,将用户自定义的脚本增加到配置项中
如下例,增加自定义脚本test.sh:
[root@ipa139 ipa]# cat default.conf
 ... ...  
ipa_user_script=/etc/ipa/test.sh


2. 按照上面配置正确配置test.sh,并保证它拥有可执行权限。在我们例子中,其内容如下:
[root@ipa139 ipa]# cat test.sh 
#!/bin/bash


echo "a:$1 u:$2" >> /tmp/ipa_custom_$$


3. 修改ipa的user.py脚本。
这个脚本与python的版本有关,我安装的python为2.6,因此它的位置就在:
[root@ipa139 plugins]# pwd
/usr/lib/python2.6/site-packages/ipalib/plugins
[root@ipa139 plugins]# ll user.py
-rw-r--r--. 1 root root 34124 Nov 27 23:35 user.py
[root@ipa139 plugins]# 


在这个脚本中增加上调用test.sh的语句。
[root@ipa139 plugins]# cat user.py
  ... ... 
from ipapython.ipautil import ipa_generate_password, run  #增加run,后面需要这个函数来执行脚本
  ... ... 


class user_add(LDAPCreate):
    ... ... 


    def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
        .. ... .. 
        ####在post_callback中增加脚本执行的部分信息  -- Begin
        if 'ipa_user_script' in self.api.env:
            try:
                self.log.info("TTTT -- running %s %s %s" % (self.api.env.ipa_user_script, "add", dn))
                run([self.api.env.ipa_user_script, "add", "%s" % dn, user_add.init_passwd])
            except:
                self.log.error("error runing %s" % self.api.env.ipa_user_script)
                pass 
        return dn
       ####在post_callback中增加脚本执行的部分信息  --- End




api.register(user_add)




class user_del(LDAPDelete):
    __doc__ = _('Delete a user.')


    msg_summary = _('Deleted user "%(value)s"')


    def pre_callback(self, ldap, dn, *keys, **options):
        assert isinstance(dn, DN)
        check_protected_member(keys[-1])
        return dn
    #### user_del,增加了post_callback,然后再增加执行脚本的动作
    def post_callback(self, ldap, dn, *keys, **options):
        if 'ipa_user_script' in self.api.env:
            try:
                self.log.info("TTTT 22 -- running %s %s %s" % (self.api.env.ipa_user_script, "del", dn))
                run([self.api.env.ipa_user_script, "del", "%s" % dn, user_add.init_passwd])
            except:
                self.log.error("error runing %s" % self.api.env.ipa_user_script)
                pass
        return dn
    #### user_del,增加了post_callback,然后再增加执行脚本的动作  --- End


api.register(user_del)
... .... 


4. 重启ipactl,执行命令如下:
[root@ipa139 ipa]# ipactl restart


5. 验证:
此时我们可以通过ipa ui或者ipa命令来增加删除用户,就可以看到会/tmp目录下面打印相应的信息


6. 总结
1)  ipa的python脚本还是比较清楚的。虽然我不懂python,但是大体的代码结构非常清楚。整个user的处理过程,
一般都分为三个部分:pre_callback, callback与post_callback,我们的执行脚本命令只需要在post_callback中增加即可

2) 但是有一点,因为这个脚本是我们自己手动修改的,因此,如果freeipa 使用多Master的情况,可能就需要自己去拷贝。


参考:https://gist.github.com/jb68/22ef9a8450fe86ae1670b94009f4f4a2


猜你喜欢

转载自blog.csdn.net/eyoulc123/article/details/78656319
今日推荐