热门标签 | 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 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • CentOS系统安装与配置常见问题及解决方案
    本文详细介绍了在CentOS系统安装过程中遇到的常见问题及其解决方案,包括Vi编辑器的操作、图形界面的安装、网络连接故障排除等。通过本文,读者可以更好地理解和解决这些常见问题。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • 本文介绍如何从JSON格式的文件中提取数据并将其分配给Bash脚本中的变量。我们将探讨具体的命令和工具,帮助你高效地完成这一任务。 ... [详细]
  • 本文详细介绍了 Linux 系统中用户、组和文件权限的设置方法,包括基本权限(读、写、执行)、特殊权限(SUID、SGID、Sticky Bit)以及相关配置文件的使用。 ... [详细]
  • 本文详细介绍如何通过设置SSH密钥来获取连接GitHub远程仓库的权限,包括生成密钥、添加到GitHub账户以及验证连接等步骤。 ... [详细]
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社区 版权所有