diff --git a/buildimages.sh b/buildimages.sh index f6aa843..5952b12 100755 --- a/buildimages.sh +++ b/buildimages.sh @@ -97,3 +97,8 @@ cd ../.. cd genie/2.1.0 docker build -t netflixoss/genie:2.1.0 . cd ../.. + +## SIMIAN ARMY ## +cd simian-army/2.5-SNAPSHOT +docker build -t netflixoss/simian-army:2.5-SNAPSHOT . +cd ../.. diff --git a/launchcommands.txt b/launchcommands.txt index 2420ae7..546c6cd 100755 --- a/launchcommands.txt +++ b/launchcommands.txt @@ -44,3 +44,13 @@ https://SKETCHY_NGINX/eager?url=http://google.com&type=sketch ## Edda ## docker run -d --name edda -v `pwd`/edda/2.1/edda.properties.mine:/tomcat/webapps/ROOT/WEB-INF/classes/edda.properties netflixoss/edda:2.1 + +## SIMIAN ARMY ## +docker run -d --name simian-army \ + -v `pwd`/simian-army/2.5-SNAPSHOT/chaos.properties.mine:/tomcat/webapps/ROOT/WEB-INF/classes/chaos.properties \ + -v `pwd`/simian-army/2.5-SNAPSHOT/client.properties.mine:/tomcat/webapps/ROOT/WEB-INF/classes/client.properties \ + -v `pwd`/simian-army/2.5-SNAPSHOT/conformity.properties.mine:/tomcat/webapps/ROOT/WEB-INF/classes/conformity.properties \ + -v `pwd`/simian-army/2.5-SNAPSHOT/janitor.properties.mine:/tomcat/webapps/ROOT/WEB-INF/classes/janitor.properties \ + -v `pwd`/simian-army/2.5-SNAPSHOT/simianarmy.properties.mine:/tomcat/webapps/ROOT/WEB-INF/classes/simianarmy.properties \ + -v `pwd`/simian-army/2.5-SNAPSHOT/volumeTagging.properties.mine:/tomcat/webapps/ROOT/WEB-INF/classes/volumeTagging.properties \ + netflixoss/simian-army:2.5-SNAPSHOT diff --git a/simian-army/2.5-SNAPSHOT/Dockerfile b/simian-army/2.5-SNAPSHOT/Dockerfile new file mode 100644 index 0000000..94f3b39 --- /dev/null +++ b/simian-army/2.5-SNAPSHOT/Dockerfile @@ -0,0 +1,27 @@ +FROM netflixoss/tomcat:7 +MAINTAINER John Jelinek IV + +ENV SIMIANARMY_VERSION 2.5-SNAPSHOT + +RUN \ + apt-get update &&\ + apt-get install -y git &&\ + git clone git://github.com/Netflix/SimianArmy.git &&\ + cd SimianArmy/ &&\ + ./gradlew build &&\ + mkdir /tomcat/webapps/ROOT &&\ + cd /tomcat/webapps/ROOT &&\ + jar xf /SimianArmy/build/libs/simianarmy-"$SIMIANARMY_VERSION".war &&\ + rm -fr /SimianArmy + +# Cleanup +RUN \ + apt-get clean && \ + rm -fr /var/lib/apt/lists/* && \ + rm -fr /tmp/* + +EXPOSE 8080 + +ENTRYPOINT ["/tomcat/bin/catalina.sh"] + +CMD ["run"] diff --git a/simian-army/2.5-SNAPSHOT/chaos.properties b/simian-army/2.5-SNAPSHOT/chaos.properties new file mode 100644 index 0000000..aad28d5 --- /dev/null +++ b/simian-army/2.5-SNAPSHOT/chaos.properties @@ -0,0 +1,97 @@ +# The file contains the properties for Chaos Monkey. +# see documentation at: +# https://github.com/Netflix/SimianArmy/wiki/Configuration + +# let chaos run +simianarmy.chaos.enabled = true + +# don't allow chaos to kill (ie dryrun mode) +simianarmy.chaos.leashed = true + +# set to "false" for Opt-In behavior, "true" for Opt-Out behavior +simianarmy.chaos.ASG.enabled = false + +# default probability for all ASGs +simianarmy.chaos.ASG.probability = 1.0 + +# increase or decrease the termination limit +simianarmy.chaos.ASG.maxTerminationsPerDay = 1.0 + +# Strategies +simianarmy.chaos.shutdowninstance.enabled = true +simianarmy.chaos.blockallnetworktraffic.enabled = false +simianarmy.chaos.burncpu.enabled = false +simianarmy.chaos.killprocesses.enabled = false +simianarmy.chaos.nullroute.enabled = false +simianarmy.chaos.failapi.enabled = false +simianarmy.chaos.faildns.enabled = false +simianarmy.chaos.faildynamodb.enabled = false +simianarmy.chaos.fails3.enabled = false +simianarmy.chaos.networkcorruption.enabled = false +simianarmy.chaos.networklatency.enabled = false +simianarmy.chaos.networkloss.enabled = false + +# Force-detaching EBS volumes may cause data loss +simianarmy.chaos.detachvolumes.enabled = false + +# FillDisk fills the root disk. +# NOTE: This may incur charges for an EBS root volume. See burnmoney option. +simianarmy.chaos.burnio.enabled = false +# BurnIO causes disk activity on the root disk. +# NOTE: This may incur charges for an EBS root volume. See burnmoney option. +simianarmy.chaos.filldisk.enabled = false + +# Where we know the chaos strategy will incur charges, we won't run it unless burnmoney is true. +simianarmy.chaos.burnmoney = false + + +# enable a specific ASG +# simianarmy.chaos.ASG..enabled = true +# simianarmy.chaos.ASG..probability = 1.0 + +# increase or decrease the termination limit for a specific ASG +# simianarmy.chaos.ASG..maxTerminationsPerDay = 1.0 + +# Enroll in mandatory terminations. If a group has not had a +# termination within the windowInDays range then it will terminate +# one instance in the group with a 0.5 probability (at some point in +# the next 2 days an instance should be terminated), then +# do nothing again for windowInDays. This forces "enabled" groups +# that have a probability of 0.0 to have terminations periodically. +simianarmy.chaos.mandatoryTermination.enabled = false +simianarmy.chaos.mandatoryTermination.windowInDays = 32 +simianarmy.chaos.mandatoryTermination.defaultProbability = 0.5 + +# Enable notification for Chaos termination for a specific instance group +# simianarmy.chaos...notification.enabled = true + +# Set the destination email the termination notification sent to for a specific instance group +# simianarmy.chaos...ownerEmail = foo@bar.com + +# Set the source email that sends the termination notification +# simianarmy.chaos.notification.sourceEmail = foo@bar.com + +# Enable notification for Chaos termination for all instance groups +#simianarmy.chaos.notification.global.enabled = true + +# Set the destination email the termination notification is sent to for all instance groups +#simianarmy.chaos.notification.global.receiverEmail = foo@bar.com + +# Set a prefix applied to the subject of all termination notifications +# Probably want to include a trailing space to separate from start of default text +#simianarmy.chaos.notification.subject.prefix = SubjectPrefix + +# Set a suffix applied to the subject of all termination notifications +# Probably want to include an escaped space " \ " to separate from end of default text +#simianarmy.chaos.notification.subject.suffix = \ SubjectSuffix + +# Set a prefix applied to the body of all termination notifications +# Probably want to include a trailing space to separate from start of default text +#simianarmy.chaos.notification.body.prefix = BodyPrefix + +# Set a suffix applied to the body of all termination notifications +# Probably want to include an escaped space " \ " to separate from end of default text +#simianarmy.chaos.notification.body.suffix = \ BodySuffix + +# Enable the email subject to be the same as the body, to include terminated instance and group information +#simianarmy.chaos.notification.subject.isBody = true \ No newline at end of file diff --git a/simian-army/2.5-SNAPSHOT/client.properties b/simian-army/2.5-SNAPSHOT/client.properties new file mode 100644 index 0000000..33e07ba --- /dev/null +++ b/simian-army/2.5-SNAPSHOT/client.properties @@ -0,0 +1,47 @@ +##################################################################### +### Configure which client and context to use. +##################################################################### + +### The default implementation is to use an AWS Client, equaling a property like the following: +# +#simianarmy.client.context.class=com.netflix.simianarmy.basic.BasicContext + +### to use an VSphereClient instead, uncomment this: +# +#simianarmy.client.context.class=com.netflix.simianarmy.client.vsphere.VSphereContext +# +### configure the specific selected client, e.g for VSphere these are +# +#simianarmy.client.vsphere.url=https://YOUR_VSPHERE_SERVER/sdk +#simianarmy.client.vsphere.username=YOUR_SERVICE_ACCOUNT_USERNAME +#simianarmy.client.vsphere.password=YOUR_SERVICE_ACCOUNT_PASSWORD + +### configure the specific selected client, e.g for AWS these are + +### both "accountKey" and "secretKey" can be left blank or be removed, +### if the credentials are provided as environment variable or +### an instance role is used to handle permissions +### see: http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/java-dg-roles.html +#simianarmy.client.aws.accountKey = fakeAccount +#simianarmy.client.aws.secretKey = fakeSecret +simianarmy.client.aws.region = us-west-1 + +### To operate under an assumed role - the role will be assumed for all activity, sts:AssumeRole +### action must be allowed for the inital IAM role being used (long lived credentials) +### http://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html +# +#simianarmy.client.aws.assumeRoleArn = arn:aws:iam::ACCOUNT:role/ROLE + +### The VSpehere client uses a TerminationStrategy for killing VirtualMachines +### You can configure which property and value for it to set prior to resetting the VirtualMachine +# +#simianarmy.client.vsphere.terminationStrategy.property.name=Force Boot +#simianarmy.client.vsphere.terminationStrategy.property.value=server + +# Uncomment to use a version of Monkey recorder that does not rely on AWS SDB +#simianarmy.client.recorder.class=com.netflix.simianarmy.basic.LocalDbRecorder + +### Operate in Cloud Formation mode - the random suffix appended to Auto Scaling Group names is ignored +### (specify ASG names as usual with no suffix in chaos.properties) +# +#simianarmy.client.chaos.class=com.netflix.simianarmy.basic.chaos.CloudFormationChaosMonkey \ No newline at end of file diff --git a/simian-army/2.5-SNAPSHOT/conformity.properties b/simian-army/2.5-SNAPSHOT/conformity.properties new file mode 100644 index 0000000..fb5e908 --- /dev/null +++ b/simian-army/2.5-SNAPSHOT/conformity.properties @@ -0,0 +1,85 @@ +# let Conformity monkey run +simianarmy.conformity.enabled = true + +# dryrun mode, no email notification to the owner of nonconforming clusters is sent +simianarmy.conformity.leashed = true + +# By default Conformity Monkey wakes up every hour +simianarmy.scheduler.frequency = 1 +simianarmy.scheduler.frequencyUnit = HOURS +simianarmy.scheduler.threads = 1 + +# Conformity Monkey runs every hour. +simianarmy.calendar.openHour = 0 +simianarmy.calendar.closeHour = 24 +simianarmy.calendar.timezone = America/Los_Angeles + +# override to force monkey time, useful for debugging off hours +#simianarmy.calendar.isMonkeyTime = true + +# Conformity monkey sends notifications to the owner of unconforming clusters between the open hour and close +# hour only. In other hours, only summary email is sent. The default setting is to always send email notifications +# after each run. +simianarmy.conformity.notification.openHour = 0 +simianarmy.conformity.notification.closeHour = 24 + +simianarmy.conformity.sdb.domain = SIMIAN_ARMY + +# The property below needs to be a valid email address to receive the summary email of Conformity Monkey +# after each run +simianarmy.conformity.summaryEmail.to = foo@bar.com + +# The property below needs to be a valid email address to send notifications for Conformity monkey +simianarmy.conformity.notification.defaultEmail = foo@bar.com + +# The property below needs to be a valid email address to send notifications for Conformity Monkey +simianarmy.conformity.notification.sourceEmail = foo@bar.com + +# By default Eureka is not enabled. The conformity rules that need to access Eureka are not added +# when Eureka is not enabled. +simianarmy.conformity.Eureka.enabled = false + +# The following property is used to enable the conformity rule to check whether there is mismatch of availability +# zones between any auto scaling group and its ELBs in a cluster. +simianarmy.conformity.rule.SameZonesInElbAndAsg.enabled = true + +# The following property is used to enable the conformity rule to check whether all instances in the cluster +# are in required security groups. +simianarmy.conformity.rule.InstanceInSecurityGroup.enabled = true + +# The following property specifies the required security groups in the InstanceInSecurityGroup conformity rule. +simianarmy.conformity.rule.InstanceInSecurityGroup.requiredSecurityGroups = nf-infrastructure, nf-datacenter + +# The following property is used to enable the conformity rule to check whether there is any instance that is +# older than certain days. +simianarmy.conformity.rule.InstanceTooOld.enabled = true + +# The following property specifies the number of days used in the InstanceInSecurityGroup, any instance that is +# old than this number of days is consider nonconforming. +simianarmy.conformity.rule.InstanceTooOld.instanceAgeThreshold = 180 + +# The following property is used to enable the conformity rule to check whether all instances in the cluster +# have a status url defined according to Discovery/Eureka. +simianarmy.conformity.rule.InstanceHasStatusUrl.enabled = true + +# The following property is used to enable the conformity rule to check whether all instances in the cluster +# have a health check url defined according to Discovery/Eureka. +simianarmy.conformity.rule.InstanceHasHealthCheckUrl.enabled = true + +# The following property is used to enable the conformity rule to check whether there are unhealthy instances +# in the cluster accoring to Discovery/Eureka. +simianarmy.conformity.rule.InstanceIsHealthyInEureka.enabled = true + +# You can override a cluster's owner email by providing a property here. For example, the line below overrides +# the owner email of cluster foo to foo@bar.com +# simianarmy.conformity.cluster.foo.ownerEmail = foo@bar.com + +# You can exclude specific conformity rules for a cluster using this property. For example, the line below excludes +# the conformity rule rule1 and rule2 on cluster foo. +# simianarmy.conformity.cluster.foo.excludedRules = rule1,rule2 + +# You can opt out a cluster completely from Conformity Monkey by using this property. After a cluster is opted out, +# no notification is sent for it no matter it is conforming or not. For example, the line below opts out the cluster +# foo. +# simianarmy.conformity.cluster.foo.optedOut = true + diff --git a/simian-army/2.5-SNAPSHOT/janitor.properties b/simian-army/2.5-SNAPSHOT/janitor.properties new file mode 100644 index 0000000..3c5a08b --- /dev/null +++ b/simian-army/2.5-SNAPSHOT/janitor.properties @@ -0,0 +1,148 @@ +# see documentation at: +# https://github.com/Netflix/SimianArmy/wiki/Configuration + +# By default Janitor Monkey wakes up every hour +simianarmy.scheduler.frequency = 1 +simianarmy.scheduler.frequencyUnit = HOURS +simianarmy.scheduler.threads = 1 +# Janitor Monkey runs every day at 11am. +simianarmy.calendar.openHour = 11 +simianarmy.calendar.closeHour = 11 +simianarmy.calendar.timezone = America/Los_Angeles + +# Let Janitor Monkey run +simianarmy.janitor.enabled = true + +# Don't allow Janitor Monkey to change resources (dryrun mode) +simianarmy.janitor.leashed = true + +# The SDB domain for storing the resources managed by the Janitor Monkey. +simianarmy.janitor.resources.sdb.domain = SIMIAN_ARMY + +# override to force monkey time, useful for debugging off hours +#simianarmy.calendar.isMonkeyTime = true + +# Currently Janitor Monkey can clean up the following resources +simianarmy.janitor.enabledResources = Instance, ASG, EBS_Volume, EBS_Snapshot, Launch_Config + +# The property below needs to be a valid email address to send notifications for Janitor Monkey +simianarmy.janitor.notification.sourceEmail = foo@bar.com + +# The property below needs to be a valid email address to receive the summary email of Janitor Monkey +# after each run +simianarmy.janitor.summaryEmail.to = foo@bar.com + +# The property below needs to be a valid email address to receive the notifications of Janitor Monkey +# for resouces that do not have a valid owner email specified +simianarmy.janitor.notification.defaultEmail = foo@bar.com + +# The property below specifies the number of business days that a notification is sent before the +# expected termination time. For example, if a resource is scheduled to be cleaned up by Janitor +# Monkey on 12/13/2012, Thursday and the property is set to 2, the owner will receive notification +# about the cleanup on 12/11/2012, Tuesday, which is 2 business days before the termination date. +simianarmy.janitor.notification.daysBeforeTermination = 2 + +# The owner id that snapshots have for being managed by Janitor Monkey. This property needs +# to set if you use Edda for getting snapshots to avoid getting shared snapshots. If you are using +# AWS to get the snapshots, this property does not need to be set. +#simianarmy.janitor.snapshots.ownerId = 012345678 + +# The following properties are used by the Janitor rule for cleaning up orphaned instances, +# i.e. instances that are not in an auto-scaling group. +simianarmy.janitor.rule.orphanedInstanceRule.enabled = true +# An orphaned instance is marked as cleanup candidate if it has launched for more than the number +# of days specified in the property below. +simianarmy.janitor.rule.orphanedInstanceRule.instanceAgeThreshold = 2 +# The number of business days the instance is kept after a notification is sent for the termination +# when the instance has an owner. +simianarmy.janitor.rule.orphanedInstanceRule.retentionDaysWithOwner = 3 +# The number of business days the instance is kept after a notification is sent for the termination +# when the instance has no owner. +simianarmy.janitor.rule.orphanedInstanceRule.retentionDaysWithoutOwner = 8 + +# The following properties are used by the Janitor rule for cleaning up volumes that have been +# detached from instances for certain days. +simianarmy.janitor.rule.oldDetachedVolumeRule.enabled = true +# A volume is considered a cleanup candidate after being detached for the number of days specified +# in the property below. +simianarmy.janitor.rule.oldDetachedVolumeRule.detachDaysThreshold = 30 +# The number of business days the volume is kept after a notification is sent for the termination. +simianarmy.janitor.rule.oldDetachedVolumeRule.retentionDays = 7 + +# The following properties are used by the Janitor rule for cleaning up volumes that should have been +# deleted by AWS when the attached instance was terminated. This rule can be enabled only if Edda +# is enabled since Janitor Monkey needs to query the history of the attached instance. +simianarmy.janitor.rule.deleteOnTerminationRule.enabled = true +# The number of business days the volume is kept after a notification is sent for the termination. +simianarmy.janitor.rule.deleteOnTerminationRule.retentionDays = 3 + +# The following properties are used by the Janitor rule for cleaning up snapshots that have no existing +# images generated from them and launched for certain days. +simianarmy.janitor.rule.noGeneratedAMIRule.enabled = true +# A snapshot without an image is considered a cleanup candidate after launching for the number of +# days specified in the property below. +simianarmy.janitor.rule.noGeneratedAMIRule.ageThreshold = 30 +# The number of business days the snapshot is kept after a notification is sent for the termination. +simianarmy.janitor.rule.noGeneratedAMIRule.retentionDays = 7 + +# The following properties are used by the Janitor rule for cleaning up auto-scaling groups that have +# no active instances and the launch configuration is older than certain days. +simianarmy.janitor.rule.oldEmptyASGRule.enabled = true +# An an auto-scaling group without active instances is considered a cleanup candidate when its launch +# configuration is older than the number of days specified in the property below. +simianarmy.janitor.rule.oldEmptyASGRule.launchConfigAgeThreshold = 50 +# The number of business days the auto-scaling group is kept after a notification is sent for the termination. +simianarmy.janitor.rule.oldEmptyASGRule.retentionDays = 10 + +# The following properties are used by the Janitor rule for cleaning up auto-scaling groups that have +# no active instances and have been suspended from the associated ELB traffic for certain days. +simianarmy.janitor.rule.suspendedASGRule.enabled = true +# An auto-scaling group without active instances is considered a cleanup candidate when it has been +# suspended from the associated ELB traffic for the number of days specified in the property below. +simianarmy.janitor.rule.suspendedASGRule.suspensionAgeThreshold = 2 +# The number of business days the auto-scaling group is kept after a notification is sent for the termination. +simianarmy.janitor.rule.suspendedASGRule.retentionDays = 5 + +# The property below specifies whether or not Eureka/Discovery is available for Janitor monkey to use. +# Discovery/Eureka is used in the rules for cleaning up auto-scaling groups to decide if an auto-scaling group +# has an 'active' instance, i.e. an instance that is registered and up in Discovery/Eureka. +simianarmy.janitor.Eureka.enabled = false + +# The following properties are used by the Janitor rule for cleaning up launch configurations that are not +# used by any auto scaling group and are older than certain days. +simianarmy.janitor.rule.oldUnusedLaunchConfigRule.enabled = true +# An unused launch configuration is considered a cleanup candidate when it is older than the number of days +# specified in the property below. +simianarmy.janitor.rule.oldUnusedLaunchConfigRule.ageThreshold = 4 +# The number of business days the launch configuration is kept after a notification is sent for the termination. +simianarmy.janitor.rule.oldUnusedLaunchConfigRule.retentionDays = 3 + +# The property below specifies the number of days to look back in the history when crawling the last reference +# information of the images. +simianarmy.janitor.image.crawler.lookBackDays = 60 +# The owner id that images have for being managed by Janitor Monkey. +#simianarmy.janitor.image.ownerId = 1234567890 + +# The following properties are used by the Janitor rule for cleaning up images that are not +# used by any instance or launch configuration, and not used to create other images for more than certain days. +# This rule is by default disabled, you need to have Edda running and enabled for using this rule. +simianarmy.janitor.rule.unusedImageRule.enabled = false +# An unused image is considered a cleanup candidate when it is not referenced for than the number of days +# specified in the property below. +simianarmy.janitor.rule.unusedImageRule.lastReferenceDaysThreshold = 45 +# The number of business days the image is kept after a notification is sent for the termination. +simianarmy.janitor.rule.unusedImageRule.retentionDays = 3 + +# You can enable Edda for Janitor Monkey to get better performance and accuracy. You need to start Edda first +# to be able to use it. +# simianarmy.janitor.edda.enabled = true +# The Edda endpoint in each region you need Janitor Monkey +#simianarmy.janitor.edda.endpoint.us-east-1 = http://localhost:8080 + +# The Edda client configurations. +# simianarmy.janitor.edda.client.timeout = 30000 +# simianarmy.janitor.edda.client.retries = 3 +# simianarmy.janitor.edda.client.retryInterval = 1000 + +# Append domain if owner tag has no domain +# simianarmy.janitor.notification.ownerEmailDomain = bar.com diff --git a/simian-army/2.5-SNAPSHOT/simianarmy.properties b/simian-army/2.5-SNAPSHOT/simianarmy.properties new file mode 100644 index 0000000..e856f40 --- /dev/null +++ b/simian-army/2.5-SNAPSHOT/simianarmy.properties @@ -0,0 +1,22 @@ +# see documentation at: +# https://github.com/Netflix/SimianArmy/wiki/Configuration + +simianarmy.recorder.sdb.domain = SIMIAN_ARMY + +# If using a non-SimbleDB recorder (LocalDB), these settings tweak defaults. +# Following should be a writeable location, for monkey events when SimpleDB is not used +#simianarmy.recorder.localdb.file=/tmp/simianarmy_events +# Max number of events to record; old events will be expired after this limit is +# reached. Use this to avoid filling disk with events (or attach a big volume!) +#simianarmy.recorder.localdb.max_events=1000000 +# Optional password to encrypt event storage. +#simianarmy.recorder.localdb.password=some_secret + +simianarmy.scheduler.frequency = 1 +simianarmy.scheduler.frequencyUnit = HOURS +simianarmy.scheduler.threads = 1 +simianarmy.calendar.openHour = 9 +simianarmy.calendar.closeHour = 15 +simianarmy.calendar.timezone = America/Los_Angeles +# override to force monkey time, useful for debugging off hours +#simianarmy.calendar.isMonkeyTime = true diff --git a/simian-army/2.5-SNAPSHOT/volumeTagging.properties b/simian-army/2.5-SNAPSHOT/volumeTagging.properties new file mode 100644 index 0000000..01ada87 --- /dev/null +++ b/simian-army/2.5-SNAPSHOT/volumeTagging.properties @@ -0,0 +1,18 @@ +# see documentation at: +# https://github.com/Netflix/SimianArmy/wiki/Configuration + +# The properties in this file are used by the monkey that tags volumes with information that +# Janitor Monkey will need for cleaning up volumes. + +# Let the monkey run. +simianarmy.volumeTagging.enabled = true +# Running in the dryrun mode, no tagging is really done. +simianarmy.volumeTagging.leashed = true + +# Set the property below if you need the owner alias to be converted to a valid email address +#simianarmy.volumeTagging.ownerEmailDomain = foo.com + +# The volume tagging monkey always runs. The tagging process is needed by the Janitor Monkey to +# clean up volumes. We can keep the volume tagging monkey running so we don't miss any change +# of volumes. +simianarmy.calendar.isMonkeyTime = true