api与python源码(api源代码)

本文目录一览:

如何使用Ansible 2的API做python开发

在ansible1.9的时候,API是一个非常简单的东西。官方说“it’s pretty simple”,真是又pretty又simple。

import ansible.runner

runner = ansible.runner.Runner(

module_name=’ping’,

module_args=”,

pattern=’web*’,

forks=10

)

datastructure = runner.run()

到了ansible2.0以后,是“a bit more complicated”,Oh my,简直让人难受。

简洁和灵活是鱼和熊掌。

ansible2.0 API怎么用?

ansible2.0更贴近于ansible cli的常用命令执行方式,不同于上一版本只能发送单个命令或playbook;而更推荐用户在调用ansibleAPI的时候,将playbook的每个task拆分出来,获取每个task的结果。能够跟灵活处理在执行批量作业过程中的各种反馈。

将执行操作的队列模型,包含各类环境参数设置,归结到“ansible.executor.task_queue_manager”类中

将执行过程中的各个task的设置,或者说playbook中的编排内容,归结到“ansible.playbook.play”中

上述两个东西,几乎囊括了可以在执行过程中设置的所有参数,足够灵活,也让人抓狂,相当于需要自己写一个1.9版本中的runner。

他们的确也都是原生类,并非专用于外部调用。

ansible.executor.task_queue_manager

这是ansible的一个内部模块(ansible/executor/task_queue_manager.py)。初始化的源码如下:

class TaskQueueManager:

”’

This class handles the multiprocessing requirements of Ansible by

creating a pool of worker forks, a result handler fork, and a

manager object with shared datastructures/queues for coordinating

work between all processes.

The queue manager is responsible for loading the play strategy plugin,

which dispatches the Play’s tasks to hosts.

”’

def __init__(self, inventory, variable_manager, loader, options, passwords, stdout_callback=None, run_additional_callbacks=True, run_tree=False):

self._inventory = inventory

self._variable_manager = variable_manager

self._loader = loader

self._options = options

self._stats = AggregateStats()

self.passwords = passwords

self._stdout_callback = stdout_callback

self._run_additional_callbacks = run_additional_callbacks

self._run_tree = run_tree

self._callbacks_loaded = False

self._callback_plugins = []

self._start_at_done = False

self._result_prc = None

……

创建时,需要的主要参数包括:

inventory — 由ansible.inventory模块创建,用于导入inventory文件

variable_manager — 由ansible.vars模块创建,用于存储各类变量信息

loader — 由ansible.parsing.dataloader模块创建,用于数据解析

options — 存放各类配置信息的数据字典

passwords — 登录密码,可设置加密信息

stdout_callback — 回调函数

ansible.playbook.play

ansible.playbook是一个原生模块,既用于CLI也用于API。从源码可以看出来:

try:

from __main__ import display

except ImportError:

from ansible.utils.display import Display

display = Display()

ansible.playbook.play(ansible/playbook/play.py)。初始化源码的介绍如下:

__all__ = [‘Play’]

class Play(Base, Taggable, Become):

“””

A play is a language feature that represents a list of roles and/or

task/handler blocks to execute on a given set of hosts.

Usage:

Play.load(datastructure) – Play

Play.something(…)

“””

最后,用task_queue_manager(play)来执行,老规矩,源码的官方解释。

def run(self, play):

”’

Iterates over the roles/tasks in a play, using the given (or default)

strategy for queueing tasks. The default is the linear strategy, which

operates like classic Ansible by keeping all hosts in lock-step with

a given task (meaning no hosts move on to the next task until all hosts

are done with the current task).

”’

一个完整的例子

# -*- coding:utf-8 -*-

# !/usr/bin/env python

#

# Author: Shawn.T

# Email: shawntai.ds@gmail.com

#

# this is the Interface package of Ansible2 API

#

from collections import namedtuple

from ansible.parsing.dataloader import DataLoader

from ansible.vars import VariableManager

from ansible.inventory import Inventory

from ansible.playbook.play import Play

from ansible.executor.task_queue_manager import TaskQueueManager

from tempfile import NamedTemporaryFile

import os

class AnsibleTask(object):

def __init__(self, targetHost):

Options = namedtuple(

‘Options’, [

‘listtags’, ‘listtasks’, ‘listhosts’, ‘syntax’, ‘connection’,’module_path’,

‘forks’, ‘remote_user’, ‘private_key_file’, ‘ssh_common_args’, ‘ssh_extra_args’,

‘sftp_extra_args’, ‘scp_extra_args’, ‘become’, ‘become_method’, ‘become_user’,

‘verbosity’, ‘check’

]

)

# initialize needed objects

self.variable_manager = VariableManager()

