43 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from os.path import join
 | 
						|
from json import dumps
 | 
						|
 | 
						|
service_account = node.metadata.get('gcloud/service_account')
 | 
						|
project = node.metadata.get('gcloud/project')
 | 
						|
 | 
						|
directories[f'/etc/gcloud'] = {
 | 
						|
    'purge': True,
 | 
						|
}
 | 
						|
 | 
						|
files['/etc/gcloud/gcloud.json'] = {
 | 
						|
    'content': dumps(
 | 
						|
        node.metadata.get('gcloud'),
 | 
						|
        indent=4,
 | 
						|
        sort_keys=True
 | 
						|
    ),
 | 
						|
}
 | 
						|
 | 
						|
files['/etc/gcloud/service_account.json'] = {
 | 
						|
    'content': repo.vault.decrypt_file(
 | 
						|
        join(repo.path, 'data', 'gcloud', 'service_accounts', f'{service_account}@{project}.json.enc')
 | 
						|
    ),
 | 
						|
    'mode': '500',
 | 
						|
    'needs': [
 | 
						|
        'pkg_apt:google-cloud-sdk',
 | 
						|
    ],
 | 
						|
}
 | 
						|
 | 
						|
actions['gcloud_activate_service_account'] = {
 | 
						|
    'command': 'gcloud auth activate-service-account --key-file /etc/gcloud/service_account.json',
 | 
						|
    'unless': f"gcloud auth list | grep -q '^\*[[:space:]]*{service_account}@{project}.iam.gserviceaccount.com'",
 | 
						|
    'needs': [
 | 
						|
        f'file:/etc/gcloud/service_account.json'
 | 
						|
    ],
 | 
						|
}
 | 
						|
 | 
						|
actions['gcloud_select_project'] = {
 | 
						|
    'command': f"gcloud config set project '{project}'",
 | 
						|
    'unless': f"gcloud config get-value project | grep -q '^{project}$'",
 | 
						|
    'needs': [
 | 
						|
        f'action:gcloud_activate_service_account'
 | 
						|
    ],
 | 
						|
}
 |