@@ -44,6 +44,8 @@ public class NoGeneratedAMIRule implements Rule {
4444 /** The Constant LOGGER. */
4545 private static final Logger LOGGER = LoggerFactory .getLogger (NoGeneratedAMIRule .class );
4646
47+ private String ownerEmailOverride = null ;
48+
4749 private static final String TERMINATION_REASON = "No AMI is generated for this snapshot" ;
4850
4951 private final MonkeyCalendar calendar ;
@@ -67,14 +69,33 @@ public class NoGeneratedAMIRule implements Rule {
6769 * as cleanup candidate
6870 */
6971 public NoGeneratedAMIRule (MonkeyCalendar calendar , int ageThreshold , int retentionDays ) {
72+ this (calendar , ageThreshold , retentionDays , null );
73+ }
74+
75+ /**
76+ * Constructor.
77+ *
78+ * @param calendar
79+ * The calendar used to calculate the termination time
80+ * @param ageThreshold
81+ * The number of days that a snapshot is considered as cleanup candidate since it is created
82+ * @param retentionDays
83+ * The number of days that the volume is retained before being terminated after being marked
84+ * as cleanup candidate
85+ * @param ownerEmailOverride
86+ * If null, send notifications to the resource owner.
87+ * If not null, send notifications to the provided owner email address instead of the resource owner.
88+ */
89+ public NoGeneratedAMIRule (MonkeyCalendar calendar , int ageThreshold , int retentionDays , String ownerEmailOverride ) {
7090 Validate .notNull (calendar );
7191 Validate .isTrue (ageThreshold >= 0 );
7292 Validate .isTrue (retentionDays >= 0 );
7393 this .calendar = calendar ;
7494 this .ageThreshold = ageThreshold ;
7595 this .retentionDays = retentionDays ;
96+ this .ownerEmailOverride = ownerEmailOverride ;
7697 }
77-
98+
7899 @ Override
79100 public boolean isValid (Resource resource ) {
80101 Validate .notNull (resource );
@@ -96,6 +117,9 @@ public boolean isValid(Resource resource) {
96117 Date userSpecifiedDate = new Date (TERMINATION_DATE_FORMATTER .parseDateTime (janitorTag ).getMillis ());
97118 resource .setExpectedTerminationTime (userSpecifiedDate );
98119 resource .setTerminationReason (String .format ("User specified termination date %s" , janitorTag ));
120+ if (ownerEmailOverride != null ) {
121+ resource .setOwnerEmail (ownerEmailOverride );
122+ }
99123 return false ;
100124 } catch (Exception e ) {
101125 LOGGER .error (String .format ("The janitor tag is not a user specified date: %s" , janitorTag ));
@@ -113,6 +137,9 @@ public boolean isValid(Resource resource) {
113137 DateTime launchTime = new DateTime (resource .getLaunchTime ().getTime ());
114138 DateTime now = new DateTime (calendar .now ().getTimeInMillis ());
115139 if (launchTime .plusDays (ageThreshold ).isBefore (now )) {
140+ if (ownerEmailOverride != null ) {
141+ resource .setOwnerEmail (ownerEmailOverride );
142+ }
116143 if (resource .getExpectedTerminationTime () == null ) {
117144 Date terminationTime = calendar .getBusinessDay (new Date (now .getMillis ()), retentionDays );
118145 resource .setExpectedTerminationTime (terminationTime );
0 commit comments