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


推荐阅读
  • Ubuntu GamePack:专为游戏爱好者打造的Linux发行版
    随着Linux系统在游戏领域的应用越来越广泛,许多Linux用户开始寻求在自己的系统上畅玩游戏的方法。UALinux,一家致力于推广GNU/Linux使用的乌克兰公司,推出了基于Ubuntu 16.04的Ubuntu GamePack,旨在为Linux用户提供一个游戏友好型的操作环境。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • WinSCP: 跨Windows与Linux系统的高效文件传输解决方案
    本文详细介绍了一款名为WinSCP的开源图形化SFTP客户端,该工具支持SSH协议,适用于Windows操作系统,能够实现与Linux系统之间的文件传输。对于从事嵌入式开发的技术人员来说,掌握WinSCP的使用方法将极大提高工作效率。 ... [详细]
  • Linux环境下Git安装及常见问题解析
    本文详细介绍了在Ubuntu系统中安装Git的过程,包括环境检查、软件安装、用户配置以及SSH密钥生成等步骤,并针对安装过程中可能出现的问题提供了有效的解决方案。 ... [详细]
  • CentOS 6.5 上安装 MySQL 5.7.23 的详细步骤
    本文详细介绍如何在 CentOS 6.5 系统上成功安装 MySQL 5.7.23,包括卸载旧版本、下载安装包、配置文件修改及启动服务等关键步骤。 ... [详细]
  • 本文介绍如何从JSON格式的文件中提取数据并将其分配给Bash脚本中的变量。我们将探讨具体的命令和工具,帮助你高效地完成这一任务。 ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • 本文详细介绍了如何解压并安装MySQL集群压缩包,创建用户和组,初始化数据库,配置环境变量,并启动相关服务。此外,还提供了详细的命令行操作步骤和常见问题的解决方案。 ... [详细]
  • 本文详细介绍了如何在Linux系统中创建和管理DB2数据库,包括用户切换、数据库创建、错误处理、连接与断开、表空间和缓冲池的创建,以及用户权限管理和数据导入导出等操作。 ... [详细]
  • 本文详细介绍如何通过设置SSH密钥来获取连接GitHub远程仓库的权限,包括生成密钥、添加到GitHub账户以及验证连接等步骤。 ... [详细]
  • iTOP4412开发板QtE5.7源码编译指南
    本文详细介绍了如何在iTOP4412开发板上编译QtE5.7源码,包括所需文件的位置、编译器设置、触摸库编译以及QtE5.7的完整编译流程。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
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社区 版权所有