Skip to content

Commit

Permalink
Merge pull request #3991 from Yelp/jfong/PAASTA-18095-serviceaccount-…
Browse files Browse the repository at this point in the history
…or-iamrole

Disallow having service account + iam_role
  • Loading branch information
jfongatyelp authored Jan 8, 2025
2 parents 275c282 + e94d9af commit 1d25fb8
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 0 deletions.
8 changes: 8 additions & 0 deletions paasta_tools/cli/schemas/kubernetes_schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,14 @@
]
}
]
},
{
"not": {
"required": [
"service_account_name",
"iam_role"
]
}
}
],
"properties": {
Expand Down
10 changes: 10 additions & 0 deletions paasta_tools/cli/schemas/tron_schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,16 @@
"required": [
"command"
],
"allOf": [
{
"not": {
"required": [
"service_account_name",
"iam_role"
]
}
}
],
"properties": {
"name": {
"$ref": "#definitions/name"
Expand Down
65 changes: 65 additions & 0 deletions tests/cli/test_cmds_validate.py
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,37 @@ def test_instance_validate_schema_iam_role(
assert expected_output in output


@pytest.mark.parametrize(
"iam_role, service_account_name, instance_type, expected",
[
("arn:aws:iam::12345678:role/some_role", None, "kubernetes", True),
("arn:aws:iam::12345678:role/some_role", None, "eks", True),
("arn:aws:iam::12345678:role/some_role", "some_svc_account", "eks", False),
(None, "some_svc_account", "eks", True),
],
)
def test_instance_validate_schema_sa_and_iam_role(
iam_role,
service_account_name,
instance_type,
expected,
capsys,
):
instance_content = f"""
test_instance:
{"iam_role: "+iam_role if iam_role else ""}
{"service_account_name: "+service_account_name if service_account_name else ""}
"""
with patch(
"paasta_tools.cli.cmds.validate.get_file_contents", autospec=True
) as mock_get_file_contents:
mock_get_file_contents.return_value = instance_content
assert validate_schema("unused_service_path.yaml", instance_type) == expected
expected_output = SCHEMA_VALID if expected else SCHEMA_INVALID
output, _ = capsys.readouterr()
assert expected_output in output


@patch("paasta_tools.cli.cmds.validate.get_file_contents", autospec=True)
def test_tron_validate_schema_understands_underscores(mock_get_file_contents, capsys):
tron_content = """
Expand Down Expand Up @@ -713,6 +744,40 @@ def test_tron_validate_schema_iam_role(iam_role, expected, capsys):
assert expected_output in output


@pytest.mark.parametrize(
"iam_role, service_account_name, expected",
[
("arn:aws:iam::12345678:role/some_role", None, True),
("arn:aws:iam::12345678:role/some_role", "some_svc_account", False),
(None, "some_svc_account", True),
],
)
def test_tron_validate_schema_sa_and_iam_role(
iam_role,
service_account_name,
expected,
capsys,
):
tron_content = f"""
test_job:
node: paasta
schedule: "daily 04:00:00"
actions:
first:
{"iam_role: "+iam_role if iam_role else ""}
{"service_account_name: "+service_account_name if service_account_name else ""}
command: echo hello world
"""
with patch(
"paasta_tools.cli.cmds.validate.get_file_contents", autospec=True
) as mock_get_file_contents:
mock_get_file_contents.return_value = tron_content
assert validate_schema("unused_service_path.yaml", "tron") == expected
output, _ = capsys.readouterr()
expected_output = SCHEMA_VALID if expected else SCHEMA_INVALID
assert expected_output in output


@pytest.mark.parametrize(
"mock_content",
(
Expand Down

0 comments on commit 1d25fb8

Please sign in to comment.