self.options = Options(

listtags=False, listtasks=False, listhosts=False, syntax=False, connection=’smart’,

module_path=’/usr/lib/python2.7/site-packages/ansible/modules’, forks=100,

remote_user=’root’, private_key_file=None, ssh_common_args=None, ssh_extra_args=None,

sftp_extra_args=None, scp_extra_args=None, become=False, become_method=None, become_user=’root’,

verbosity=None, check=False

)

self.passwords = dict(vault_pass=’secret’)

self.loader = DataLoader()

# create inventory and pass to var manager

self.hostsFile = NamedTemporaryFile(delete=False)

self.hostsFile.write(targetHost)

self.hostsFile.close()

self.inventory = Inventory(loader=self.loader, variable_manager=self.variable_manager, host_list=self.hostsFile.name)

self.variable_manager.set_inventory(self.inventory)

def ansiblePlay(self, action):

# create play with tasks

args = “ls /”

play_source = dict(

name = “Ansible Play”,

hosts = ‘all’,

gather_facts = ‘no’,

tasks = [

dict(action=dict(module=’shell’, args=args), register=’shell_out’),

dict(action=dict(module=’debug’, args=dict(msg='{{shell_out.stdout}}’)))

]

)

play = Play().load(play_source, variable_manager=self.variable_manager, loader=self.loader)

# run it

tqm = None

try:

tqm = TaskQueueManager(

inventory=self.inventory,

variable_manager=self.variable_manager,

loader=self.loader,

options=self.options,

passwords=self.passwords,

stdout_callback=’default’,

)

result = tqm.run(play)

finally:

# print result

if tqm is not None:

tqm.cleanup()

os.remove(self.hostsFile.name)

self.inventory.clear_pattern_cache()

return result

写一个ansibleTask类,创建了上述的各类必要的配置信息对象,最后使用ansibleTask.ansiblePlay()函数执行。

inventory文件的动态生成

写上面的代码的过程中,碰到一个问题:inventory对象创建时需要一个实体的hosts文件,而文件需要动态生成。

生成的方法参考了这篇牛逼闪闪的文章。使用tempfile.NamedTemporaryFile这个方法来创建一个有名称的临时文件,可以选择关闭后删除或保留。上面的处理办法是:不删除,在执行完毕之后,通过os.remove(self.hostsFile.name)进行删除。

ps.经YiChenWang指出,inventory的创建参数host_list可以使列表。使用以下方式创建inventory也是可以的:

self.inventory = Inventory(loader=self.loader, variable_manager=self.variable_manager, host_list=[‘xx.xx.xx.xx’, ‘xx.xx.xx.xx’])

不过,源码中指出,采用list格式参数是无法加载inventory data的。如果需要加载,还是得使用临时文件的办法。

如何学习Python开源安全框架,并掌握其API

先打好py基础!!!然后边啃边理解更深入且优秀的编程思想!只要哪天你感觉看代码就跟看小说似的无压力,那一切就容易啦。

我读过py好多优秀开源,如sqlmap,wapti,一些优秀库的实现。

然后,得有安全基本功,要不然也没法理解安全类的源码是什么个思想。

最后,得有架构基本功,否则根本不知道这些API为什么存在,框架与插件之间为何这样通信,为什么要这样分模块,有什么地方可以优化的等等。

万事开头难,啃吧,调试吧!越到后面会越轻松,然后来给我点个赞

api接口和python库的区别是什么?

API

接口属于一种操作系统或程序接口,而后两者都属于直接用户接口。

有时公司会将

API

作为其公共开放系统。也就是说,公司制定自己的系统接口标准,当需要执行系统整合、自定义和程序应用等操作时,公司所有成员都可以通过该接口标准调用源代码,该接口标准被称之为开放式

API。

从哪能找到python示例程序或源码

参考资源 1.Python网站,

2.诺基亚论坛,,“Python for Series 60 Platform API参考”

3.诺基亚论坛,,“用Python for Series 60 Platform编程”

4.Python for S60 Wiki

5.Python for S60开发伙伴讨论区

6.更多信息,

游戏算法……这个就复杂了,一个游戏可大可小,涉及的东西博大精深,你的意思应该是想看哈python s60上面的游戏源代码哇,呵呵我没有弄过,其实只要你熟悉这个语言和平台了 就可以按照自己的想法写

写游戏是种想法 python只是工具 s60只是平台, 我记得有个外国超人说过 大概的意思”只要你能读写显存和键盘输入就能写出DOOM来”

如何获取python模块的api

一:用C API为Python写C语言函数,以方便Python中调用 1. 首先实现一个特定原型的函数,用Python C API来实现的话,所有函数必须是这种原型。必须是类似这样的 PyObject *Fun(PyObject *self, PyObject *args) self应该是在用类的时候才会用到

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/293616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-26 13:14
下一篇 2024-12-26 13:14

相关推荐

  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29

发表回复

登录后才能评论