免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1998 | 回复: 2
打印 上一主题 下一主题

fabric和数组一起使用? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-22 11:00 |只看该作者 |倒序浏览
本帖最后由 钟大發 于 2015-05-22 11:09 编辑

想通过使用fabric对远程虚拟机进行统一管理,试着写了这个脚本:
  1. # --coding: utf-8 --
  2. from fabric.api import *
  3. env.d_instance = {
  4. '1.1.1.1':['root@10.1.1.3:22000','instance-00001'],
  5. '1.1.1.2':['root@10.1.1.3:22000','instance-00002'],
  6. }
  7. env.password = 'password'
  8. a = raw_input('please input what IP_address which you want to search: \n>>>')
  9. d_ip = d_instance[a][0]
  10. d_name = d_instance[a][1]
  11. note = "%r is belong to KVM---<%r>,and its Instance name is %r" %(a,d_ip,d_name)
  12. print note
  13. @roles(a)
  14. def show_vms():
  15.         run("virsh list --all")
  16. def show_instance():
  17.         run("virsh dominfo %r" %d_name)
  18. def list():
  19.         execute(show_vms)
复制代码
目前想法就是讲宿主机IP,虚拟机IP,虚拟机名称作为一个dict,然后通过fabric进行调用,每个函数实现不同功能,比如查询,加虚拟硬盘之类的功能,但是运行时候有报错说是
d_instance未定义,想了半天还是么想明白。。。不知道问题出在了什么地方。

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
2 [报告]
发表于 2015-05-22 13:40 |只看该作者
  1. from fabric.api import env

  2. env.roledefs = {
  3.     'web': {
  4.         'hosts': ['www1', 'www2', 'www3'],
  5.         'foo': 'bar'
  6.     },
  7.     'dns': {
  8.         'hosts': ['ns1', 'ns2'],
  9.         'foo': 'baz'
  10.     }
  11. }

  12. http://docs.fabfile.org/en/latest/usage/execution.html
复制代码
大致看了下文档:
env.roledefs 这个是固定了的~ ,
'hosts': ['www1', 'www2', 'www3'] 后面是一串主机一起执行操作.

论坛徽章:
0
3 [报告]
发表于 2015-05-22 14:48 |只看该作者
reb00t 发表于 2015-05-22 13:40
大致看了下文档:
env.roledefs 这个是固定了的~ ,
'hosts': ['www1', 'www2', 'www3'] 后面是一串主机一 ...

是的,我后面也仔细看了下文档,由于固定了比较麻烦,于是换了个思路,先用数组保存所有虚拟机,然后再重新定义个变量专门用来读我输入的IP地址,修改后运行没问题了~感谢你的回复~~~
  1. # --coding: utf-8 --
  2. from fabric.api import *
  3. ros = {
  4. '10.1.1.3':['10.1.1.188','instance-000001'],
  5. '10.1.1.5':['10.1.1.188','instance-000002'],
  6. '10.1.1.4':['10.1.1.2','instance-000006'],
  7. '10.1.1.7':['10.1.1.2','instance-000007'],
  8. }
  9. a = raw_input('please input what IP_address which you want to search: \n>>>')
  10. In_Name = ros[a][1]
  11. sh_ins = "virsh dominfo %r" %In_Name
  12. env.hosts = ros[a][0]
  13. env.password = 'passwd'
  14. env.port = 200
  15. note = '\x1b[0;32m%r\x1b[0m is belong to KVM \x1b[0;32m%r\x1b[0m,and its Instance name is \x1b[0;32m%r\x1b[0m' %(a,env.hosts,In_Name)
  16. print note
  17. def show_vms():
  18.         run("virsh list --all")
  19. def show_ins():
  20.         run(sh_ins)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP