/// <summary>
        /// Allows creation of a new LUN
        ///
        /// <para>
        /// Allows the creation of a LUN for a volume.A LUN is an instance of a
        /// volume export that makes a volume accessible to a host.
        /// </para>
        /// <para>
        /// At least one host must be specified via <c>HostGuids</c> or
        /// <c>SpuSerials</c> - either one option must be specified but not
        /// both. If the <c>Locak</c> option is provided and set to <c>true</c>
        /// then the volume will be exported with ALUA, otherwise with ALUA
        /// turned off.
        /// </para>
        /// </summary>
        /// <param name="input">
        /// An input definition for the new LUN. Review the CreateLunInput
        /// properties for configuration details
        /// </param>
        /// <returns>The new LUN if successful</returns>
        public Lun CreateLun(CreateLunInput input)
        {
            GraphQLParameters parameters = new GraphQLParameters();

            parameters.Add(@"input", input);

            TokenResponse token = RunMutation <TokenResponse>(@"createLUN", parameters);

            if (!DeliverToken(token))
            {
                throw new Exception("Token delivery failed");
            }

            // wait until the new LUN is reporting in nebulon ON
            Thread.Sleep(TOKEN_WAITTIME_MS);

            // Query for LUN
            LunFilter filter = new LunFilter();

            filter.LunGuid           = new GuidFilter();
            filter.LunGuid.MustEqual = token.WaitOn;

            LunList lunList = GetLuns(null, filter, null);

            if (lunList.FilteredCount != 1)
            {
                throw new Exception("Unexpected number of results returned");
            }

            return(lunList.Items[0]);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Performs execution of the command
        /// </summary>
        protected override void ProcessRecord()
        {
            try
            {
                List <LunFilter> filters = new List <LunFilter>();

                if (ParameterPresent("Guid"))
                {
                    LunFilter f = new LunFilter();
                    f.LunGuid           = new GuidFilter();
                    f.LunGuid.MustEqual = Guid;
                    filters.Add(f);
                }

                if (ParameterPresent("LunId"))
                {
                    LunFilter f = new LunFilter();
                    f.LunId           = new IntFilter();
                    f.LunId.MustEqual = LunId;
                    filters.Add(f);
                }

                if (ParameterPresent("Volume"))
                {
                    LunFilter f = new LunFilter();
                    f.VolumeGuid           = new GuidFilter();
                    f.VolumeGuid.MustEqual = Volume.Guid;
                    filters.Add(f);
                }

                if (ParameterPresent("NPod"))
                {
                    LunFilter f = new LunFilter();
                    f.NPodGuid           = new GuidFilter();
                    f.NPodGuid.MustEqual = NPod.Guid;
                    filters.Add(f);
                }

                if (ParameterPresent("Spu"))
                {
                    LunFilter f = new LunFilter();
                    f.SpuSerial           = new StringFilter();
                    f.SpuSerial.MustEqual = Spu.Serial;
                    filters.Add(f);
                }

                if (ParameterPresent("Server"))
                {
                    LunFilter f = new LunFilter();
                    f.HostGuid           = new GuidFilter();
                    f.HostGuid.MustEqual = Server.Guid;
                    filters.Add(f);
                }

                // convert to filter
                LunFilter filter = GenerateFilter(filters);

                PageInput page = PageInput.First;
                LunList   list = Connection.GetLuns(page, filter, null);

                foreach (Lun item in list.Items)
                {
                    WriteObject(item);
                }

                while (list.More)
                {
                    // advance the page
                    page.Page = page.Page + 1;

                    list = Connection.GetLuns(page, filter, null);
                    foreach (Lun item in list.Items)
                    {
                        WriteObject(item);
                    }
                }
            }
            catch (AggregateException exceptions)
            {
                foreach (Exception ex in exceptions.InnerExceptions)
                {
                    WriteError(ex);
                }
            }
            catch (Exception ex)
            {
                WriteError(ex);
            }
        }