(args: &CertgenArgs, bundle: &PkiBundle)
| 121 | } |
| 122 | |
| 123 | async fn run_kubernetes(args: &CertgenArgs, bundle: &PkiBundle) -> Result<()> { |
| 124 | let namespace = args |
| 125 | .namespace |
| 126 | .as_deref() |
| 127 | .ok_or_else(|| miette::miette!("--namespace is required (or set POD_NAMESPACE)"))?; |
| 128 | |
| 129 | let client = Client::try_default() |
| 130 | .await |
| 131 | .into_diagnostic() |
| 132 | .wrap_err("failed to construct in-cluster Kubernetes client")?; |
| 133 | let api: Api<Secret> = Api::namespaced(client, namespace); |
| 134 | |
| 135 | if args.jwt_only { |
| 136 | let jwt_name = args |
| 137 | .jwt_secret_name |
| 138 | .as_deref() |
| 139 | .ok_or_else(|| miette::miette!("--jwt-secret-name is required"))?; |
| 140 | let jwt_exists = api |
| 141 | .get_opt(jwt_name) |
| 142 | .await |
| 143 | .into_diagnostic() |
| 144 | .wrap_err_with(|| format!("failed to read secret {jwt_name}"))? |
| 145 | .is_some(); |
| 146 | if jwt_exists { |
| 147 | info!( |
| 148 | namespace = %namespace, |
| 149 | jwt = %jwt_name, |
| 150 | "JWT signing secret already exists, skipping." |
| 151 | ); |
| 152 | return Ok(()); |
| 153 | } |
| 154 | |
| 155 | let jwt_secret = jwt_signing_secret( |
| 156 | jwt_name, |
| 157 | &bundle.jwt_signing_key_pem, |
| 158 | &bundle.jwt_public_key_pem, |
| 159 | &bundle.jwt_key_id, |
| 160 | ); |
| 161 | api.create(&PostParams::default(), &jwt_secret) |
| 162 | .await |
| 163 | .into_diagnostic() |
| 164 | .wrap_err_with(|| format!("failed to create secret {jwt_name}"))?; |
| 165 | info!( |
| 166 | namespace = %namespace, |
| 167 | jwt = %jwt_name, |
| 168 | "JWT signing secret created." |
| 169 | ); |
| 170 | return Ok(()); |
| 171 | } |
| 172 | |
| 173 | let server_name = args |
| 174 | .server_secret_name |
| 175 | .as_deref() |
| 176 | .ok_or_else(|| miette::miette!("--server-secret-name is required"))?; |
| 177 | let client_name = args |
| 178 | .client_secret_name |
| 179 | .as_deref() |
| 180 | .ok_or_else(|| miette::miette!("--client-secret-name is required"))?; |
no test coverage detected