Я пытаюсь использовать сценарий Python для включения / выключения облака. SQL Экземпляр в GoogleCloud. Наконец-то я нашел способ сделать это, используя GoogleCloudAPI, в Shell:
### shell script
ACCESS_TOKEN="$(gcloud auth print-access-token)"
ACTIVATION_POLICY="ALWAYS/NEVER" # Use 'ALWAYS' to turn on, 'NEVER' to turn off
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" --header 'Content-Type: application/json' --data '{"settings" : {"activationPolicy" : "${ACTIVATION_POLICY}"}}' -X PATCH https://www.googleapis.com/sql/v1beta4/projects/${PROJECT_ID}/instances/${INSTANCE_ID}
Итак, отлично, проблема решена ... за исключением того, что я не могу использовать 'gcloud auth print-access-token' на машина, на которой я запускаю скрипт, так что ничего не решается. Я обнаружил вопрос от 2017 , пытавшийся сгенерировать этот 'токен доступа', также используя Python, который, очевидно, тоже не работал.
Мне нужно иметь возможность сгенерировать это 'токен доступа', использующий сам Python. Я просматривал документацию Google, но мне так и не удалось найти ничего, связанного с этим, ближе всего я обнаружил использование oauth2 и googleapiclient для запуска списка экземпляров, но, похоже, не может изменить политику активации с Там:
### python3 script
from google.oauth2 import service_account
import googleapiclient.discovery
SCOPES = ['https://www.googleapis.com/auth/sqlservice.admin']
SERVICE_ACCOUNT_FILE = '/path/to/service.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
sqladmin = googleapiclient.discovery.build('sqladmin', 'v1beta4', credentials=credentials)
response = sqladmin.instances().get(project=PROJECT_ID, instance=INSTANCE_ID).execute()
Документация не проясняет, как использовать какой-либо инструмент для отключения экземпляра Cloud SQL, или, по крайней мере, ни один из них, который я могу найти, делает. Приведенный выше код возвращает мне файл JSON, и я могу увидеть там «ActivPolicy» в настройках. Однако я не могу найти способ «изменить его».
Мне удалось последовать совету @norbjd и найти метод «patch», и он дал «SQL Admin» разрешение на мои учетные данные, чтобы он мог Теперь используйте API sqladmin. Попытался исправить это, используя следующий код:
instance = sqladmin.instances().patch(project=PROJECT_ID, instance=INSTANCE_ID)
instance.data = {"settings" : {"activationPolicy" : "NEVER"}} #also tried with it in a string, like this: instance.data = {"settings" : {"activationPolicy" : "NEVER"}}
instance.headers['Content-Type'] = 'application/json'
instance.execute()
Учитывая, что instance.data до этого не существовал, но экземпляры instance.headers сделали:
{'accept': 'application/json', 'accept-encoding': 'gzip, deflate', 'user-agent': '(gzip)', 'x-goog-api-client': 'gdcl/1.7.11 gl-python/3.6.9'}
После выполнения, хотя ничего не случилось. Это не изменило фактическую активацию Policy.