|
| 1 | +package Cx |
| 2 | + |
| 3 | +import data.generic.common as common_lib |
| 4 | +import data.generic.terraform as tf_lib |
| 5 | + |
| 6 | +CxPolicy[result] { |
| 7 | + resource := input.document[i].resource.google_sql_database_instance[name] |
| 8 | + |
| 9 | + contains(resource.database_version, "MYSQL") |
| 10 | + results := get_results(resource, name) |
| 11 | + |
| 12 | + result := { |
| 13 | + "documentId": input.document[i].id, |
| 14 | + "resourceType": "google_sql_database_instance", |
| 15 | + "resourceName": tf_lib.get_resource_name(resource, name), |
| 16 | + "searchKey": results.searchKey, |
| 17 | + "issueType": results.issueType, |
| 18 | + "keyExpectedValue": results.keyExpectedValue, |
| 19 | + "keyActualValue": results.keyActualValue, |
| 20 | + "searchLine": results.searchLine |
| 21 | + } |
| 22 | +} |
| 23 | + |
| 24 | +get_results(resource, name) = results { |
| 25 | + not common_lib.valid_key(resource, "settings") |
| 26 | + |
| 27 | + results := { |
| 28 | + "searchKey": sprintf("google_sql_database_instance[%s]", [name]), |
| 29 | + "issueType": "MissingAttribute", |
| 30 | + "keyExpectedValue": sprintf("'google_sql_database_instance[%s].settings.database_flags' should be defined and set 'local_infile' to 'off'", [name]), |
| 31 | + "keyActualValue": sprintf("'google_sql_database_instance[%s].settings' is undefined or null", [name]), |
| 32 | + "searchLine": common_lib.build_search_line(["resource", "google_sql_database_instance", name], []) |
| 33 | + |
| 34 | + } |
| 35 | +} else = results { |
| 36 | + not common_lib.valid_key(resource.settings, "database_flags") |
| 37 | + |
| 38 | + results := { |
| 39 | + "searchKey": sprintf("google_sql_database_instance[%s].settings", [name]), |
| 40 | + "issueType": "MissingAttribute", |
| 41 | + "keyExpectedValue": sprintf("'google_sql_database_instance[%s].settings.database_flags' should be defined and set 'local_infile' to 'off'", [name]), |
| 42 | + "keyActualValue": sprintf("'google_sql_database_instance[%s].settings.database_flags' is undefined or null", [name]), |
| 43 | + "searchLine": common_lib.build_search_line(["resource", "google_sql_database_instance", name, "settings"], []) |
| 44 | + } |
| 45 | + |
| 46 | +} else = results { |
| 47 | + not has_flag(resource.settings.database_flags) |
| 48 | + |
| 49 | + results := { |
| 50 | + "searchKey": sprintf("google_sql_database_instance[%s].settings.database_flags", [name]), |
| 51 | + "issueType": "MissingAttribute", |
| 52 | + "keyExpectedValue": sprintf("'google_sql_database_instance[%s].settings.database_flags' should be defined and set 'local_infile' to 'off'", [name]), |
| 53 | + "keyActualValue": sprintf("'google_sql_database_instance[%s].settings.database_flags' does not set 'local_infile'", [name]), |
| 54 | + "searchLine": common_lib.build_search_line(["resource", "google_sql_database_instance", name, "settings", "database_flags"], []) |
| 55 | + } |
| 56 | + |
| 57 | +} else = results { # array |
| 58 | + resource.settings.database_flags[x].name == "local_infile" |
| 59 | + resource.settings.database_flags[x].value != "off" |
| 60 | + |
| 61 | + results := { |
| 62 | + "searchKey": sprintf("google_sql_database_instance[%s].settings.database_flags[%d].name", [name, x]), |
| 63 | + "issueType": "IncorrectValue", |
| 64 | + "keyExpectedValue": sprintf("'google_sql_database_instance[%s].settings.database_flags' should be defined and set 'local_infile' to 'off'", [name]), |
| 65 | + "keyActualValue": sprintf("'google_sql_database_instance[%s].settings.database_flags' sets 'local_infile' to '%s'", [name, resource.settings.database_flags[x].value]), |
| 66 | + "searchLine": common_lib.build_search_line(["resource", "google_sql_database_instance", name, "settings", "database_flags", x, "name"], []) |
| 67 | + } |
| 68 | +} else = results { |
| 69 | + resource.settings.database_flags.name == "local_infile" |
| 70 | + resource.settings.database_flags.value != "off" |
| 71 | + |
| 72 | + results := { |
| 73 | + "searchKey": sprintf("google_sql_database_instance[%s].settings.database_flags.name", [name]), |
| 74 | + "issueType": "IncorrectValue", |
| 75 | + "keyExpectedValue": sprintf("'google_sql_database_instance[%s].settings.database_flags' should be defined and set 'local_infile' to 'off'", [name]), |
| 76 | + "keyActualValue": sprintf("'google_sql_database_instance[%s].settings.database_flags' sets 'local_infile' to '%s'", [name, resource.settings.database_flags.value]), |
| 77 | + "searchLine": common_lib.build_search_line(["resource", "google_sql_database_instance", name, "settings", "database_flags", "name"], []) |
| 78 | + } |
| 79 | +} |
| 80 | + |
| 81 | +has_flag(database_flags) { |
| 82 | + database_flags[_].name == "local_infile" |
| 83 | +} else { |
| 84 | + database_flags.name == "local_infile" |
| 85 | +} |
0 commit comments