def withClient[T]()

in magenta-lib/src/main/scala/magenta/tasks/AWS.scala [605:693]


  def withClient[T](
      keyRing: KeyRing,
      region: Region,
      resources: DeploymentResources
  )(block: Client => T): T =
    withResource(
      Client(
        classicClient(keyRing, region, resources),
        applicationClient(keyRing, region, resources)
      )
    )(block)

  private def classicClient(
      keyRing: KeyRing,
      region: Region,
      resources: DeploymentResources
  ): ClassicELB =
    ClassicELB
      .builder()
      .credentialsProvider(AWS.provider(keyRing, resources))
      .overrideConfiguration(AWS.clientConfiguration)
      .region(region.awsRegion)
      .build()

  private def applicationClient(
      keyRing: KeyRing,
      region: Region,
      resources: DeploymentResources
  ): ApplicationELB =
    ApplicationELB
      .builder()
      .credentialsProvider(AWS.provider(keyRing, resources))
      .overrideConfiguration(AWS.clientConfiguration)
      .region(region.awsRegion)
      .build()

  def targetInstancesHealth(
      targetARN: String,
      client: ApplicationELB
  ): List[String] =
    client
      .describeTargetHealth(
        DescribeTargetHealthRequest.builder().targetGroupArn(targetARN).build()
      )
      .targetHealthDescriptions
      .asScala
      .toList
      .map(_.targetHealth.state.toString)

  def instanceHealth(elbName: String, client: ClassicELB): List[String] =
    client
      .describeInstanceHealth(
        DescribeInstanceHealthRequest
          .builder()
          .loadBalancerName(elbName)
          .build()
      )
      .instanceStates
      .asScala
      .toList
      .map(_.state)

  def deregister(
      elbName: List[String],
      elbTargetARN: List[String],
      instance: ASGInstance,
      client: Client
  ) = {
    elbName.foreach(name =>
      client.classic.deregisterInstancesFromLoadBalancer(
        DeregisterInstancesFromLoadBalancerRequest
          .builder()
          .loadBalancerName(name)
          .instances(
            ELBInstance.builder().instanceId(instance.instanceId).build()
          )
          .build()
      )
    )
    elbTargetARN.foreach(arn =>
      client.application.deregisterTargets(
        DeregisterTargetsRequest
          .builder()
          .targetGroupArn(arn)
          .targets(TargetDescription.builder().id(instance.instanceId).build())
          .build()
      )
    )
  }