热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle云远程批量创建虚拟机

Oracle云远程批量创建虚拟机:前言由于公司业务需求,我们需要批量创建虚拟机执行任务,任务运行完后需要销毁,以节省资源。我们批量创建虚拟的方式是通过Oracle云提供的bash接
前言

由于公司业务需求,我们需要批量创建虚拟机执行任务,任务运行完后需要销毁,以节省资源。
我们批量创建虚拟的方式是通过Oracle云提供的bash接口,所以我们第一步就是要创建bash环境

一. 在Linux机器上配置Command Line Interface。

1. Python版本号大于等于2.7

[root@repo ~]$ python --version

技术分享图片

2. 安装的用户要有sudo权限

[root@repo ~]# visudo

技术分享图片

符合条件

2. 下载并安装CLI

[lirou@node3 ~]$ curl -L "https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh" | bash

技术分享图片

技术分享图片

技术分享图片

查看

技术分享图片

3. 自动生成配置CLI配制文件

此配置文件用于认证

技术分享图片

获取用户OCID:

技术分享图片

获取租户OCID

技术分享图片

4. 更新用户密钥

技术分享图片

查看密钥放置的位置:

技术分享图片

查看密钥内容
技术分享图片

添加密钥

技术分享图片

技术分享图片

技术分享图片

4. 测试是否配置成功

技术分享图片

二. 批量部署节点机脚本

