这是indexloc提供的服务,不要输入任何密码
Skip to content
This repository was archived by the owner on Mar 4, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,13 @@
package com.netflix.simianarmy.aws.conformity.crawler;

import com.amazonaws.services.autoscaling.model.AutoScalingGroup;
import com.amazonaws.services.autoscaling.model.TagDescription;
import com.amazonaws.services.autoscaling.model.Instance;
import com.amazonaws.services.autoscaling.model.SuspendedProcess;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.netflix.simianarmy.basic.BasicSimianArmyContext;
import com.netflix.simianarmy.MonkeyConfiguration;
import com.netflix.simianarmy.client.aws.AWSClient;
import com.netflix.simianarmy.conformity.Cluster;
Expand Down Expand Up @@ -97,7 +99,19 @@ public List<Cluster> clusters(String... clusterNames) {
conformityAsg.setSuspended(true);
}
}

Cluster cluster = new Cluster(asg.getAutoScalingGroupName(), region, conformityAsg);

List<TagDescription> tagDescriptions = asg.getTags();
for (TagDescription tagDescription : tagDescriptions) {
if ( BasicSimianArmyContext.GLOBAL_OWNER_TAGKEY.equalsIgnoreCase(tagDescription.getKey()) ) {
String value = tagDescription.getValue();
if (value != null) {
cluster.setOwnerEmail(value);
}
}
}

updateCluster(cluster);
list.add(cluster);
}
Expand Down Expand Up @@ -143,11 +157,18 @@ public String getOwnerEmailForCluster(Cluster cluster) {
String prop = String.format("%s.%s.ownerEmail", NS, cluster.getName());
String ownerEmail = cfg.getStr(prop);
if (ownerEmail == null) {
LOGGER.info(String.format("No owner email is found for cluster %s in configuration"
+ "please set property %s for it.", cluster.getName(), prop));
ownerEmail = cluster.getOwnerEmail();
if (ownerEmail == null) {
LOGGER.info(String.format("No owner email is found for cluster %s in configuration "
+ "%s or tag %s.", cluster.getName(), prop, BasicSimianArmyContext.GLOBAL_OWNER_TAGKEY));
} else {
LOGGER.info(String.format("Found owner email %s for cluster %s in tag %s.",
ownerEmail, cluster.getName(), BasicSimianArmyContext.GLOBAL_OWNER_TAGKEY));
return ownerEmail;
}
} else {
LOGGER.info(String.format("Found owner email %s for cluster %s in configuration.",
ownerEmail, cluster.getName()));
LOGGER.info(String.format("Found owner email %s for cluster %s in configuration %s.",
ownerEmail, cluster.getName(), prop));
}
return ownerEmail;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
// CHECKSTYLE IGNORE Javadoc
package com.netflix.simianarmy.aws.conformity;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import com.amazonaws.services.autoscaling.model.AutoScalingGroup;
import com.amazonaws.services.autoscaling.model.SuspendedProcess;
import com.amazonaws.services.autoscaling.model.TagDescription;

import com.google.common.collect.Maps;

import com.netflix.simianarmy.aws.conformity.crawler.AWSClusterCrawler;
import com.netflix.simianarmy.basic.BasicConfiguration;
import com.netflix.simianarmy.basic.conformity.BasicConformityMonkeyContext;
import com.netflix.simianarmy.conformity.Cluster;
import com.netflix.simianarmy.client.aws.AWSClient;

import junit.framework.Assert;
import org.testng.annotations.Test;

import java.util.Map;
import java.util.List;
import java.util.LinkedList;
import java.util.Properties;

public class TestASGOwnerEmailTag {

private static final String ASG1 = "asg1";
private static final String ASG2 = "asg2";
private static final String OWNER_TAG_KEY = "owner";
private static final String OWNER_TAG_VALUE = "tyler@paperstreet.com";
private static final String REGION = "eu-west-1";

@Test
public void testForOwnerTag() {
Properties properties = new Properties();
BasicConformityMonkeyContext ctx = new BasicConformityMonkeyContext();

List<AutoScalingGroup> asgList = createASGList();
String[] asgNames = {ASG1, ASG2};

AWSClient awsMock = createMockAWSClient(asgList, asgNames);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not following the logic for this test: an awsMock was created and setup but never used.

It appears this test just looks to see if the owner tags are present in the test list rather then testing if the AWSClusterCrawler is behaving as expected.

Map<String, AWSClient> regionToAwsClient = Maps.newHashMap();
regionToAwsClient.put("us-east-1", awsMock);
AWSClusterCrawler clusterCrawler = new AWSClusterCrawler(regionToAwsClient, new BasicConfiguration(properties));

List<Cluster> clusters = clusterCrawler.clusters(asgNames);

Assert.assertTrue(OWNER_TAG_VALUE.equalsIgnoreCase(clusters.get(0).getOwnerEmail()));
Assert.assertNull(clusters.get(1).getOwnerEmail());
}

private List<AutoScalingGroup> createASGList() {
List<AutoScalingGroup> asgList = new LinkedList<AutoScalingGroup>();
asgList.add(makeASG(ASG1, OWNER_TAG_VALUE));
asgList.add(makeASG(ASG2, null));
return asgList;
}

private AutoScalingGroup makeASG(String asgName, String ownerEmail) {
TagDescription tag = new TagDescription().withKey(OWNER_TAG_KEY).withValue(ownerEmail);
AutoScalingGroup asg = new AutoScalingGroup()
.withAutoScalingGroupName(asgName)
.withTags(tag);
return asg;
}

private AWSClient createMockAWSClient(List<AutoScalingGroup> asgList, String... asgNames) {
AWSClient awsMock = mock(AWSClient.class);
when(awsMock.describeAutoScalingGroups(asgNames)).thenReturn(asgList);
return awsMock;
}
}