VirtualBox

Ignore:
Timestamp:
Dec 3, 2018 6:17:11 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
127126
Message:

bugref:9311. Added support of cloud export into VBoxManage.

Location:
trunk/src/VBox/Frontends/VBoxManage
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp

    r74778 r75920  
    917917                        case VirtualSystemDescriptionType_CloudOCIVCN:
    918918                        case VirtualSystemDescriptionType_CloudOCIPublicIP:
    919                         case VirtualSystemDescriptionType_CloudOCIProfilePath:
     919                        case VirtualSystemDescriptionType_CloudOCIProfileName:
    920920                        case VirtualSystemDescriptionType_CloudOCISubnet:
    921921                        case VirtualSystemDescriptionType_CloudOCIKeepObject:
     
    10281028    { "--eulafile",             'E', RTGETOPT_REQ_STRING },
    10291029    { "--options",              'O', RTGETOPT_REQ_STRING },
     1030    { "--cloud",                'C', RTGETOPT_REQ_UINT32 },
     1031    { "--cloudshape",           'S', RTGETOPT_REQ_STRING },
     1032    { "--clouddomain",          'D', RTGETOPT_REQ_STRING },
     1033    { "--clouddisksize",        'R', RTGETOPT_REQ_STRING },
     1034    { "--cloudbucket",          'B', RTGETOPT_REQ_STRING },
     1035    { "--cloudocivcn",          'Q', RTGETOPT_REQ_STRING },
     1036    { "--cloudpublicip",        'A', RTGETOPT_REQ_STRING },
     1037    { "--cloudprofile",         'F', RTGETOPT_REQ_STRING },
     1038    { "--cloudocisubnet",       'T', RTGETOPT_REQ_STRING },
     1039    { "--cloudkeepobject",      'K', RTGETOPT_REQ_STRING },
     1040    { "--cloudlaunchinstance",  'L', RTGETOPT_REQ_STRING },
    10301041};
     1042
     1043enum
     1044{
     1045    NOT_SET, LOCAL, CLOUD
     1046} exportType;
    10311047
    10321048RTEXITCODE handleExportAppliance(HandlerArg *a)
     
    10371053    Utf8Str strOvfFormat("ovf-1.0"); // the default export version
    10381054    bool fManifest = false; // the default
     1055    bool fCloud = false; // the default
     1056    exportType = NOT_SET;
    10391057    bool fExportISOImages = false; // the default
    10401058    com::SafeArray<ExportOptions_T> options;
     
    10911109
    10921110                case 's':   // --vsys
     1111                    if (fCloud == false && exportType == NOT_SET)
     1112                        exportType = LOCAL;
     1113
     1114                    if (exportType != LOCAL)
     1115                        return errorSyntax(USAGE_EXPORTAPPLIANCE,
     1116                                           "Option \"%s\" can't be used together with \"--cloud\" argument.",
     1117                                           GetState.pDef->pszLong);
     1118
    10931119                    ulCurVsys = ValueUnion.u32;
    10941120                    break;
    10951121
    10961122                case 'V':   // --vmname
    1097                     if (ulCurVsys == (uint32_t)-1)
     1123                    if (exportType == NOT_SET || ulCurVsys == (uint32_t)-1)
    10981124                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
    10991125                    mapArgsMapsPerVsys[ulCurVsys]["vmname"] = ValueUnion.psz;
     
    11011127
    11021128                case 'p':   // --product
    1103                     if (ulCurVsys == (uint32_t)-1)
     1129                    if (exportType != LOCAL)
    11041130                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
    11051131                    mapArgsMapsPerVsys[ulCurVsys]["product"] = ValueUnion.psz;
     
    11071133
    11081134                case 'P':   // --producturl
    1109                     if (ulCurVsys == (uint32_t)-1)
     1135                    if (exportType != LOCAL)
    11101136                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
    11111137                    mapArgsMapsPerVsys[ulCurVsys]["producturl"] = ValueUnion.psz;
     
    11131139
    11141140                case 'n':   // --vendor
    1115                     if (ulCurVsys == (uint32_t)-1)
     1141                    if (exportType != LOCAL)
    11161142                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
    11171143                    mapArgsMapsPerVsys[ulCurVsys]["vendor"] = ValueUnion.psz;
     
    11191145
    11201146                case 'N':   // --vendorurl
    1121                     if (ulCurVsys == (uint32_t)-1)
     1147                    if (exportType != LOCAL)
    11221148                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
    11231149                    mapArgsMapsPerVsys[ulCurVsys]["vendorurl"] = ValueUnion.psz;
     
    11251151
    11261152                case 'v':   // --version
    1127                     if (ulCurVsys == (uint32_t)-1)
     1153                    if (exportType != LOCAL)
    11281154                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
    11291155                    mapArgsMapsPerVsys[ulCurVsys]["version"] = ValueUnion.psz;
     
    11311157
    11321158                case 'd':   // --description
    1133                     if (ulCurVsys == (uint32_t)-1)
     1159                    if (exportType != LOCAL)
    11341160                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
    11351161                    mapArgsMapsPerVsys[ulCurVsys]["description"] = ValueUnion.psz;
     
    11371163
    11381164                case 'e':   // --eula
    1139                     if (ulCurVsys == (uint32_t)-1)
     1165                    if (exportType != LOCAL)
    11401166                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
    11411167                    mapArgsMapsPerVsys[ulCurVsys]["eula"] = ValueUnion.psz;
     
    11431169
    11441170                case 'E':   // --eulafile
    1145                     if (ulCurVsys == (uint32_t)-1)
     1171                    if (exportType != LOCAL)
    11461172                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --vsys argument.", GetState.pDef->pszLong);
    11471173                    mapArgsMapsPerVsys[ulCurVsys]["eulafile"] = ValueUnion.psz;
     
    11511177                    if (RT_FAILURE(parseExportOptions(ValueUnion.psz, &options)))
    11521178                        return errorArgument("Invalid export options '%s'\n", ValueUnion.psz);
     1179                    break;
     1180
     1181                    /*--cloud and --vsys are orthogonal, only one must be presented*/
     1182                case 'C':   // --cloud
     1183                    if (fCloud == false && exportType == NOT_SET)
     1184                    {
     1185                        fCloud = true;
     1186                        exportType = CLOUD;
     1187                    }
     1188
     1189                    if (exportType != CLOUD)
     1190                        return errorSyntax(USAGE_EXPORTAPPLIANCE,
     1191                                           "Option \"%s\" can't be used together with \"--vsys\" argument.",
     1192                                           GetState.pDef->pszLong);
     1193
     1194                    ulCurVsys = ValueUnion.u32;
     1195                    break;
     1196
     1197                    /* Cloud export settings */
     1198                case 'S':   // --cloudshape
     1199                    if (exportType != CLOUD)
     1200                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
     1201                                           GetState.pDef->pszLong);
     1202                    mapArgsMapsPerVsys[ulCurVsys]["cloudshape"] = ValueUnion.psz;
     1203                    break;
     1204
     1205                case 'D':   // --clouddomain
     1206                    if (exportType != CLOUD)
     1207                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
     1208                                           GetState.pDef->pszLong);
     1209                    mapArgsMapsPerVsys[ulCurVsys]["clouddomain"] = ValueUnion.psz;
     1210                    break;
     1211
     1212                case 'R':   // --clouddisksize
     1213                    if (exportType != CLOUD)
     1214                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
     1215                                           GetState.pDef->pszLong);
     1216                    mapArgsMapsPerVsys[ulCurVsys]["clouddisksize"] = ValueUnion.psz;
     1217                    break;
     1218
     1219                case 'B':   // --cloudbucket
     1220                    if (exportType != CLOUD)
     1221                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
     1222                                           GetState.pDef->pszLong);
     1223                    mapArgsMapsPerVsys[ulCurVsys]["cloudbucket"] = ValueUnion.psz;
     1224                    break;
     1225
     1226                case 'Q':   // --cloudocivcn
     1227                    if (exportType != CLOUD)
     1228                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
     1229                                           GetState.pDef->pszLong);
     1230                    mapArgsMapsPerVsys[ulCurVsys]["cloudocivcn"] = ValueUnion.psz;
     1231                    break;
     1232
     1233                case 'A':   // --cloudpublicip
     1234                    if (exportType != CLOUD)
     1235                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
     1236                                           GetState.pDef->pszLong);
     1237                    mapArgsMapsPerVsys[ulCurVsys]["cloudpublicip"] = ValueUnion.psz;
     1238                    break;
     1239
     1240                case 'F':   // --cloudprofile
     1241                    if (exportType != CLOUD)
     1242                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
     1243                                           GetState.pDef->pszLong);
     1244                    mapArgsMapsPerVsys[ulCurVsys]["cloudprofile"] = ValueUnion.psz;
     1245                    break;
     1246
     1247                case 'T':   // --cloudocisubnet
     1248                    if (exportType != CLOUD)
     1249                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
     1250                                           GetState.pDef->pszLong);
     1251                    mapArgsMapsPerVsys[ulCurVsys]["cloudocisubnet"] = ValueUnion.psz;
     1252                    break;
     1253
     1254                case 'K':   // --cloudkeepobject
     1255                    if (exportType != CLOUD)
     1256                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
     1257                                           GetState.pDef->pszLong);
     1258                    mapArgsMapsPerVsys[ulCurVsys]["cloudkeepobject"] = ValueUnion.psz;
     1259                    break;
     1260
     1261                case 'L':   // --cloudlaunchinstance
     1262                    if (exportType != CLOUD)
     1263                        return errorSyntax(USAGE_EXPORTAPPLIANCE, "Option \"%s\" requires preceding --cloud argument.",
     1264                                           GetState.pDef->pszLong);
     1265                    mapArgsMapsPerVsys[ulCurVsys]["cloudlaunchinstance"] = ValueUnion.psz;
    11531266                    break;
    11541267
     
    12131326        if (strOutputFile.startsWith("S3://", RTCString::CaseInsensitive) ||
    12141327            strOutputFile.startsWith("SunCloud://", RTCString::CaseInsensitive) ||
    1215             strOutputFile.startsWith("webdav://", RTCString::CaseInsensitive))
     1328            strOutputFile.startsWith("webdav://", RTCString::CaseInsensitive) ||
     1329            strOutputFile.startsWith("OCI://", RTCString::CaseInsensitive))
    12161330            pszAbsFilePath = RTStrDup(strOutputFile.c_str());
    12171331        else
     
    12271341            ComPtr<IVirtualSystemDescription> pVSD;
    12281342            CHECK_ERROR_BREAK(pMachine, ExportTo(pAppliance, Bstr(pszAbsFilePath).raw(), pVSD.asOutParam()));
     1343
    12291344            // Add additional info to the virtual system description if the user wants so
    12301345            ArgsMap *pmapArgs = NULL;
     
    12401355                {
    12411356                    if (itD->first == "vmname")
     1357                    {
     1358                        //remove default value if user has specified new name (default value is set in the ExportTo())
     1359                        pVSD->RemoveDescriptionByType(VirtualSystemDescriptionType_Name);
    12421360                        pVSD->AddDescription(VirtualSystemDescriptionType_Name,
    12431361                                             Bstr(itD->second).raw(),
    12441362                                             Bstr(itD->second).raw());
     1363                    }
    12451364                    else if (itD->first == "product")
    12461365                        pVSD->AddDescription(VirtualSystemDescriptionType_Product,
     
    12921411                        }
    12931412                    }
     1413                    /* add cloud export settings */
     1414                    else if (itD->first == "cloudshape")
     1415                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIInstanceShape,
     1416                                             Bstr(itD->second).raw(),
     1417                                             Bstr(itD->second).raw());
     1418                    else if (itD->first == "clouddomain")
     1419                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIDomain,
     1420                                             Bstr(itD->second).raw(),
     1421                                             Bstr(itD->second).raw());
     1422                    else if (itD->first == "clouddisksize")
     1423                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIBootDiskSize,
     1424                                             Bstr(itD->second).raw(),
     1425                                             Bstr(itD->second).raw());
     1426                    else if (itD->first == "cloudbucket")
     1427                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIBucket,
     1428                                             Bstr(itD->second).raw(),
     1429                                             Bstr(itD->second).raw());
     1430                    else if (itD->first == "cloudocivcn")
     1431                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIVCN,
     1432                                             Bstr(itD->second).raw(),
     1433                                             Bstr(itD->second).raw());
     1434                    else if (itD->first == "cloudpublicip")
     1435                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIPublicIP,
     1436                                             Bstr(itD->second).raw(),
     1437                                             Bstr(itD->second).raw());
     1438                    else if (itD->first == "cloudprofile")
     1439                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIProfileName,
     1440                                             Bstr(itD->second).raw(),
     1441                                             Bstr(itD->second).raw());
     1442                    else if (itD->first == "cloudocisubnet")
     1443                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCISubnet,
     1444                                             Bstr(itD->second).raw(),
     1445                                             Bstr(itD->second).raw());
     1446                    else if (itD->first == "cloudkeepobject")
     1447                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCIKeepObject,
     1448                                             Bstr(itD->second).raw(),
     1449                                             Bstr(itD->second).raw());
     1450                    else if (itD->first == "cloudlaunchinstance")
     1451                        pVSD->AddDescription(VirtualSystemDescriptionType_CloudOCILaunchInstance,
     1452                                             Bstr(itD->second).raw(),
     1453                                             Bstr(itD->second).raw());
    12941454                }
    12951455            }
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp

    r75918 r75920  
    774774                     "                                    [--eula <license text>]\n"
    775775                     "                                    [--eulafile <filename>]\n"
     776                     "                            [--cloud <number of virtual system>]\n"
     777                     "                                    [--vmname <name>]\n"
     778                     "                                    [--cloudprofile <cloud profile name>]\n"
     779                     "                                    [--cloudshape <shape>]\n"
     780                     "                                    [--clouddomain <domain>]\n"
     781                     "                                    [--clouddisksize <disk size>]\n"
     782                     "                                    [--cloudbucket <bucket name>]\n"
     783                     "                                    [--cloudocivcn <OCI vcn id>]\n"
     784                     "                                    [--cloudocisubnet <OCI subnet id>]\n"
     785                     "                                    [--cloudkeepobject <true/false>]\n"
     786                     "                                    [--cloudlaunchinstance <true/false>]\n"
     787                     "                                    [--cloudpublicip <true/false>]\n"
    776788                     "\n", SEP);
    777789
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette