在使用 KVM 与 VManagerPlatform 进行快速开通与交付方面,有一项精巧的技巧可以让您的工作流更加高效。通过运用 virt-copy-in 命令,您能够将预先生成的网卡配置文件融合至镜像中。此过程倚赖 libguestfs-tools-c 工具包,可克服因虚拟机无法生成 IP 地址而产生的自动化难题。我们还借助 Python 的 Fabric 模块与 Bashe脚本,代替了繁琐的 Ansible 自动化角色,使得 KVM 虚拟机的开通及其关联环境的规范化部署实现了高达 90% 的自动化水平。这一切不仅大幅减少了人工投入的时间,还显著降低了因人为操作而引发误操作的风险。
[toc]
一、先来看看需求及对应的设计图

什么是Fabric
Fabric是一个Python的库,提供了丰富的同SSH交互的接口,可以用来在本地或远程机器上自动化、流水化地执行Shell命令。
非常适合用来做应用的远程部署及系统维护。简单易用,只需懂得基本的Shell命令。
版本区分
Fabric:官方Fabric,兼容 Python 2 & Python 3,但不兼容Fabric 1.x的fabfile;
fabric2: 与Fabric相同,仅作为平滑迁移(使用Fabric包安装1.x 版本,使用Fabric2包安装2.x版本,来实现1.x和2.x的共存);
Fabric3:是一个基于Fabric 1.x 的fork,兼容Python2 & Python3,兼容 Fabric1.x 的 fabfile;
二、项目结构
| kvm_create/ |
| ├── application |
| │ ├── appcreate.py |
| │ ├── __init__.py |
| │ ├── kvmcreate.py |
| ├── config |
| │ ├── hosts.py |
| │ ├── __init__.py |
| │ ├── messages.py |
| │ └── test |
| │ ├── __init__.py |
| │ ├── kvm_config.py |
| ├── files |
| │ ├── adminset_agent.tar.gz |
| │ ├── mysqlxxxx |
| │ │ ├── backup.sh |
| │ │ ├── init_backup.sh |
| │ │ ├── lepus_slowquery.sh |
| │ │ ├── mysql-x.x.xx-linux-glibcx.xx-x86_64.tar.gz |
| │ │ └── percona-toolkit_x.x.xx-x.tar.gz |
| │ ├── mysqlxxxx |
| │ │ ├── backup.sh |
| │ │ ├── init_backup.sh |
| │ │ ├── lepus_slowquery.sh |
| │ │ ├── mysql-x.xx.xx-linux-glibcx.xx-86_64.tar.gz |
| │ │ └── percona-toolkit_x.x.xx-x.tar.gz |
| │ ├── nginx |
| │ │ ├── nginx-1.xx.x.tar.gz |
| │ │ └── nginx-1.xx.x.tar.gz |
| │ ├── node_exporter |
| │ │ ├── LICENSE |
| │ │ ├── node_exporter |
| │ │ └── NOTICE |
| │ ├── php |
| │ │ ├── php-x.x.xx.tar.gz |
| │ │ ├── php-x.x.xx.tar.gz |
| │ │ ├── php-x.x.xx.tar.gz |
| │ │ ├── php-x.x.xx.tar.gz |
| │ │ ├── php-x.x.xx.tar.gz |
| │ │ └── php.ini |
| │ ├── redis |
| │ │ └── redis-x.x.x.tar.gz |
| │ └── zabbix |
| │ └── zabbix-x.x.x.tar.gz |
| ├── kernel |
| │ ├── clone.py |
| │ ├── __init__.py |
| │ ├── last.py |
| │ ├── mysqlxxxx.py |
| │ ├── mysqlxx.py |
| │ ├── nginx.py |
| │ ├── php.py |
| │ ├── redis.py |
| │ ├── standard.py |
| │ ├── start.py |
| │ ├── yum.py |
| │ ├── zabbix_agent.py |
| ├── kvm.py |
| ├── local |
| │ ├── __init__.py |
| │ ├── localall.py |
| │ ├── mysqlxxxxreplace.py |
| │ ├── mysqlxxreplace.py |
| │ ├── nginxreplace.py |
| │ ├── phpreplace.py |
| │ ├── redisreplace.py |
| │ ├── replacetemp.py |
| │ ├── zabbixreplace.py |
| ├── templates |
| │ ├── hosts |
| │ ├── ifcfg-eth0 |
| │ ├── mysqlxx |
| │ │ ├── my.cnf |
| │ │ ├── mysql_install.sh |
| │ │ └── mysql.service |
| │ ├── mysqlxxxx |
| │ │ ├── my.cnf |
| │ │ ├── mysql_install.sh |
| │ │ └── mysql.service |
| │ ├── nginx |
| │ │ ├── nginx.conf |
| │ │ ├── nginx_install.sh |
| │ │ ├── nginx.service |
| │ │ └── vhost.conf |
| │ ├── php |
| │ │ ├── php-fpm.conf |
| │ │ ├── php-fpm.service |
| │ │ ├── php_install.sh |
| │ │ └── www.conf |
| │ ├── redis |
| │ │ ├── redis.conf |
| │ │ ├── redis_install.sh |
| │ │ └── redis.service |
| │ └── zabbix |
| │ ├── zabbix_agentd |
| │ ├── zabbix_agentd.conf |
| │ └── zabbixagent_install.sh |
| ├── tmp_cache |
| └── vars |
| ├── __init__.py |
| ├── kvmvar.py |
| ├── mysqlxxxx.py |
| ├── mysqlxxxx.py |
| ├── nginxvar.py |
| ├── phpvar.py |
| ├── redisvar.py |
| └── zabbix_agentvar.py |
三、kernel 目录下的功能模块
kvm服务器镜像clone 同步、kvm xml 配置模板的生成同步,网卡配置文件整合kvm新服务器;
| |
| |
| from fabric.contrib.files import * |
| from config import * |
| from vars.kvmvar import * |
| from local.replacetemp import * |
| class generate_kvmimg(object): |
| def __init__(self): |
| pass |
| |
| def clone_cevsxx(self): |
| |
| run(' [ -d' + ' ' + kvmtmpdir + ' ' +']' + ' ' + '||' + ' ' + 'mkdir -pv' + ' ' + kvmtmpdir) |
| run('virt-clone -o ' + kvmce7name + ' ' + '-n' + ' ' + KVM_IP_HOSTNAME + ' ' + '-f' + ' ' + kvmtmpdir + KVM_IP_HOSTNAME + '.img') |
| |
| run('sed -i' + ' ' + '"s' + '#' + kvmtmpdir + '#' + kvmdata + '#g"' + ' ' + kvmqemu + KVM_IP_HOSTNAME + '.xml' ) |
| run('cp' + ' ' + kvmqemu + KVM_IP_HOSTNAME + '.xml' + ' ' + kvmtmpdir) |
| run('virsh undefine' + ' ' + KVM_IP_HOSTNAME) |
| |
| |
| def site_imgip(self): |
| rekvmeth = replace_tmp_file() |
| rekvmeth.kvm_eth0() |
| put(local_write_eth0 , kvmtmpdir) |
| rekvmeth.kvm_eth0_local_remove() |
| with cd(kvmtmpdir): |
| run('virt-copy-in' + ' ' + 'ifcfg-eth0' + ' ' + '-a' + ' ' + KVM_IP_HOSTNAME + '.img' + ' ' + kvm_eth0_dir + '/') |
| run('rm -f' + ' ' + kvmtmpdir + 'ifcfg-eth0') |
| |
| |
| def site_imgxml_cpu(self): |
| with cd(kvmtmpdir): |
| run('sed -i \"s\\current=\'2\'\\current=\'' + KVM_CPU +'\'\\g\"' + ' ' + KVM_IP_HOSTNAME + '.xml') |
| |
| |
| def site_imgxml_mem(self): |
| with cd(kvmtmpdir): |
| run('sed -i \"s\\4194304\\' + KVM_MEM + '\\g\"' + ' ' + KVM_IP_HOSTNAME + '.xml') |
| |
| def scp_cloned_img(self): |
| run('scp' + ' ' + kvmtmpdir + KVM_IP_HOSTNAME + '.img' + ' ' + 'root@' + TARGETS_HOST + ':' + kvmdata) |
| |
| run('rm -f' + ' ' + kvmtmpdir + KVM_IP_HOSTNAME + '.img') |
| |
| def scp_cloned_xml(self): |
| run('scp' + ' ' + kvmtmpdir + KVM_IP_HOSTNAME + '.xml' + ' ' + 'root@' + TARGETS_HOST + ':' + kvmqemu) |
| run('rm -f' + ' ' + kvmtmpdir + KVM_IP_HOSTNAME + '.xml') |
突破 virt-copy-in 命令可以将已生成的网卡配置文件焙进镜像,依赖工具包libguestfs-tools-c 这样虚拟服务器开机后就可以直接分配指定的ip
操作目标服务器,将已经同步xml配置定义为虚拟机,扩展相应磁盘、并开启虚拟服务器;
| |
| |
| from fabric.contrib.files import * |
| from config import * |
| from vars.kvmvar import * |
| |
| class start_kvm(object): |
| def __init__(self): |
| pass |
| |
| def define_kvm(self): |
| run('virsh define' + ' ' + kvmqemu + KVM_IP_HOSTNAME + '.xml') |
| run(' [ -d' + ' ' + kvmtmpdir + ' ' + ']' + ' ' + '||' + ' ' + 'mkdir -pv' + ' ' + kvmtmpdir) |
| |
| def start_kvm(self): |
| run('virsh start' + ' ' + KVM_IP_HOSTNAME) |
| |
| def extend_disk(self): |
| run('qemu-img create -f qcow2' + ' ' + kvmdata + KVM_IP_HOSTNAME + '-data1.img' + ' ' + KVM_DISK) |
| run('virsh attach-disk' + ' ' + KVM_IP_HOSTNAME + ' ' + kvmdata + KVM_IP_HOSTNAME + '-data1.img' + ' ' + 'vdc --subdriver=qcow2') |
| run('virsh dumpxml' + ' ' + KVM_IP_HOSTNAME + ' ' + '>' + ' ' + kvmqemu + KVM_IP_HOSTNAME + '.xml') |
| run('virsh destroy' + ' ' + KVM_IP_HOSTNAME ) |
| run('virsh define' + ' ' + kvmqemu + KVM_IP_HOSTNAME + '.xml') |
| run('virsh start' + ' ' + KVM_IP_HOSTNAME) |
虚拟服务器开机后完成相应的补充操作
| |
| |
| from fabric.contrib.files import * |
| from vars.kvmvar import localsrc,kvmsrc,kvm_install_local |
| from config import LOGING_USER |
| from local.replacetemp import * |
| from local.localall import * |
| class standard_kvm(object): |
| def __init__(self): |
| pass |
| |
| def site_kvm_hosts(self): |
| kvm_host_init = replace_tmp_file() |
| kvm_host_init.kvm_hosts() |
| put(local_write_hosts,'/etc') |
| local('rm -f' + ' ' + local_write_hosts) |
| run('hostnamectl set-hostname' + ' ' + KVM_IP_HOSTNAME) |
| run('mkfs.xfs /dev/vdb') |
| run('ls -l /data &>/dev/null || mkdir /data') |
| fstab_shell_list = ''' |
| cat /etc/fstab | grep data > /dev/null || \\ |
| for i in `ls -l /dev/disk/by-uuid/ | grep vdb | awk '{print $9}'` ; \\ |
| do echo "UUID=$i /data xfs defaults 0 0" >> /etc/fstab; \\ |
| done |
| |
| ''' |
| run(fstab_shell_list) |
| run('mount -a') |
| def install_kvm_adminsetd(self): |
| put(localsrc + '/' + 'adminset_agent.tar.gz',kvmsrc) |
| run('yum clean all') |
| yum_clean_wait = command(25) |
| yum_clean_wait.wait_sleep() |
| with cd(kvmsrc): |
| run('tar -xvf' + ' ' + 'adminset_agent.tar.gz') |
| with cd(kvmsrc +'/' + 'adminset_agent'): |
| run('sh install.sh') |
| |
| def install_node_exporter(self): |
| put(localsrc + '/' + 'node_exporter', kvm_install_local) |
| run('chmod +x /usr/local/node_exporter/node_exporter') |
| run('echo \" nohup /usr/local/node_exporter/node_exporter &> /dev/null & \" >> /etc/rc.local') |
| run('nohup /usr/local/node_exporter/node_exporter &> /dev/null &') |
| run('hwclock --systohc') |
| def set_kvm_passwd(self): |
| run('echo' + ' ' + '\"' + new_pass + '\"' + ' ' + '| passwd --stdin' + ' ' + LOGING_USER) |
mysqlxx 补充模块, 实现功能与ansible-playbook roles 类似,现整合在kvm自动化中
| |
| |
| from vars.mysqlxx import * |
| from local.mysqlxxreplace import replace_mysqlxx_tmp |
| from fabric.contrib.files import * |
| from vars.kvmvar import tmp_cache, systemd |
| replace_mysqlxx = replace_mysqlxx_tmp() |
| class mysqlxx_kvm(object): |
| |
| def __init__(self): |
| pass |
| |
| def delete_old_conf(self): |
| run('rm -f /etc/my.cnf') |
| |
| def delete_old_conf_dir(self): |
| run('rm -rf /etc/my.cnf') |
| |
| def cp_source(self): |
| put(mysqlfile + 'mysql-' + mysqlversion + '.tar.gz', datasrc) |
| with cd(datasrc): |
| run('tar -xvf' + ' ' 'mysql-' + mysqlversion + '.tar.gz' + ' ' + '-C /usr/local') |
| |
| def cp_mysql_conf(self): |
| put(mysqltemp + 'my.cnf', '/etc/') |
| |
| def copy_mysql_install_sh(self): |
| replace_mysqlxx.mysql_install_sh() |
| put(tmp_cache + 'mysql_install.sh', datasrc) |
| |
| def add_mysql_user_and_group(self): |
| run('id -g' + ' ' + mysqlgroup + ' ' + '||' + ' ' + 'groupadd' + ' ' + mysqlgroup) |
| run('id -u' + ' ' + mysqluser + ' ' + '||' + ' ' + 'useradd -r' + ' ' + mysqluser + ' ' + '-g' + ' ' + mysqluser + ' ' + '-s' + ' ' + '/sbin/nologin') |
| |
| def create_related_directories(self): |
| run('mkdir -pv' + ' ' + mysqldatapath ) |
| run('mkdir -pv' + ' ' + mysqlbinlogpath) |
| run('mkdir -pv' + ' ' + mysqlslowlogpath) |
| run('mkdir -pv' + ' ' + mysqltmppath) |
| run('mkdir -pv' + ' ' + mysqlerrlogpath) |
| run('chmod 755' + ' ' + mysqldatapath) |
| run('chmod 755' + ' ' + mysqlbinlogpath) |
| run('chmod 755' + ' ' + mysqlslowlogpath) |
| run('chmod 755' + ' ' + mysqltmppath) |
| run('chmod 755' + ' ' + mysqlerrlogpath) |
| run('chown' + ' ' + mysqluser + ':' + mysqlgroup + ' ' + mysqldatapath) |
| run('chown' + ' ' + mysqluser + ':' + mysqlgroup + ' ' + mysqlbinlogpath) |
| run('chown' + ' ' + mysqluser + ':' + mysqlgroup + ' ' + mysqlslowlogpath) |
| run('chown' + ' ' + mysqluser + ':' + mysqlgroup + ' ' + mysqltmppath) |
| run('chown' + ' ' + mysqluser + ':' + mysqlgroup + ' ' + mysqlerrlogpath) |
| |
| def create_slowlog_file(self): |
| run('touch' + ' ' + mysqlslowlogpath + 'slowquery.log') |
| run('chmod 644' + ' ' + mysqlslowlogpath + 'slowquery.log') |
| run('chown' + ' ' + mysqluser + ':' + mysqlgroup + ' ' + mysqlslowlogpath + 'slowquery.log') |
| def install_mysql(self): |
| with cd(datasrc): |
| run('/bin/bash' + ' ' + 'mysql_install.sh' + ' ' + '&& touch /tmp/mysql_installed') |
| def add_mysql_to_PATH(self): |
| run('echo \'export PATH=$PATH:' + mysqlinstallpath + 'bin\' >> /etc/profile && touch /tmp/mysql_addtopath') |
| |
| def copy_mysql_service_file(self): |
| replace_mysqlxx.mysql_service() |
| put(tmp_cache + 'mysql.service', systemd) |
| |
| def clean_local_tmp_cache_file(self): |
| replace_mysqlxx.clean_mysqlxx_tmp_cache() |
| |
| def start_mysql_and_enable_it_onboot(self): |
| run('systemctl daemon-reload') |
| run('systemctl start mysql') |
| run('systemctl enable mysql') |
| run('pip install MySQL-python') |
| run('ln -s /data/mysqltmp/mysql.sock /tmp/mysql.sock') |
| run('ln -s /usr/local/mysql-x.x.xx-linux-glibcx.xx-x86_64/lib/libmysqlclient.so.20 /usr/lib64/libmysqlclient.so.20') |
| run('ln -s /usr/local/mysql-x.x.xx-linux-glibcx.xx-x86_64/ /usr/local/mysql') |
| run('[ -d /data/scripts/ ] || mkdir /data/scripts/') |
| put(mysqlfile + 'backup.sh', '/data/scripts') |
| put(mysqlfile + 'lepus_slowquery.sh', '/data/scripts') |
| put(mysqlfile + 'percona-toolkit_x.x.xx-x.tar.gz', '/data/scripts') |
| put(mysqlfile + 'init_backup.sh', '/data/scripts') |
mysqlxxxx 同上,实现多版本并存
| |
| |
| from vars.mysqlxxxx import * |
| from local.mysqlxxxxreplace import replace_mysqlxx13_tmp |
| from fabric.contrib.files import * |
| from vars.kvmvar import tmp_cache, systemd |
| replace_mysqlxxxx = replace_mysqlxxxx_tmp() |
| class mysqlxxxx_kvm(object): |
| |
| def __init__(self): |
| pass |
| |
| def delete_old_conf(self): |
| run('rm -f /etc/my.cnf') |
| |
| def delete_old_conf_dir(self): |
| run('rm -rf /etc/my.cnf') |
| |
| def cp_source(self): |
| put(mysqlfile + 'mysql-' + mysqlversion + '.tar.gz', datasrc) |
| with cd(datasrc): |
| run('tar -xvf' + ' ' 'mysql-' + mysqlversion + '.tar.gz' + ' ' + '-C /usr/local') |
| |
| def cp_mysql_conf(self): |
| put(mysqltemp + 'my.cnf', '/etc/') |
| |
| def copy_mysql_install_sh(self): |
| replace_mysqlxxxx.mysql_install_sh() |
| put(tmp_cache + 'mysql_install.sh', datasrc) |
| |
| def add_mysql_user_and_group(self): |
| run('id -g' + ' ' + mysqlgroup + ' ' + '||' + ' ' + 'groupadd' + ' ' + mysqlgroup) |
| run('id -u' + ' ' + mysqluser + ' ' + '||' + ' ' + 'useradd -r' + ' ' + mysqluser + ' ' + '-g' + ' ' + mysqluser + ' ' + '-s' + ' ' + '/sbin/nologin') |
| |
| def create_related_directories(self): |
| run('mkdir -pv' + ' ' + mysqldatapath ) |
| run('mkdir -pv' + ' ' + mysqlbinlogpath) |
| run('mkdir -pv' + ' ' + mysqlslowlogpath) |
| run('mkdir -pv' + ' ' + mysqltmppath) |
| run('mkdir -pv' + ' ' + mysqlerrlogpath) |
| run('chmod 755' + ' ' + mysqldatapath) |
| run('chmod 755' + ' ' + mysqlbinlogpath) |
| run('chmod 755' + ' ' + mysqlslowlogpath) |
| run('chmod 755' + ' ' + mysqltmppath) |
| run('chmod 755' + ' ' + mysqlerrlogpath) |
| run('chown' + ' ' + mysqluser + ':' + mysqlgroup + ' ' + mysqldatapath) |
| run('chown' + ' ' + mysqluser + ':' + mysqlgroup + ' ' + mysqlbinlogpath) |
| run('chown' + ' ' + mysqluser + ':' + mysqlgroup + ' ' + mysqlslowlogpath) |
| run('chown' + ' ' + mysqluser + ':' + mysqlgroup + ' ' + mysqltmppath) |
| run('chown' + ' ' + mysqluser + ':' + mysqlgroup + ' ' + mysqlerrlogpath) |
| |
| def create_slowlog_file(self): |
| run('touch' + ' ' + mysqlslowlogpath + 'slowquery.log') |
| run('chmod 644' + ' ' + mysqlslowlogpath + 'slowquery.log') |
| run('chown' + ' ' + mysqluser + ':' + mysqlgroup + ' ' + mysqlslowlogpath + 'slowquery.log') |
| def install_mysql(self): |
| with cd(datasrc): |
| run('/bin/bash' + ' ' + 'mysql_install.sh' + ' ' + '&& touch /tmp/mysql_installed') |
| def add_mysql_to_PATH(self): |
| run('echo \'export PATH=$PATH:' + mysqlinstallpath + 'bin\' >> /etc/profile && touch /tmp/mysql_addtopath') |
| |
| def copy_mysql_service_file(self): |
| replace_mysqlxxxx.mysql_service() |
| put(tmp_cache + 'mysql.service', systemd) |
| |
| def clean_local_tmp_cache_file(self): |
| replace_mysqlxxxx.clean_mysqlxxxx_tmp_cache() |
| |
| def start_mysql_and_enable_it_onboot(self): |
| run('systemctl daemon-reload') |
| run('systemctl start mysql') |
| run('systemctl enable mysql') |
| run('pip install MySQL-python') |
| run('ln -s /data/mysqltmp/mysql.sock /tmp/mysql.sock') |
| run('ln -s /usr/local/mysql-x.x.xx-linux-glibc2.5-x86_64/lib/libmysqlclient.so.20 /usr/lib64/libmysqlclient.so.20') |
| run('ln -s /usr/local/mysql-x.x.xx-linux-glibc2.5-x86_64/ /usr/local/mysql') |
| run('[ -d /data/scripts/ ] || mkdir /data/scripts/') |
| put(mysqlfile + 'backup.sh', '/data/scripts') |
| put(mysqlfile + 'lepus_slowquery.sh', '/data/scripts') |
| put(mysqlfile + 'percona-toolkit_x.x.xx-1.tar.gz', '/data/scripts') |
| put(mysqlfile + 'init_backup.sh', '/data/scripts') |
kvm 整合 redis安装自动化
| |
| |
| from local.redisreplace import replace_redis_tmp |
| from vars.redisvar import * |
| from fabric.contrib.files import * |
| from vars.kvmvar import tmp_cache, systemd |
| replace_redis = replace_redis_tmp() |
| class redis_kvm(object): |
| def __init__(self): |
| pass |
| def cp_source(self): |
| put(redisfile + 'redis-' + redisversion + '.tar.gz', datasrc) |
| with cd(datasrc): |
| run('tar -xvf' + ' ' + 'redis-' + redisversion + '.tar.gz') |
| def cp_redis_install_shell(self): |
| replace_redis.redis_install_sh() |
| put(tmp_cache + 'redis_install.sh', datasrc) |
| def create_redis_group_and_user(self): |
| run('id -g' + ' ' + redisgroup + ' ' + '||' + ' ' + 'groupadd' + ' ' + redisgroup) |
| run('id -u' + ' ' + redisgroup + ' ' + '||' + ' ' + 'useradd -r' + ' ' + redisuser + ' ' + '-g' + ' ' + redisgroup + ' ' + '-s' + ' ' + '/sbin/nologin') |
| def install_redis(self): |
| run('/bin/bash' + ' ' + datasrc + 'redis_install.sh' + ' ' + '&& touch /tmp/redis_installed') |
| def create_redis_log_file(self): |
| run('touch' + ' ' + redislogpath) |
| run('chmod 644' + ' ' + redislogpath) |
| run('chown' + ' ' + redisuser + ':' + redisgroup + ' ' + redislogpath) |
| def crate_redis_data_dir(self): |
| run('mkdir -pv' + ' ' + redisdatapath) |
| run('chmod 755' + ' ' + redisdatapath) |
| run('chown' + ' ' + redisuser + ':' + redisgroup + ' ' + redisdatapath) |
| def copy_redis_config(self): |
| replace_redis.redis_conf() |
| put(tmp_cache + 'redis.conf', redisdatapath + 'redis' + redisport + '.conf') |
| run('chmod 644' + ' ' + redisdatapath + 'redis' + redisport + '.conf') |
| run('chown' + ' ' + redisuser + ':' + redisgroup + ' ' + redisdatapath + 'redis' + redisport + '.conf') |
| |
| def copy_redis_service_config(self): |
| replace_redis.redis_service() |
| put(tmp_cache + 'redis.service', systemd + 'redis' + redisport + '.service') |
| run('systemctl daemon-reload') |
| run('systemctl start' + ' ' + 'redis' + redisport) |
| def clean_local_tmp_cache_file(self): |
| replace_redis.clean_redis_tmp_cache() |
| run('echo \'export PATH=$PATH:/usr/local/src/redis-' + redisversion + '/src/' + '\' >> /etc/profile') |
kvm整合nginx 安装自动化
| |
| |
| from local.nginxreplace import replace_nginx_tmp |
| from fabric.contrib.files import * |
| from vars.nginxvar import * |
| from vars.kvmvar import kvmsrc,tmp_cache,systemd |
| replace_nginx = replace_nginx_tmp() |
| class nginx_kvm(object): |
| def __init__(self): |
| pass |
| def copy_source(self): |
| put(nginxfile + 'nginx-' + nginxversion + '.tar.gz' , kvmsrc) |
| with cd(kvmsrc): |
| run('tar -xvf' + ' ' + 'nginx-' + nginxversion + '.tar.gz') |
| def copy_nginx_install_shell(self): |
| replace_nginx.nginx_install_sh() |
| put(tmp_cache + 'nginx_install.sh', kvmsrc) |
| def create_nginx_log_dir(self): |
| run('mkdir -pv' + ' ' + nginxlogpath) |
| run('chmod 755' + ' ' + nginxlogpath) |
| def create_nginx_group_and_user(self): |
| run('id -g' + ' ' + nginxgroup + ' ' + '||' + ' ' + 'groupadd' + ' ' + nginxgroup) |
| run('id -u' + ' ' + nginxuser + ' ' + '||' + ' ' + 'useradd -r' + ' ' + nginxuser + ' ' + '-g' + ' ' + nginxgroup + ' ' + '-s' + ' ' + '/sbin/nologin') |
| def install_nginx(self): |
| with cd(kvmsrc): |
| run('/bin/bash' + ' ' + 'nginx_install.sh') |
| def create_nginx_vhosts_dir(self): |
| run('mkdir -pv' + ' ' + nginxinstallpath + 'conf/vhost') |
| run('chmod 755' + ' ' + nginxinstallpath + 'conf/vhost') |
| def copy_main_template_config_file(self): |
| replace_nginx.nginx_conf() |
| |
| put(tmp_cache + 'nginx.conf', nginxinstallpath + 'conf/nginx.conf') |
| def copy_vhost_template_config_file(self): |
| replace_nginx.nginx_vhost() |
| put(tmp_cache + 'vhost.conf', nginxinstallpath + 'conf/vhost') |
| def clean_local_tmp_cache_file(self): |
| replace_nginx.clean_nginx_tmp_cache() |
| def copy_service_config_file(self): |
| replace_nginx.nginx_service() |
| put(tmp_cache + 'nginx.service',systemd) |
| def start_nginx(self): |
| run('systemctl daemon-reload') |
| run('systemctl start nginx') |
kvm 整合php 自动化
| !/usr/bin/env python2 |
| |
| from local.phpreplace import replace_php_tmp |
| from vars.phpvar import * |
| from fabric.contrib.files import * |
| from vars.kvmvar import kvmsrc, tmp_cache, systemd |
| replace_php = replace_php_tmp() |
| class php_kvm(object): |
| def __init__(self): |
| pass |
| def cp_source(self): |
| put(phpfile + 'php-' + phpversion + '.tar.gz', kvmsrc) |
| with cd(kvmsrc): |
| run('tar -xvf' + 'php-' + phpversion + '.tar.gz') |
| def cp_php_install_shell(self): |
| replace_php.php_install_sh() |
| put(tmp_cache + 'php_install.sh', kvmsrc) |
| def create_php_group_and_user(self): |
| run('id -g' + ' ' + phpgroup + ' ' + '||' + ' ' + 'groupadd' + ' ' + phpgroup) |
| run('id -u' + ' ' + phpuser + ' ' + '||' + ' ' + 'useradd -r' + ' ' + phpuser + ' ' + '-g' + ' ' + phpgroup + ' ' + '-s' + ' ' + '/sbin/nologin') |
| def create_php_log_dir(self): |
| run('mkdir -pv' + ' ' + phplogpath) |
| run('chmod 755' + ' ' + phplogpath) |
| run('chown' + ' ' + phpuser + ':' + phpgroup + ' ' + phplogpath) |
| def create_php_error_log_file(self): |
| run('touch' + ' ' + phplogpath + 'php_errors.log') |
| run('chmod 644' + ' ' + phplogpath + 'php_errors.log') |
| run('chown' + ' ' + phpuser + ':' + phpgroup + ' ' + phplogpath + 'php_errors.log') |
| def install_php(self): |
| with cd(kvmsrc): |
| run('/bin/bash' + ' ' + 'php_install.sh') |
| def cp_main_phpini_config(self): |
| put(phpfile + 'php.ini', phpinstallpath + 'etc/') |
| def cp_php_www_conf_config(self): |
| replace_php.php_www() |
| put(tmp_cache + 'www.conf', phpinstallpath + 'etc/php-fpm.d/') |
| def cp_php_php_fpm_config(self): |
| replace_php.php_conf() |
| put(tmp_cache + 'php-fpm.conf', phpinstallpath + 'etc/') |
| def cp_php_php_fpm_service(self): |
| replace_php.php_service() |
| put(tmp_cache + 'php-fpm.service', systemd) |
| def start_php(self): |
| run('systemctl daemon-reload') |
| run('systemctl start php-fpm || ss -tnl | grep 9000') |
| def clean_local_tmp_cache_files(self): |
| replace_php.clean_php_tmp_cache() |
kvm 整合zabbix_agent自动化
| |
| |
| from vars.zabbix_agentvar import * |
| from local.zabbixreplace import replace_zabbix_tmp |
| from fabric.contrib.files import * |
| from vars.kvmvar import kvmsrc, tmp_cache, systemd |
| replace_zabbix_agent = replace_zabbix_tmp() |
| |
| class zabbix_agent_kvm(object): |
| |
| def __init__(self): |
| pass |
| |
| def cp_source(self): |
| put(zabbixfile + 'zabbix-' + zabbixagentversion + '.tar.gz' , datasrc) |
| with cd(datasrc): |
| run('tar -xvf' + ' ' + 'zabbix-' + zabbixagentversion + '.tar.gz') |
| |
| def cp_zabbix_agent_install_shell(self): |
| replace_zabbix_agent.zabbix_agent_install_sh() |
| put(tmp_cache + 'zabbixagent_install.sh', datasrc) |
| |
| def create_zabbix_group_and_user(self): |
| run('id -g' + ' ' + zabbixagentgroup + ' ' + '||' + ' ' + 'groupadd' + ' ' + zabbixagentgroup) |
| run('id -u' + ' ' + zabbixagentuser + ' ' + '||' + ' ' + 'useradd -r' + ' ' + zabbixagentuser + ' ' + '-g' + ' ' + zabbixagentgroup + ' ' + '-s' + ' ' + '/sbin/nologin') |
| |
| def create_zabbix_agent_log_dir(self): |
| run('mkdir -pv' + ' ' + zabbixagentlogpath) |
| run('chmod 755' + ' ' + zabbixagentlogpath) |
| run('chown' + ' ' + zabbixagentuser + ':' + zabbixagentgroup + ' ' + zabbixagentlogpath) |
| |
| def install_zabbix_agent(self): |
| with cd(datasrc): |
| run('/bin/bash' + ' ' + 'zabbixagent_install.sh' + ' ' + 'touch /tmp/zabbixagent_installed') |
| |
| def copy_zabbix_agent_config_file(self): |
| replace_zabbix_agent.zabbix_agent_conf() |
| put(tmp_cache + 'zabbix_agentd.conf', zabbixagentinstallpath + '/etc/') |
| |
| def copy_zabbix_agent_init_file(self): |
| replace_zabbix_agent.zabbix_agent_service() |
| put(tmp_cache + 'zabbix_agentd', '/etc/init.d/') |
| run('chmod 755' + ' ' + '/etc/init.d/zabbix_agentd') |
| |
| def clean_local_tmp_cache_file(self): |
| replace_zabbix_agent.clean_zabbix_tmp_cache() |
| |
| def add_zabbix_agent_init(self): |
| run('chkconfig --add zabbix_agentd') |
| run('chkconfig zabbix_agentd on') |
| |
| def start_zabbix_agentd(self): |
| run('service zabbix_agentd start') |
yum 安装相关依赖包
| |
| |
| from fabric.contrib.files import * |
| from vars.kvmvar import yum_install_require_packages,yum_install_jdk_packages |
| def yum_install_packages(): |
| run('yum -y install' + '\\' + yum_install_require_packages) |
| |
| def yum_install_jdk(): |
| run('yum -y install' + '\\' + yum_install_jdk_packages) |
输入输出信息打印
| |
| |
| from fabric.colors import red |
| from config import TARGETS_HOST, KVM_IP_HOSTNAME, KVM_IP_HOST, KVM_IP_GATEWAY, KVM_IP_NETMASK, ENV, APP, KVM_CPU, KVM_MEM ,KVM_DISK,KVM_IP_PASSWD |
| from config.messages import MESSAGE_INFO |
| from local.localall import new_pass, common_first |
| class last(object): |
| def __init__(self): |
| pass |
| |
| |
| def print_start_kvm_message(self): |
| app_list = str(APP) |
| app_list = app_list.replace("'","") |
| app_list = app_list.replace("[","") |
| app_list = app_list.replace("]","") |
| app_list = app_list.replace(",","") |
| first_print = common_first(MESSAGE_INFO['env'] + ENV, MESSAGE_INFO['name'] + KVM_IP_HOSTNAME, |
| MESSAGE_INFO['ip'] + KVM_IP_HOST, MESSAGE_INFO['target'] +TARGETS_HOST, |
| MESSAGE_INFO['gateway'] + KVM_IP_GATEWAY, MESSAGE_INFO['netmask'] + KVM_IP_NETMASK, |
| MESSAGE_INFO['app'] + app_list, MESSAGE_INFO['cpu'] + KVM_CPU, |
| MESSAGE_INFO['memory'] + KVM_MEM, MESSAGE_INFO['disk'] + KVM_DISK, |
| MESSAGE_INFO['passwd'] + KVM_IP_PASSWD) |
| first_print.message_all() |
| user_choice = raw_input(red('If the information is incorrect, please input no: ')) |
| if user_choice == "N" or user_choice == "n" or user_choice == "no" or user_choice == "No" or user_choice == "NO": |
| print |
| print(red('User check configuration is incorrect. Please rewrite configuration!')) |
| print |
| exit(1000) |
| |
| |
| def print_kvm_message(self): |
| app_list = str(APP) |
| app_list = app_list.replace("'","") |
| app_list = app_list.replace("[","") |
| app_list = app_list.replace("]","") |
| app_list = app_list.replace(",","") |
| last_print = common_first(MESSAGE_INFO['env'] + ENV, MESSAGE_INFO['name'] + KVM_IP_HOSTNAME, |
| MESSAGE_INFO['ip'] + KVM_IP_HOST, MESSAGE_INFO['target'] + TARGETS_HOST, |
| MESSAGE_INFO['gateway'] + KVM_IP_GATEWAY, MESSAGE_INFO['netmask'] + KVM_IP_NETMASK, |
| MESSAGE_INFO['app'] + app_list, MESSAGE_INFO['cpu'] + KVM_CPU, |
| MESSAGE_INFO['memory'] + KVM_MEM, MESSAGE_INFO['disk'] + KVM_DISK, |
| MESSAGE_INFO['passwd'] + new_pass) |
| last_print.last_message_all() |
local 实现配置文件修改与替换
例ifcfg-eth0
| |
| |
| from fabric.api import * |
| from vars.kvmvar import local_read_eth0,local_write_eth0,local_read_hosts,local_write_hosts,tmp_cache |
| from config import KVM_IP_HOST,KVM_IP_NETMASK,KVM_IP_GATEWAY,KVM_IP_STATUE,KVM_IP_HOSTNAME |
| import re |
| |
| |
| class replace_tmp_file(): |
| def __init__(self): |
| pass |
| def kvm_eth0(self): |
| network_file_read = open(local_read_eth0,"r") |
| network_file_write = open(local_write_eth0,"w") |
| |
| with network_file_read as f: |
| data = f.read() |
| data = data.replace('$NETWORK_STATUS$',KVM_IP_STATUE) |
| data = data.replace('$NETWORK_IPADDR$',KVM_IP_HOST) |
| data = data.replace('$NETWORK_NETMASK$',KVM_IP_NETMASK) |
| data = data.replace('$NETWORK_GATEWAY$',KVM_IP_GATEWAY) |
| with network_file_write as f: |
| f.write(data) |
| def kvm_eth0_local_remove(self): |
| local('rm -f' + ' ' + local_write_eth0) |
| |
| def kvm_hosts(self): |
| hosts_file_read = open(local_read_hosts,"r") |
| hosts_file_write = open(local_write_hosts,"w") |
| |
| with hosts_file_read as f: |
| hosts = f.read() |
| hosts = hosts.replace('$HOSTSIP$', KVM_IP_HOST) |
| hosts = hosts.replace('$HOSTNAME$', KVM_IP_HOSTNAME) |
| with hosts_file_write as f: |
| f.write(hosts) |
| |
| def kvm_hosts_remove(self): |
| local('rm -f' + ' ' + local_write_eth0) |
其它功相关调用
| |
| |
| import random |
| import string |
| from fabric.colors import * |
| from time import sleep |
| class command(object): |
| def __init__(self,info): |
| self.info = info |
| def wait_sleep(self): |
| sleep(self.info) |
| def create_pass(self,chars=string.ascii_uppercase+string.ascii_lowercase+string.digits): |
| |
| return ''.join([random.choice(chars) for i in range(self.info)]) |
| from fabric.colors import * |
| class common(object): |
| def __init__(self,info): |
| self.info = info |
| def wait(self): |
| for waits in range(1,2): |
| sleep(waits) |
| def message_green(self): |
| print green('**' * 50) |
| print green('{:<10}{:^80}{:>10}'.format('*' * 10, self.info , '*' * 10)) |
| print green('**' * 50) |
| print |
| |
| def message_blue(self): |
| print blue('**' * 50) |
| print blue('{:<10}{:^80}{:>10}'.format('*' * 10, self.info , '*' * 10)) |
| print blue('**' * 50) |
| print |
| |
| def message_orange(self): |
| print yellow('**' * 50) |
| print yellow('{:<10}{:^80}{:>10}'.format('*' * 10, self.info , '*' * 10)) |
| print yellow('**' * 50) |
| print |
| |
| class common_first(object): |
| def __init__(self, env, name, ip, target, gateway, netmask, app, cpu, memory, disk ,passwd): |
| self.env = env |
| self.name = name |
| self.ip = ip |
| self.target = target |
| self.gateway = gateway |
| self.netmask = netmask |
| self.app = app |
| self.cpu = cpu |
| self.memory = memory |
| self.disk = disk |
| self.passwd = passwd |
| |
| def message_all(self): |
| print magenta('**' * 50) |
| print magenta('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.env, '*' * 10)) |
| print magenta('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.name, '*' * 10)) |
| print magenta('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.ip, '*' * 10)) |
| print magenta('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.target, '*' * 10)) |
| print magenta('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.gateway, '*' * 10)) |
| print magenta('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.netmask, '*' * 10)) |
| print magenta('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.app, '*' * 10)) |
| print magenta('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.cpu, '*' * 10)) |
| print magenta('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.memory, '*' * 10)) |
| print magenta('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.disk, '*' * 10)) |
| print magenta('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.passwd, '*' * 10)) |
| print magenta('**' * 50) |
| print |
| def last_message_all(self): |
| print cyan('**' * 50) |
| print cyan('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.env, '*' * 10)) |
| print cyan('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.name, '*' * 10)) |
| print cyan('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.ip, '*' * 10)) |
| print cyan('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.target, '*' * 10)) |
| print cyan('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.gateway, '*' * 10)) |
| print cyan('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.netmask, '*' * 10)) |
| print cyan('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.app, '*' * 10)) |
| print cyan('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.cpu, '*' * 10)) |
| print cyan('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.memory, '*' * 10)) |
| print cyan('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.disk, '*' * 10)) |
| print cyan('{:<10}{:<80}{:>10}'.format('*' * 10, ' ' + self.passwd, '*' * 10)) |
| print cyan('**' * 50) |
| print |
| newpasswd = command(12) |
| new_pass = newpasswd.create_pass() |
config 目录存放配置相关的信息
message.py
| #!/usr/bin/env python2 |
| # -*- coding: utf-8 -*- |
| from config import ENV |
| MESSAGE_INFO = { |
| 'start_kvm_site': 'Now Start KVM Create', |
| 'app_clone': 'App Clone Genreate CentOS74', |
| 'site_image_ip': 'Source Hosts Site Image IP', |
| 'site_imgxml_cpu': 'Sources Hosts Site Image XML CPU', |
| 'site_imgxml_mem': 'Sources Hosts Site Image XML Memory', |
| 'scp_cloned_img': 'Sources Hosts Scp Cloned Image To Targets hosts', |
| 'scp_cloned_xml': 'Sources Hosts Scp Cloned XML To Targets hosts', |
| 'define_kvm': 'Targets Hosts Define Kvm Hosts', |
| 'start_kvm': 'Targets Hosts Start Kvm Hosts', |
| 'extend_disk': 'Targets Hosts Extend Kvm Disk', |
| 'wait_sleep': 'Sleep 60s For Wait Start Kvm Hosts', |
| 'site_kvm_hosts': 'KVM Site KVM Hosts', |
| 'install_kvm_adminsetd': 'KVM Install Adminsetd And Node_exporter', |
| 'start_yum_tools_install': 'Now Start Yum Tools Install', |
| 'start_nginx_install': 'Now Start Nginx Install', |
| 'nginx_copy': 'Nginx Copy Source File', |
| 'copy_nginx_install_shell': 'Nginx Copy Install Shell', |
| 'create_nginx_log_dir': 'Nginx Create Log Dir', |
| 'create_nginx_group_and_user': 'Nginx Create Group And User', |
| 'install_nginx': 'Nginx Install', |
| 'create_nginx_vhosts_dir': 'Nginx Create Vhosts Dir', |
| 'copy_main_template_config_file': 'Nginx Main Template Config File', |
| 'copy_vhost_template_config_file': 'Nginx Copy Vhost Template Config File', |
| 'copy_service_config_file': 'Nginx Copy Service Config File', |
| 'start_nginx': 'Nginx Start', |
| 'nginx_clean_local_tmp_cache_file': 'Nginx Clean local Tmp Cache File', |
| 'start_php_install': 'Now Start PHP Install', |
| 'php_copy': 'PHP Copy Source File', |
| 'cp_php_install_shell': 'PHP Copy Install Shell', |
| 'create_php_group_and_user': 'PHP Create Group And User', |
| 'create_php_log_dir': 'PHP Create Log Dir', |
| 'create_php_error_log_file': 'PHP Create Error Log File', |
| 'install_php': 'PHP Install', |
| 'cp_main_phpini_config': 'PHP Copy Phpini Config', |
| 'cp_php_www_conf_config': 'PHP Copy PHP WWW Config', |
| 'cp_php_php_fpm_config': 'PHP Copy php-fpm Config', |
| 'cp_php_php_fpm_service': 'PHP Copy php-fpm Service', |
| 'start_php': 'PHP Start', |
| 'php_clean_local_tmp_cache_files': 'PHP Clean local Tmp Cache File', |
| 'start_redis_install': 'Now Start Reids Install', |
| 'redis_copy': 'Redis Copy Source File', |
| 'cp_redis_install_shell': 'Redis Copy Install Shell', |
| 'create_redis_group_and_user': 'Redis Create Grup And User', |
| 'install_redis': 'Redis Install', |
| 'create_redis_log_file': 'Redis Create Redis Log File', |
| 'crate_redis_data_dir': 'Redis Create Data Dir', |
| 'copy_redis_config': 'Redis Copy Config', |
| 'copy_redis_service_config': 'Redis Copy Service Config', |
| 'redis_clean_local_tmp_cache_file': 'Redis Clean Local Tmp Cache File', |
| 'start_jdk_install': 'Now Start Install JDK', |
| 'yum_install_jdk': 'JDK Yum Install', |
| 'start_zabbix_agentd_install': 'Now Start Zabbix Agent Install', |
| 'zabbix_copy': 'Zabbix Copy Source File', |
| 'cp_zabbix_agent_install_shell': 'Zabbix Copy Agent Install Shell', |
| 'create_zabbix_group_and_user': 'Zabbix Create Zabbix Group And User', |
| 'create_zabbix_agent_log_dir': 'Zabbix Create Agent Log Dir', |
| 'install_zabbix_agent': 'Zabbix Install Agent', |
| 'copy_zabbix_agent_config_file': 'Zabbix Copy Zabbix Agent Config', |
| 'copy_zabbix_agent_init_file': 'Zabbix Copy Zabbix Agent init', |
| 'add_zabbix_agent_init': 'Zabbix Agent init', |
| 'start_zabbix_agentd': 'Zabbix Agent start', |
| 'zabbix_clean_local_tmp_cache_file': 'Zabbix Clean Local Tmp Cache File', |
| 'start_mysqlxx_install': 'Now Start Mysqlxx Install', |
| 'deletexx_old_conf': 'MySQLxx Delete Old Conf', |
| 'deletexx_old_conf_dir': 'MySQLxx Delete Old Conf Dir', |
| 'mysqlxx_source': 'MySQLxx Copy Source File', |
| 'cp_mysqlxx_conf': 'MySQLxx Copy Conf', |
| 'copy_mysqlxx_install_sh': 'MySQLxx Copy Install Shell', |
| 'add_mysqlxx_user_and_group': 'MySQLxx Add User And Group', |
| 'createxx_related_directories': 'MySQlxx Create Related Directories', |
| 'createxx_slowlog_file': 'MySQLxx Create Slowlog File', |
| 'install_mysqlxx': 'MySQLxx Install', |
| 'add_mysqlxx_to_PATH': 'MySQLxx Add To PATH', |
| 'cleanxx_local_tmp_cache_file': "MySQLxx Clean Local Tmp Cache File", |
| 'copy_mysqlxx_service_file': "MySQLxx Copy Service File", |
| 'start_mysqlxx_and_enable_it_onboot': 'MySQLxx start And Enable Onboot', |
| 'start_mysqlxx13_install': 'Now Start Mysqlxx13 Install', |
| 'deletexx13_old_conf': 'MySQLxx13 Delete Old Conf', |
| 'deletexx13_old_conf_dir': 'MySQLxx13 Delete Old Conf Dir', |
| 'mysqlxx13_source': 'MySQLxx13 Copy Source File', |
| 'cp_mysqlxx13_conf': 'MySQLxx13 Copy Conf', |
| 'copy_mysqlxx13_install_sh': 'MySQLxx13 Copy Install Shell', |
| 'add_mysqlxx13_user_and_group': 'MySQLxx13 Add User And Group', |
| 'createxx13_related_directories': 'MySQlxx13 Create Related Directories', |
| 'createxx13_slowlog_file': 'MySQLxx13 Create Slowlog File', |
| 'install_mysqlxx13': 'MySQLxx13 Install', |
| 'add_mysqlxx13_to_PATH': 'MySQLxx13 Add To PATH', |
| 'cleanxx13_local_tmp_cache_file': "MySQLxx13 Clean Local Tmp Cache File", |
| 'copy_mysqlxx13_service_file': "MySQLxx13 Copy Service File", |
| 'start_mysqlxx13_and_enable_it_onboot': 'MySQLxx13 Start And Enable Onboot', |
| 'set_kvm_passwd': 'KVM Set root passwd', |
| 'env': 'KVM ENV Is: ', |
| 'name': 'KVM Host Name Is: ', |
| 'ip': 'KVM IP Is: ', |
| 'target': 'TARGET IP Is: ', |
| 'gateway': 'KVM Gateway Is: ', |
| 'netmask': 'KVM Netmask Is: ', |
| 'app': 'KVM APP Is: ', |
| 'cpu': 'KVM CPU Is: ', |
| 'memory': 'KVM Memory Is: ', |
| 'disk': 'KVM Disk Is: ', |
| 'passwd': 'KVM Passwd IS: ' |
| } |
host.py 开通服务器所要操控的三台服务器
| |
| |
| from config import * |
| SOURCES_HOSTS = [ |
| LOGING_USER + '@' + SOURCES_HOST |
| ] |
| |
| TARGETS_HOSTS = [ |
| LOGING_USER + '@' + TARGETS_HOST |
| ] |
| |
| KVM_HOSTS = [ |
| LOGING_USER + '@' + KVM_IP_HOST |
| ] |
init.py 生产与生产环境配置的开关
| |
| |
| |
| from config.test.kvm_config import * |
kvm_create.py 每次开通服务器所需要的配置信息
| |
| |
| from fabric.api import env |
| from local.localall import newpasswd |
| |
| |
| |
| |
| ENV = 'prod' |
| LOGING_USER = 'root' |
| |
| KVM_IP_GATEWAY = 'xxx.xx.xx.xx' |
| |
| KVM_IP_PASSWD = 'xxxxxxxxXXXX' |
| |
| SOURCES_HOST = 'xxx.xx.xx.xx' |
| SOURCES_PASS = 'xxxxxxxxxxxxxxxxxxxxxxx' |
| |
| |
| KVM_IP_STATUE = 'yes' |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| env.passwords[LOGING_USER + '@' + SOURCES_HOST + ':22'] = SOURCES_PASS |
| env.passwords[LOGING_USER + '@' + TARGETS_HOST + ':22'] = TARGETS_PASS |
| env.passwords[LOGING_USER + '@' + KVM_IP_HOST + ':22'] = KVM_IP_PASSWD |
application 定义自动化执行流程
kvmcreate.py 定义kvm 自动部署流程
| |
| |
| from config import KVM_CPU,KVM_MEM,KVM_DISK |
| from config.messages import MESSAGE_INFO |
| from kernel.clone import * |
| from kernel.start import * |
| from kernel.standard import * |
| from kernel.last import * |
| from local.localall import common |
| app_clone_generate = generate_kvmimg() |
| app_targets_hosts_start = start_kvm() |
| app_kvm_hosts_start_site = standard_kvm() |
| app_kvm_hosts_start_print = last() |
| def kvm_create(): |
| print_first_message = last() |
| print_first_message.print_start_kvm_message() |
| print_kvm_message = common(MESSAGE_INFO['start_kvm_site']) |
| print_kvm_message.message_blue() |
| print_kvm_message = common(MESSAGE_INFO['app_clone']) |
| print_kvm_message.message_green() |
| app_clone_generate.clone_cevs74() |
| print_kvm_message = common(MESSAGE_INFO['site_image_ip']) |
| print_kvm_message.message_green() |
| app_clone_generate.site_imgip() |
| if KVM_CPU != '2' and KVM_MEM != '4194304': |
| print_kvm_message = common(MESSAGE_INFO['site_imgxml_cpu']) |
| print_kvm_message.message_green() |
| app_clone_generate.site_imgxml_cpu() |
| print_kvm_message = common(MESSAGE_INFO['site_imgxml_mem']) |
| print_kvm_message.message_green() |
| app_clone_generate.site_imgxml_mem() |
| if KVM_CPU != '2' and KVM_MEM == '4194304': |
| print_kvm_message = common(MESSAGE_INFO['site_imgxml_cpu']) |
| print_kvm_message.message_green() |
| app_clone_generate.site_imgxml_cpu() |
| if KVM_MEM != '4194304' and KVM_CPU == '2': |
| print_kvm_message = common(MESSAGE_INFO['site_imgxml_mem']) |
| print_kvm_message.message_green() |
| app_clone_generate.site_imgxml_mem() |
| print_kvm_message = common(MESSAGE_INFO['scp_cloned_img']) |
| print_kvm_message.message_green() |
| app_clone_generate.scp_cloned_img() |
| print_kvm_message = common(MESSAGE_INFO['scp_cloned_xml']) |
| print_kvm_message.message_green() |
| app_clone_generate.scp_cloned_xml() |
| def targets_hosts_start_kvm(): |
| print_kvm_message = common(MESSAGE_INFO['define_kvm']) |
| print_kvm_message.message_green() |
| app_targets_hosts_start.define_kvm() |
| print_kvm_message = common(MESSAGE_INFO['start_kvm']) |
| print_kvm_message.message_green() |
| app_targets_hosts_start.start_kvm() |
| if KVM_DISK is not '': |
| print_kvm_message = common(MESSAGE_INFO['extend_disk']) |
| print_kvm_message.message_green() |
| app_targets_hosts_start.extend_disk() |
| print_kvm_message = common(MESSAGE_INFO['wait_sleep']) |
| print_kvm_message.message_green() |
| time_sleep_wait_start = command(60) |
| time_sleep_wait_start.wait_sleep() |
| def kvm_virture_hosts_site(): |
| print_kvm_message = common(MESSAGE_INFO['site_kvm_hosts']) |
| print_kvm_message.message_green() |
| app_kvm_hosts_start_site.site_kvm_hosts() |
| print_kvm_message = common(MESSAGE_INFO['install_kvm_adminsetd']) |
| print_kvm_message.message_green() |
| app_kvm_hosts_start_site.install_kvm_adminsetd() |
| app_kvm_hosts_start_site.install_node_exporter() |
| def kvm_tirture_hosts_site_passwd(): |
| print_kvm_message = common(MESSAGE_INFO['set_kvm_passwd']) |
| print_kvm_message.message_green() |
| app_kvm_hosts_start_site.set_kvm_passwd() |
| def kvm_virture_hosts_print(): |
| app_kvm_hosts_start_print.print_kvm_message() |
appcreate.py 用于定义应用程序的部署流程
| |
| |
| from config.messages import MESSAGE_INFO |
| from local.localall import common |
| from kernel.yum import yum_install_packages, yum_install_jdk |
| from kernel.nginx import nginx_kvm |
| from kernel.php import php_kvm |
| from kernel.redis import redis_kvm |
| from kernel.zabbix_agent import zabbix_agent_kvm |
| from kernel.mysqlxx import mysqlxx_kvm |
| from kernel.mysqlxxxx import mysqlxxxx_kvm |
| from config import APP |
| |
| nginx_install = nginx_kvm() |
| php_install = php_kvm() |
| redis_install = redis_kvm() |
| zabbix_agent_install = zabbix_agent_kvm() |
| mysqlxx_install = mysqlxx_kvm() |
| mysqlxxxx_install = mysqlxxxx_kvm() |
| def run_yum_install(): |
| yum_install_packages() |
| def run_install_nginx(): |
| print_application_message = common(MESSAGE_INFO['nginx_copy']) |
| print_application_message.message_green() |
| nginx_install.copy_source() |
| |
| print_application_message = common(MESSAGE_INFO['copy_nginx_install_shell']) |
| print_application_message.message_green() |
| nginx_install.copy_nginx_install_shell() |
| |
| print_application_message = common(MESSAGE_INFO['create_nginx_log_dir']) |
| print_application_message.message_green() |
| nginx_install.create_nginx_log_dir() |
| |
| print_application_message = common(MESSAGE_INFO['create_nginx_group_and_user']) |
| print_application_message.message_green() |
| nginx_install.create_nginx_group_and_user() |
| |
| print_application_message = common(MESSAGE_INFO['install_nginx']) |
| print_application_message.message_green() |
| nginx_install.install_nginx() |
| |
| print_application_message = common(MESSAGE_INFO['create_nginx_vhosts_dir']) |
| print_application_message.message_green() |
| nginx_install.create_nginx_vhosts_dir() |
| |
| print_application_message = common(MESSAGE_INFO['copy_main_template_config_file']) |
| print_application_message.message_green() |
| nginx_install.copy_main_template_config_file() |
| |
| print_application_message = common(MESSAGE_INFO['copy_vhost_template_config_file']) |
| print_application_message.message_green() |
| nginx_install.copy_vhost_template_config_file() |
| |
| print_application_message = common(MESSAGE_INFO['copy_service_config_file']) |
| print_application_message.message_green() |
| nginx_install.copy_service_config_file() |
| |
| print_application_message = common(MESSAGE_INFO['start_nginx']) |
| print_application_message.message_green() |
| nginx_install.start_nginx() |
| |
| print_application_message = common(MESSAGE_INFO['nginx_clean_local_tmp_cache_file']) |
| print_application_message.message_green() |
| nginx_install.clean_local_tmp_cache_file() |
| |
| def run_install_php(): |
| print_application_message = common(MESSAGE_INFO['php_copy']) |
| print_application_message.message_green() |
| php_install.cp_source() |
| |
| print_application_message = common(MESSAGE_INFO['cp_php_install_shell']) |
| print_application_message.message_green() |
| php_install.cp_php_install_shell() |
| |
| print_application_message = common(MESSAGE_INFO['create_php_group_and_user']) |
| print_application_message.message_green() |
| php_install.create_php_group_and_user() |
| |
| print_application_message = common(MESSAGE_INFO['create_php_log_dir']) |
| print_application_message.message_green() |
| php_install.create_php_log_dir() |
| |
| |
| print_application_message = common(MESSAGE_INFO['create_php_error_log_file']) |
| print_application_message.message_green() |
| php_install.create_php_error_log_file() |
| |
| print_application_message = common(MESSAGE_INFO['install_php']) |
| print_application_message.message_green() |
| php_install.install_php() |
| |
| print_application_message = common(MESSAGE_INFO['cp_main_phpini_config']) |
| print_application_message.message_green() |
| php_install.cp_main_phpini_config() |
| |
| print_application_message = common(MESSAGE_INFO['cp_php_www_conf_config']) |
| print_application_message.message_green() |
| php_install.cp_php_www_conf_config() |
| |
| print_application_message = common(MESSAGE_INFO['cp_php_php_fpm_config']) |
| print_application_message.message_green() |
| php_install.cp_php_php_fpm_config() |
| |
| print_application_message = common(MESSAGE_INFO['cp_php_php_fpm_service']) |
| print_application_message.message_green() |
| php_install.cp_php_php_fpm_service() |
| |
| print_application_message = common(MESSAGE_INFO['start_php']) |
| print_application_message.message_green() |
| php_install.start_php() |
| |
| print_application_message = common(MESSAGE_INFO['php_clean_local_tmp_cache_files']) |
| print_application_message.message_green() |
| php_install.clean_local_tmp_cache_files() |
| |
| def run_install_redis(): |
| print_application_message = common(MESSAGE_INFO['redis_copy']) |
| print_application_message.message_green() |
| redis_install.cp_source() |
| |
| print_application_message = common(MESSAGE_INFO['cp_redis_install_shell']) |
| print_application_message.message_green() |
| redis_install.cp_redis_install_shell() |
| |
| print_application_message = common(MESSAGE_INFO['create_redis_group_and_user']) |
| print_application_message.message_green() |
| redis_install.create_redis_group_and_user() |
| |
| print_application_message = common(MESSAGE_INFO['install_redis']) |
| print_application_message.message_green() |
| redis_install.install_redis() |
| |
| print_application_message = common(MESSAGE_INFO['create_redis_log_file']) |
| print_application_message.message_green() |
| redis_install.create_redis_log_file() |
| |
| print_application_message = common(MESSAGE_INFO['crate_redis_data_dir']) |
| print_application_message.message_green() |
| redis_install.crate_redis_data_dir() |
| |
| print_application_message = common(MESSAGE_INFO['copy_redis_config']) |
| print_application_message.message_green() |
| redis_install.copy_redis_config() |
| |
| print_application_message = common(MESSAGE_INFO['copy_redis_service_config']) |
| print_application_message.message_green() |
| redis_install.copy_redis_service_config() |
| |
| print_application_message = common(MESSAGE_INFO['redis_clean_local_tmp_cache_file']) |
| print_application_message.message_green() |
| redis_install.clean_local_tmp_cache_file() |
| |
| def run_install_jdk(): |
| print_application_message = common(MESSAGE_INFO['yum_install_jdk']) |
| print_application_message.message_green() |
| yum_install_jdk() |
| |
| def run_install_zabbix_agent(): |
| print_application_message = common(MESSAGE_INFO['zabbix_copy']) |
| print_application_message.message_green() |
| zabbix_agent_install.cp_source() |
| |
| print_application_message = common(MESSAGE_INFO['cp_zabbix_agent_install_shell']) |
| print_application_message.message_green() |
| zabbix_agent_install.cp_zabbix_agent_install_shell() |
| |
| print_application_message = common(MESSAGE_INFO['create_zabbix_group_and_user']) |
| print_application_message.message_green() |
| zabbix_agent_install.create_zabbix_group_and_user() |
| |
| print_application_message = common(MESSAGE_INFO['create_zabbix_agent_log_dir']) |
| print_application_message.message_green() |
| zabbix_agent_install.create_zabbix_agent_log_dir() |
| |
| print_application_message = common(MESSAGE_INFO['install_zabbix_agent']) |
| print_application_message.message_green() |
| zabbix_agent_install.install_zabbix_agent() |
| |
| print_application_message = common(MESSAGE_INFO['copy_zabbix_agent_config_file']) |
| print_application_message.message_green() |
| zabbix_agent_install.copy_zabbix_agent_config_file() |
| |
| print_application_message = common(MESSAGE_INFO['copy_zabbix_agent_init_file']) |
| print_application_message.message_green() |
| zabbix_agent_install.copy_zabbix_agent_init_file() |
| |
| print_application_message = common(MESSAGE_INFO['zabbix_clean_local_tmp_cache_file']) |
| print_application_message.message_green() |
| zabbix_agent_install.clean_local_tmp_cache_file() |
| |
| print_application_message = common(MESSAGE_INFO['add_zabbix_agent_init']) |
| print_application_message.message_green() |
| zabbix_agent_install.add_zabbix_agent_init() |
| |
| print_application_message = common(MESSAGE_INFO['start_zabbix_agentd']) |
| print_application_message.message_green() |
| zabbix_agent_install.start_zabbix_agentd() |
| |
| |
| |
| def run_install_mysqlxx(): |
| print_application_message = common(MESSAGE_INFO['deletexx_old_conf']) |
| print_application_message.message_green() |
| mysqlxx_install.delete_old_conf() |
| |
| print_application_message = common(MESSAGE_INFO['deletexx_old_conf_dir']) |
| print_application_message.message_green() |
| mysqlxx_install.delete_old_conf_dir() |
| |
| print_application_message = common(MESSAGE_INFO['mysqlxx_source']) |
| print_application_message.message_green() |
| mysqlxx_install.cp_source() |
| |
| print_application_message = common(MESSAGE_INFO['cp_mysqlxx_conf']) |
| print_application_message.message_green() |
| mysqlxx_install.cp_mysql_conf() |
| |
| print_application_message = common(MESSAGE_INFO['copy_mysqlxx_install_sh']) |
| print_application_message.message_green() |
| mysqlxx_install.copy_mysql_install_sh() |
| |
| print_application_message = common(MESSAGE_INFO['add_mysqlxx_user_and_group']) |
| print_application_message.message_green() |
| mysqlxx_install.add_mysql_user_and_group() |
| |
| print_application_message = common(MESSAGE_INFO['createxx_related_directories']) |
| print_application_message.message_green() |
| mysqlxx_install.create_related_directories() |
| |
| print_application_message = common(MESSAGE_INFO['createxx_slowlog_file']) |
| print_application_message.message_green() |
| mysqlxx_install.create_slowlog_file() |
| |
| print_application_message = common(MESSAGE_INFO['install_mysqlxx']) |
| print_application_message.message_green() |
| mysqlxx_install.install_mysql() |
| |
| print_application_message = common(MESSAGE_INFO['add_mysqlxx_to_PATH']) |
| print_application_message.message_green() |
| mysqlxx_install.add_mysql_to_PATH() |
| |
| |
| print_application_message = common(MESSAGE_INFO['copy_mysqlxx_service_file']) |
| print_application_message.message_green() |
| mysqlxx_install.copy_mysql_service_file() |
| |
| print_application_message = common(MESSAGE_INFO['cleanxx_local_tmp_cache_file']) |
| print_application_message.message_green() |
| mysqlxx_install.clean_local_tmp_cache_file() |
| |
| print_application_message = common(MESSAGE_INFO['start_mysqlxx_and_enable_it_onboot']) |
| print_application_message.message_green() |
| mysqlxx_install.start_mysql_and_enable_it_onboot() |
| |
| def run_install_mysqlxx13(): |
| print_application_message = common(MESSAGE_INFO['deletexx13_old_conf']) |
| print_application_message.message_green() |
| mysqlxx13_install.delete_old_conf() |
| |
| print_application_message = common(MESSAGE_INFO['deletexx13_old_conf_dir']) |
| print_application_message.message_green() |
| mysqlxx13_install.delete_old_conf_dir() |
| |
| print_application_message = common(MESSAGE_INFO['mysqlxx13_source']) |
| print_application_message.message_green() |
| mysqlxx13_install.cp_source() |
| |
| print_application_message = common(MESSAGE_INFO['cp_mysqlxx13_conf']) |
| print_application_message.message_green() |
| mysqlxx13_install.cp_mysql_conf() |
| |
| print_application_message = common(MESSAGE_INFO['copy_mysqlxx13_install_sh']) |
| print_application_message.message_green() |
| mysqlxx13_install.copy_mysql_install_sh() |
| |
| print_application_message = common(MESSAGE_INFO['add_mysqlxx13_user_and_group']) |
| print_application_message.message_green() |
| mysqlxx13_install.add_mysql_user_and_group() |
| |
| print_application_message = common(MESSAGE_INFO['createxx13_related_directories']) |
| print_application_message.message_green() |
| mysqlxx13_install.create_related_directories() |
| |
| print_application_message = common(MESSAGE_INFO['createxx13_slowlog_file']) |
| print_application_message.message_green() |
| mysqlxx13_install.create_slowlog_file() |
| |
| print_application_message = common(MESSAGE_INFO['install_mysqlxx13']) |
| print_application_message.message_green() |
| mysqlxx13_install.install_mysql() |
| |
| print_application_message = common(MESSAGE_INFO['add_mysqlxx13_to_PATH']) |
| print_application_message.message_green() |
| mysqlxx13_install.add_mysql_to_PATH() |
| |
| print_application_message = common(MESSAGE_INFO['copy_mysqlxx13_service_file']) |
| print_application_message.message_green() |
| mysqlxx13_install.copy_mysql_service_file() |
| |
| print_application_message = common(MESSAGE_INFO['cleanxx13_local_tmp_cache_file']) |
| print_application_message.message_green() |
| mysqlxx13_install.clean_local_tmp_cache_file() |
| |
| print_application_message = common(MESSAGE_INFO['start_mysqlxx13_and_enable_it_onboot']) |
| print_application_message.message_green() |
| mysqlxx13_install.start_mysql_and_enable_it_onboot() |
| |
| def run_install_all_application_package(): |
| if len(APP) != (0): |
| print_application_message = common(MESSAGE_INFO['start_yum_tools_install']) |
| print_application_message.message_blue() |
| run_yum_install() |
| |
| if 'nginx' in APP: |
| print_application_message = common(MESSAGE_INFO['start_nginx_install']) |
| print_application_message.message_blue() |
| run_install_nginx() |
| |
| if 'php' in APP: |
| print_application_message = common(MESSAGE_INFO['start_php_install']) |
| print_application_message.message_blue() |
| run_install_php() |
| |
| if 'redis' in APP: |
| print_application_message = common(MESSAGE_INFO['start_redis_install']) |
| print_application_message.message_blue() |
| run_install_redis() |
| |
| if 'jdk' in APP: |
| print_application_message = common(MESSAGE_INFO['start_jdk_install']) |
| print_application_message.message_blue() |
| run_install_jdk() |
| |
| if 'zabbix_agent' in APP: |
| print_application_message = common(MESSAGE_INFO['start_zabbix_agentd_install']) |
| print_application_message.message_blue() |
| run_install_zabbix_agent() |
| |
| if 'mysql_xx' in APP: |
| print_application_message = common(MESSAGE_INFO['start_mysqlxx_install']) |
| print_application_message.message_blue() |
| run_install_mysqlxx() |
| |
| if 'mysql_xx13' in APP: |
| print_application_message = common(MESSAGE_INFO['start_mysqlxx13_install']) |
| print_application_message.message_blue() |
| run_install_mysqlxx13() |
定义入口文件
kvm.py 是所有程序执行的入口文件
| |
| |
| from prettytable import PrettyTable |
| from config.hosts import SOURCES_HOSTS,TARGETS_HOSTS,KVM_HOSTS |
| from fabric.contrib.files import * |
| from application.kvmcreate import * |
| from application.appcreate import * |
| @hosts(SOURCES_HOSTS) |
| def kvm_sources_clone_scp(): |
| kvm_create() |
| @hosts(TARGETS_HOSTS) |
| def kvm_targets_site(): |
| targets_hosts_start_kvm() |
| @hosts(KVM_HOSTS) |
| def kvm_virture_host_start_site(): |
| kvm_virture_hosts_site() |
| run_install_all_application_package() |
| kvm_tirture_hosts_site_passwd() |
| kvm_virture_hosts_print() |
| @task(name='install') |
| def run_all(): |
| execute(kvm_sources_clone_scp) |
| execute(kvm_targets_site) |
| execute(kvm_virture_host_start_site) |
| @task(name='help') |
| def deploy_help(): |
| print green("KVM产品及CentOS7应用部署") |
| print yellow(" 1.配置文件") |
| helper = PrettyTable() |
| helper.field_names = ["配置","说明"] |
| helper.align = "l" |
| helper.add_row(["config/__init__.py", "配置文件开关"]) |
| helper.add_row(["config/test/kvm_config.py", "测试环境部署配置"]) |
| helper.add_row(["config/prod/kvm_config.py", "生产环境部署配置"]) |
| print helper |
| print red(" 2.指令说明") |
| helper = PrettyTable() |
| helper.field_names = ["指令","说明"] |
| helper.align = "l" |
| helper.add_row(["fab -f kvm.py -l", "列出部署产品"]) |
| helper.add_row(["fab -f kvm.py install", "安装kvm,并整合配置的应用至kvm新虚拟服务器"]) |
| print helper |
| print blue(" 3.作者信息") |
| helper = PrettyTable() |
| helper.field_names = ["作者","信息"] |
| helper.add_row(["姓名", "任锦"]) |
| helper.add_row(["手机号", "13161389224"]) |
| helper.add_row(["博客地址", "www.ssjinyao.com"]) |
| print helper |
服务器部署完此代码后,定义别名调用kvm.py实现快速开通
自动化快速开启开通kvm虚拟化服务器
| **************************************************************************************************** |
| ********** KVM ENV Is: test ********** |
| ********** KVM Host Name Is: xx-xxxx-xx-xxx-xxxx-xxxx ********** |
| ********** KVM IP Is: xxx.xx.xx.xx ********** |
| ********** TARGET IP Is: xxx.xx.xxx.xx ********** |
| ********** KVM Gateway Is: xxx.xx.x.x ********** |
| ********** KVM Netmask Is: xxx.xxx.xxx.x ********** |
| ********** KVM APP Is: zabbix_agent nginx mysql_xx ********** |
| ********** KVM CPU Is: 2 ********** |
| ********** KVM Memory Is: 4194304 ********** |
| ********** KVM Disk Is: 100G ********** |
| ********** KVM Passwd IS: xxxxxxxXXXX ********** |
| **************************************************************************************************** |
| |
| If the information is incorrect, please input no: |

开通kvm虚似服务器已经完成,信息如下
| **************************************************************************************************** |
| ********** KVM ENV Is: test ********** |
| ********** KVM Host Name Is: bj-xxxx-xx-xxx-xxxx-xxxxx ********** |
| ********** KVM IP Is: xxx.xx.xx.xx ********** |
| ********** TARGET IP Is: xxx.xx.xxx.xx ********** |
| ********** KVM Gateway Is: xxx.xx.xx.x ********** |
| ********** KVM Netmask Is: xxx.xxx.xxx.0 ********** |
| ********** KVM APP Is: zabbix_agent nginx mysql_xx ********** |
| ********** KVM CPU Is: 2 ********** |
| ********** KVM Memory Is: 4194304 ********** |
| ********** KVM Disk Is: 100G ********** |
| ********** KVM Passwd IS: XXXXXXXX ********** |
| **************************************************************************************************** |
| |
| |
| Done. |
| Disconnecting from xxx.xx.xx.xx... done. |
| Disconnecting from xxx.xx.xx.xx... done. |
| Disconnecting from xxx.xx.xx.xx... done. |
补充基于api实现
补充基于python libguestfs api 方法实现
| import libguestfs |
| |
| |
| disk_image = '/var/lib/libvirt/images/myvm.qcow2' |
| |
| |
| g = libguestfs.GuestFS(python_return_dict=True) |
| |
| |
| g.add_drive_opts(disk_image, format='qcow2') |
| g.launch() |
| |
| |
| g.mount('/dev/sda', '/') |
| |
| |
| ifcfg_eth0 = "DEVICE=eth0\nBOOTPROTO=static\nIPADDR=192.168.1.100\nNETMASK=255.255.255.0\nONBOOT=yes\n" |
| g.write('/etc/sysconfig/network-scripts/ifcfg-eth0', ifcfg_eth0) |
| |
| |
| g.umount_all() |
| g.close() |