Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="DiskName"></param>
        /// <param name="Zone"></param>
        /// <param name="ProjectID"></param>
        /// <param name="DiskType">pd-standard, pd-ssd, local-ssd</param>
        /// <param name="Size">Disk Size</param>
        /// <param name="Boot">init as boot disk</param>
        /// <param name="AutoDelete">delete disk when attached instance is deleted</param>
        GoogleDisk(string DiskName, string Zone, string ProjectID, string DiskType, long?Size, bool?Boot = false, bool?AutoDelete = true)
        {
            string Type     = "projects/" + ProjectID + "/zones/" + Zone + "/disktypes/" + DiskType;
            var    diskinit = new Data.AttachedDiskInitializeParams();

            diskinit.DiskName   = DiskName;
            diskinit.DiskSizeGb = Size;
            diskinit.DiskType   = Type;
            AttachDiskInstance.InitializeParams = diskinit;
            AttachDiskInstance.Boot             = Boot;
            AttachDiskInstance.AutoDelete       = AutoDelete;
        }
Example #2
0
        /// <summary>
        /// 내부 테스트용 함수, 제일 간단한 옵션으로 인스턴스 하나 생성함.
        /// </summary>
        /// <param name="InstanceName">생성할 인스턴스 이름</param>
        /// <param name="zone">region string</param>
        /// <param name="MachineType">Machine Type string</param>
        /// <param name="Image">Client OS</param>
        /// <param name="ImageProject"></param>
        /// <param name="SizeGb">Size of Disk</param>
        /// <returns>Cient Operation ID</returns>
        /// MachineType의 n1-standard-N 의 N이 cpu 갯수
        internal string TestCreateInstance(string InstanceName = "kimjjang-31", string zone = "asia-east1-a", string MachineType = "zones/asia-east1-a/machineTypes/n1-standard-1", string Image = "debian-9", string ImageProject = "debian-cloud", long?SizeGb = 10)
        {
            Data.Instance BodyContent         = new Data.Instance();
            var           networkaccessconfig = new Data.AccessConfig();//외부주소/NAT설정

            networkaccessconfig.Name = "Default Network Setting";
            networkaccessconfig.Type = "ONE_TO_ONE_NAT";
            var networkconfiglist = new List <Data.AccessConfig>();

            networkconfiglist.Add(networkaccessconfig);
            var networkinterface = new Data.NetworkInterface();//내부 주소 설정

            networkinterface.AccessConfigs = networkconfiglist;
            var networkinterfacelist = new List <Data.NetworkInterface>();

            networkinterfacelist.Add(networkinterface);

            var disk = new Data.AttachedDisk();
            //disk.Source = new Data.AttachedDiskInitializeParams().SourceImage = $"https://www.googleapis.com/compute/v1/projects/{ProjectID}/zones/{zone}/disks/{InstanceName}";
            var diskinit = new Data.AttachedDiskInitializeParams();

            var Tags     = new Data.Tags();
            var settings = new List <string>();//생성시에 사용되는 옵션들은 대부분 태그에서 생성 / 조절

            settings.Add("http-server");
            settings.Add("https-server");
            Tags.Items = settings;

            diskinit.DiskName     = "imsi";
            diskinit.DiskSizeGb   = SizeGb;
            diskinit.DiskType     = $"https://www.googleapis.com/compute/v1/projects/{ProjectID}/zones/{zone}/diskTypes/pd-standard";
            diskinit.SourceImage  = "projects/debian-cloud/global/images/family/debian-9";
            disk.InitializeParams = diskinit;
            disk.Boot             = true;
            disk.AutoDelete       = true;//인스턴스 삭제할 때 디스크도 같이 삭제
            var disklist = new List <Data.AttachedDisk>();

            disklist.Add(disk);
            BodyContent.Name = InstanceName;
            BodyContent.NetworkInterfaces = networkinterfacelist; //1대1 NAT -> 내/외부 설정은 AccessConfig에서 따로 설정
            BodyContent.MachineType       = MachineType;          //"zones/asia-east1-a/machineTypes/n1-standard-1"
            BodyContent.MinCpuPlatform    = "Intel Ivy Bridge";
            BodyContent.Disks             = disklist;
            BodyContent.Tags = Tags;

            var req = MonoComputeServicenInstance.Instances.Insert(BodyContent, this.ProjectID, zone);

            try
            {
                var ret = req.Execute();
                if (ret.Error != null)
                {
                    MessageBox.Show("Error : " + ret.Error.ToString());
                }
                if (ret.Warnings != null)
                {
                    MessageBox.Show("Warning : " + ret.Warnings.ToString());
                }
                return(ret.ClientOperationId);
            }
            catch (Exception e)
            {
                if (e.ToString().Contains("403"))
                {
                    MessageBox.Show("구글 컴퓨트에 접근할 권한이 있는지 확인하십시오. 결제 방법이나 약관에 동의했는지 확인해주십시오");
                }
                else
                {
                    MessageBox.Show("알 수 없는 에러가 발생했습니다.");
                    MessageBox.Show(e.ToString());
                }
                return(null);
            }
            //디스크를 생성하면 디스크 인스턴스는 따로 만들어지고 따로 삭제 안해주면 중복된 이름 예외 발생함.
            //string url = $"https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances";
            //string body = "{\"name\":\"[INSTANCE_NAME]\",\"machineType\":\"machineTypes/[MACHINE_TYPE]\",\"networkInterfaces\":[{\"accessConfigs\":[{\"type\":\"ONE_TO_ONE_NAT\",\"name\":\"ExternalNAT\"}],\"network\":\"global/networks/default\"}],\"disks\":[{\"autoDelete\":\"true\",\"boot\":\"true\",\"type\":\"PERSISTENT\",\"initializeParams\":{\"sourceImage\":\"projects/[IMAGE_PROJECT]/global/images/family/[IMAGE]\"}},{\"initializeParams\":{\"diskSizeGb\":\"[SIZE_GB]\",\"sourceImage\":\"[IMAGE]\"},{\"initializeParams\":{\"diskSizeGb\":\"[SIZE_GB]\"}}]";
        }