文档章节

ansible api简单应用

eddy_linux
 eddy_linux
发布于 2015/11/23 22:21
字数 716
阅读 193
收藏 1
1.uptime
#!/usr/bin/python
#encoding:utf-8
import ansible.runner
import sys

# construct the ansible runner and execute on all hosts
results = ansible.runner.Runner(
          pattern='client', forks=10,
          module_name='command',
          module_args='/usr/bin/uptime',
          ).run()

if results is None:
   print "No hosts found"
   sys.exit(1)

for (hostname, result) in results['contacted'].items():
        if not 'failed' in result:
                print "UP ***********"
                print "%s >>> %s" % (hostname, result['stdout'])

for (hostname, result) in results['contacted'].items():
        if 'failed' in result:
                print "FAILED *******"
                print "%s >>> %s" % (hostname, result['msg'])

for (hostname, result) in results['dark'].items():
        print "DOWN *********"
        print "%s >>> %s" % (hostname, result)
UP ***********
client1.info.com >>>  21:54:00 up 10 min,  1 user,  load average: 0.02, 0.14, 0.15
UP ***********
puppetmaster.info.com >>>  21:54:00 up 11 min,  1 user,  load average: 0.30, 1.56, 1.41

2.ping
#!/usr/bin/python
#encoding:utf-8
import ansible.runner
import sys

# construct the ansible runner and execute on all hosts
results = ansible.runner.Runner(
          pattern='client', forks=10,
          module_name='ping',
          #module_args='ping',
          ).run()

if results is None:
   print "No hosts found"
   sys.exit(1)

for (hostname, result) in results['contacted'].items():
     if not 'failed' in result:
             print "%s >>>ping:%s" % (hostname, result['ping'])
for (hostname, result) in results['dark'].items():
     if  'failed' in result:
             print "%s >>>ping:%s" % (hostname, result['msg'])
client1.info.com >>>ping:pong
puppetmaster.info.com >>>ping:pong

3.command
#!/usr/bin/python
#encoding:utf-8
import ansible.runner
import sys

command = sys.argv[1]
results = ansible.runner.Runner(
          pattern='client', forks=10,
          module_name='shell',
          module_args=command,
          ).run()

if results is None:
   print "No hosts found"
   sys.exit(1)

for (hostname, result) in results['contacted'].items():
        if not 'failed' in result:
                print "UP ***********"
                print "%s" % (hostname)
                print "%s" %(result['stdout'])
                print ''

for (hostname, result) in results['contacted'].items():
        if 'failed' in result:
                print "FAILED *******"
                print "%s >>> %s" % (hostname, result['msg'])
                print ''
for (hostname, result) in results['dark'].items():
        print "DOWN *********"
        print "%s >>> %s" % (hostname, result)
        print '' 
UP ***********
client1.info.com
2015-11-23-21:56:12

UP ***********
puppetmaster.info.com
2015-11-23-21:56:11


4.install ftp(yum)
#!/usr/bin/python
#encoding:utf-8
import ansible.runner
import sys
def check_ftp():
    check_ftp = ansible.runner.Runner(
              pattern='client', forks=10,
              module_name='shell',
              module_args='rpm -q vsftpd',
              ).run()
    if check_ftp is None:
       print "No hosts found"
       sys.exit(1)
    for (hostname, result) in check_ftp['contacted'].items():
            if not 'failed' in result:
                print "%s" % (hostname)
                print "%s" %(result['stdout'])
    		print ''
                return 1
    for (hostname, result) in check_ftp['contacted'].items():
            if 'failed' in result:
                print "%s >>> %s" % (hostname, result['msg'])
    		print ''
    for (hostname, result) in check_ftp['dark'].items():
        print "%s >>> %s" % (hostname, result)
        print ''
def install():
    install_ftp = ansible.runner.Runner(
              pattern='client', forks=10,
              module_name='yum',
              module_args='name=vsftpd state=latest',
              ).run()
    if check_ftp is None:
       print "No hosts found"
       sys.exit(1)
    for (hostname, result) in install_ftp['contacted'].items():
            if not 'failed' in result:
                print "%s" % (hostname)
                for v in result['results']:
                    print v
                return 1
    for (hostname, result) in install_ftp['contacted'].items():
            if 'failed' in result:
                print "%s >>> %s" % (hostname, result['msg'])
                print ''
    for (hostname, result) in install_ftp['dark'].items():
        print "%s >>> %s" % (hostname, result)
        print ''
