/// <summary>
        /// Creates a new compute node user.
        /// </summary>
        /// <param name="options">The options to use when creating the compute node user.</param>
        public void CreateComputeNodeUser(NewComputeNodeUserParameters options)
        {
            if (options == null)
            {
                throw new ArgumentNullException("options");
            }

            ComputeNodeUser user          = null;
            string          computeNodeId = null;

            if (options.ComputeNode != null)
            {
                user          = options.ComputeNode.omObject.CreateComputeNodeUser();
                computeNodeId = options.ComputeNode.Id;
            }
            else
            {
                PoolOperations poolOperations = options.Context.BatchOMClient.PoolOperations;
                user          = poolOperations.CreateComputeNodeUser(options.PoolId, options.ComputeNodeId);
                computeNodeId = options.ComputeNodeId;
            }

            user.Name       = options.ComputeNodeUserName;
            user.Password   = options.Password;
            user.ExpiryTime = options.ExpiryTime;
            user.IsAdmin    = options.IsAdmin;

            WriteVerbose(string.Format(Resources.CreatingComputeNodeUser, user.Name, computeNodeId));

            user.Commit(ComputeNodeUserCommitSemantics.AddUser, options.AdditionalBehaviors);
        }
예제 #2
0
        public void TestComputeNodeUserIaas()
        {
            Action test = () =>
            {
                using (BatchClient batchCli = TestUtilities.OpenBatchClientAsync(TestUtilities.GetCredentialsFromEnvironment()).Result)
                {
                    CloudPool     sharedPool       = this.poolFixture.Pool;
                    List <string> cnuNamesToDelete = new List <string>();

                    // pick a compute node to victimize with user accounts
                    var nodes = sharedPool.ListComputeNodes().ToList();

                    ComputeNode cn = nodes[0];

                    try
                    {
                        ComputeNodeUser bob = batchCli.PoolOperations.CreateComputeNodeUser(sharedPool.Id, cn.Id);

                        bob.Name         = "bob";
                        bob.ExpiryTime   = DateTime.UtcNow + TimeSpan.FromHours(25);
                        bob.Password     = "******";
                        bob.SshPublicKey = "base64==";

                        cnuNamesToDelete.Add(bob.Name); // remember to clean this up

                        bob.Commit(ComputeNodeUserCommitSemantics.AddUser);

                        bob.SshPublicKey = "base65==";

                        bob.Commit(ComputeNodeUserCommitSemantics.UpdateUser);

                        // TODO:  need to close the loop on this somehow... move to unit/interceptor-based?
                        //        currently the server is timing out.
                    }
                    finally
                    {
                        // clear any old accounts
                        try
                        {
                            foreach (string curCNUName in cnuNamesToDelete)
                            {
                                this.testOutputHelper.WriteLine("TestComputeNodeUserIAAS attempting to delete the following <nodeid,user>: <{0},{1}>", cn.Id, curCNUName);
                                cn.DeleteComputeNodeUser(curCNUName);
                            }
                        }
                        catch (Exception ex)
                        {
                            this.testOutputHelper.WriteLine("TestComputeNodeUserIAAS: exception deleting user account.  ex: " + ex.ToString());
                        }
                    }
                }
            };

            SynchronizationContextHelper.RunTest(test, TestTimeout);
        }