#!/bin/bash # Description: batch create Oracle Cloud Virtual Instance. # Date: 2017/11/22 # Author: lirou # Version: 1.0.1 # #### set some variables. Error_Create=2 Error_No_Instance=3 iError_Parameter=4 #node host global variables oci_path=/root/y/oci compartment_id=ocid1.tenancy.oc1 tenancy_id=ocid1.tenancy.oc1 subnet_id=ocid1.subnet.oc1.phx image_id=ocid1.image.oc1.phx shape="VM.Standard1.1" #record node host create and delete variables. file_of_alived_node=/var/lib/oracle/alived.nodes file_of_ip_number=/var/lib/oracle/ip.txt file_of_create_node_log=/var/log/oracle/create.log file_of_delete_node_log=/var/log/oracle/delete.log ### make sure file is existence. [ ! -d $(dirname $file_of_alived_node) ] && mkdir $(dirname $file_of_alived_node) >>/dev/null [ ! -d $(dirname $file_of_ip_number) ] && mkdir $(dirname $file_of_ip_number) >>/dev/null touch $file_of_ip_number [ ! -d $(dirname $file_of_create_node_log) ] && mkdir $(dirname $file_of_create_node_log) >>/dev/null [ ! -d $(dirname $file_of_delete_node_log) ] && mkdir $(dirname $file_of_delete_node_log) >>/dev/null #### create node host ### Usage: Create_Node instance_display_name instance_private_ip volume_display_name volume_size_in_mbs attachment_display_name function Create_Node { #Create instance instance_id=$($oci_path compute instance launch --availability-domain $avail_domain -c $compartment_id --image-id $image_id --shape $shape --display-name $1 --subnet-id $subnet_id --private-ip $2 | grep "\"id\"" | cut -d "\"" -f 4) if [[ -z $instance_id ]];then echo "[$(date +‘%F %T‘)] [instance] [$1:$2] [create failure] [exit...]" >> $file_of_create_node_log exit $ERROR_Create else echo "[$(date +‘%F %T‘)] [instance] [$1:$instance_id:$2] [create success]" >> $file_of_create_node_log fi # Create Volume volume_id=$($oci_path bv volume create --availability-domain $avail_domain -c $compartment_id --display-name $3 --size-in-mbs $4 | grep "\"id\"" | cut -d "\"" -f 4) if [[ -z $volume_id ]];then echo "[$(date +‘%F %T‘)] [volume] [$3] [create failure] [exit...]" >> $file_of_create_node_log exit $ERROR_Create else echo "[$(date +‘%F %T‘)] [volume] [$3:$volume_id:$4] [create success]" >> $file_of_create_node_log fi # Attach Volume to Instance while true;do instance_state=$($oci_path compute instance get --instance-id $instance_id | grep "lifecycle-state" |cut -d "\"" -f 4) volume_state=$($oci_path bv volume get --volume-id $volume_id | grep "lifecycle-state" |cut -d "\"" -f 4) if [[ $instance_state == "RUNNING" ]] && [[ $volume_state == "AVAILABLE" ]];then volume_attached_id=$($oci_path compute volume-attachment attach --display-name $5 --instance-id $instance_id --type iscsi --volume-id $volume_id | grep "\"id\"" | cut -d "\"" -f 4) if [[ -z $volume_attached_id ]];then echo "[$(date +‘%F %T‘)] [volume_attached] [$5] [create failure] [exit...]" >> $file_of_create_node_log exit $ERROR_Create else echo "[$(date +‘%F %T‘)] [volume_attached] [$5:$volume_attached_id] [create success]" >> $file_of_create_node_log fi break fi sleep 5 done echo "\"$(date +‘%F %T‘)\" \"$instance_id\" \"$volume_id\" \"$volume_attached_id\"" >> $file_of_alived_node } if [ $# -le 3 ];then echo "Error: Usage $(basename $0) {create|delete} number" exit $Error_Parameter fi case $1 in create) start_ip_number=5 # file_of_ip_number restore have been create maximal ip . $file_of_ip_number create_instance_number=0 # Loop create node host while [[ $create_instance_number -lt $2 ]] && [[ $start_ip_number -le 250 ]];do instance_display_name=iGB$(printf "%03d" $start_ip_number) instance_private_ip=10.40.1.$start_ip_number echo $instance_private_ip volume_display_name=vGB$(printf "%03d" $start_ip_number) volume_size_mbs=51200 attachment_display_name=${instance_display_name}_attached_${volume_display_name} Create_Node $instance_display_name $instance_private_ip $volume_display_name $volume_size_mbs $attachment_display_name # alter create maximal ip start_ip_number=$((start_ip_number+1)) echo "start_ip_number=$start_ip_number" >$file_of_ip_number create_instance_number=$((create_instance_number+1)) done echo "create $create_instance_number instance." ;; delete) . $file_of_ip_number #end_delete_ip_number=$((start_create_ip_number-1)) delete_instance_number=0 while [ $delete_instance_number -lt $2 ];do instance_id=$(tail -1 $file_of_alived_node | cut -d "\"" -f 4) if [[ -z $instance_id ]];then echo "no have more instance" echo "delete $delete_instance_number instance." exit $Error_No_Instance fi volume_id=$(tail -1 $file_of_alived_node | cut -d "\"" -f 6) $oci_path compute instance terminate --force --instance-id $instance_id while true;do instance_state=$($oci_path compute instance get --instance-id $instance_id |grep "lifecycle-state" |cut -d "\"" -f 4) if [[ $instance_state == "TERMINATED" ]] || [[ -z $instance_state ]];then break fi sleep 5 done $oci_path bv volume delete --force --volume-id $volume_id delete_instance_number=$((delete_instance_number+1)) echo "\"$instance_id\" \"$volume_id\"" >> $file_of_delete_node_log # alter alived hosts sed -i "/$instance_id/d" $file_of_alived_node echo "start_ip_number=$((start_ip_number-1))" >$file_of_ip_number done echo "delete $delete_instance_number instance." ;; *) echo "Usage: $(basename $0) {create|delete} number" esac

注意 :

技术分享图片

  • 脚本使用
    • 创建节点机:./nodes_ocvh.sh create 3
    • 删除节点:./nodes_ocvh.sh delete 2

Oracle云远程批量创建虚拟机


推荐阅读
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
author-avatar
等待1314578
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有