def start():
    start_ftp = ansible.runner.Runner(
              pattern='client', forks=10,
              module_name='shell',
              module_args='/etc/init.d/vsftpd start',
              ).run()
    if start_ftp is None:
       print "No hosts found"
       sys.exit(1)
    for (hostname, result) in start_ftp['contacted'].items():
            if not 'failed' in result:
                print "%s" % (hostname)
                print "%s" %(result['stdout'])
                print ''
                return 1
    for (hostname, result) in start_ftp['contacted'].items():
            if 'failed' in result:
                print "%s >>> %s" % (hostname, result['msg'])
                print ''
    for (hostname, result) in start_ftp['dark'].items():
        print "%s >>> %s" % (hostname, result)
        print ''
if __name__ == '__main__':
    check_ftp()
    install()
    start()


client1.info.com
package vsftpd is not installed

client1.info.com
Loaded plugins: product-id, subscription-manager
Updating certificate-based repositories.
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package vsftpd.x86_64 0:2.2.2-11.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch            Version                Repository         Size
================================================================================
Installing:
 vsftpd          x86_64          2.2.2-11.el6           rhel-iso          151 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 151 k
Installed size: 331 k
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : vsftpd-2.2.2-11.el6.x86_64                                   1/1 
Installed products updated.
  Verifying  : vsftpd-2.2.2-11.el6.x86_64                                   1/1 

Installed:
  vsftpd.x86_64 0:2.2.2-11.el6                                                  

Complete!

client1.info.com
All packages providing vsftpd are up to date
client1.info.com
Starting vsftpd for vsftpd: [  OK  ]












© 著作权归作者所有

共有 人打赏支持
eddy_linux
粉丝 19
博文 135
码字总数 188789
作品 0
成都
程序员
用 Ansible 实现网络自动化

了解 Ansible 的功能,这是一个无代理的、可扩展的配置管理系统。 网络自动化 随着 IT 行业的技术变化,从服务器虚拟化到公有云和私有云,以及自服务能力、容器化应用、平台即服务(PaaS)交...

00%
08/30
0
0
为什么Ansible在自动化编排成为王者!

Ansible是一个广泛应用的自动化平台,在devops和自动化方面具有特别的优势。 如果有“改进的IT编排和配置管理工具最多”的奖项,红帽的Ansible将成为最具竞争力的竞争者。自2012年由Michael...

云技术实践
05/09
0
0
自动化运维工具—Ansible基本概念

Ansible: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet,cfengine,chef,func,fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能...

Hito
08/07
0
0
企业级自动化运维工具应用实战-ansible

一:ansible的简介ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。a...

931015
2017/12/09
0
0
Ansible :一个配置管理和IT自动化工具 (3/3)

现实中的 ansible 例子 我知道很多用户经常使用 pastebin 这样的服务,以及很多公司基于显而易见的理由配置了他们内部使用的类似东西。最近,我遇到了一个叫做 showterm 的程序,巧合之下我被...

openthings
09/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

解析高可用分布式键值存储 etcd 的原理

这篇文章将会介绍 etcd 的实现原理,其中包括 Raft 协议、存储两大模块,在最后我们也会简单介绍 etcd 一些具体应用场景。 etcd 的官方将它定位成一个可信赖的分布式键值存储服务,它能够为整...

小刀爱编程
15分钟前
1
0
在ubuntun虚拟机里安装goLang语言编程环境

Go语言是谷歌2009发布的第二款开源编程语言。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 北京时间201...

JerryWang_SAP
16分钟前
5
0
c++builder导出函数export function DLL

__stdcall __export 即可,如: ulong __stdcall __export od_disasm(char *src,ulong srcsize,ulong srcip, t_disasm *disasm,int disasmmode){ return Disasm(src,srcsiz......

simpower
18分钟前
2
0
KDC服务安装及配置

阿伦哥-
21分钟前
1
0
mybatis-plus公共字段操作以及springboot2整合mybatis-plus

1、公共实体 对于User类中有而user表中没有的属性需要加第二个注解@TableField(exist = false),表示排除User类中的属性 所有新增公共字段加注解 并指定 @TableField(value = "corp_code",fi...

glen_xu
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部