예제 #3
0
        public Task CreateNodeUserAsync(string poolId, string computeNodeId, string userName, string password, DateTime expiryTime, bool admin)
        {
            ComputeNodeUser user = this.Client.PoolOperations.CreateComputeNodeUser(poolId, computeNodeId);

            user.Name       = userName;
            user.Password   = password;
            user.ExpiryTime = expiryTime;
            user.IsAdmin    = admin;

            return(user.CommitAsync());
        }
        /// <summary>
        /// Updates a compute node user account
        /// </summary>
        /// <param name="parameters">The parameters specifying the compute node user to update and the changes to make</param>
        public void UpdateComputeNodeUser(UpdateComputeNodeUserParameters parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            WriteVerbose(string.Format(Resources.UpdatingComputeNodeUser, parameters.ComputeNodeUserName));

            ComputeNodeUser computeNodeUser = new ComputeNodeUser(parameters.Context.BatchOMClient.PoolOperations, parameters.PoolId, parameters.ComputeNodeId);
            computeNodeUser.Name = parameters.ComputeNodeUserName;
            computeNodeUser.Password = parameters.Password;
            computeNodeUser.ExpiryTime = parameters.ExpiryTime;
            computeNodeUser.Commit(ComputeNodeUserCommitSemantics.UpdateUser, parameters.AdditionalBehaviors);
        }
        /// <summary>
        /// Updates a compute node user account
        /// </summary>
        /// <param name="parameters">The parameters specifying the compute node user to update and the changes to make</param>
        public void UpdateComputeNodeUser(UpdateComputeNodeUserParameters parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }

            WriteVerbose(string.Format(Resources.UpdatingComputeNodeUser, parameters.ComputeNodeUserName));

            ComputeNodeUser computeNodeUser = parameters.Context.BatchOMClient.PoolOperations.CreateComputeNodeUser(parameters.PoolId, parameters.ComputeNodeId);

            computeNodeUser.Name       = parameters.ComputeNodeUserName;
            computeNodeUser.Password   = parameters.Password;
            computeNodeUser.ExpiryTime = parameters.ExpiryTime;
            computeNodeUser.Commit(ComputeNodeUserCommitSemantics.UpdateUser, parameters.AdditionalBehaviors);
        }
