1.phyoneç¼ç¨å¯ä»¥å¹²ä»ä¹ï¼
2.Linux软件管理-YUM工具及源码包
3.å¦ä½ä½¿ç¨Ansible 2çAPIåpythonå¼å
phyoneç¼ç¨å¯ä»¥å¹²ä»ä¹ï¼
python主è¦å¯ä»¥åä»ä¹
python主è¦å¯ä»¥åWebåInternetå¼åãç§å¦è®¡ç®åç»è®¡ãæ¡é¢çé¢å¼åã软件å¼åãå端å¼åçé¢åçå·¥ä½ã
Pythonæ¯ä¸ç§è§£éåèæ¬è¯è¨ãPythonå¯ä»¥åºç¨äºä¼å¤é¢åï¼å¦ï¼æ°æ®åæãç»ä»¶éæãç½ç»æå¡ãå¾åå¤ç带èãæ°å¼è®¡ç®åç§å¦è®¡ç®çä¼å¤é¢åãäºèç½å ¬å¸å¹¿æ³ä½¿ç¨Pythonæ¥åçäºä¸è¬æï¼èªå¨åè¿ç»´ãèªå¨åæµè¯ã大æ°æ®åæãç¬è«ãWebçã
æ©å±èµæ
pythonç主è¦ä¼ç¹ï¼
ç®åæå¦ï¼Pythonæ¯ä¸ç§ä»£è¡¨ç®å主ä¹ææ³çè¯è¨ãé 读ä¸ä¸ªè¯å¥½çPythonç¨åºå°±æè§è ¢ææ¥åæ¯å¨è¯»è±è¯ä¸æ ·ãå®ä½¿ä½ è½å¤ä¸æ³¨äºè§£å³é®é¢èä¸æ¯å»ææç½è¯è¨æ¬èº«ãå ææå ¶ç®åç说æææ¡£ï¼Pythonæå ¶å®¹æä¸æã
è¿è¡é度快ï¼Pythonçåºå±æ¯ç¨Cè¯è¨åçï¼å¾å¤æ ååºå第ä¸æ¹åºä¹é½æ¯ç¨Cåçï¼è¿è¡é度é常快ã
å è´¹ãå¼æºèµæºï¼Pythonæ¯FLOSSï¼èªç±/å¼æ¾æºç 软件ï¼ä¹ä¸ã使ç¨è å¯ä»¥èªç±å°åå¸è¿ä¸ªè½¯ä»¶çæ·è´ãé 读å®çæºä»£ç ã对å®åæ¹å¨ãæå®çä¸é¨åç¨äºæ°çèªç±è½¯ä»¶ä¸ãFLOSSæ¯åºäºä¸ä¸ªå¢ä½å享ç¥è¯çæ¦å¿µã
å¯æ©å±æ§ï¼å¦æéè¦ä¸æ®µå ³é®ä»£ç è¿è¡å¾æ´å¿«æè å¸ææäºç®æ³ä¸å ¬å¼ï¼å¯ä»¥é¨åç¨åºç¨CæC++ç¼åï¼ç¶åå¨Pythonç¨åºä¸ä½¿ç¨å®ä»¬ã
åèè¿éèµææ¥æºï¼ç¾åº¦ç¾ç§-Python
å¦å®pythonå¯ä»¥å¹²ä»ä¹ï¼
综述å¦ä¸ï¼
1ãæ°æ®åæ
ç°å¨æ 论æ¯åªä¸ªè¡ä¸çï¼åæ°æ®åæç人似ä¹é½ç¦»ä¸å¼Pythonï¼å 为Pythonç»ä»ä»¬å¸¦æ¥çå·¥ä½æçæ¯é常ç大ã
2ãèªå¨åæµè¯
ä¸åå ³äºèªå¨åçä¸è¥¿ï¼ä¼¼ä¹Pythoné½å¯ä»¥æ»¡è¶³ï¼Pythonå¯ä»¥æ»¡è¶³å¤§å¤æ°èªå¨åå·¥ä½ï¼ææ¯é¶åå·¥ä½æçã
3ã人工æºè½
ä¸ä¸ªæ¶ä»£å°±æ¯äººå·¥æºè½æ¶ä»£ï¼å¾å¤äººé½å¨å ³æ³¨ï¼èæ们çPythonåæ ·å¯ä»¥å人工æºè½ï¼è¿æ¯ä¸ä¸ªæ½åæ大çéæ©æ¹åã
Pythonç®ä»
Pythonç±è·å °æ°å¦å计ç®æºç§å¦ç 究å¦ä¼çGuidovanRossumäºå¹´ä»£å设计ï¼ä½ä¸ºä¸é¨å«åABCè¯è¨çæ¿ä»£åãPythonæä¾äºé«æ档宴çé«çº§æ°æ®ç»è¡æ°é¶æï¼è¿è½ç®åææå°é¢å对象ç¼ç¨ãPythonè¯æ³åå¨æç±»åï¼ä»¥å解éåè¯è¨çæ¬è´¨ï¼ä½¿å®æ为å¤æ°å¹³å°ä¸åèæ¬åå¿«éå¼ååºç¨çç¼ç¨è¯è¨ï¼éççæ¬çä¸ææ´æ°åè¯è¨æ°åè½çæ·»å ï¼éæ¸è¢«ç¨äºç¬ç«çã大å项ç®çå¼åã
Pythonå¯ä»¥ç¨æ¥å¹²ä»ä¹ï¼1ãåæ¥å¸¸ä»»å¡ï¼æ¯å¦ä¸è½½è§é¢ãMP3ãèªå¨åæä½excelãèªå¨åé®ä»¶ã
2ãåç½ç«å¼åãwebåºç¨å¼åï¼å¾å¤èåçç½ç«åç¥ä¹ãYouTubeå°±æ¯Pythonåçã
许å¤å¤§åç½ç«å°±æ¯ç¨Pythonå¼åçï¼ä¾å¦YouTubeãInstagramï¼è¿æå½å çè±ç£ãå¾å¤å¤§å ¬å¸ï¼å æ¬GoogleãYahooçï¼çè³NASAï¼ç¾å½èªç©ºèªå¤©å±ï¼é½å¤§éå°ä½¿ç¨Pythonã
3ãåç½ç»æ¸¸æçåå°ï¼å¾å¤å¨çº¿æ¸¸æçåå°é½æ¯Pythonå¼åçã
4ãç³»ç»ç½ç»è¿ç»´
Linuxè¿ç»´æ¯å¿ é¡»èä¸ä¸å®è¦ææ¡Pythonè¯è¨ï¼å®å¯ä»¥æ»¡è¶³Linuxè¿ç»´å·¥ç¨å¸çå·¥ä½éæ±æåæçï¼æ»èæåèªå·±çè½åï¼è¿ç»´å·¥ç¨å¸éè¦èªå·±ç¬ç«å¼åä¸ä¸ªå®æ´çèªå¨åç³»ç»æ¶ï¼è¿ä¸ªæ¶åææ¯çæ£ä»·å¼çä½ç°ï¼æè½è¯æèªèº«çè½åï¼è®©èæ¿éè§ã
5ã3D游æå¼å
Pythonä¹å¯ä»¥ç¨æ¥å游æå¼åï¼å 为å®æå¾å¥½ç3D渲æåºå游æå¼åæ¡æ¶ï¼ç®åæ¥è¯´å°±æå¾å¤ä½¿ç¨Pythonå¼åç游æï¼å¦è¿ªæ¯å°¼å¡éåãé»æä¹åã
6ãç§å¦ä¸æ°å计ç®
æ们é½ç¥éç°å¨æ¥ä¸´äºå¤§æ°æ®çæ¶ä»£ï¼æ°æ®å¯ä»¥è¯´æä¸åé®é¢çåå ï¼ç°å¨å¾å¤åæ°æ®åæçä¸æ¯åæ¥é£ä¹ç®åï¼Pythonè¯è¨æ为äºåæ°æ®åæå¸ç第ä¸é¦éï¼å®åæ¶å¯ä»¥ç»å·¥ä½å¸¦æ¥å¾å¤§çæçã
7ã人工æºè½
人工æºè½æ¯ä¸é¨æå¯æææ§çç§å¦ï¼ä»äºè¿é¡¹å·¥ä½çäººå¿ é¡»æå¾è®¡ç®æºç¥è¯ï¼å¿çå¦åå²å¦ã人工æºè½æ¯å æ¬åå广æ³çç§å¦ï¼å®ç±ä¸åçé¢åç»æï¼å¦æºå¨å¦ä¹ ï¼è®¡ç®æºè§è§ççï¼æ»ç说æ¥ï¼äººå·¥æºè½ç 究çä¸ä¸ªä¸»è¦ç®æ æ¯ä½¿æºå¨è½å¤èä»»ä¸äºé常éè¦äººç±»æºè½æè½å®æçå¤æå·¥ä½ãPythonè¯è¨å¯¹äºäººå·¥æºè½æ¥è¯´æ¯æ好çè¯è¨ãç®å好å¤äººé½å¼å§å¦ä¹ 人工æºè½+Pythonå¦ç§ã
8ãç½ç»ç¬è«
ç¬è«æ¯å±äºè¿è¥çæ¯è¾å¤çä¸ä¸ªåºæ¯å§,æ¯å¦è°·æçç¬è«æ©æå°±æ¯ç¨è·Pythonåç.å ¶ä¸æä¸ä¸ªåºå«Requests,è¿ä¸ªåºæ¯ä¸ä¸ªæ¨¡æHTTP请æ±çä¸ä¸ªæè¡åº,é常çåºå!å¦è¿Pythonç人没æä¸ç¥éè¿ä¸ªåºå§,ç¬ååçæ°æ®åæä¸è®¡ç®æ¯Pythonæ为æ é¿çé¢åï¼é常æç©å®¹ææ´åãä¸è¿ç®åPythonæ¯è¾æµè¡çç½ç»ç¬è«æ¡æ¶æ¯åè½é常强大çscrapyã
9ãæ°æ®åæ
ä¸è¬æ们ç¨ç¬è«ç¬å°äºå¤§éçæ°æ®ä¹åï¼æ们éè¦å¤çæ°æ®ç¨æ¥åæï¼ä¸ç¶ç¬è«ç½ç¬äºï¼æ们æç»çç®çå°±æ¯åææ°æ®ï¼å¨è¿æ¹é¢å ³äºæ°æ®åæçåºä¹æ¯é常ç丰å¯çï¼åç§å¾å½¢åæå¾çé½å¯ä»¥ååºæ¥ãä¹æ¯é常çæ¹ä¾¿ï¼å ¶ä¸è¯¸å¦Seabornè¿æ ·çå¯è§ååºï¼è½å¤ä» ä» ä½¿ç¨ä¸ä¸¤è¡å°±å¯¹æ°æ®è¿è¡ç»å¾ï¼èå©ç¨Pandasånumpyãscipyåå¯ä»¥ç®åå°å¯¹å¤§éæ°æ®è¿è¡çéãåå½ç计ç®ã
èåç»å¤æ计ç®ä¸ï¼å¯¹æ¥æºå¨å¦ä¹ ç¸å ³ç®æ³ï¼æè æä¾Web访é®æ¥å£ï¼ææ¯å®ç°è¿ç¨è°ç¨æ¥å£ï¼é½å¸æ£åé常ç®åã
pythonè½åä»ä¹pythonè½å¤åºç¨çé¢åæ常è§è½¯ä»¶å¼åãæ°æ®åæä¸ç§å¦è®¡ç®ãèªå¨åè¿ç»´æåå ¬æçå·¥å ·ãäºè®¡ç®ãwebå¼åãç½ç»ç¬è«ãæ°æ®åæã人工æºè½çã
1ã常è§è½¯ä»¶å¼å
Pythonæ¯æå½æ°å¼ç¼ç¨åOOPé¢å对象ç¼ç¨ï¼è½å¤æ¿æ ä»»ä½ç§ç±»è½¯ä»¶çå¼åå·¥ä½ï¼å æ¤å¸¸è§ç软件å¼åãèæ¬ç¼åãç½æ¬å®´å¯ç»ç¼ç¨çé½å±äºæ é è½åã
2ãæ°æ®åæä¸ç§å¦è®¡ç®
éçNumPyï¼SciPyï¼Matplotlibï¼Enthoughtlibrarysçä¼å¤ç¨åºåºçå¼åï¼Pythonè¶æ¥è¶éåäºåç§å¦è®¡ç®ãç»å¶é«è´¨éç2Då3Då¾åã
3ãèªå¨åè¿ç»´æåå ¬æçå·¥å ·
è¿å ä¹æ¯Pythonåºç¨çèªçå°ï¼ä½ä¸ºè¿ç»´å·¥ç¨å¸é¦éçç¼ç¨è¯è¨ï¼Pythonå¨èªå¨åè¿ç»´æ¹é¢å·²ç»æ·±å ¥äººå¿ï¼æ¯å¦SaltstackåAnsibleé½æ¯å¤§åé¼é¼çèªå¨åå¹³å°ã
4ãäºè®¡ç®
å¼æºäºè®¡ç®è§£å³æ¹æ¡OpenStackå°±æ¯åºäºPythonå¼åçï¼æäºè®¡ç®çåå¦é½æçã
5ãwebå¼å
åºäºç¥¥æ¹PythonçWebå¼åæ¡æ¶å¾å¤ï¼æ¯å¦è³çè½è¯¦çDjangoï¼è¿äº®å¤æTornadoï¼Flaskãå ¶ä¸çPython+Djangoæ¶æï¼åºç¨èå´é常广ï¼å¼åé度é常快ï¼å¦ä¹ é¨æ§ä¹å¾ä½ã
pythonå¯ä»¥åä»ä¹ï¼python主è¦å¯ä»¥åWebåInternetå¼åãç§å¦è®¡ç®åç»è®¡ãæ¡é¢çé¢å¼åã软件å¼åãå端å¼åã
Pythonå¯ä»¥åºç¨äºä¼å¤é¢åï¼å¦ï¼æ°æ®åæãç»ä»¶éæãç½ç»æå¡ãå¾åå¤çãæ°å¼è®¡ç®åç§å¦è®¡ç®çä¼å¤é¢åãäºèç½å ¬å¸å¹¿æ³ä½¿ç¨Pythonæ¥åçäºä¸è¬æï¼èªå¨åè¿ç»´ãèªå¨åæµè¯ã大æ°æ®åæãç¬è«ãWebçã
æå±èµæ
Pythonæ¯ä¸ç§è§£éåèæ¬è¯è¨ãPythonæ¯å®å ¨é¢å对象çè¯è¨ãå½æ°ã模åãæ°åãå符串é½æ¯å¯¹è±¡ã并ä¸å®å ¨æ¯æ继æ¿ãéè½½ãæ´¾çãå¤ç»§æ¿ï¼æçäºå¢å¼ºæºä»£ç çå¤ç¨æ§ã
Pythonæ¯æéè½½è¿ç®ç¬¦åå¨æç±»åãç¸å¯¹äºLispè¿ç§ä¼ ç»çå½æ°å¼ç¼ç¨è¯è¨ï¼Python对å½æ°å¼è®¾è®¡åªæä¾äºæéçæ¯æãæ两个æ ååº(functools,itertools)æä¾äºHaskellåStandardMLä¸ä¹ ç»èéªçå½ç£¨ç¦ æ°å¼ç¨åºè®¾è®¡å·¥å ·ã
pythonç主è¦ä¼ç¹ï¼
ç®åæå¦ï¼Pythonæ¯ä¸ç§ä»£è¡¨ç®å主ä¹ææ³çè¯è¨ãé 读ä¸ä¸ªè¯å¥½çPythonç¨åºå°±æè§åæ¯å¨è¯»è±è¯ä¸æ ·ãå®ä½¿ä½ è½å¤ä¸æ³¨äºè§£å³é®é¢èä¸æ¯å»ææç½è¯è¨æ¬èº«ãå ææå ¶ç®åç说æææ¡£ï¼Pythonæå ¶å®¹æä¸æã
è¿è¡é度快ï¼Pythonçåºå±æ¯ç¨Cè¯è¨åçï¼å¾å¤æ ååºå第ä¸æ¹åºä¹é½æ¯ç¨å¥½åCåçï¼è¿è¡é度é常快ã
å è´¹ãå¼æºèµæºï¼Pythonæ¯FLOSSï¼èªç±/å¼æ¾æºç 软件ï¼ä¹ä¸ã使ç¨è å¯ä»¥èªç±å°åå¸è¿ä¸ªè½¯ä»¶çæ·è´ãé 读å®çæºä»£ç ã对å®åæ¹å¨ãæå®çä¸é¨åç¨äºæ°çèªç±è½¯ä»¶ä¸ãFLOSSæ¯åºäºä¸ä¸ªå¢ä½å享ç¥è¯çæ¦å¿µã
å¯æ©å±æ§ï¼å¦æéè¦ä¸æ®µå ³é®ä»£ç çè¢å°è¿è¡å¾æ´å¿«æè å¸ææäºç®æ³ä¸å ¬å¼ï¼å¯ä»¥é¨åç¨åºç¨CæC++ç¼åï¼ç¶åå¨Pythonç¨åºä¸ä½¿ç¨å®ä»¬ã
Linux软件管理-YUM工具及源码包
YUM基本概述 yum是RedHat及CentOS中的软件包管理器,提供自动解决依赖性关系、通过互联网下载以rpm结尾的包、安装软件包、简化命令等众多优势。具体来说,成都孕妇吃溯源码燕窝干盏包含以下几点: 联网获取软件 基于RPM管理 自动解决依赖 命令简单好记 遵循生产最佳实践 YUM源的配置 为了成功使用yum工具安装或更新软件或系统,需要配置一个包含各种rpm软件包的repository,称为yum源或yum仓库。该仓库可为本地或网络源。 BASE源:各大镜像源,如阿里云、清华大学、、华为云、金榜藏书app源码中国科学技术大学等。 EPEL源:安装其他特定源,如nginx、zabbix、saltstack等。 YUM实践案例 使用yum工具时,可执行以下操作: 查询软件包:使用yum search关键字 安装软件包:使用yum install 软件包名称 重装软件包:使用yum reinstall 软件包名称 更新软件包:使用yum update 软件包名称 删除软件包:使用yum remove 软件包名称 YUM全局配置文件[扩展] YUM的html 网站设计源码配置方式包括全局配置文件(/etc/yum.conf)和子配置文件(/etc/yum.repos.d/目录下的所有.repo文件)。 YUM签名检查机制[扩展] rpm软件在构建rpm包时使用redhat的私钥签名,客户端使用redhat提供的公钥验证rpm包的合法性。可通过指定公钥位置、提前导入公钥或选择不进行签名验证来实现。 制作本地YUM仓库 自行制作本地YUM仓库时,需了解配置文件参数含义。操作步骤包括挂载镜像、软件源码加密交付备份原有仓库、创建新仓库文件、刷新repos生成缓存等。 构建企业级YUM仓库 本地光盘提供基础软件包(Base)、yum缓存提供update软件包、常用软件包如nginx、zabbix、弱小目标检测源码docker、saltstack等。环境准备涉及IP、角色、主机名、服务端yum仓库及客户端使用等。 源码包概述 源码包指的是未编译成可运行工具的程序源代码。学习源码包有助于自定义软件、定制功能、优先更新源码及实现自动化规范。 优点:二次开发、定制功能、优先更新、自动化规范 缺点:相较于yum安装复杂、耗时较长 源码包获取 常见软件源码包可在官方网站获取。 源码包安装步骤 解压tar、生成configure或cmake、编译、安装。 源码包安装实战 通过编译Nginx深入理解源码包安装过程。 源码编译报错信息处理 在安装源码包时遇到问题,需妥善处理报错信息,确保安装过程顺利。 自定义RPM包并制作YUM仓库[扩展] 可自行定制RPM包及制作YUM仓库,实现软件自定义安装与管理。å¦ä½ä½¿ç¨Ansible 2çAPIåpythonå¼å
Ansible å SaltStack é½æä¾äº Python ç´æ¥è°ç¨çAPI, è¿æ¹ä¾¿äº Pythoner 对è¿äºè½¯ä»¶è¿è¡äºæ¬¡å¼ååæ´å, æ¤åè½çå®æ¹ä¾¿äºä¸å°, æ¯èµ· Python 代ç ä¸è°ç¨ shell ä¹ç¥æ¾ä¸ä¸!
ç¶è Ansible å¨2.0çæ¬åéæäºå¤§é¨åç代ç é»è¾, å¯ç¨äº2.0çæ¬ä¹åç Runner å Playbook ç±», 使å¾å¹¿å¤§åå¦ä¹åç代ç è¿è¡é误. æ©æ¥ä¸å¦ææ¥, ä»å¤©ä¸åå¯¹ç § å®æ¹çææ¡£ , ç»åæºä»£ç , 对2.0çæ¬ä¹åç Python API åäºä¸æ¢ç©¶
Adhoc
adhoc å ¶å®å°±æ¯æ§è¡ Ansible 模å, éè¿ adhoc æ们å¯ä»¥æ¹ä¾¿å¿«æ·çå®æä¸äºä¸´æ¶çè¿ç»´æä½.
2.0 ä¹åçè°ç¨
import ansible.runner
import json
runner = ansible.runner.Runner(
module_name='ping', # 模åå
module_args='', # 模ååæ°
pattern='all', # ç®æ æºå¨çpattern
forks=
)
datastructure = runner.run()
data = json.dumps(datastructure,indent=4)
å½ç¶è¿éä¼å»å è½½é»è®¤ç inventory
å¦æä¸æ³ä½¿ç¨ inventory æ件æè æ³ä½¿ç¨å¨æç inventory, åå¯ä»¥ä½¿ç¨ host_list åæ°ä»£æ¿
import ansible.runner
import json
runner = ansible.runner.Runner(
host_list=["..0.1"], # è¿éå¦ææç¡®æå®ä¸»æºéè¦ä¼ éä¸ä¸ªå表, æè æå®å¨æinventoryèæ¬
module_name='ping', # 模åå
module_args='', # 模ååæ°
extra_vars={ "ansible_ssh_user":"root","ansible_ssh_pass":"xx"},
forks=
)
datastructure = runner.run()
data = json.dumps(datastructure,indent=4)
2.0 ä¹åçè°ç¨
import json
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 ansible.executor.playbook_executor import PlaybookExecutor
loader = DataLoader() # ç¨æ¥å 载解æyamlæ件æJSONå 容,并ä¸æ¯ævaultç解å¯
variable_manager = VariableManager() # 管çåéçç±»,å æ¬ä¸»æº,ç»,æ©å±çåé,ä¹åçæ¬æ¯å¨ inventory ä¸ç
inventory = Inventory(loader=loader, variable_manager=variable_manager)
variable_manager.set_inventory(inventory) # æ ¹æ® inventory å 载对åºåé
class Options(object):
'''
è¿æ¯ä¸ä¸ªå ¬å ±çç±»,å 为ad-hocåplaybooké½éè¦ä¸ä¸ªoptionsåæ°
并ä¸æéè¦æ¥æä¸åçå±æ§,ä½æ¯å¤§é¨åå±æ§é½å¯ä»¥è¿åNoneæFalse
å æ¤ç¨è¿æ ·çä¸ä¸ªç±»æ¥çå»åå§å大ä¸å ç空å¼çå±æ§
'''
def __init__(self):
self.connection = "local"
self.forks = 1
self.check = False
def __getattr__(self, name):
return None
options = Options()
def run_adhoc():
variable_manager.extra_vars={ "ansible_ssh_user":"root" , "ansible_ssh_pass":"xxx"} # å¢å å¤é¨åé
# æ建pb, è¿éå¾æææ, æ°çæ¬è¿è¡ad-hocæplaybooké½éè¦æ建è¿æ ·çpb, åªæ¯æåè°ç¨playçç±»ä¸ä¸æ ·
# :param name: ä»»å¡å,类似playbookä¸tasksä¸çname
# :param hosts: playbookä¸çhosts
# :param tasks: playbookä¸çtasks, å ¶å®è¿å°±æ¯playbookçè¯æ³, å 为tasksçå¼æ¯ä¸ªå表,å æ¤å¯ä»¥åå ¥å¤ä¸ªtask
play_source = { "name":"Ansible Ad-Hoc","hosts":"..0.1","gather_facts":"no","tasks":[{ "action":{ "module":"shell","args":"w"}}]}
play = Play().load(play_source, variable_manager=variable_manager, loader=loader)
tqm = None
try:
tqm = TaskQueueManager(
inventory=inventory,
variable_manager=variable_manager,
loader=loader,
options=options,
passwords=None,
stdout_callback='minimal',
run_tree=False,
)
result = tqm.run(play)
print result
finally:
if tqm is not None:
tqm.cleanup()
if __name__ == '__main__':
run_adhoc()
Playbook
playbook åç±»ä¼¼äº SaltStack ä¸ç state
2.0 ä¹åçè°ç¨
from ansible import callbacks
from ansible import utils
from ansible.playbook import PlayBook
stats = callbacks.AggregateStats()
callback = callbacks.PlaybookCallbacks()
runner_callbacks = callbacks.PlaybookRunnerCallbacks(stats)
pb = ansible.playbook.PlayBook(
playbook="tasks.yml",
stats=stats,
callbacks=playbook_cb,
runner_callbacks=runner_cb,
check=True
)
pb.run()
2.0 ä¹åçè°ç¨
import json
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 ansible.executor.playbook_executor import PlaybookExecutor
loader = DataLoader() # ç¨æ¥å 载解æyamlæ件æJSONå 容,并ä¸æ¯ævaultç解å¯
variable_manager = VariableManager() # 管çåéçç±»,å æ¬ä¸»æº,ç»,æ©å±çåé,ä¹åçæ¬æ¯å¨ inventory ä¸ç
inventory = Inventory(loader=loader, variable_manager=variable_manager)
variable_manager.set_inventory(inventory) # æ ¹æ® inventory å 载对åºåé
class Options(object):
'''
è¿æ¯ä¸ä¸ªå ¬å ±çç±»,å 为ad-hocåplaybooké½éè¦ä¸ä¸ªoptionsåæ°
并ä¸æéè¦æ¥æä¸åçå±æ§,ä½æ¯å¤§é¨åå±æ§é½å¯ä»¥è¿åNoneæFalse
å æ¤ç¨è¿æ ·çä¸ä¸ªç±»æ¥çå»åå§å大ä¸å ç空å¼çå±æ§
'''
def __init__(self):
self.connection = "local"
self.forks = 1
self.check = False
def __getattr__(self, name):
return None
options = Options()
def run_playbook():
playbooks=['task.yaml'] # è¿éæ¯ä¸ä¸ªå表, å æ¤å¯ä»¥è¿è¡å¤ä¸ªplaybook
variable_manager.extra_vars={ "ansible_ssh_user":"root" , "ansible_ssh_pass":"xxx"} # å¢å å¤é¨åé
pb = PlaybookExecutor(playbooks=playbooks, inventory=inventory, variable_manager=variable_manager, loader=loader, options=options, passwords=None)
result = pb.run()
print result
if __name__ == '__main__':
run_playbook()