prepare("SELECT * FROM admin.huawei_accounts WHERE id = ?"); $stmt->execute([$accountId]); $account = $stmt->fetch(PDO::FETCH_ASSOC); if (!$account) { die(json_encode(['status' => 'error', 'message' => 'Account not found'])); } // Configuration par défaut pour af-south-1 $defaultConfig = [ 'vpc_id' => '9d13c500-6bd7-488a-b020-e685245e99ab', 'subnet_id' => '3a3edb6b-1426-4687-9e39-f0295e54b681', 'security_group_id' => '51d6e9f5-7ebb-447f-94fd-7e5cb0d2f16e', 'availability_zone' => 'af-south-1a' ]; function createEcsClient($account) { $config = HttpConfig::getDefaultConfig(); $config->setIgnoreSslVerification(true); $config->setTimeout(60); $credentials = new BasicCredentials( $account['application_key'], $account['secret_key'], $account['consumer_key'] ); return EcsClient::newBuilder() ->withHttpConfig($config) ->withEndpoint("https://ecs.{$account['region']}.myhuaweicloud.com") ->withCredentials($credentials) ->build(); } function createImsClient($account) { $config = HttpConfig::getDefaultConfig(); $config->setIgnoreSslVerification(true); $config->setTimeout(30); $credentials = new BasicCredentials( $account['application_key'], $account['secret_key'], $account['consumer_key'] ); return ImsClient::newBuilder() ->withHttpConfig($config) ->withEndpoint("https://ims.{$account['region']}.myhuaweicloud.com") ->withCredentials($credentials) ->build(); } try { switch ($action) { case 'list_images': $client = createImsClient($account); $request = new ListImagesRequest(); $request->setImagetype('gold'); $request->setPlatform('Ubuntu'); $request->setStatus('active'); $response = $client->listImages($request); echo json_encode(['status' => 'success', 'data' => json_decode($response, true)]); break; case 'create': // Paramètres de création $serverName = $_POST['server_name'] ?? 'wevads-server-' . time(); $flavorId = $_POST['flavor_id'] ?? 's6.small.1'; $imageId = $_POST['image_id'] ?? ''; $password = $_POST['password'] ?? 'Wevads@2026!'; $count = intval($_POST['count'] ?? 1); if (empty($imageId)) { // Récupérer une image Ubuntu par défaut $imsClient = createImsClient($account); $imgRequest = new ListImagesRequest(); $imgRequest->setImagetype('gold'); $imgRequest->setPlatform('Ubuntu'); $imgRequest->setStatus('active'); $imgResponse = $imsClient->listImages($imgRequest); $images = json_decode($imgResponse, true); if (!empty($images['images'])) { $imageId = $images['images'][0]['id']; } else { throw new Exception('No Ubuntu image found'); } } $client = createEcsClient($account); // Créer la configuration du serveur $server = new PrePaidServer(); $server->setName($serverName); $server->setFlavorRef($flavorId); $server->setImageRef($imageId); $server->setVpcid($defaultConfig['vpc_id']); $server->setAvailabilityZone($defaultConfig['availability_zone']); $server->setAdminPass($password); $server->setCount($count); // NIC (réseau) $nic = new PrePaidServerNic(); $nic->setSubnetId($defaultConfig['subnet_id']); $server->setNics([$nic]); // Security Group $sg = new PrePaidServerSecurityGroup(); $sg->setId($defaultConfig['security_group_id']); $server->setSecurityGroups([$sg]); // Root Volume (disque) $rootVolume = new PrePaidServerRootVolume(); $rootVolume->setVolumetype('SSD'); $rootVolume->setSize(40); $server->setRootVolume($rootVolume); // IP Publique (EIP) $bandwidth = new PrePaidServerEipBandwidth(); $bandwidth->setSize(5); $bandwidth->setSharetype('PER'); $eip = new PrePaidServerEip(); $eip->setIptype('5_bgp'); $eip->setBandwidth($bandwidth); $publicip = new PrePaidServerPublicip(); $publicip->setEip($eip); $server->setPublicip($publicip); // Body de la requête $body = new CreateServersRequestBody(); $body->setServer($server); // Requête $request = new CreateServersRequest(); $request->setBody($body); $response = $client->createServers($request); echo json_encode([ 'status' => 'success', 'message' => "Server creation started", 'data' => json_decode($response, true) ]); break; default: echo json_encode([ 'status' => 'info', 'message' => 'Huawei Instance Creator', 'account' => $account['name'], 'region' => $account['region'], 'config' => $defaultConfig, 'actions' => ['list_images', 'create'] ]); } } catch (Exception $e) { echo json_encode([ 'status' => 'error', 'message' => $e->getMessage(), 'code' => method_exists($e, 'getErrorCode') ? $e->getErrorCode() : $e->getCode() ]); }