public Schedule CreateSchedule(string automationAccountName, DailySchedule schedule)
        {
            this.ValidateScheduleName(automationAccountName, schedule.Name);

            var scheduleModel = new AutomationManagement.Models.Schedule
            {
                Name         = schedule.Name,
                StartTime    = schedule.StartTime.ToUniversalTime(),
                ExpiryTime   = schedule.ExpiryTime.ToUniversalTime(),
                Description  = schedule.Description,
                DayInterval  = schedule.DayInterval,
                ScheduleType =
                    AutomationManagement.Models.ScheduleType
                    .DailySchedule
            };

            var scheduleCreateParameters = new AutomationManagement.Models.ScheduleCreateParameters
            {
                Schedule = scheduleModel
            };

            var scheduleCreateResponse = this.automationManagementClient.Schedules.Create(
                automationAccountName,
                scheduleCreateParameters);

            return(this.GetSchedule(automationAccountName, new Guid(scheduleCreateResponse.Schedule.Id)));
        }
        private Schedule UpdateScheduleHelper(string automationAccountName, AutomationManagement.Models.Schedule schedule, bool?isEnabled, string description)
        {
            // StartTime and ExpiryTime need to specified as Utc
            schedule.StartTime  = DateTime.SpecifyKind(schedule.StartTime, DateTimeKind.Utc);
            schedule.ExpiryTime = DateTime.SpecifyKind(schedule.ExpiryTime, DateTimeKind.Utc);

            if (isEnabled.HasValue)
            {
                schedule.IsEnabled = isEnabled.Value;
            }

            if (description != null)
            {
                schedule.Description = description;
            }

            var scheduleUpdateParameters = new AutomationManagement.Models.ScheduleUpdateParameters
            {
                Schedule =
                    schedule
            };

            this.automationManagementClient.Schedules.Update(
                automationAccountName,
                scheduleUpdateParameters);

            var scheduleId = new Guid(schedule.Id);

            return(this.GetSchedule(automationAccountName, scheduleId));
        }
        private Schedule CreateScheduleFromScheduleModel(AutomationManagement.Models.Schedule schedule)
        {
            Requires.Argument("schedule", schedule).NotNull();

            if (schedule.ScheduleType == AutomationManagement.Models.ScheduleType.DailySchedule)
            {
                return(new DailySchedule(schedule));
            }
            else
            {
                return(new OneTimeSchedule(schedule));
            }
        }
        private AutomationManagement.Models.Schedule GetScheduleModel(string automationAccountName, Guid scheduleId)
        {
            AutomationManagement.Models.Schedule scheduleModel = this.automationManagementClient.Schedules.Get(
                automationAccountName,
                scheduleId.ToString())
                                                                 .Schedule;

            if (scheduleModel == null)
            {
                throw new ResourceNotFoundException(typeof(Schedule), string.Format(CultureInfo.CurrentCulture, Resources.ScheduleNotFoundById, scheduleId));
            }

            return(scheduleModel);
        }
        public IEnumerable <Runbook> ListRunbookByScheduleName(string automationAccountName, string scheduleName)
        {
            AutomationManagement.Models.Schedule        scheduleModel = this.GetScheduleModel(automationAccountName, scheduleName);
            IList <AutomationManagement.Models.Runbook> runbookModels = AutomationManagementClient.ContinuationTokenHandler(
                skipToken =>
            {
                var listRunbookResponse =
                    this.automationManagementClient.Runbooks.ListByScheduleNameWithSchedules(
                        automationAccountName,
                        new AutomationManagement.Models.RunbookListByScheduleNameParameters
                {
                    ScheduleName = scheduleModel.Name,
                    SkipToken    = skipToken
                });
                return(new ResponseWithSkipToken <AutomationManagement.Models.Runbook>(
                           listRunbookResponse, listRunbookResponse.Runbooks));
            });

            IEnumerable <Runbook> runbooks = runbookModels.Select(runbookModel => new Runbook(runbookModel));

            return(runbooks.Where(runbook => runbook.ScheduleNames.Any()));
        }
        public Schedule CreateSchedule(string automationAccountName, DailySchedule schedule)
        {
            this.ValidateScheduleName(automationAccountName, schedule.Name);

            var scheduleModel = new AutomationManagement.Models.Schedule
            {
                Name = schedule.Name,
                StartTime = schedule.StartTime.ToUniversalTime(),
                ExpiryTime = schedule.ExpiryTime.ToUniversalTime(),
                Description = schedule.Description,
                DayInterval = schedule.DayInterval,
                ScheduleType =
                    AutomationManagement.Models.ScheduleType
                                        .DailySchedule
            };

            var scheduleCreateParameters = new AutomationManagement.Models.ScheduleCreateParameters
            {
                Schedule = scheduleModel
            };

            var scheduleCreateResponse = this.automationManagementClient.Schedules.Create(
                automationAccountName,
                scheduleCreateParameters);

            return this.GetSchedule(automationAccountName, new Guid(scheduleCreateResponse.Schedule.Id));
        }
 public Schedule UpdateSchedule(string automationAccountName, string scheduleName, bool?isEnabled, string description)
 {
     AutomationManagement.Models.Schedule scheduleModel = this.GetScheduleModel(automationAccountName, scheduleName);
     return(this.UpdateScheduleHelper(automationAccountName, scheduleModel, isEnabled, description));
 }
 public Schedule GetSchedule(string automationAccountName, string scheduleName)
 {
     AutomationManagement.Models.Schedule scheduleModel = this.GetScheduleModel(automationAccountName, scheduleName);
     return(this.CreateScheduleFromScheduleModel(scheduleModel));
 }
        public static void CreateAutomationRunbook()
        {
            try
            {
                Microsoft.Azure.SubscriptionCloudCredentials creds;
                creds = CertificateAuthenticationHelper.GetCredentials(ConfigurationManager.AppSettings["SubscriptionID"], ConfigurationManager.AppSettings["Certificate"]);
                AutomationManagementClient automationClient = new AutomationManagementClient(creds);
                //Create Runbook
                FileStream fs = new FileStream(AzureAutomationSchema.ScriptFileLocation, FileMode.Open, FileAccess.Read);
                // Get Runbook Response
                var runbookversion = automationClient.RunbookVersions.Create(AzureAutomationSchema.automationAccount, fs);
                Trace.TraceInformation("Status of RunbookVersion Create request:" + runbookversion.StatusCode.ToString() + ".RunbookVersionId " + runbookversion.RunbookVersion.Id + "  Created.");

                var runbook = automationClient.Runbooks.ListByName(AzureAutomationSchema.automationAccount, AzureAutomationSchema.runbookname);

                // Get Runbook Publish Response
                Microsoft.Azure.Management.Automation.Models.RunbookPublishResponse pubresponse = automationClient.Runbooks.Publish(AzureAutomationSchema.automationAccount, new Microsoft.Azure.Management.Automation.Models.RunbookPublishParameters(runbook.Runbooks[0].Id, "Joe"));
                Trace.TraceInformation("Status of RunbookPublish request:" + pubresponse.StatusCode.ToString() + ". PublishedRunbookVersionId " + pubresponse.PublishedRunbookVersionId + "  Created.");

                Microsoft.Azure.Management.Automation.Models.Schedule RuleEngineSchedule = new Microsoft.Azure.Management.Automation.Models.Schedule();
                //Define Automation Schedule
                Microsoft.Azure.Management.Automation.Models.ScheduleCreateParameters scheduleParam = new Microsoft.Azure.Management.Automation.Models.ScheduleCreateParameters();
                scheduleParam.Schedule             = RuleEngineSchedule;
                scheduleParam.Schedule.Description = AzureAutomationSchema.ScheduleDescription;
                scheduleParam.Schedule.StartTime   = AzureAutomationSchema.ScheduleStartTime;
                scheduleParam.Schedule.IsEnabled   = AzureAutomationSchema.ScheduleIsEnabled;
                scheduleParam.Schedule.DayInterval = AzureAutomationSchema.ScheduleDayInterval;
                scheduleParam.Schedule.Name        = AzureAutomationSchema.ScheduleName;
                if (AzureAutomationSchema.ScheduleScheduleType == "DailySchedule")
                {
                    scheduleParam.Schedule.ScheduleType = Microsoft.Azure.Management.Automation.Models.ScheduleType.DailySchedule;
                }
                if (AzureAutomationSchema.ScheduleScheduleType == "HourlySchedule")
                {
                    scheduleParam.Schedule.ScheduleType = Microsoft.Azure.Management.Automation.Models.ScheduleType.HourlySchedule;
                }
                scheduleParam.Schedule.ExpiryTime = AzureAutomationSchema.ScheduleExpiryTime;
                // Get RunbookSchedule  response
                var response = automationClient.Schedules.Create(AzureAutomationSchema.automationAccount, scheduleParam);
                Trace.TraceInformation("Status of Schedule request:" + response.StatusCode.ToString() + ". " + response.Schedule.Name + "  Created.");

                Microsoft.Azure.Management.Automation.Models.RunbookCreateScheduleLinkParameters RuleEngineScheduleLink = new Microsoft.Azure.Management.Automation.Models.RunbookCreateScheduleLinkParameters();
                RuleEngineScheduleLink.RunbookId  = runbook.Runbooks[0].Id;
                RuleEngineScheduleLink.ScheduleId = response.Schedule.Id;

                //Adding Parameters to Automation Schedule
                foreach (var param in ConfigurationManager.AppSettings.AllKeys.Where(key => key.StartsWith("Param")))
                {
                    RuleEngineScheduleLink.Parameters.Add(AddParametersToScheduleLink(param.Replace("Param", ""), ConfigurationManager.AppSettings[param]));
                }

                // Get RunbookSchedule link response
                Microsoft.Azure.Management.Automation.Models.RunbookCreateScheduleLinkResponse RuleEngineScheduleLinkResponse = automationClient.Runbooks.CreateScheduleLink(AzureAutomationSchema.automationAccount, RuleEngineScheduleLink);
                Trace.TraceInformation("Status of ScheduleLink request:" + RuleEngineScheduleLinkResponse.StatusCode.ToString() + ". JobContextID " + RuleEngineScheduleLinkResponse.JobContextId + "  Created.");
            }
            catch (Exception ex)
            {
                Trace.TraceError(ex.Message);
                throw ex;
            }
        }