• ansible执行playbook时间显示的python脚本


    import datetime
    import os
    import time
    from ansible.plugins.callback import CallbackBase
    
    
    class CallbackModule(CallbackBase):
        """
        A plugin for timing tasks
        """
        def __init__(self):
            super(CallbackModule, self).__init__()
            self.stats = {}
            self.current = None
    
        def playbook_on_task_start(self, name, is_conditional):
            """
            Logs the start of each task
            """
    
            if os.getenv("ANSIBLE_PROFILE_DISABLE") is not None:
                return
    
            if self.current is not None:
                # Record the running time of the last executed task
                self.stats[self.current] = time.time() - self.stats[self.current]
    
            # Record the start time of the current task
            self.current = name
            self.stats[self.current] = time.time()
    
        def playbook_on_stats(self, stats):
            """
            Prints the timings
            """
    
            if os.getenv("ANSIBLE_PROFILE_DISABLE") is not None:
                return
    
            # Record the timing of the very last task
            if self.current is not None:
                self.stats[self.current] = time.time() - self.stats[self.current]
    
            # Sort the tasks by their running time
            results = sorted(
                self.stats.items(),
                key=lambda value: value[1],
                reverse=True,
            )
    
            # Just keep the top 10
            results = results[:10]
    
            # Print the timings
            for name, elapsed in results:
                print(
                    "{0:-<70}{1:->9}".format(
                        '{0} '.format(name),
                        ' {0:.02f}s'.format(elapsed),
                    )
                )
    
            total_seconds = sum([x[1] for x in self.stats.items()])
            print("
    Playbook finished: {0}, {1} total tasks.  {2} elapsed. 
    ".format(
                    time.asctime(),
                    len(self.stats.items()),
                    datetime.timedelta(seconds=(int(total_seconds)))
                    )
              )
    

    下面是把这个插件集成到ansible的方法:

    cd /etc/ansible
    mkdir callback_plugins
    cd callback_plugins
    wget https://raw.githubusercontent.com/jlafon/ansible-profile/master/callback_plugins/profile_tasks.py
    ###友提
    ansible2.0以上的版本需要在ansible.cfg中加入
    callback_whitelist = profile_tasks
    

    运行结果如下:

  • 相关阅读:
    += 和 =+
    Ubuntu分区方案(菜鸟方案、常用方案和进阶方案)
    Apache ab测试工具使用方法(无参、get传参、post传参)(转)
    硬盘安装ubuntu遇到的问题
    Promise
    A Kill Cord for your Laptop
    python 2week
    PDCA循环原理
    python自学基础1week
    14链表中倒数第k个结点
  • 原文地址:https://www.cnblogs.com/uglyliu/p/6136685.html
Copyright © 2020-2023  润新知