| #!/usr/bin/env python3 | |
| # | |
| # Requirements: | |
| # - Install dependencies: `pip3 install pybuildkite requests` | |
| # - Get a Buildkite API token with read_agents and write_agents permissions | |
| # and put it into the BUILDKITE_TOKEN environment variable. | |
| # - Optional: Modify "FILTER" below to restart different groups of agents. | |
| # For example, you can put "windows" there to restart Windows agents. | |
| import os | |
| from pybuildkite.buildkite import Buildkite | |
| from requests.exceptions import HTTPError | |
| FILTER = "docker" | |
| ORGANIZATION = "bazel-testing" | |
| print("Using Buildkite API Token: {}".format(os.environ["BUILDKITE_TOKEN"])) | |
| buildkite = Buildkite() | |
| buildkite.set_access_token(os.environ["BUILDKITE_TOKEN"]) | |
| response = buildkite.agents().list_all( | |
| organization=ORGANIZATION, page=1, with_pagination=True | |
| ) | |
| agents = response.body | |
| # Keep looping until next_page is not populated | |
| while response.next_page: | |
| response = buildkite.agents().list_all( | |
| organization=ORGANIZATION, page=response.next_page, with_pagination=True | |
| ) | |
| agents += response.body | |
| for agent in agents: | |
| if FILTER in agent["name"]: | |
| print( | |
| "Stopping agent {} (https://buildkite.com/organizations/{}/agents/{}): ".format( | |
| agent["name"], ORGANIZATION, agent["id"] | |
| ), | |
| end="", | |
| ) | |
| try: | |
| buildkite.agents().stop_agent( | |
| organization=ORGANIZATION, agent_id=agent["id"], force=False | |
| ) | |
| except HTTPError: | |
| print("Error") | |
| else: | |
| print("OK") |