热门标签 | 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云远程批量创建虚拟机


推荐阅读
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
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社区 版权所有