2016-12-01 2 views
1

Ich muss eine Nachschlagetabelle/ein Verzeichnis/eine Karte in meinem Makefile erstellen, um Schlüsselwertinformationen nachzuschlagen.Wörterbücher/Karten/Nachschlagetabellen in Makefiles

Ich habe versucht, ifeq Aussagen zu verwenden, um die gleiche Sache, aber meine Aussagen zu tun scheinen zum Scheitern verurteilt:

# this gets the account id from the current user's ARN, you must have the AWS CLI and jq installed 
AWS_ACCOUNT_ID:=$(shell aws iam get-user | jq -r '.User.Arn' | awk -F ':' '{print $$5;}') 

# define a friendly account name for output 
ifeq ($(AWS_ACCOUNT_ID), 123456) 
AWS_ACCOUNT_FRIENDLY:=staging 
endif 

ifeq ($(AWS_ACCOUNT_ID), 789012) 
AWS_ACCOUNT_FRIENDLY:=preprod 
endif 

ifeq ($(AWS_ACCOUNT_ID), 345678) 
AWS_ACCOUNT_FRIENDLY:=production 
endif 

Es scheint nur 123456 mit dem ersten Wert zu arbeiten, aber nicht mit anderen.

Gibt es eine Möglichkeit, ein Wörterbuch/eine Karte in Make zu definieren, um einfach den benutzerfreundlichen Namen des Kontos mit dem Schlüssel der Konto-ID abzurufen?

+0

ich ein Ausschneiden und Einfügen des Codes haben, und hart codiert AWS_ACCOUNT_ID, und es scheint zu funktionieren. Wahrscheinlich gibt Ihr Shell-Befehl nicht den korrekten Wert zurück. – John

Antwort

6

Ich kann nicht erklären, warum Sie nicht das Verhalten sehen, das Sie erwarten: Ich würde überprüfen, dass der Wert von AWS_ACCOUNT_ID ist, was Sie erwarten: vielleicht tut Ihr Shell-Skript nicht, was Sie wollen. Versuchen Sie etwas hinzuzufügen wie:

AWS_ACCOUNT_ID := $(shell ...) 
$(info AWS_ACCOUNT_ID = '$(AWS_ACCOUNT_ID)') 

und sehen Sie, was Sie bekommen.

jedoch auf Ihre allgemeinere Frage bezogen, ziehe ich constructed macro names zu verwenden, wenn sie mit Situationen wie diese, statt viele ifeq Werte zu tun:

AWS_123456_FRIENDLY := staging 
AWS_789012_FRIENDLY := preprod 
AWS_345678_FRIENDLY := production 


AWS_ACCOUNT_ID := $(shell ...) 

AWS_ACCOUNT_FRIENDLY := $(AWS_$(AWS_ACCOUNT_ID)_FRIENDLY) 
+0

Die Makros sind genau das, was ich tun möchte. Vielen Dank! –