1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.tradefed.device.cloud;
17 
18 import com.android.tradefed.log.LogUtil.CLog;
19 import com.android.tradefed.util.FileUtil;
20 
21 import java.io.File;
22 import java.io.IOException;
23 import java.util.HashMap;
24 import java.util.Map;
25 
26 /** Helper class that parse an Acloud config (used to start a Cloud device instance). */
27 public class AcloudConfigParser {
28 
29     /** Sets of key that can be searched from the configuration. */
30     public enum AcloudKeys {
31         SERVICE_ACCOUNT_NAME("service_account_name"),
32         SERVICE_ACCOUNT_PRIVATE_KEY("service_account_private_key_path"),
33         ZONE("zone"),
34         PROJECT("project"),
35         SERVICE_ACCOUNT_JSON_PRIVATE_KEY("service_account_json_private_key_path"),
36         STABLE_HOST_IMAGE_NAME("stable_host_image_name"),
37         STABLE_HOST_IMAGE_PROJECT("stable_host_image_project");
38 
39         private String mName;
40 
AcloudKeys(String name)41         private AcloudKeys(String name) {
42             mName = name;
43         }
44 
45         @Override
toString()46         public String toString() {
47             return mName;
48         }
49     }
50 
51     private Map<String, String> mConfigValues;
52 
AcloudConfigParser()53     private AcloudConfigParser() {
54         mConfigValues = new HashMap<>();
55     }
56 
57     /**
58      * Parse an acloud configuration file and returns a populated {@link AcloudConfigParser} that
59      * can be queried for values. Returns null in case of errors.
60      */
parseConfig(File configFile)61     public static AcloudConfigParser parseConfig(File configFile) {
62         if (configFile == null || !configFile.exists()) {
63             CLog.e("Could not read acloud config file: %s.", configFile);
64             return null;
65         }
66         AcloudConfigParser config = new AcloudConfigParser();
67         try {
68             String content = FileUtil.readStringFromFile(configFile);
69             String[] lines = content.split("\n");
70             for (String line : lines) {
71                 if (line.contains(": ")) {
72                     String key = line.split(": ")[0];
73                     String value = line.split(": ")[1].replace("\"", "");
74                     config.mConfigValues.put(key, value);
75                 }
76             }
77         } catch (IOException e) {
78             CLog.e(e);
79             return null;
80         }
81         return config;
82     }
83 
84     /** Returns the value associated with the Acloud key, null if no value. */
getValueForKey(AcloudKeys key)85     public String getValueForKey(AcloudKeys key) {
86         return mConfigValues.get(key.toString());
87     }
88 }
89