in setup.py [0:0]
def approve_private_link_connections(access_token, subscription_id, resource_group, service_name, service_type, api_version):
"""
Approves private link service connections for a given service.
"""
logging.info(f"[approve_private_link_connections] Access token: {access_token[:10]}...")
logging.info(f"[approve_private_link_connections] Subscription ID: {subscription_id}")
logging.info(f"[approve_private_link_connections] Resource group: {resource_group}")
logging.info(f"[approve_private_link_connections] Service name: {service_name}")
logging.info(f"[approve_private_link_connections] Service type: {service_type}")
logging.info(f"[approve_private_link_connections] API version: {api_version}")
list_url = (
f"https://management.azure.com/subscriptions/{subscription_id}"
f"/resourceGroups/{resource_group}/providers/{service_type}/{service_name}"
f"/privateEndpointConnections?api-version={api_version}"
)
logging.debug(f"[approve_private_link_connections] Request URL: {list_url}")
request_headers = {
"Authorization": access_token,
"Content-Type": "application/json"
}
try:
response = requests.get(list_url, headers=request_headers)
response.raise_for_status()
response_json = response.json()
if 'value' not in response_json:
logging.error(
f"Unexpected response structure when fetching private link connections. "
f"Response content: {response.content}"
)
return
for connection in response_json["value"]:
connection_id = connection["id"]
connection_name = connection["name"]
status = connection["properties"]["privateLinkServiceConnectionState"]["status"]
logging.info(f"[approve_private_link_connections] Checking connection '{connection_name}'. Status: {status}.")
if status.lower()== "pending":
single_connection_url = f"https://management.azure.com{connection_id}?api-version={api_version}"
logging.debug(f"[approve_private_link_connections] GET single connection URL: {single_connection_url}")
try:
single_conn_response = requests.get(single_connection_url, headers=request_headers)
single_conn_response.raise_for_status()
full_conn_resource = single_conn_response.json()
except requests.HTTPError as http_err:
logging.warning(
f"Failed to GET full connection resource for '{connection_name}': {http_err}. "
f"Response: {single_conn_response.text if 'single_conn_response' in locals() else ''}"
)
continue
full_conn_resource["properties"]["privateLinkServiceConnectionState"]["status"] = "Approved"
full_conn_resource["properties"]["privateLinkServiceConnectionState"]["description"] = "Approved by setup script"
logging.debug(f"[approve_private_link_connections] PUT single connection URL: {single_connection_url}")
approve_response = requests.put(single_connection_url, headers=request_headers, json=full_conn_resource)
if approve_response.status_code in [200, 202]:
logging.info(
f"Approved private endpoint connection '{connection_name}' for service '{service_name}'."
)
else:
logging.warning(
f"Warning: Failed to approve private endpoint connection '{connection_name}' "
f"for service '{service_name}'. Status Code: {approve_response.status_code}, "
f"Response: {approve_response.text}"
)
elif status.lower() == "approved":
logging.info(f"[approve_private_link_connections] Connection '{connection_name}' is already Approved. Skipping re-approval.")
continue
except requests.HTTPError as http_err:
logging.warning(
f"HTTP error occurred when listing/approving private link connections: {http_err}. "
f"Response: {response.text}"
)
except Exception as e:
logging.warning(f"Error occurred when approving private link connections: {e}")