I am working with aws boto3, still very new to coding & have to find how to drill down my output to only return load balancers/target groups with no target connections.
def gettargets(arn):
tglist=elb.describe_target_health(TargetGroupArn=arn)
targets=[]
for targetid in tglist["TargetHealthDescriptions"]:
targets.append(targetid['Target']['Id'])
print("Targets:",targets)
elbs = elb.describe_load_balancers(PageSize=100)
for loadbalancer in elbs["LoadBalancers"]:
print("\n"*2)
print("-"*8)
print("ELB Name:",loadbalancer["LoadBalancerName"])
print("Type:",loadbalancer["Type"])
print("Scheme:",loadbalancer["Scheme"])
print("TargetGroups:",str(gettargetgroups(loadbalancer["LoadBalancerArn"])))
for tgs in gettargetgrouparns(loadbalancer["LoadBalancerArn"]):
gettargets(tgs)
The Output looks like
--------
ELB Name: example-elb
Type: application
Scheme: internet-facing
TargetGroups: ['example-tg']
Targets: ['i-09876543210']
--------
ELB Name: example-alb-2
Type: application
Scheme: internal
TargetGroups: ['example-tg-2']
Targets: []
I need help returning the sections with empty Targets: []
Should I put an if statement in the getargets function or make an if statement for at the bottom. I can sort of read python, and have yet to be able to conceptualize structure and how the pieces work.
CodePudding user response:
You're don't actually 'return' anything here, you just dump results to the screen immediately as you get them.
Split logic and printing and there you have it.
def gettargets(arn):
tglist=elb.describe_target_health(TargetGroupArn=arn)
targets=[]
for targetid in tglist["TargetHealthDescriptions"]:
targets.append(targetid['Target']['Id'])
# now we return, not print!
return targets
elbs = elb.describe_load_balancers(PageSize=100)
for loadbalancer in elbs["LoadBalancers"]:
targets = []
for tgs in gettargetgrouparns(loadbalancer["LoadBalancerArn"]):
targets = gettargets(tgs)
# print the whole stuff only if targets is empty
if targets == []:
print("\n"*2)
print("-"*8)
print("ELB Name:",loadbalancer["LoadBalancerName"])
print("Type:",loadbalancer["Type"])
print("Scheme:",loadbalancer["Scheme"])
print("TargetGroups:", str(gettargetgroups( loadbalancer["LoadBalancerArn"])))
print("Targets:",targets)
CodePudding user response:
You can just return targets
from gettargets
, and then check if its empty:
def gettargets(arn):
tglist=elb.describe_target_health(TargetGroupArn=arn)
targets=[]
for targetid in tglist["TargetHealthDescriptions"]:
targets.append(targetid['Target']['Id'])
return targets
elbs = elb.describe_load_balancers(PageSize=100)
for loadbalancer in elbs["LoadBalancers"]:
targets = []
for tgs in gettargetgrouparns(loadbalancer["LoadBalancerArn"]):
targets = gettargets(tgs)
if not targets:
print("\n"*2)
print("-"*8)
print("ELB Name:",loadbalancer["LoadBalancerName"])
print("Type:",loadbalancer["Type"])
print("Scheme:",loadbalancer["Scheme"])
print("TargetGroups:",str(gettargetgroups(loadbalancer["LoadBalancerArn"])))
print("Targets:", targets)