예제 #6
0
        public void Bug1770933_1770935_1771164_AddUserCRUDAndGetRDP()
        {
            Action test = () =>
            {
                using (BatchClient batchCli = TestUtilities.OpenBatchClientAsync(TestUtilities.GetCredentialsFromEnvironment()).Result)
                {
                    // names to create/delete
                    List <string> names = new List <string>()
                    {
                        TestUtilities.GetMyName(), TestUtilities.GetMyName() + "1", TestUtilities.GetMyName() + "2", TestUtilities.GetMyName() + "3", TestUtilities.GetMyName() + "4"
                    };

                    // pick a compute node to victimize with user accounts
                    IEnumerable <ComputeNode> ienmComputeNodes = batchCli.PoolOperations.ListComputeNodes(this.poolFixture.PoolId);
                    List <ComputeNode>        computeNodeList  = new List <ComputeNode>(ienmComputeNodes);
                    ComputeNode computeNode = computeNodeList[0];

                    try
                    {
                        string rdpFileName = "Bug1770933.rdp";

                        // test user public constructor and IPoolMgr verbs
                        {
                            ComputeNodeUser newUser = batchCli.PoolOperations.CreateComputeNodeUser(this.poolFixture.PoolId, computeNode.Id);

                            newUser.Name       = names[0];
                            newUser.IsAdmin    = true;
                            newUser.ExpiryTime = DateTime.UtcNow + TimeSpan.FromHours(1.0);
                            newUser.Password   = @"!!Admin!!";

                            // commit that creates/adds the user
                            newUser.Commit(ComputeNodeUserCommitSemantics.AddUser);

                            // now update the user's password
                            newUser.Password = @"!!!Admin!!!";

                            // commit that updates
                            newUser.Commit(ComputeNodeUserCommitSemantics.UpdateUser);

                            // clean up from prev run
                            if (File.Exists(rdpFileName))
                            {
                                File.Delete(rdpFileName);
                            }

                            // pull the rdp file
                            batchCli.PoolOperations.GetRDPFile(this.poolFixture.PoolId, computeNode.Id, rdpFileName);

                            // simple validation tests on the rdp file
                            TestFileExistsAndHasLength(rdpFileName);

                            // cleanup the rdp file
                            File.Delete(rdpFileName);

                            // "test" delete user from IPoolMgr
                            // TODO: when GET/LIST User is available we should close the loop and confirm the user is gone.
                            batchCli.PoolOperations.DeleteComputeNodeUser(this.poolFixture.PoolId, computeNode.Id, newUser.Name);
                        }

                        // test IPoolMgr CreateUser
                        {
                            ComputeNodeUser pmcUser = batchCli.PoolOperations.CreateComputeNodeUser(this.poolFixture.PoolId, computeNode.Id);

                            pmcUser.Name       = names[1];
                            pmcUser.IsAdmin    = true;
                            pmcUser.ExpiryTime = DateTime.UtcNow + TimeSpan.FromHours(1.0);
                            pmcUser.Password   = @"!!!Admin!!!";

                            // add the user
                            pmcUser.Commit(ComputeNodeUserCommitSemantics.AddUser);

                            // pull rdp file
                            batchCli.PoolOperations.GetRDPFile(this.poolFixture.PoolId, computeNode.Id, rdpFileName);

                            // simple validation on rdp file
                            TestFileExistsAndHasLength(rdpFileName);

                            // cleanup
                            File.Delete(rdpFileName);

                            // delete user
                            batchCli.PoolOperations.DeleteComputeNodeUser(this.poolFixture.PoolId, computeNode.Id, pmcUser.Name);
                        }

                        // test IComputeNode verbs
                        {
                            ComputeNodeUser poolMgrUser = batchCli.PoolOperations.CreateComputeNodeUser(this.poolFixture.PoolId, computeNode.Id);

                            poolMgrUser.Name       = names[2];
                            poolMgrUser.IsAdmin    = true;
                            poolMgrUser.ExpiryTime = DateTime.UtcNow + TimeSpan.FromHours(1.0);
                            poolMgrUser.Password   = @"!!!Admin!!!";

                            poolMgrUser.Commit(ComputeNodeUserCommitSemantics.AddUser);

                            // pull rdp file
                            computeNode.GetRDPFile(rdpFileName);

                            // simple validation on rdp file
                            TestFileExistsAndHasLength(rdpFileName);

                            // cleanup
                            File.Delete(rdpFileName);

                            // delete user
                            computeNode.DeleteComputeNodeUser(poolMgrUser.Name);
                        }

                        // test ComputeNodeUser.Delete
                        {
                            ComputeNodeUser usrDelete = batchCli.PoolOperations.CreateComputeNodeUser(this.poolFixture.PoolId, computeNode.Id);

                            usrDelete.Name       = names[3];
                            usrDelete.ExpiryTime = DateTime.UtcNow + TimeSpan.FromHours(1.0);
                            usrDelete.Password   = @"!!!Admin!!!";

                            usrDelete.Commit(ComputeNodeUserCommitSemantics.AddUser);

                            usrDelete.Delete();
                        }

                        // test rdp-by-stream IPoolMgr and IComputeNode
                        // the by-stream paths do not converge with the by-filename paths until IProtocol so we test them seperately
                        {
                            ComputeNodeUser byStreamUser = batchCli.PoolOperations.CreateComputeNodeUser(this.poolFixture.PoolId, computeNode.Id);

                            byStreamUser.Name       = names[4];
                            byStreamUser.IsAdmin    = true;
                            byStreamUser.ExpiryTime = DateTime.UtcNow + TimeSpan.FromHours(1.0);
                            byStreamUser.Password   = @"!!!Admin!!!";

                            byStreamUser.Commit(ComputeNodeUserCommitSemantics.AddUser);

                            // IPoolMgr
                            using (Stream rdpStreamPoolMgr = File.Create(rdpFileName))
                            {
                                batchCli.PoolOperations.GetRDPFile(this.poolFixture.PoolId, computeNode.Id, rdpStreamPoolMgr);

                                rdpStreamPoolMgr.Flush();
                                rdpStreamPoolMgr.Close();

                                TestFileExistsAndHasLength(rdpFileName);

                                File.Delete(rdpFileName);
                            }

                            // IComputeNode
                            using (Stream rdpViaIComputeNode = File.Create(rdpFileName))
                            {
                                computeNode.GetRDPFile(rdpViaIComputeNode);

                                rdpViaIComputeNode.Flush();
                                rdpViaIComputeNode.Close();

                                TestFileExistsAndHasLength(rdpFileName);

                                File.Delete(rdpFileName);
                            }

                            // delete the user account
                            byStreamUser.Delete();
                        }
                    }
                    finally
                    {
                        // clear any old accounts
                        foreach (string curName in names)
                        {
                            bool hitException = false;

                            try
                            {
                                ComputeNodeUser deleteThis = batchCli.PoolOperations.CreateComputeNodeUser(this.poolFixture.PoolId, computeNode.Id);
                                deleteThis.Name = curName;
                                deleteThis.Delete();
                            }
                            catch (BatchException ex)
                            {
                                Assert.Equal(BatchErrorCodeStrings.NodeUserNotFound, ex.RequestInformation.BatchError.Code);
                                hitException = true;
                            }

                            Assert.True(hitException, "Should have hit exception on user: "******", compute node: " + computeNode.Id + ".");
                        }
                    }
                }
            };

            SynchronizationContextHelper.RunTest(test, TestTimeout);
        }
 /// <summary>
 /// Adds a user account to the specified compute node.
 /// </summary>
 /// <remarks>
 /// You can add a user account to a node only when it is in the idle or running
 /// state.
 /// </remarks>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='poolId'>
 /// The ID of the pool that contains the compute node.
 /// </param>
 /// <param name='nodeId'>
 /// The ID of the machine on which you want to create a user account.
 /// </param>
 /// <param name='user'>
 /// The user account to be created.
 /// </param>
 /// <param name='computeNodeAddUserOptions'>
 /// Additional parameters for the operation
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <ComputeNodeAddUserHeaders> AddUserAsync(this IComputeNodeOperations operations, string poolId, string nodeId, ComputeNodeUser user, ComputeNodeAddUserOptions computeNodeAddUserOptions = default(ComputeNodeAddUserOptions), CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.AddUserWithHttpMessagesAsync(poolId, nodeId, user, computeNodeAddUserOptions, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Headers);
     }
 }
 /// <summary>
 /// Adds a user account to the specified compute node.
 /// </summary>
 /// <remarks>
 /// You can add a user account to a node only when it is in the idle or running
 /// state.
 /// </remarks>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='poolId'>
 /// The ID of the pool that contains the compute node.
 /// </param>
 /// <param name='nodeId'>
 /// The ID of the machine on which you want to create a user account.
 /// </param>
 /// <param name='user'>
 /// The user account to be created.
 /// </param>
 /// <param name='computeNodeAddUserOptions'>
 /// Additional parameters for the operation
 /// </param>
 public static ComputeNodeAddUserHeaders AddUser(this IComputeNodeOperations operations, string poolId, string nodeId, ComputeNodeUser user, ComputeNodeAddUserOptions computeNodeAddUserOptions = default(ComputeNodeAddUserOptions))
 {
     return(operations.AddUserAsync(poolId, nodeId, user, computeNodeAddUserOptions).GetAwaiter().GetResult());
 }
 /// <summary>
 /// Adds a user account to the specified compute node.
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='poolId'>
 /// The id of the pool that contains the compute node.
 /// </param>
 /// <param name='nodeId'>
 /// The id of the machine on which you want to create a user account.
 /// </param>
 /// <param name='user'>
 /// The user account to be created.
 /// </param>
 /// <param name='computeNodeAddUserOptions'>
 /// Additional parameters for the operation
 /// </param>
 public static ComputeNodeAddUserHeaders AddUser(this IComputeNodeOperations operations, string poolId, string nodeId, ComputeNodeUser user, ComputeNodeAddUserOptions computeNodeAddUserOptions = default(ComputeNodeAddUserOptions))
 {
     return(System.Threading.Tasks.Task.Factory.StartNew(s => ((IComputeNodeOperations)s).AddUserAsync(poolId, nodeId, user, computeNodeAddUserOptions), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult());
 }
예제 #10
0
 public virtual Response AddUser(string poolId, string nodeId, ComputeNodeUser user, ComputeNodeAddUserOptions computeNodeAddUserOptions, CancellationToken cancellationToken = default)
 {
     return(RestClient.AddUser(poolId, nodeId, user, computeNodeAddUserOptions, cancellationToken).GetRawResponse());
 }
예제 #11
0
 public virtual async Task <Response> AddUserAsync(string poolId, string nodeId, ComputeNodeUser user, ComputeNodeAddUserOptions computeNodeAddUserOptions, CancellationToken cancellationToken = default)
 {
     return((await RestClient.AddUserAsync(poolId, nodeId, user, computeNodeAddUserOptions, cancellationToken).ConfigureAwait(false)).GetRawResponse());
 }