diff --git a/CITATIONS-UNRESOLVED.md b/CITATIONS-UNRESOLVED.md index 044caa1..5a2683b 100644 --- a/CITATIONS-UNRESOLVED.md +++ b/CITATIONS-UNRESOLVED.md @@ -12,17 +12,21 @@ wrote it. Paths that DO resolve are written relative to a side-by-side checkout of the Aere repositories, so they begin with a repository name, for example `aere-contracts/contracts/pqc/AereCryptoRegistry.sol`. -Unresolvable distinct paths in this repository: **12**. +Unresolvable distinct paths in this repository: **16**. +- `ContainerApps_ListBySubscription.json` cited in: aere-quantum/verify-layer/fixturi-cloud/README.md +- `VirtualMachine_List_MaximumSet_Gen.json` cited in: aere-quantum/verify-layer/fixturi-cloud/README.md - `addresses.txt` cited in: aere-quantum/exposure-report/README.md - `antete.mjs` cited in: aere-quantum/exposure-report/README.md - `btc/antete.mjs` cited in: aere-quantum/exposure-report/README.md - `data/audit.log` cited in: aere-quantum/pq-kms/README.md - `data/root-check.json` cited in: aere-quantum/pq-kms/README.md +- `fixturi-cloud/deriva.mjs` cited in: aere-quantum/README.md - `libs.versions.toml` cited in: aere-quantum/crypto-inventory/README.md - `plic-aip23.json` cited in: aere-quantum/exposure-report/README.md - `proba-client-real.mjs` cited in: aere-quantum/readiness/README.md - `raport.json` cited in: aere-quantum/exposure-report/README.md - `raport.md` cited in: aere-quantum/exposure-report/README.md +- `src/azure-cli/azure/cli/command_modules/vm/custom.py` cited in: aere-quantum/verify-layer/fixturi-cloud/README.md - `verify.mjs` cited in: aere-quantum/exposure-report/README.md - `wallet.json` cited in: aere-quantum/agents/x402/README.md diff --git a/README.md b/README.md index 6972854..31f2a5e 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ notarization command of the verification layer and for the agents' x402 wallet ( | [`pq-kms/`](pq-kms/) | a transit-style key management service where every key is hybrid: X25519 + ML-KEM-768 for encryption, Ed25519 + ML-DSA-65 for signatures (both halves required); versions, rotation, rewrap, data keys, a chained audit log; the root key from the environment or sealed by an HSM through PKCS#11 | | [`pq-pki/`](pq-pki/) | a private certificate authority for ML-DSA (X.509 v3, RFC 9881): root and issuing CAs, leaf certificates, revocation lists, and a strict chain verifier compared against OpenSSL | | [`crypto-inventory/`](crypto-inventory/) | a cryptographic inventory of source code (JavaScript/TypeScript, Python, Java, Kotlin, Swift, Go, Rust, PEM blocks, dependency manifests including Cargo.toml, Package.swift, Podfile and Gradle): every use classified by its exposure to a quantum computer, with a migration target, written as a CycloneDX 1.6 CBOM; nothing from the scanned tree is executed, and its cost stays linear on input built to be slow | -| [`verify-layer/`](verify-layer/) | an audit-log sidecar for any deployment: entries are AIP-23 envelopes in a hash chain, the runtime adapter records every running Docker or Kubernetes container without any secret value, and the head of the chain can be signed by the operator (ML-DSA-65) and notarized on Aere Network under a post-quantum validator certificate; it says plainly what that proves (the history before a published head) and what it does not (that the host told the truth); the same log as a Merkle tree (RFC 9162): signed tree heads, and inclusion and consistency proofs of a few hashes that anyone checks without the log | +| [`verify-layer/`](verify-layer/) | an audit-log sidecar for any deployment: entries are AIP-23 envelopes in a hash chain, the runtime adapter records every running Docker or Kubernetes container without any secret value, and from 2026-10-18 the same for what the operator's own cloud CLI exports (AWS ECS, EC2, Lambda; Azure VMs, Container Instances, Container Apps, Web Apps; GCP Compute Engine, Cloud Run), read from the export file and never from an account, and the head of the chain can be signed by the operator (ML-DSA-65) and notarized on Aere Network under a post-quantum validator certificate; it says plainly what that proves (the history before a published head) and what it does not (that the host told the truth); the same log as a Merkle tree (RFC 9162): signed tree heads, and inclusion and consistency proofs of a few hashes that anyone checks without the log | | [`proof-kinds/`](proof-kinds/) | the AIP-23 envelope builder the verification layer uses: fourteen proof kinds, one envelope format, digests instead of raw content | | [`readiness/`](readiness/) | the post-quantum readiness scanner of a public hostname: real TLS handshakes (hybrid only, hybrid preferred, TLS 1.2), HSTS, the certificate; no connection to an address not proven public; a rate limit per client that X-Forwarded-For cannot bypass | | [`control-plane/`](control-plane/) | from findings to a finished migration: a prioritized plan from the inventory and the scanner, its execution through the gateway, KMS and PKI with consent per action and a measured proof afterwards, recipes for the servers the products do not touch and a rescan that judges them, a compliance report against NIST IR 8547, the EU roadmap and optionally CNSA 2.0, and a console that checks it all again | @@ -40,7 +40,7 @@ test, counts as a failure of the control. Results measured on 2026-09-29 (Node.j | pq-kms | 62/62 (`node test/proba.mjs`); HSM root on SoftHSM2 + OpenSC 20/20 (`pq-kms/test/proba-hsm.mjs`, Linux); sealed-file trust rules 7/7 (`pq-kms/test/proba-hsm-incredere.mjs`) | 16/16 (`node test/control-negativ.mjs`); sealed-file rules 2/2 in this repository (`pq-kms/test/control-negativ-hsm-incredere.mjs`) | | pq-pki | 27/27 (`node test/proba.mjs`), each verdict compared with OpenSSL 3.5 | 22/22 (`node test/control-negativ.mjs`) | | crypto-inventory | 68/68 (`node test/proba.mjs`, measured 2026-10-18 with the Rust, Swift and Kotlin detectors, glob imports, libcrux, BoringSSL, the libsignal Java/Node/Swift/Android APIs, CryptoKit, CommonCrypto, Security.framework, Android Keystore, Tink and OkHttp included); cost on hostile input 13/13 linear (`node test/proba-timp.mjs`) | 35/35 (`node test/control-negativ.mjs`); cost 5/5 in this repository (`node test/control-negativ-timp.mjs`; its fourth case compares with version 0.1.0 from the development history and is skipped here) | -| verify-layer | 45/45 with the AIP-23 reference verifier, measured 2026-10-05 (`AERE_VERIFY_PROOF= node proba-sidecar.mjs`); without it 40 run, 5 are reported as skipped and the exit code is 2; the Merkle tree 20/20 (`node proba-arbore.mjs`: the reference roots of Certificate Transparency, every proof up to 64 leaves, each attack), measured 2026-09-30 | 10/10 in this repository on 2026-10-05 (`node control-negativ-sidecar.mjs`; its eleventh case compares with the version from the development history and is skipped here); the tree 14/14 (`node control-negativ-arbore.mjs`) | +| verify-layer | 45/45 with the AIP-23 reference verifier, measured 2026-10-05 (`AERE_VERIFY_PROOF= node proba-sidecar.mjs`); without it 40 run, 5 are reported as skipped and the exit code is 2; the cloud adapters 60/60 on 2026-10-18 (`node proba-adaptoare-cloud.mjs`: nine fixtures derived from the vendors' documented CLI and REST examples by `fixturi-cloud/deriva.mjs`; a real account is unmeasured and the README says so); the Merkle tree 20/20 (`node proba-arbore.mjs`: the reference roots of Certificate Transparency, every proof up to 64 leaves, each attack), measured 2026-09-30 | 38/38 in this repository on 2026-10-18 (`node control-negativ-sidecar.mjs`: the ten original plantings plus the cloud adapter rules; the case that compares with the development history is skipped here); the tree 14/14 (`node control-negativ-arbore.mjs`) | | proof-kinds | 24/24 with the same verifier (`AERE_VERIFY_PROOF=... node proba-proof-kinds.mjs`) | six negative controls inside the test | | readiness | 6/6 (`node proba-adrese-private.mjs`: the private-address rules, and a local listener no scan may touch) | the rate limit and the queue bound are tested where the service runs, not here (its README says so) | | control-plane | planner 44/44 (2026-10-18: a key agreement or a client-side TLS configured by the application itself is not routed to the TLS gateway; a self-signed trust anchor is blocked, not "automatic through PKI"; test code is LOW with its own scope), command line 10/10, execution 30/30 on real products started locally, remediation 33/33 on real TLS servers (all five server profiles measured end to end on 2026-10-18: nginx, Apache, HAProxy, Node, Go), compliance report 30/30 (with the AIP-23 verifier; test-code findings are counted apart and are not "exposed today"), console 8/8; the console viewer in a real Chromium, phone and desktop, 26/26 (`node proba-consola-web.mjs`, measured 2026-09-30; needs `playwright-core` and a Chromium, otherwise it exits 2) | remediation 7/7, compliance report 3/3 in this repository; viewer 8/8 (`node control-negativ-consola-web.mjs`) | @@ -62,4 +62,4 @@ interface, command line and data (`definePolicy`, `verifyLedger`, `approve`, ... ## Licence -MIT, see [LICENSE](LICENSE). Files: 904 (pq-gateway 9, pq-kms 10, pq-pki 6, crypto-inventory 73, verify-layer 12, proof-kinds 3, control-plane 27, agents 39, identity 24, proof-of-ai 3, ai-trust 6, verifiable-data 7, market-settlement 9, payments 8, conformance 631, device-identity 11, exposure-report 18, readiness 4). +MIT, see [LICENSE](LICENSE). Files: 948 (pq-gateway 9, pq-kms 10, pq-pki 6, crypto-inventory 73, verify-layer 56, proof-kinds 3, control-plane 27, agents 39, identity 24, proof-of-ai 3, ai-trust 6, verifiable-data 7, market-settlement 9, payments 8, conformance 631, device-identity 11, exposure-report 18, readiness 4). diff --git a/verify-layer/README.md b/verify-layer/README.md index c98523b..4add464 100644 --- a/verify-layer/README.md +++ b/verify-layer/README.md @@ -38,6 +38,7 @@ head you hold from outside the host, with the signer you expect, never on its ow node sidecar.mjs record --kind deployment --name --version --content-file [--host h] [--log p] [--at T] node sidecar.mjs record --kind proof --proof-file # any AIP-23 envelope, after checking its form and hash node sidecar.mjs scan --source docker|kubernetes --input [--host h] [--log p] + node sidecar.mjs scan --source aws-ecs|aws-ec2|aws-lambda|azure-vm|azure-container|azure-containerapp|azure-webapp|gcp-compute|gcp-run --input [--task-definitions ] node sidecar.mjs verify-log --log p [--attested head.json [--signer head.pub.pem]] # 0 intact (and continues the head), 1 broken or not continued node sidecar.mjs attest-head --log p [--host h] [--out head.json] [--sign-key head.key.pem] # the head as an aere-audit-head envelope node sidecar.mjs keygen --out # the operator's ML-DSA-65 head key (head.key.pem 0600, head.pub.pem) @@ -69,6 +70,59 @@ container, or one that is not in the expected shape, is refused rather than reco A hash does not hide a guessable secret: if a password is passed on a command line, anyone who knows the rest of the command can test guesses against `commandSha256`. Pass secrets through files or the environment, not arguments. +## Cloud exports (2026-10-18) + +The same adapter, in the same honest form, for the workloads a cloud runs for you: the operator makes the export **with the vendor's +own CLI and their own credentials, on their own machine**; the sidecar reads the file. The sidecar holds no cloud credential and +calls no cloud API. These adapters are measured on the outputs **as the vendors document them** (`fixturi-cloud/`, every file an exact +copy of a documented example or, for GCP, a form built from the documented schema), **not on a live account**: Aere Network has no +AWS, Azure or GCP account. What a live export carries beyond the documented example is handled as documented and is NOT MEASURED; +a test account at each vendor is what it would take to measure it. + + aws ecs describe-tasks --cluster C --tasks $(aws ecs list-tasks --cluster C --query 'taskArns' --output text) > tasks.json + aws ecs describe-task-definition --task-definition > def.json # one per task definition in use + node sidecar.mjs scan --source aws-ecs --input tasks.json --task-definitions def.json # def.json may hold one output or a JSON list of them + aws ec2 describe-instances > ec2.json; node sidecar.mjs scan --source aws-ec2 --input ec2.json + aws lambda list-functions > lambda.json; node sidecar.mjs scan --source aws-lambda --input lambda.json + az vm list -d > vm.json; node sidecar.mjs scan --source azure-vm --input vm.json + az container show -g G -n N > aci.json (collect several into a JSON array); node sidecar.mjs scan --source azure-container --input aci.json + az containerapp list > aca.json; node sidecar.mjs scan --source azure-containerapp --input aca.json + az webapp list --show-details > web.json; node sidecar.mjs scan --source azure-webapp --input web.json + gcloud compute instances list --format=json > gce.json; node sidecar.mjs scan --source gcp-compute --input gce.json + gcloud run services list --format=json > run.json; node sidecar.mjs scan --source gcp-run --input run.json + +What each adapter reads, and what it refuses: + +- **Only what the export says is running.** ECS: tasks and containers with `lastStatus` `RUNNING`; EC2: `State.Name` `running`; + Azure VM: `powerState` `VM running` (the field `-d` adds; an export without it is refused, it does not say whether a machine runs); + Container Instances: `containers[].instanceView.currentState.state` `Running` (`az container list` may omit `instanceView`; such an + export is refused and `az container show` is asked for); Container Apps: `runningStatus` `Running` (`Progressing`, `Stopped`, + `Suspended` and `Ready`, which the API enumerates without defining, do not count); App Service: `state` `Running`; Compute + Engine: `status` `RUNNING`; Cloud Run: the `Ready` condition `True`. Lambda is the exception the vendor documents: `list-functions` + does not return `State`, so every function listed is recorded as deployed with `state: not-in-export`; when the export carries + `State` (from `get-function-configuration`), only `Active` functions enter. +- **A file that is not the named CLI's output is refused by name** (`the input is not the output of \`aws ecs describe-tasks\``), + as is an export with no running workload: a zero is not recorded. +- **Identity.** The image with its digest when the export has one (`imageIdentity: digest`: an ECS `imageDigest`, an image given as + `name@sha256:...` on Container Instances, Container Apps or Cloud Run); otherwise the id of the machine or service and the image or + runtime the export declares, marked `imageIdentity: declared` (an AMI id, an Azure `imageReference`, a GCE boot disk and its + licenses, a `DOCKER|image` or `NODE|20-lts` runtime); Lambda carries `CodeSha256`, the digest of its package (`codeSha256`). An + entry's name is the region or zone and the workload's own identifiers (`ecs:cluster/task/container`, `ec2:region/instance`, + `lambda:region/function`, `azvm:group/name`, `aci:group/name/container`, `aca:group/app/container`, `azwebapp:group/site`, + `gce:zone/name`, `run:region/service/container`), and its version the digest when there is one. +- **Names only, never values.** Environment variables enter as their names (ECS: `environment` and `secrets` of the task definition + plus `overrides`; Lambda: the keys of `Environment.Variables`; Container Instances: `environmentVariables`, neither `value` nor + `secureValue`; Container Apps: `env`, with `secretRef` names, never `configuration.secrets`; App Service: `appSettings` and + `connectionStrings` names; Cloud Run: `env`, never `value` or `valueFrom`). EC2 tags, Azure tags, GCE labels and GCE metadata enter + as keys (`startup-script`, `user-data`, `ssh-keys` live in metadata, with values the adapter never copies). `customData` and + `userData` of a VM, the admin user, SSH keys, registry credentials, IP addresses and host names are **not copied at all**; an + ECS secret's `valueFrom` ARN is not copied either. Where the export does not carry the names (ECS tasks without their task + definition, a site listed without `--show-details`), the descriptor says so (`envSource: not-in-export`, `siteConfigInExport: + false`) instead of pretending. + +As with Docker and Kubernetes, an entry proves that the export *declared* the workload, at the time the operator says: the vendor's +API answered the operator, and the operator handed the file to the sidecar. Nothing here checks the export against the vendor. + ## Notarization `notarize-head` reads the chain id from the RPC endpoint (it does not trust an argument), refuses an attestation whose @@ -111,7 +165,8 @@ other, so both verify commands then say whether each head is signed and by which ## Tests node proba-sidecar.mjs # 45 checks - node control-negativ-sidecar.mjs # puts each guard back to its absent form and requires the named check to fail + node proba-adaptoare-cloud.mjs # 60: the nine cloud adapters on the documented exports (fixturi-cloud/) + node control-negativ-sidecar.mjs # puts each guard back to its absent form and requires the named check to fail (11 + 27 cloud plantings) node proba-arbore.mjs # 20: the tree (the reference roots of Certificate Transparency for 1..8 leaves, every proof up to 64 leaves, each attack) node control-negativ-arbore.mjs # 14 guards removed in a copy, each turns its named test red @@ -133,6 +188,16 @@ comparison, the length check, the attestation hash check, the handling of an unr the head signature check, the comparison with `--signer`, the refusal of an unsigned head when `--signer` is given). `proba-notarizare-testnet.mjs --key-file ` repeats the on-chain run above (9 checks, it needs a funded testnet key). +`proba-adaptoare-cloud.mjs` (2026-10-18) runs every cloud adapter on the documented export, on the same export with one stopped +workload added, and on the same export with environment values planted (`fixturi-cloud/`, derived by `deriva.mjs` from the exact +copies in `fixturi-cloud/surse/`, and compared with them at every run): it requires exactly the running workloads with their +identities, no planted value anywhere in the log or the descriptors (and the names present, as the positive control), another CLI's +export refused by name, every descriptor re-hashing to the digest in its envelope, and every envelope `VALID` for the reference +verifier. `control-negativ-sidecar.mjs` adds three plantings per adapter (the running filter removed, the names replaced by the +name/value pairs, the shape check removed) and requires each to turn its named check red: measured 38 of 38 on 2026-10-18. The +adapters are producers, not verifiers, so they name no rule of the conformance suite (`conformance/`), whose rules are those of the +log and tree verifiers, unchanged. + **Corrected on 2026-10-03.** Until then the check of a head's signature required the DECLARED scheme to be `ml-dsa-65` but not the key to be an ML-DSA-65 key: a head signed with an Ed25519, RSA or P-256 key that declared `ml-dsa-65` was reported as a head signed with ML-DSA-65. Found while this verifier was enrolled in the conformance suite (`conformance/`), where it is now a vector. @@ -141,7 +206,6 @@ consistency check now also carries a rule id from a declared list (`REGULI` in ` ## What it is not (yet) -It does not report to a live console over the network, and it has no per-cloud adapters that read deployments from the AWS, -Azure or GCP APIs with credentials: the runtime adapter above, without credentials, is the first one. It signs heads, not -each entry, and the host name in an entry is still a declaration. No third party -has reviewed it. +It does not report to a live console over the network. Its per-cloud adapters (2026-10-18) read the operator's CLI export: no +credentials, no live API calls, and they are measured on the vendors' documented outputs, not on a live account (none is held). +It signs heads, not each entry, and the host name in an entry is still a declaration. No third party has reviewed it. diff --git a/verify-layer/control-negativ-sidecar.mjs b/verify-layer/control-negativ-sidecar.mjs index fa64a4b..ef19940 100644 --- a/verify-layer/control-negativ-sidecar.mjs +++ b/verify-layer/control-negativ-sidecar.mjs @@ -11,6 +11,14 @@ // P7 semnatura capului nu se mai verifica (punctul 34, 2026-09-29) -> S CONTROL (semnatura stricata) rosu // P8 semnatarul capului nu se mai compara cu --signer -> S CONTROL (alta cheie) rosu // P9 un cap nesemnat trece cand --signer il cere semnat -> S CONTROL (nesemnat) rosu +// P10 o cheie clasica sub schema ml-dsa-65 trece (2026-10-03) -> S CONTROL (cheie clasica) rosu +// B15 (2026-10-18), adaptoarele pe furnizori de cloud, masurate cu proba-adaptoare-cloud.mjs pe aceeasi copie plantata, trei +// plantari pe adaptor (9 adaptoare, 27 de plantari): +// PR- filtrul "ruleaza" scos: incarcatura OPRITA intra in jurnal -> ": incarcatura OPRITA" rosu +// PN- numele variabilelor inlocuite cu perechile nume=valoare: valoarea ajunge in jurnal -> ": CONFIDENTIALITATE" rosu +// PF- validarea formei scoasa: exportul altui CLI nu mai e refuzat PE NUME -> ": CONTROL: export de alt CLI" rosu +// Plantarile cloud ruleaza fara verificatorul AIP-23 (AERE_VERIFY_PROOF pe o cale inexistenta): verificarea de VALID nu e tinta lor si +// ar dubla timpul; proba iese tot 1 cand are o verificare rosie. // Copiile stau LANGA original (importul lui proof-kinds e relativ) si se sterg; originalul trebuie sa ramana octet cu octet. // node control-negativ-sidecar.mjs -> 0 toate prinse, 1 una scapata, 2 STRICAT import crypto from 'node:crypto'; @@ -22,6 +30,7 @@ import { fileURLToPath } from 'node:url'; const AICI = path.dirname(fileURLToPath(import.meta.url)); const SRC = path.join(AICI, 'sidecar.mjs'); const PROBA = path.join(AICI, 'proba-sidecar.mjs'); +const PROBA_CLOUD = path.join(AICI, 'proba-adaptoare-cloud.mjs'); const REV = process.env.AERE_SIDECAR_REV_VECHE || 'b2b08a5e'; const sha = (f) => crypto.createHash('sha256').update(fs.readFileSync(f)).digest('hex'); const inainte = sha(SRC); @@ -39,22 +48,23 @@ const T = { nesemnat: 'S CONTROL: un cap nesemnat', cheieClasica: 'S CONTROL: un cap semnat cu o cheie clasica', }; +const SUMAR = { [PROBA]: /B3 sidecar \(verify layer\): \d+\/\d+ cum trebuia/, [PROBA_CLOUD]: /B15 adaptoare cloud: \d+\/\d+ cum trebuia/ }; -function caz(id, text, tinte) { +function caz(id, text, tinte, proba = PROBA, env = {}) { total++; const copie = path.join(AICI, `.plantat-sidecar-${id}.mjs`); try { fs.writeFileSync(copie, text); - const r = spawnSync(process.execPath, [PROBA], { encoding: 'utf8', timeout: 400000, env: { ...process.env, AERE_SIDECAR_MODUL: copie } }); + const r = spawnSync(process.execPath, [proba], { encoding: 'utf8', timeout: 400000, env: { ...process.env, AERE_SIDECAR_MODUL: copie, ...env } }); const out = (r.stdout || '') + (r.stderr || ''); - if (!/B3 sidecar \(verify layer\): \d+\/\d+ cum trebuia/.test(out) || !out.includes(copie)) { stricate++; console.log(` STRICAT ${id}: proba nu a ajuns la capat pe copie (${out.trim().split('\n').pop()?.slice(0, 140)})`); return; } + if (!SUMAR[proba].test(out) || !out.includes(copie)) { stricate++; console.log(` STRICAT ${id}: proba nu a ajuns la capat pe copie (${out.trim().split('\n').pop()?.slice(0, 140)})`); return; } const rosii = out.split('\n').filter((l) => l.includes('[RAU ]')); const lipsa = tinte.filter((x) => !rosii.some((l) => l.includes(x))); if (r.status === 1 && !lipsa.length) { prinse++; console.log(` PRINS ${id}: ${rosii.length} verificari rosii, intre ele: ${tinte.map((t) => t.split(':')[0]).join(', ')}`); } else console.log(` SCAPAT ${id}: cod ${r.status}, au ramas verzi: ${lipsa.join(' | ') || '-'}`); } finally { fs.rmSync(copie, { force: true }); fs.rmSync(copie + '.lock', { force: true }); } } -const planta = (t, a, b) => (t.split(a).length === 2 ? t.replace(a, b) : null); +const planta = (t, a, b) => (t.split(a).length === 2 ? t.replace(a, () => b) : null); const CALE = `${REV}:tools/aere-verify-layer/sidecar.mjs`; if (spawnSync('git', ['cat-file', '-e', CALE], { cwd: AICI }).status !== 0) console.log(` SARIT V0: revizia ${REV} nu e in istoricul acestui depozit; NEMASURAT aici`); @@ -84,6 +94,36 @@ for (const [id, a, b, tinte] of P) { if (!t) { stricate++; total++; console.log(` STRICAT ${id}: ancora nu apare exact o data`); continue; } caz(id, t, tinte); } + +// ---- B15: adaptoarele pe furnizori de cloud --------------------------------------------------------------------------------------- +// scurgerea de nume -> valori: ancora e chiar apelul care reduce lista la nume, inlocuit cu lista intreaga (perechi nume/valoare) +const SCURGERI = { + 'aws-ecs': ['numeDin([...(cd?.environment || []), ...(cd?.secrets || []), ...(over?.environment || [])] /*NUME:aws-ecs*/)', '[...(cd?.environment || []), ...(over?.environment || [])]'], + 'aws-ec2': ["numeDin(i.Tags, 'Key' /*NUME:aws-ec2*/)", '(i.Tags || [])'], + 'aws-lambda': ['Object.keys(f.Environment?.Variables || {}).sort() /*NUME:aws-lambda*/', '(f.Environment?.Variables || {})'], + 'azure-vm': ['tagKeys: Object.keys(v.tags || {}).sort() /*NUME:azure-vm*/,', 'tagKeys: v.tags || {}, customData: v.osProfile?.customData || null,'], + 'azure-container': ['numeDin(c.environmentVariables /*NUME:azure-container*/)', '(c.environmentVariables || [])'], + 'azure-containerapp': ['numeDin(c.env /*NUME:azure-containerapp*/)', '(c.env || [])'], + 'azure-webapp': ['numeDin(sc?.appSettings /*NUME:azure-webapp*/)', '(sc?.appSettings || [])'], + 'gcp-compute': ["numeDin(i.metadata?.items, 'key' /*NUME:gcp-compute*/)", '(i.metadata?.items || [])'], + 'gcp-run': ['numeDin(c.env /*NUME:gcp-run*/)', '(c.env || [])'], +}; +const FARA_VERIFICATOR = { AERE_VERIFY_PROOF: path.join(AICI, 'nu-exista-verify-proof.mjs') }; +for (const src of Object.keys(SCURGERI)) { + const PC = [ + [`PR-${src}`, `/*RULEAZA:${src}*/))`, `/*RULEAZA:${src}*/) && ${NU})`, [`${src}: incarcatura OPRITA`]], + [`PN-${src}`, SCURGERI[src][0], SCURGERI[src][1], [`${src}: CONFIDENTIALITATE`]], + [`PF-${src}`, `/*FORMA:${src}*/))`, `/*FORMA:${src}*/) && ${NU})`, [`${src}: CONTROL: export de alt CLI`]], + ]; + for (const [id, a, b, tinte] of PC) { + let t = planta(nou, a, b); + // ECS filtreaza pe doua niveluri (task si container), si un task STOPPED are si containerele STOPPED: filtrul scos inseamna + // amandoua (masurat 2026-10-18: cu numai nivelul de task scos, plantarea era mascata de cel de container si SCAPA) + if (t && id === 'PR-aws-ecs') t = planta(t, '/*RULEAZA:aws-ecs-container*/))', `/*RULEAZA:aws-ecs-container*/) && ${NU})`); + if (!t) { stricate++; total++; console.log(` STRICAT ${id}: ancora nu apare exact o data`); continue; } + caz(id, t, tinte, PROBA_CLOUD, FARA_VERIFICATOR); + } +} const ramase = fs.readdirSync(AICI).filter((f) => f.startsWith('.plantat-sidecar-')); if (sha(SRC) !== inainte || ramase.length) { stricate++; console.log(' STRICAT originalul s-a schimbat sau au ramas copii: ' + ramase.join(',')); } console.log(`\ncontrolul negativ al sidecar-ului: prinse ${prinse}/${total}, stricate ${stricate}`); diff --git a/verify-layer/fixturi-cloud/README.md b/verify-layer/fixturi-cloud/README.md new file mode 100644 index 0000000..c335ad2 --- /dev/null +++ b/verify-layer/fixturi-cloud/README.md @@ -0,0 +1,73 @@ +# Cloud export fixtures (B15, 2026-10-18) + +The per-cloud adapters of `sidecar scan` are measured on these files, **not on a live account**: Aere Network holds no AWS, Azure or +GCP account (a decision of the founder, about money), so what an adapter reads is the output of each CLI **as its vendor documents +it**. Every file under `surse/` is an exact copy of an example published in that documentation, or, where the documentation +publishes no example output, a form built from the documented schema and named `din-schema` (from the schema). Everything else in +this directory is **derived** from those sources by `deriva.mjs`, deterministically; `node deriva.mjs --verifica` compares the files on +disk with what the code derives now, and `proba-adaptoare-cloud.mjs` does the same at every run. + +**NOT MEASURED: the output of a real account.** A field a CLI emits only on a live resource and not in its documented example (for +example the `imageDigest` of an ECS container, the `instanceView` that `az container show` carries and `az container list` may not, +the `State` that `aws lambda list-functions` does not return) is handled as the documentation describes it, and that handling has not +been run against a live export. To measure it, a test account at each vendor is needed (a decision of the founder); until then every +statement about these adapters is a statement about the documented shapes. + +## Sources (`surse/`), read on 2026-10-18 + +| file | what it is | where it was read | +| --- | --- | --- | +| `aws-ecs-describe-tasks.json` | Example 1 of `aws ecs describe-tasks` ("To describe a single task"), copied exactly | docs.aws.amazon.com/cli/latest/reference/ecs/describe-tasks.html, page titled "AWS CLI 2.38.1 Command Reference" | +| `aws-ecs-describe-task-definition.json` | the example output of `aws ecs describe-task-definition`, copied exactly (it carries a plaintext `MYSQL_ROOT_PASSWORD` value, the vendor's own example; the adapter drops it) | docs.aws.amazon.com/cli/latest/reference/ecs/describe-task-definition.html | +| `aws-ec2-describe-instances.json` | Example 1 of `aws ec2 describe-instances`, copied exactly (including the vendor's `"PrivateIpAddress": "10-0-0-157"`) | docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html | +| `aws-lambda-list-functions.json` | the example output of `aws lambda list-functions`, copied exactly; the page's note says `State` and `LastUpdateStatus` are not returned by this call | docs.aws.amazon.com/cli/latest/reference/lambda/list-functions.html | +| `azure-vm-list-rest-2026-04-01.json` | `VirtualMachine_List_MaximumSet_Gen.json`, the example the REST reference "Virtual Machines - List" is generated from (api-version 2026-04-01), as published in Azure/azure-rest-api-specs | github.com/Azure/azure-rest-api-specs, `specification/compute/resource-manager/Microsoft.Compute/Compute/stable/2026-04-01/examples/virtualMachineExamples/` | +| `azure-container-groups-list-rest-2026-07-01.json` | the sample response of "Container Groups - List" (api-version 2026-07-01), copied exactly | learn.microsoft.com/en-us/rest/api/container-instances/container-groups/list | +| `azure-containerapps-list-rest-2026-07-01.json` | `ContainerApps_ListBySubscription.json` (api-version 2026-07-01), as published in Azure/azure-rest-api-specs | github.com/Azure/azure-rest-api-specs, `specification/app/resource-manager/Microsoft.App/ContainerApps/stable/2026-07-01/examples/` | +| `azure-webapps-list-rest-2024-11-01.json` | the sample response of "Web Apps - List" (api-version 2024-11-01), copied exactly | learn.microsoft.com/en-us/rest/api/appservice/web-apps/list | +| `gcp-compute-instances-din-schema.json` | **built from the schema**, not a published sample: the Compute Engine API has no example output for `gcloud compute instances list --format=json`; fields and the `status` values are those of the `Instance` resource (compute v1) | docs.cloud.google.com/compute/docs/reference/rest/v1/instances (schema as rendered in the generated client reference), docs.cloud.google.com/compute/docs/instances/instance-lifecycle (states), docs.cloud.google.com/compute/docs/metadata/predefined-metadata-keys | +| `gcp-run-services-din-schema.json` | **built from the schema**, not a published sample: a `serving.knative.dev/v1` Service as the Cloud Run YAML reference and the Admin API v1 describe it (`cloud.googleapis.com/location` label, `status.conditions[].type == "Ready"`) | docs.cloud.google.com/run/docs/reference/yaml/v1 (last updated 2026-10-13), docs.cloud.google.com/run/docs/reference/rest/v1/namespaces.services, docs.cloud.google.com/run/docs/reference/rest/v1/Container | + +How the CLI shapes relate to the REST samples (the derivation applies exactly this): + +- `az vm list -d`: the Azure CLI returns the ARM resource with `properties` flattened into the object; `--show-details` adds + `powerState` (the `displayStatus` of the `PowerState/*` entry of `instanceView.statuses`, so `"VM running"`), `publicIps`, `fqdns`, + `privateIps`, `macAddresses`, and removes `instanceView` (read in `src/azure-cli/azure/cli/command_modules/vm/custom.py`, + `get_vm_details`, github.com/Azure/azure-cli, branch dev, 2026-10-18). The REST sample has no power state, so the derived CLI + form sets `powerState` itself. +- `az container list` / `az container show`: `properties` flattened at the group and at each container; the state of a container is + `containers[].instanceView.currentState.state` (the restart-policy guide reads it exactly so, page dated 2026-07-25). The REST + list sample has no `instanceView`; the derived CLI form adds it in the shape `ContainerPropertiesInstanceView` documents. +- `az containerapp list`: the containerapp extension returns the ARM resource with `properties` nested; `runningStatus` is read-only + with values `Progressing`, `Running`, `Stopped`, `Suspended`, `Ready` (openapi.json 2026-07-01). The adapter counts only `Running`. +- `az webapp list --show-details`: `properties` flattened; `state` is `Running` or `Stopped` (the command reference's own example is + `az webapp list --query "[?state=='Running']"`, page dated 2026-09-01). The derived CLI form gives the first site a + `linuxFxVersion` of the `DOCKER|image` form, which the REST sample leaves empty. +- `gcloud ... --format=json` "lists the resource in json format" (gcloud topic formats, last updated 2026-10-06): the files are arrays + of the resource. + +## Derived files + +For every source ``: `.json` (the CLI form), `.oprita.json` (the same plus one workload that is **not running**: a +STOPPED task, a stopped instance, an `Inactive` function, a deallocated VM, a `Terminated` container, a `Stopped` container app, a +`Stopped` site, a `TERMINATED` instance, a service whose `Ready` condition is `False`), `.secrete.json` (the same with +environment variables **with values** planted, `AERE-SINTETIC-...`, synthetic by construction: in task definitions and overrides, +`Environment.Variables`, VM `customData`/`userData`/tags, ACI `environmentVariables` (`value` and `secureValue`), container app `env` +and `configuration.secrets`, site `appSettings`/`connectionStrings`, instance `metadata` (`user-data`, `startup-script`), Cloud Run `env`). +`aws-ecs.definitii.json` is the task definition aligned to the task of the ECS example (the vendor's two examples do not share a task +definition ARN); `azure-vm.fara-d.json` and `azure-container.fara-stare.json` are the exports **without** the field that says whether +the workload runs, which the adapters refuse by name. + +The test requires, for each adapter: the running workloads only (the planted stopped one never enters the log), the identities +exactly, no planted value anywhere in the log or in the descriptors (and the variable **names** present, as the positive control), +another CLI's export refused by name, every descriptor re-hashing to the digest in its envelope, and every envelope `VALID` for the +AIP-23 reference verifier. + +## Declared change to the Microsoft example (2026-10-18) + +`surse/azure-webapps-list-rest-2024-11-01.json` is the published "Web Apps - List" example with ONE declared change: its four public IP +addresses in `outboundIpAddresses` / `possibleOutboundIpAddresses` (Microsoft's, not ours, and not read by the adapter) are replaced with +RFC 5737 documentation addresses (203.0.113.x, 198.51.100.x). Reason: this repository's publication gate refuses any file that lists three +or more public IP addresses together (it cannot tell a vendor's example from an infrastructure map), and we keep that gate strict rather +than give a folder an exception. Everything else in the source is byte for byte the published example; the derived fixtures carry the same +replacement through `deriva.mjs`. diff --git a/verify-layer/fixturi-cloud/aws-ec2.json b/verify-layer/fixturi-cloud/aws-ec2.json new file mode 100644 index 0000000..bf3a08e --- /dev/null +++ b/verify-layer/fixturi-cloud/aws-ec2.json @@ -0,0 +1,154 @@ +{ + "Reservations": [ + { + "Groups": [], + "Instances": [ + { + "AmiLaunchIndex": 0, + "ImageId": "ami-0abcdef1234567890", + "InstanceId": "i-1234567890abcdef0", + "InstanceType": "t3.nano", + "KeyName": "my-key-pair", + "LaunchTime": "2022-11-15T10:48:59+00:00", + "Monitoring": { + "State": "disabled" + }, + "Placement": { + "AvailabilityZone": "us-east-2a", + "GroupName": "", + "Tenancy": "default" + }, + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157", + "ProductCodes": [], + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIpAddress": "34.253.223.13", + "State": { + "Code": 16, + "Name": "running" + }, + "StateTransitionReason": "", + "SubnetId": "subnet-04a636d18e83cfacb", + "VpcId": "vpc-1234567890abcdef0", + "Architecture": "x86_64", + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/xvda", + "Ebs": { + "AttachTime": "2022-11-15T10:49:00+00:00", + "DeleteOnTermination": true, + "Status": "attached", + "VolumeId": "vol-02e6ccdca7de29cf2" + } + } + ], + "ClientToken": "1234abcd-1234-abcd-1234-d46a8903e9bc", + "EbsOptimized": true, + "EnaSupport": true, + "Hypervisor": "xen", + "IamInstanceProfile": { + "Arn": "arn:aws:iam::111111111111:instance-profile/AmazonSSMRoleForInstancesQuickSetup", + "Id": "111111111111111111111" + }, + "NetworkInterfaces": [ + { + "Association": { + "IpOwnerId": "amazon", + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIp": "34.253.223.13" + }, + "Attachment": { + "AttachTime": "2022-11-15T10:48:59+00:00", + "AttachmentId": "eni-attach-1234567890abcdefg", + "DeleteOnTermination": true, + "DeviceIndex": 0, + "Status": "attached", + "NetworkCardIndex": 0 + }, + "Description": "", + "Groups": [ + { + "GroupName": "launch-wizard-146", + "GroupId": "sg-1234567890abcdefg" + } + ], + "Ipv6Addresses": [], + "MacAddress": "00:11:22:33:44:55", + "NetworkInterfaceId": "eni-1234567890abcdefg", + "OwnerId": "104024344472", + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157", + "PrivateIpAddresses": [ + { + "Association": { + "IpOwnerId": "amazon", + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIp": "34.253.223.13" + }, + "Primary": true, + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157" + } + ], + "SourceDestCheck": true, + "Status": "in-use", + "SubnetId": "subnet-1234567890abcdefg", + "VpcId": "vpc-1234567890abcdefg", + "InterfaceType": "interface" + } + ], + "RootDeviceName": "/dev/xvda", + "RootDeviceType": "ebs", + "SecurityGroups": [ + { + "GroupName": "launch-wizard-146", + "GroupId": "sg-1234567890abcdefg" + } + ], + "SourceDestCheck": true, + "Tags": [ + { + "Key": "Name", + "Value": "my-instance" + } + ], + "VirtualizationType": "hvm", + "CpuOptions": { + "CoreCount": 1, + "ThreadsPerCore": 2 + }, + "CapacityReservationSpecification": { + "CapacityReservationPreference": "open" + }, + "HibernationOptions": { + "Configured": false + }, + "MetadataOptions": { + "State": "applied", + "HttpTokens": "optional", + "HttpPutResponseHopLimit": 1, + "HttpEndpoint": "enabled", + "HttpProtocolIpv6": "disabled", + "InstanceMetadataTags": "enabled" + }, + "EnclaveOptions": { + "Enabled": false + }, + "PlatformDetails": "Linux/UNIX", + "UsageOperation": "RunInstances", + "UsageOperationUpdateTime": "2022-11-15T10:48:59+00:00", + "PrivateDnsNameOptions": { + "HostnameType": "ip-name", + "EnableResourceNameDnsARecord": true, + "EnableResourceNameDnsAAAARecord": false + }, + "MaintenanceOptions": { + "AutoRecovery": "default" + } + } + ], + "OwnerId": "111111111111", + "ReservationId": "r-1234567890abcdefg" + } + ] +} diff --git a/verify-layer/fixturi-cloud/aws-ec2.oprita.json b/verify-layer/fixturi-cloud/aws-ec2.oprita.json new file mode 100644 index 0000000..8ac7296 --- /dev/null +++ b/verify-layer/fixturi-cloud/aws-ec2.oprita.json @@ -0,0 +1,297 @@ +{ + "Reservations": [ + { + "Groups": [], + "Instances": [ + { + "AmiLaunchIndex": 0, + "ImageId": "ami-0abcdef1234567890", + "InstanceId": "i-1234567890abcdef0", + "InstanceType": "t3.nano", + "KeyName": "my-key-pair", + "LaunchTime": "2022-11-15T10:48:59+00:00", + "Monitoring": { + "State": "disabled" + }, + "Placement": { + "AvailabilityZone": "us-east-2a", + "GroupName": "", + "Tenancy": "default" + }, + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157", + "ProductCodes": [], + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIpAddress": "34.253.223.13", + "State": { + "Code": 16, + "Name": "running" + }, + "StateTransitionReason": "", + "SubnetId": "subnet-04a636d18e83cfacb", + "VpcId": "vpc-1234567890abcdef0", + "Architecture": "x86_64", + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/xvda", + "Ebs": { + "AttachTime": "2022-11-15T10:49:00+00:00", + "DeleteOnTermination": true, + "Status": "attached", + "VolumeId": "vol-02e6ccdca7de29cf2" + } + } + ], + "ClientToken": "1234abcd-1234-abcd-1234-d46a8903e9bc", + "EbsOptimized": true, + "EnaSupport": true, + "Hypervisor": "xen", + "IamInstanceProfile": { + "Arn": "arn:aws:iam::111111111111:instance-profile/AmazonSSMRoleForInstancesQuickSetup", + "Id": "111111111111111111111" + }, + "NetworkInterfaces": [ + { + "Association": { + "IpOwnerId": "amazon", + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIp": "34.253.223.13" + }, + "Attachment": { + "AttachTime": "2022-11-15T10:48:59+00:00", + "AttachmentId": "eni-attach-1234567890abcdefg", + "DeleteOnTermination": true, + "DeviceIndex": 0, + "Status": "attached", + "NetworkCardIndex": 0 + }, + "Description": "", + "Groups": [ + { + "GroupName": "launch-wizard-146", + "GroupId": "sg-1234567890abcdefg" + } + ], + "Ipv6Addresses": [], + "MacAddress": "00:11:22:33:44:55", + "NetworkInterfaceId": "eni-1234567890abcdefg", + "OwnerId": "104024344472", + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157", + "PrivateIpAddresses": [ + { + "Association": { + "IpOwnerId": "amazon", + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIp": "34.253.223.13" + }, + "Primary": true, + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157" + } + ], + "SourceDestCheck": true, + "Status": "in-use", + "SubnetId": "subnet-1234567890abcdefg", + "VpcId": "vpc-1234567890abcdefg", + "InterfaceType": "interface" + } + ], + "RootDeviceName": "/dev/xvda", + "RootDeviceType": "ebs", + "SecurityGroups": [ + { + "GroupName": "launch-wizard-146", + "GroupId": "sg-1234567890abcdefg" + } + ], + "SourceDestCheck": true, + "Tags": [ + { + "Key": "Name", + "Value": "my-instance" + } + ], + "VirtualizationType": "hvm", + "CpuOptions": { + "CoreCount": 1, + "ThreadsPerCore": 2 + }, + "CapacityReservationSpecification": { + "CapacityReservationPreference": "open" + }, + "HibernationOptions": { + "Configured": false + }, + "MetadataOptions": { + "State": "applied", + "HttpTokens": "optional", + "HttpPutResponseHopLimit": 1, + "HttpEndpoint": "enabled", + "HttpProtocolIpv6": "disabled", + "InstanceMetadataTags": "enabled" + }, + "EnclaveOptions": { + "Enabled": false + }, + "PlatformDetails": "Linux/UNIX", + "UsageOperation": "RunInstances", + "UsageOperationUpdateTime": "2022-11-15T10:48:59+00:00", + "PrivateDnsNameOptions": { + "HostnameType": "ip-name", + "EnableResourceNameDnsARecord": true, + "EnableResourceNameDnsAAAARecord": false + }, + "MaintenanceOptions": { + "AutoRecovery": "default" + } + }, + { + "AmiLaunchIndex": 0, + "ImageId": "ami-0abcdef1234567890", + "InstanceId": "i-0000000000oprita00", + "InstanceType": "t3.nano", + "KeyName": "my-key-pair", + "LaunchTime": "2022-11-15T10:48:59+00:00", + "Monitoring": { + "State": "disabled" + }, + "Placement": { + "AvailabilityZone": "us-east-2a", + "GroupName": "", + "Tenancy": "default" + }, + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157", + "ProductCodes": [], + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIpAddress": "34.253.223.13", + "State": { + "Code": 80, + "Name": "stopped" + }, + "StateTransitionReason": "User initiated (2026-10-17 20:00:00 GMT)", + "SubnetId": "subnet-04a636d18e83cfacb", + "VpcId": "vpc-1234567890abcdef0", + "Architecture": "x86_64", + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/xvda", + "Ebs": { + "AttachTime": "2022-11-15T10:49:00+00:00", + "DeleteOnTermination": true, + "Status": "attached", + "VolumeId": "vol-02e6ccdca7de29cf2" + } + } + ], + "ClientToken": "1234abcd-1234-abcd-1234-d46a8903e9bc", + "EbsOptimized": true, + "EnaSupport": true, + "Hypervisor": "xen", + "IamInstanceProfile": { + "Arn": "arn:aws:iam::111111111111:instance-profile/AmazonSSMRoleForInstancesQuickSetup", + "Id": "111111111111111111111" + }, + "NetworkInterfaces": [ + { + "Association": { + "IpOwnerId": "amazon", + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIp": "34.253.223.13" + }, + "Attachment": { + "AttachTime": "2022-11-15T10:48:59+00:00", + "AttachmentId": "eni-attach-1234567890abcdefg", + "DeleteOnTermination": true, + "DeviceIndex": 0, + "Status": "attached", + "NetworkCardIndex": 0 + }, + "Description": "", + "Groups": [ + { + "GroupName": "launch-wizard-146", + "GroupId": "sg-1234567890abcdefg" + } + ], + "Ipv6Addresses": [], + "MacAddress": "00:11:22:33:44:55", + "NetworkInterfaceId": "eni-1234567890abcdefg", + "OwnerId": "104024344472", + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157", + "PrivateIpAddresses": [ + { + "Association": { + "IpOwnerId": "amazon", + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIp": "34.253.223.13" + }, + "Primary": true, + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157" + } + ], + "SourceDestCheck": true, + "Status": "in-use", + "SubnetId": "subnet-1234567890abcdefg", + "VpcId": "vpc-1234567890abcdefg", + "InterfaceType": "interface" + } + ], + "RootDeviceName": "/dev/xvda", + "RootDeviceType": "ebs", + "SecurityGroups": [ + { + "GroupName": "launch-wizard-146", + "GroupId": "sg-1234567890abcdefg" + } + ], + "SourceDestCheck": true, + "Tags": [ + { + "Key": "Name", + "Value": "my-instance" + } + ], + "VirtualizationType": "hvm", + "CpuOptions": { + "CoreCount": 1, + "ThreadsPerCore": 2 + }, + "CapacityReservationSpecification": { + "CapacityReservationPreference": "open" + }, + "HibernationOptions": { + "Configured": false + }, + "MetadataOptions": { + "State": "applied", + "HttpTokens": "optional", + "HttpPutResponseHopLimit": 1, + "HttpEndpoint": "enabled", + "HttpProtocolIpv6": "disabled", + "InstanceMetadataTags": "enabled" + }, + "EnclaveOptions": { + "Enabled": false + }, + "PlatformDetails": "Linux/UNIX", + "UsageOperation": "RunInstances", + "UsageOperationUpdateTime": "2022-11-15T10:48:59+00:00", + "PrivateDnsNameOptions": { + "HostnameType": "ip-name", + "EnableResourceNameDnsARecord": true, + "EnableResourceNameDnsAAAARecord": false + }, + "MaintenanceOptions": { + "AutoRecovery": "default" + } + } + ], + "OwnerId": "111111111111", + "ReservationId": "r-1234567890abcdefg" + } + ] +} diff --git a/verify-layer/fixturi-cloud/aws-ec2.secrete.json b/verify-layer/fixturi-cloud/aws-ec2.secrete.json new file mode 100644 index 0000000..f43fa83 --- /dev/null +++ b/verify-layer/fixturi-cloud/aws-ec2.secrete.json @@ -0,0 +1,158 @@ +{ + "Reservations": [ + { + "Groups": [], + "Instances": [ + { + "AmiLaunchIndex": 0, + "ImageId": "ami-0abcdef1234567890", + "InstanceId": "i-1234567890abcdef0", + "InstanceType": "t3.nano", + "KeyName": "my-key-pair", + "LaunchTime": "2022-11-15T10:48:59+00:00", + "Monitoring": { + "State": "disabled" + }, + "Placement": { + "AvailabilityZone": "us-east-2a", + "GroupName": "", + "Tenancy": "default" + }, + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157", + "ProductCodes": [], + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIpAddress": "34.253.223.13", + "State": { + "Code": 16, + "Name": "running" + }, + "StateTransitionReason": "", + "SubnetId": "subnet-04a636d18e83cfacb", + "VpcId": "vpc-1234567890abcdef0", + "Architecture": "x86_64", + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/xvda", + "Ebs": { + "AttachTime": "2022-11-15T10:49:00+00:00", + "DeleteOnTermination": true, + "Status": "attached", + "VolumeId": "vol-02e6ccdca7de29cf2" + } + } + ], + "ClientToken": "1234abcd-1234-abcd-1234-d46a8903e9bc", + "EbsOptimized": true, + "EnaSupport": true, + "Hypervisor": "xen", + "IamInstanceProfile": { + "Arn": "arn:aws:iam::111111111111:instance-profile/AmazonSSMRoleForInstancesQuickSetup", + "Id": "111111111111111111111" + }, + "NetworkInterfaces": [ + { + "Association": { + "IpOwnerId": "amazon", + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIp": "34.253.223.13" + }, + "Attachment": { + "AttachTime": "2022-11-15T10:48:59+00:00", + "AttachmentId": "eni-attach-1234567890abcdefg", + "DeleteOnTermination": true, + "DeviceIndex": 0, + "Status": "attached", + "NetworkCardIndex": 0 + }, + "Description": "", + "Groups": [ + { + "GroupName": "launch-wizard-146", + "GroupId": "sg-1234567890abcdefg" + } + ], + "Ipv6Addresses": [], + "MacAddress": "00:11:22:33:44:55", + "NetworkInterfaceId": "eni-1234567890abcdefg", + "OwnerId": "104024344472", + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157", + "PrivateIpAddresses": [ + { + "Association": { + "IpOwnerId": "amazon", + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIp": "34.253.223.13" + }, + "Primary": true, + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157" + } + ], + "SourceDestCheck": true, + "Status": "in-use", + "SubnetId": "subnet-1234567890abcdefg", + "VpcId": "vpc-1234567890abcdefg", + "InterfaceType": "interface" + } + ], + "RootDeviceName": "/dev/xvda", + "RootDeviceType": "ebs", + "SecurityGroups": [ + { + "GroupName": "launch-wizard-146", + "GroupId": "sg-1234567890abcdefg" + } + ], + "SourceDestCheck": true, + "Tags": [ + { + "Key": "Name", + "Value": "my-instance" + }, + { + "Key": "DB_PASSWORD", + "Value": "AERE-SINTETIC-valoare-de-mediu-plantata-93c1" + } + ], + "VirtualizationType": "hvm", + "CpuOptions": { + "CoreCount": 1, + "ThreadsPerCore": 2 + }, + "CapacityReservationSpecification": { + "CapacityReservationPreference": "open" + }, + "HibernationOptions": { + "Configured": false + }, + "MetadataOptions": { + "State": "applied", + "HttpTokens": "optional", + "HttpPutResponseHopLimit": 1, + "HttpEndpoint": "enabled", + "HttpProtocolIpv6": "disabled", + "InstanceMetadataTags": "enabled" + }, + "EnclaveOptions": { + "Enabled": false + }, + "PlatformDetails": "Linux/UNIX", + "UsageOperation": "RunInstances", + "UsageOperationUpdateTime": "2022-11-15T10:48:59+00:00", + "PrivateDnsNameOptions": { + "HostnameType": "ip-name", + "EnableResourceNameDnsARecord": true, + "EnableResourceNameDnsAAAARecord": false + }, + "MaintenanceOptions": { + "AutoRecovery": "default" + } + } + ], + "OwnerId": "111111111111", + "ReservationId": "r-1234567890abcdefg" + } + ] +} diff --git a/verify-layer/fixturi-cloud/aws-ecs.definitii.json b/verify-layer/fixturi-cloud/aws-ecs.definitii.json new file mode 100644 index 0000000..697444b --- /dev/null +++ b/verify-layer/fixturi-cloud/aws-ecs.definitii.json @@ -0,0 +1,54 @@ +{ + "taskDefinition": { + "taskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:task-definition/console-sample-app-static2:1", + "containerDefinitions": [ + { + "name": "simple-app", + "image": "httpd:2.4", + "cpu": 10, + "memory": 300, + "essential": true, + "command": [ + "httpd-foreground" + ], + "environment": [ + { + "name": "HTTPD_PORT", + "value": "80" + } + ], + "secrets": [ + { + "name": "API_TOKEN", + "valueFrom": "arn:aws:secretsmanager:us-east-1:123456789012:secret:api-token-AbCdEf" + } + ], + "mountPoints": [ + { + "sourceVolume": "www", + "containerPath": "/usr/local/apache2/htdocs", + "readOnly": true + } + ], + "portMappings": [ + { + "containerPort": 80, + "hostPort": 80 + } + ] + } + ], + "family": "console-sample-app-static2", + "revision": 1, + "volumes": [], + "status": "ACTIVE", + "placementConstraints": [], + "compatibilities": [ + "EXTERNAL", + "EC2" + ], + "registeredAt": "2024-06-21T11:15:12.669000-05:00", + "registeredBy": "arn:aws:sts::012345678910:assumed-role/demo-role/jane-doe" + }, + "tags": [] +} diff --git a/verify-layer/fixturi-cloud/aws-ecs.json b/verify-layer/fixturi-cloud/aws-ecs.json new file mode 100644 index 0000000..30f14aa --- /dev/null +++ b/verify-layer/fixturi-cloud/aws-ecs.json @@ -0,0 +1,66 @@ +{ + "tasks": [ + { + "attachments": [], + "attributes": [ + { + "name": "ecs.cpu-architecture", + "value": "x86_64" + } + ], + "availabilityZone": "us-east-1b", + "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/MyCluster", + "connectivity": "CONNECTED", + "connectivityAt": "2021-08-11T12:21:26.681000-04:00", + "containerInstanceArn": "arn:aws:ecs:us-east-1:123456789012:container-instance/test/025c7e2c5e054a6790a29fc1fEXAMPLE", + "containers": [ + { + "containerArn": "arn:aws:ecs:us-east-1:123456789012:container/MyCluster/4d590253bb114126b7afa7b58eea9221/a992d1cc-ea46-474a-b6e8-24688EXAMPLE", + "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/MyCluster/4d590253bb114126b7afa7b58EXAMPLE", + "name": "simple-app", + "image": "httpd:2.4", + "runtimeId": "91251eed27db90006ad67b1a08187290869f216557717dd5c39b37c94EXAMPLE", + "lastStatus": "RUNNING", + "networkBindings": [ + { + "bindIP": "0.0.0.0", + "containerPort": 80, + "hostPort": 80, + "protocol": "tcp" + } + ], + "networkInterfaces": [], + "healthStatus": "UNKNOWN", + "cpu": "10", + "memory": "300" + } + ], + "cpu": "10", + "createdAt": "2021-08-11T12:21:26.681000-04:00", + "desiredStatus": "RUNNING", + "enableExecuteCommand": false, + "group": "service:testupdate", + "healthStatus": "UNKNOWN", + "lastStatus": "RUNNING", + "launchType": "EC2", + "memory": "300", + "overrides": { + "containerOverrides": [ + { + "name": "simple-app" + } + ], + "inferenceAcceleratorOverrides": [] + }, + "pullStartedAt": "2021-08-11T12:21:28.234000-04:00", + "pullStoppedAt": "2021-08-11T12:21:33.793000-04:00", + "startedAt": "2021-08-11T12:21:34.945000-04:00", + "startedBy": "ecs-svc/968695068243EXAMPLE", + "tags": [], + "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/MyCluster/4d590253bb114126b7afa7b58eea9221", + "taskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:task-definition/console-sample-app-static2:1", + "version": 2 + } + ], + "failures": [] +} diff --git a/verify-layer/fixturi-cloud/aws-ecs.oprita.json b/verify-layer/fixturi-cloud/aws-ecs.oprita.json new file mode 100644 index 0000000..33945a3 --- /dev/null +++ b/verify-layer/fixturi-cloud/aws-ecs.oprita.json @@ -0,0 +1,129 @@ +{ + "tasks": [ + { + "attachments": [], + "attributes": [ + { + "name": "ecs.cpu-architecture", + "value": "x86_64" + } + ], + "availabilityZone": "us-east-1b", + "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/MyCluster", + "connectivity": "CONNECTED", + "connectivityAt": "2021-08-11T12:21:26.681000-04:00", + "containerInstanceArn": "arn:aws:ecs:us-east-1:123456789012:container-instance/test/025c7e2c5e054a6790a29fc1fEXAMPLE", + "containers": [ + { + "containerArn": "arn:aws:ecs:us-east-1:123456789012:container/MyCluster/4d590253bb114126b7afa7b58eea9221/a992d1cc-ea46-474a-b6e8-24688EXAMPLE", + "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/MyCluster/4d590253bb114126b7afa7b58EXAMPLE", + "name": "simple-app", + "image": "httpd:2.4", + "runtimeId": "91251eed27db90006ad67b1a08187290869f216557717dd5c39b37c94EXAMPLE", + "lastStatus": "RUNNING", + "networkBindings": [ + { + "bindIP": "0.0.0.0", + "containerPort": 80, + "hostPort": 80, + "protocol": "tcp" + } + ], + "networkInterfaces": [], + "healthStatus": "UNKNOWN", + "cpu": "10", + "memory": "300" + } + ], + "cpu": "10", + "createdAt": "2021-08-11T12:21:26.681000-04:00", + "desiredStatus": "RUNNING", + "enableExecuteCommand": false, + "group": "service:testupdate", + "healthStatus": "UNKNOWN", + "lastStatus": "RUNNING", + "launchType": "EC2", + "memory": "300", + "overrides": { + "containerOverrides": [ + { + "name": "simple-app" + } + ], + "inferenceAcceleratorOverrides": [] + }, + "pullStartedAt": "2021-08-11T12:21:28.234000-04:00", + "pullStoppedAt": "2021-08-11T12:21:33.793000-04:00", + "startedAt": "2021-08-11T12:21:34.945000-04:00", + "startedBy": "ecs-svc/968695068243EXAMPLE", + "tags": [], + "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/MyCluster/4d590253bb114126b7afa7b58eea9221", + "taskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:task-definition/console-sample-app-static2:1", + "version": 2 + }, + { + "attachments": [], + "attributes": [ + { + "name": "ecs.cpu-architecture", + "value": "x86_64" + } + ], + "availabilityZone": "us-east-1b", + "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/MyCluster", + "connectivity": "CONNECTED", + "connectivityAt": "2021-08-11T12:21:26.681000-04:00", + "containerInstanceArn": "arn:aws:ecs:us-east-1:123456789012:container-instance/test/025c7e2c5e054a6790a29fc1fEXAMPLE", + "containers": [ + { + "containerArn": "arn:aws:ecs:us-east-1:123456789012:container/MyCluster/4d590253bb114126b7afa7b58eea9221/a992d1cc-ea46-474a-b6e8-24688EXAMPLE", + "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/MyCluster/4d590253bb114126b7afa7b58EXAMPLE", + "name": "simple-app", + "image": "httpd:2.4", + "runtimeId": "91251eed27db90006ad67b1a08187290869f216557717dd5c39b37c94EXAMPLE", + "lastStatus": "STOPPED", + "networkBindings": [ + { + "bindIP": "0.0.0.0", + "containerPort": 80, + "hostPort": 80, + "protocol": "tcp" + } + ], + "networkInterfaces": [], + "healthStatus": "UNKNOWN", + "cpu": "10", + "memory": "300", + "exitCode": 0 + } + ], + "cpu": "10", + "createdAt": "2021-08-11T12:21:26.681000-04:00", + "desiredStatus": "STOPPED", + "enableExecuteCommand": false, + "group": "service:testupdate", + "healthStatus": "UNKNOWN", + "lastStatus": "STOPPED", + "launchType": "EC2", + "memory": "300", + "overrides": { + "containerOverrides": [ + { + "name": "simple-app" + } + ], + "inferenceAcceleratorOverrides": [] + }, + "pullStartedAt": "2021-08-11T12:21:28.234000-04:00", + "pullStoppedAt": "2021-08-11T12:21:33.793000-04:00", + "startedAt": "2021-08-11T12:21:34.945000-04:00", + "startedBy": "ecs-svc/968695068243EXAMPLE", + "tags": [], + "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/MyCluster/0000000000000000000000oprita", + "taskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:task-definition/console-sample-app-static2:1", + "version": 2, + "stoppedReason": "Essential container in task exited" + } + ], + "failures": [] +} diff --git a/verify-layer/fixturi-cloud/aws-ecs.secrete.definitii.json b/verify-layer/fixturi-cloud/aws-ecs.secrete.definitii.json new file mode 100644 index 0000000..d5aece7 --- /dev/null +++ b/verify-layer/fixturi-cloud/aws-ecs.secrete.definitii.json @@ -0,0 +1,58 @@ +{ + "taskDefinition": { + "taskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:task-definition/console-sample-app-static2:1", + "containerDefinitions": [ + { + "name": "simple-app", + "image": "httpd:2.4", + "cpu": 10, + "memory": 300, + "essential": true, + "command": [ + "httpd-foreground" + ], + "environment": [ + { + "name": "HTTPD_PORT", + "value": "80" + }, + { + "name": "DB_PASSWORD", + "value": "AERE-SINTETIC-valoare-de-mediu-plantata-93c1" + } + ], + "secrets": [ + { + "name": "API_TOKEN", + "valueFrom": "arn:aws:secretsmanager:us-east-1:123456789012:secret:api-token-AbCdEf" + } + ], + "mountPoints": [ + { + "sourceVolume": "www", + "containerPath": "/usr/local/apache2/htdocs", + "readOnly": true + } + ], + "portMappings": [ + { + "containerPort": 80, + "hostPort": 80 + } + ] + } + ], + "family": "console-sample-app-static2", + "revision": 1, + "volumes": [], + "status": "ACTIVE", + "placementConstraints": [], + "compatibilities": [ + "EXTERNAL", + "EC2" + ], + "registeredAt": "2024-06-21T11:15:12.669000-05:00", + "registeredBy": "arn:aws:sts::012345678910:assumed-role/demo-role/jane-doe" + }, + "tags": [] +} diff --git a/verify-layer/fixturi-cloud/aws-ecs.secrete.json b/verify-layer/fixturi-cloud/aws-ecs.secrete.json new file mode 100644 index 0000000..0b693d7 --- /dev/null +++ b/verify-layer/fixturi-cloud/aws-ecs.secrete.json @@ -0,0 +1,72 @@ +{ + "tasks": [ + { + "attachments": [], + "attributes": [ + { + "name": "ecs.cpu-architecture", + "value": "x86_64" + } + ], + "availabilityZone": "us-east-1b", + "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/MyCluster", + "connectivity": "CONNECTED", + "connectivityAt": "2021-08-11T12:21:26.681000-04:00", + "containerInstanceArn": "arn:aws:ecs:us-east-1:123456789012:container-instance/test/025c7e2c5e054a6790a29fc1fEXAMPLE", + "containers": [ + { + "containerArn": "arn:aws:ecs:us-east-1:123456789012:container/MyCluster/4d590253bb114126b7afa7b58eea9221/a992d1cc-ea46-474a-b6e8-24688EXAMPLE", + "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/MyCluster/4d590253bb114126b7afa7b58EXAMPLE", + "name": "simple-app", + "image": "httpd:2.4", + "runtimeId": "91251eed27db90006ad67b1a08187290869f216557717dd5c39b37c94EXAMPLE", + "lastStatus": "RUNNING", + "networkBindings": [ + { + "bindIP": "0.0.0.0", + "containerPort": 80, + "hostPort": 80, + "protocol": "tcp" + } + ], + "networkInterfaces": [], + "healthStatus": "UNKNOWN", + "cpu": "10", + "memory": "300" + } + ], + "cpu": "10", + "createdAt": "2021-08-11T12:21:26.681000-04:00", + "desiredStatus": "RUNNING", + "enableExecuteCommand": false, + "group": "service:testupdate", + "healthStatus": "UNKNOWN", + "lastStatus": "RUNNING", + "launchType": "EC2", + "memory": "300", + "overrides": { + "containerOverrides": [ + { + "name": "simple-app", + "environment": [ + { + "name": "OVERRIDE_TOKEN", + "value": "AERE-SINTETIC-valoare-de-mediu-plantata-93c1" + } + ] + } + ], + "inferenceAcceleratorOverrides": [] + }, + "pullStartedAt": "2021-08-11T12:21:28.234000-04:00", + "pullStoppedAt": "2021-08-11T12:21:33.793000-04:00", + "startedAt": "2021-08-11T12:21:34.945000-04:00", + "startedBy": "ecs-svc/968695068243EXAMPLE", + "tags": [], + "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/MyCluster/4d590253bb114126b7afa7b58eea9221", + "taskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:task-definition/console-sample-app-static2:1", + "version": 2 + } + ], + "failures": [] +} diff --git a/verify-layer/fixturi-cloud/aws-lambda.json b/verify-layer/fixturi-cloud/aws-lambda.json new file mode 100644 index 0000000..9b50cbb --- /dev/null +++ b/verify-layer/fixturi-cloud/aws-lambda.json @@ -0,0 +1,78 @@ +{ + "Functions": [ + { + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "CodeSha256": "dBG9m8SGdmlEjw/JYXlhhvCrAv5TxvXsbL/RMr0fT/I=", + "FunctionName": "helloworld", + "MemorySize": 128, + "RevisionId": "1718e831-badf-4253-9518-d0644210af7b", + "CodeSize": 294, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:helloworld", + "Handler": "helloworld.handler", + "Role": "arn:aws:iam::123456789012:role/service-role/MyTestFunction-role-zgur6bf4", + "Timeout": 3, + "LastModified": "2025-09-23T18:32:33.857+0000", + "Runtime": "nodejs22.x", + "Description": "" + }, + { + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "CodeSha256": "sU0cJ2/hOZevwV/lTxCuQqK3gDZP3i8gUoqUUVRmY6E=", + "FunctionName": "my-function", + "VpcConfig": { + "SubnetIds": [], + "VpcId": "", + "SecurityGroupIds": [] + }, + "MemorySize": 256, + "RevisionId": "93017fc9-59cb-41dc-901b-4845ce4bf668", + "CodeSize": 266, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "Handler": "index.handler", + "Role": "arn:aws:iam::123456789012:role/service-role/helloWorldPython-role-uy3l9qyq", + "Timeout": 3, + "LastModified": "2025-10-01T16:47:28.490+0000", + "Runtime": "nodejs22.x", + "Description": "" + }, + { + "Layers": [ + { + "CodeSize": 41784542, + "Arn": "arn:aws:lambda:us-west-2:420165488524:layer:AWSLambda-Python37-SciPy1x:2" + }, + { + "CodeSize": 4121, + "Arn": "arn:aws:lambda:us-west-2:123456789012:layer:pythonLayer:1" + } + ], + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "CodeSha256": "ZQukCqxtkqFgyF2cU41Avj99TKQ/hNihPtDtRcc08mI=", + "FunctionName": "my-python-function", + "VpcConfig": { + "SubnetIds": [], + "VpcId": "", + "SecurityGroupIds": [] + }, + "MemorySize": 128, + "RevisionId": "80b4eabc-acf7-4ea8-919a-e874c213707d", + "CodeSize": 299, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-python-function", + "Handler": "lambda_function.lambda_handler", + "Role": "arn:aws:iam::123456789012:role/service-role/my-python-function-role-z5g7dr6n", + "Timeout": 3, + "LastModified": "2025-10-01T19:40:41.643+0000", + "Runtime": "python3.11", + "Description": "" + } + ] +} diff --git a/verify-layer/fixturi-cloud/aws-lambda.oprita.json b/verify-layer/fixturi-cloud/aws-lambda.oprita.json new file mode 100644 index 0000000..a08fd89 --- /dev/null +++ b/verify-layer/fixturi-cloud/aws-lambda.oprita.json @@ -0,0 +1,98 @@ +{ + "Functions": [ + { + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "CodeSha256": "dBG9m8SGdmlEjw/JYXlhhvCrAv5TxvXsbL/RMr0fT/I=", + "FunctionName": "helloworld", + "MemorySize": 128, + "RevisionId": "1718e831-badf-4253-9518-d0644210af7b", + "CodeSize": 294, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:helloworld", + "Handler": "helloworld.handler", + "Role": "arn:aws:iam::123456789012:role/service-role/MyTestFunction-role-zgur6bf4", + "Timeout": 3, + "LastModified": "2025-09-23T18:32:33.857+0000", + "Runtime": "nodejs22.x", + "Description": "" + }, + { + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "CodeSha256": "sU0cJ2/hOZevwV/lTxCuQqK3gDZP3i8gUoqUUVRmY6E=", + "FunctionName": "my-function", + "VpcConfig": { + "SubnetIds": [], + "VpcId": "", + "SecurityGroupIds": [] + }, + "MemorySize": 256, + "RevisionId": "93017fc9-59cb-41dc-901b-4845ce4bf668", + "CodeSize": 266, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "Handler": "index.handler", + "Role": "arn:aws:iam::123456789012:role/service-role/helloWorldPython-role-uy3l9qyq", + "Timeout": 3, + "LastModified": "2025-10-01T16:47:28.490+0000", + "Runtime": "nodejs22.x", + "Description": "" + }, + { + "Layers": [ + { + "CodeSize": 41784542, + "Arn": "arn:aws:lambda:us-west-2:420165488524:layer:AWSLambda-Python37-SciPy1x:2" + }, + { + "CodeSize": 4121, + "Arn": "arn:aws:lambda:us-west-2:123456789012:layer:pythonLayer:1" + } + ], + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "CodeSha256": "ZQukCqxtkqFgyF2cU41Avj99TKQ/hNihPtDtRcc08mI=", + "FunctionName": "my-python-function", + "VpcConfig": { + "SubnetIds": [], + "VpcId": "", + "SecurityGroupIds": [] + }, + "MemorySize": 128, + "RevisionId": "80b4eabc-acf7-4ea8-919a-e874c213707d", + "CodeSize": 299, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-python-function", + "Handler": "lambda_function.lambda_handler", + "Role": "arn:aws:iam::123456789012:role/service-role/my-python-function-role-z5g7dr6n", + "Timeout": 3, + "LastModified": "2025-10-01T19:40:41.643+0000", + "Runtime": "python3.11", + "Description": "" + }, + { + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "CodeSha256": "dBG9m8SGdmlEjw/JYXlhhvCrAv5TxvXsbL/RMr0fT/I=", + "FunctionName": "inactive-function", + "MemorySize": 128, + "RevisionId": "1718e831-badf-4253-9518-d0644210af7b", + "CodeSize": 294, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:inactive-function", + "Handler": "helloworld.handler", + "Role": "arn:aws:iam::123456789012:role/service-role/MyTestFunction-role-zgur6bf4", + "Timeout": 3, + "LastModified": "2025-09-23T18:32:33.857+0000", + "Runtime": "nodejs22.x", + "Description": "", + "State": "Inactive", + "StateReason": "Function is inactive" + } + ] +} diff --git a/verify-layer/fixturi-cloud/aws-lambda.secrete.json b/verify-layer/fixturi-cloud/aws-lambda.secrete.json new file mode 100644 index 0000000..8d6eef8 --- /dev/null +++ b/verify-layer/fixturi-cloud/aws-lambda.secrete.json @@ -0,0 +1,84 @@ +{ + "Functions": [ + { + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "CodeSha256": "dBG9m8SGdmlEjw/JYXlhhvCrAv5TxvXsbL/RMr0fT/I=", + "FunctionName": "helloworld", + "MemorySize": 128, + "RevisionId": "1718e831-badf-4253-9518-d0644210af7b", + "CodeSize": 294, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:helloworld", + "Handler": "helloworld.handler", + "Role": "arn:aws:iam::123456789012:role/service-role/MyTestFunction-role-zgur6bf4", + "Timeout": 3, + "LastModified": "2025-09-23T18:32:33.857+0000", + "Runtime": "nodejs22.x", + "Description": "", + "Environment": { + "Variables": { + "DB_PASSWORD": "AERE-SINTETIC-valoare-de-mediu-plantata-93c1", + "LOG_LEVEL": "info" + } + } + }, + { + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "CodeSha256": "sU0cJ2/hOZevwV/lTxCuQqK3gDZP3i8gUoqUUVRmY6E=", + "FunctionName": "my-function", + "VpcConfig": { + "SubnetIds": [], + "VpcId": "", + "SecurityGroupIds": [] + }, + "MemorySize": 256, + "RevisionId": "93017fc9-59cb-41dc-901b-4845ce4bf668", + "CodeSize": 266, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "Handler": "index.handler", + "Role": "arn:aws:iam::123456789012:role/service-role/helloWorldPython-role-uy3l9qyq", + "Timeout": 3, + "LastModified": "2025-10-01T16:47:28.490+0000", + "Runtime": "nodejs22.x", + "Description": "" + }, + { + "Layers": [ + { + "CodeSize": 41784542, + "Arn": "arn:aws:lambda:us-west-2:420165488524:layer:AWSLambda-Python37-SciPy1x:2" + }, + { + "CodeSize": 4121, + "Arn": "arn:aws:lambda:us-west-2:123456789012:layer:pythonLayer:1" + } + ], + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "CodeSha256": "ZQukCqxtkqFgyF2cU41Avj99TKQ/hNihPtDtRcc08mI=", + "FunctionName": "my-python-function", + "VpcConfig": { + "SubnetIds": [], + "VpcId": "", + "SecurityGroupIds": [] + }, + "MemorySize": 128, + "RevisionId": "80b4eabc-acf7-4ea8-919a-e874c213707d", + "CodeSize": 299, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-python-function", + "Handler": "lambda_function.lambda_handler", + "Role": "arn:aws:iam::123456789012:role/service-role/my-python-function-role-z5g7dr6n", + "Timeout": 3, + "LastModified": "2025-10-01T19:40:41.643+0000", + "Runtime": "python3.11", + "Description": "" + } + ] +} diff --git a/verify-layer/fixturi-cloud/azure-container.fara-stare.json b/verify-layer/fixturi-cloud/azure-container.fara-stare.json new file mode 100644 index 0000000..e062a3a --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-container.fara-stare.json @@ -0,0 +1,66 @@ +[ + { + "name": "demo1", + "type": "Microsoft.ContainerInstance/containerGroups", + "id": "/subscriptions/subid/resourceGroups/demo/providers/Microsoft.ContainerInstance/containerGroups/demo1", + "location": "WestUs", + "zones": [ + "1" + ], + "containers": [ + { + "name": "demo1", + "command": [], + "environmentVariables": [], + "image": "nginx", + "ports": [ + { + "port": 80 + } + ], + "resources": { + "requests": { + "cpu": 1, + "memoryInGB": 1.5 + } + }, + "volumeMounts": [ + { + "name": "volume1", + "mountPath": "/mnt/volume1", + "readOnly": false + } + ] + } + ], + "imageRegistryCredentials": [ + { + "server": "azcloudconsoleregistry.azurecr.io", + "username": "azcloudconsoleregistry" + } + ], + "ipAddress": { + "type": "Public", + "ip": "10.0.0.1", + "ports": [ + { + "port": 80, + "protocol": "TCP" + } + ] + }, + "osType": "Linux", + "provisioningState": "Succeeded", + "volumes": [ + { + "name": "volume1", + "azureFile": { + "readOnly": false, + "shareName": "share1", + "storageAccountName": "storage1" + } + } + ], + "resourceGroup": "demo" + } +] diff --git a/verify-layer/fixturi-cloud/azure-container.json b/verify-layer/fixturi-cloud/azure-container.json new file mode 100644 index 0000000..a75a05d --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-container.json @@ -0,0 +1,79 @@ +[ + { + "name": "demo1", + "type": "Microsoft.ContainerInstance/containerGroups", + "id": "/subscriptions/subid/resourceGroups/demo/providers/Microsoft.ContainerInstance/containerGroups/demo1", + "location": "WestUs", + "zones": [ + "1" + ], + "containers": [ + { + "name": "demo1", + "command": [], + "environmentVariables": [], + "image": "nginx", + "ports": [ + { + "port": 80 + } + ], + "resources": { + "requests": { + "cpu": 1, + "memoryInGB": 1.5 + } + }, + "volumeMounts": [ + { + "name": "volume1", + "mountPath": "/mnt/volume1", + "readOnly": false + } + ], + "instanceView": { + "currentState": { + "state": "Running", + "startTime": "2026-10-18T06:00:00Z", + "detailStatus": "" + }, + "events": [], + "restartCount": 0 + } + } + ], + "imageRegistryCredentials": [ + { + "server": "azcloudconsoleregistry.azurecr.io", + "username": "azcloudconsoleregistry" + } + ], + "ipAddress": { + "type": "Public", + "ip": "10.0.0.1", + "ports": [ + { + "port": 80, + "protocol": "TCP" + } + ] + }, + "osType": "Linux", + "provisioningState": "Succeeded", + "volumes": [ + { + "name": "volume1", + "azureFile": { + "readOnly": false, + "shareName": "share1", + "storageAccountName": "storage1" + } + } + ], + "resourceGroup": "demo", + "instanceView": { + "state": "Running", + "events": [] + } + } +] diff --git a/verify-layer/fixturi-cloud/azure-container.oprita.json b/verify-layer/fixturi-cloud/azure-container.oprita.json new file mode 100644 index 0000000..288e4e9 --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-container.oprita.json @@ -0,0 +1,158 @@ +[ + { + "name": "demo1", + "type": "Microsoft.ContainerInstance/containerGroups", + "id": "/subscriptions/subid/resourceGroups/demo/providers/Microsoft.ContainerInstance/containerGroups/demo1", + "location": "WestUs", + "zones": [ + "1" + ], + "containers": [ + { + "name": "demo1", + "command": [], + "environmentVariables": [], + "image": "nginx", + "ports": [ + { + "port": 80 + } + ], + "resources": { + "requests": { + "cpu": 1, + "memoryInGB": 1.5 + } + }, + "volumeMounts": [ + { + "name": "volume1", + "mountPath": "/mnt/volume1", + "readOnly": false + } + ], + "instanceView": { + "currentState": { + "state": "Running", + "startTime": "2026-10-18T06:00:00Z", + "detailStatus": "" + }, + "events": [], + "restartCount": 0 + } + } + ], + "imageRegistryCredentials": [ + { + "server": "azcloudconsoleregistry.azurecr.io", + "username": "azcloudconsoleregistry" + } + ], + "ipAddress": { + "type": "Public", + "ip": "10.0.0.1", + "ports": [ + { + "port": 80, + "protocol": "TCP" + } + ] + }, + "osType": "Linux", + "provisioningState": "Succeeded", + "volumes": [ + { + "name": "volume1", + "azureFile": { + "readOnly": false, + "shareName": "share1", + "storageAccountName": "storage1" + } + } + ], + "resourceGroup": "demo", + "instanceView": { + "state": "Running", + "events": [] + } + }, + { + "name": "demo2", + "type": "Microsoft.ContainerInstance/containerGroups", + "id": "/subscriptions/subid/resourceGroups/demo/providers/Microsoft.ContainerInstance/containerGroups/demo2", + "location": "WestUs", + "zones": [ + "1" + ], + "containers": [ + { + "name": "demo1", + "command": [], + "environmentVariables": [], + "image": "nginx", + "ports": [ + { + "port": 80 + } + ], + "resources": { + "requests": { + "cpu": 1, + "memoryInGB": 1.5 + } + }, + "volumeMounts": [ + { + "name": "volume1", + "mountPath": "/mnt/volume1", + "readOnly": false + } + ], + "instanceView": { + "currentState": { + "state": "Terminated", + "startTime": "2026-10-18T06:00:00Z", + "detailStatus": "", + "exitCode": 0, + "finishTime": "2026-10-18T06:05:00Z" + }, + "events": [], + "restartCount": 0 + } + } + ], + "imageRegistryCredentials": [ + { + "server": "azcloudconsoleregistry.azurecr.io", + "username": "azcloudconsoleregistry" + } + ], + "ipAddress": { + "type": "Public", + "ip": "10.0.0.1", + "ports": [ + { + "port": 80, + "protocol": "TCP" + } + ] + }, + "osType": "Linux", + "provisioningState": "Succeeded", + "volumes": [ + { + "name": "volume1", + "azureFile": { + "readOnly": false, + "shareName": "share1", + "storageAccountName": "storage1" + } + } + ], + "resourceGroup": "demo", + "instanceView": { + "state": "Stopped", + "events": [] + } + } +] diff --git a/verify-layer/fixturi-cloud/azure-container.secrete.json b/verify-layer/fixturi-cloud/azure-container.secrete.json new file mode 100644 index 0000000..ad5ba7d --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-container.secrete.json @@ -0,0 +1,88 @@ +[ + { + "name": "demo1", + "type": "Microsoft.ContainerInstance/containerGroups", + "id": "/subscriptions/subid/resourceGroups/demo/providers/Microsoft.ContainerInstance/containerGroups/demo1", + "location": "WestUs", + "zones": [ + "1" + ], + "containers": [ + { + "name": "demo1", + "command": [], + "environmentVariables": [ + { + "name": "DB_PASSWORD", + "value": "AERE-SINTETIC-valoare-de-mediu-plantata-93c1" + }, + { + "name": "API_KEY", + "secureValue": "AERE-SINTETIC-valoare-de-mediu-plantata-93c1" + } + ], + "image": "nginx", + "ports": [ + { + "port": 80 + } + ], + "resources": { + "requests": { + "cpu": 1, + "memoryInGB": 1.5 + } + }, + "volumeMounts": [ + { + "name": "volume1", + "mountPath": "/mnt/volume1", + "readOnly": false + } + ], + "instanceView": { + "currentState": { + "state": "Running", + "startTime": "2026-10-18T06:00:00Z", + "detailStatus": "" + }, + "events": [], + "restartCount": 0 + } + } + ], + "imageRegistryCredentials": [ + { + "server": "azcloudconsoleregistry.azurecr.io", + "username": "azcloudconsoleregistry" + } + ], + "ipAddress": { + "type": "Public", + "ip": "10.0.0.1", + "ports": [ + { + "port": 80, + "protocol": "TCP" + } + ] + }, + "osType": "Linux", + "provisioningState": "Succeeded", + "volumes": [ + { + "name": "volume1", + "azureFile": { + "readOnly": false, + "shareName": "share1", + "storageAccountName": "storage1" + } + } + ], + "resourceGroup": "demo", + "instanceView": { + "state": "Running", + "events": [] + } + } +] diff --git a/verify-layer/fixturi-cloud/azure-containerapp.json b/verify-layer/fixturi-cloud/azure-containerapp.json new file mode 100644 index 0000000..4a33e00 --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-containerapp.json @@ -0,0 +1,132 @@ +[ + { + "name": "testcontainerApp0", + "type": "Microsoft.App/containerApps", + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/containerApps/testcontainerApp0", + "location": "East US", + "properties": { + "configuration": { + "dapr": { + "appHealth": { + "path": "/health", + "enabled": true, + "probeIntervalSeconds": 3, + "probeTimeoutMilliseconds": 1000, + "threshold": 3 + }, + "appPort": 3000, + "appProtocol": "http", + "enableApiLogging": true, + "enabled": true, + "httpMaxRequestSize": 10, + "httpReadBufferSize": 30, + "logLevel": "debug" + }, + "ingress": { + "customDomains": [ + { + "name": "www.my-name.com", + "bindingType": "SniEnabled", + "certificateId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube/certificates/my-certificate-for-my-name-dot-com" + }, + { + "name": "www.my--other-name.com", + "bindingType": "SniEnabled", + "certificateId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube/certificates/my-certificate-for-my-other-name-dot-com" + } + ], + "external": true, + "fqdn": "testcontainerApp0.demokube-t24clv0g.eastus.containerApps.k4apps.io", + "ipSecurityRestrictions": [ + { + "name": "Allow work IP A subnet", + "description": "Allowing all IP's within the subnet below to access containerapp", + "action": "Allow", + "ipAddressRange": "192.168.1.1/32" + }, + { + "name": "Allow work IP B subnet", + "description": "Allowing all IP's within the subnet below to access containerapp", + "action": "Allow", + "ipAddressRange": "192.168.1.1/8" + } + ], + "stickySessions": { + "affinity": "sticky" + }, + "targetPort": 3000, + "traffic": [ + { + "revisionName": "testcontainerApp0-ab1234" + }, + { + "label": "staging", + "revisionName": "testcontainerApp0-ab4321" + } + ], + "transport": "auto" + }, + "maxInactiveRevisions": 10, + "runtime": { + "java": { + "enableMetrics": true + } + }, + "service": { + "type": "redis" + } + }, + "eventStreamEndpoint": "testEndpoint", + "latestReadyRevisionName": "testcontainerApp0-pjxhsye", + "latestRevisionFqdn": "testcontainerApp0-pjxhsye.demokube-t24clv0g.eastus.containerApps.k4apps.io", + "managedEnvironmentId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube", + "provisioningState": "Succeeded", + "runningStatus": "Running", + "template": { + "containers": [ + { + "name": "testcontainerApp0", + "image": "repo/testcontainerApp0:v4", + "resources": { + "cpu": 0.2, + "memory": "100Mi" + } + } + ], + "initContainers": [ + { + "name": "testinitcontainerApp0", + "image": "repo/testcontainerApp0:v4", + "resources": { + "cpu": 0.2, + "memory": "100Mi" + } + } + ], + "scale": { + "cooldownPeriod": 350, + "maxReplicas": 5, + "minReplicas": 1, + "pollingInterval": 35, + "rules": [ + { + "name": "httpscalingrule", + "http": { + "metadata": { + "concurrentRequests": "50" + } + } + } + ] + }, + "serviceBinds": [ + { + "name": "service", + "serviceId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/containerApps/service" + } + ] + }, + "workloadProfileName": "My-GP-01" + } + } +] diff --git a/verify-layer/fixturi-cloud/azure-containerapp.oprita.json b/verify-layer/fixturi-cloud/azure-containerapp.oprita.json new file mode 100644 index 0000000..ae928ab --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-containerapp.oprita.json @@ -0,0 +1,262 @@ +[ + { + "name": "testcontainerApp0", + "type": "Microsoft.App/containerApps", + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/containerApps/testcontainerApp0", + "location": "East US", + "properties": { + "configuration": { + "dapr": { + "appHealth": { + "path": "/health", + "enabled": true, + "probeIntervalSeconds": 3, + "probeTimeoutMilliseconds": 1000, + "threshold": 3 + }, + "appPort": 3000, + "appProtocol": "http", + "enableApiLogging": true, + "enabled": true, + "httpMaxRequestSize": 10, + "httpReadBufferSize": 30, + "logLevel": "debug" + }, + "ingress": { + "customDomains": [ + { + "name": "www.my-name.com", + "bindingType": "SniEnabled", + "certificateId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube/certificates/my-certificate-for-my-name-dot-com" + }, + { + "name": "www.my--other-name.com", + "bindingType": "SniEnabled", + "certificateId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube/certificates/my-certificate-for-my-other-name-dot-com" + } + ], + "external": true, + "fqdn": "testcontainerApp0.demokube-t24clv0g.eastus.containerApps.k4apps.io", + "ipSecurityRestrictions": [ + { + "name": "Allow work IP A subnet", + "description": "Allowing all IP's within the subnet below to access containerapp", + "action": "Allow", + "ipAddressRange": "192.168.1.1/32" + }, + { + "name": "Allow work IP B subnet", + "description": "Allowing all IP's within the subnet below to access containerapp", + "action": "Allow", + "ipAddressRange": "192.168.1.1/8" + } + ], + "stickySessions": { + "affinity": "sticky" + }, + "targetPort": 3000, + "traffic": [ + { + "revisionName": "testcontainerApp0-ab1234" + }, + { + "label": "staging", + "revisionName": "testcontainerApp0-ab4321" + } + ], + "transport": "auto" + }, + "maxInactiveRevisions": 10, + "runtime": { + "java": { + "enableMetrics": true + } + }, + "service": { + "type": "redis" + } + }, + "eventStreamEndpoint": "testEndpoint", + "latestReadyRevisionName": "testcontainerApp0-pjxhsye", + "latestRevisionFqdn": "testcontainerApp0-pjxhsye.demokube-t24clv0g.eastus.containerApps.k4apps.io", + "managedEnvironmentId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube", + "provisioningState": "Succeeded", + "runningStatus": "Running", + "template": { + "containers": [ + { + "name": "testcontainerApp0", + "image": "repo/testcontainerApp0:v4", + "resources": { + "cpu": 0.2, + "memory": "100Mi" + } + } + ], + "initContainers": [ + { + "name": "testinitcontainerApp0", + "image": "repo/testcontainerApp0:v4", + "resources": { + "cpu": 0.2, + "memory": "100Mi" + } + } + ], + "scale": { + "cooldownPeriod": 350, + "maxReplicas": 5, + "minReplicas": 1, + "pollingInterval": 35, + "rules": [ + { + "name": "httpscalingrule", + "http": { + "metadata": { + "concurrentRequests": "50" + } + } + } + ] + }, + "serviceBinds": [ + { + "name": "service", + "serviceId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/containerApps/service" + } + ] + }, + "workloadProfileName": "My-GP-01" + } + }, + { + "name": "testcontainerApp1", + "type": "Microsoft.App/containerApps", + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/containerApps/testcontainerApp1", + "location": "East US", + "properties": { + "configuration": { + "dapr": { + "appHealth": { + "path": "/health", + "enabled": true, + "probeIntervalSeconds": 3, + "probeTimeoutMilliseconds": 1000, + "threshold": 3 + }, + "appPort": 3000, + "appProtocol": "http", + "enableApiLogging": true, + "enabled": true, + "httpMaxRequestSize": 10, + "httpReadBufferSize": 30, + "logLevel": "debug" + }, + "ingress": { + "customDomains": [ + { + "name": "www.my-name.com", + "bindingType": "SniEnabled", + "certificateId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube/certificates/my-certificate-for-my-name-dot-com" + }, + { + "name": "www.my--other-name.com", + "bindingType": "SniEnabled", + "certificateId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube/certificates/my-certificate-for-my-other-name-dot-com" + } + ], + "external": true, + "fqdn": "testcontainerApp0.demokube-t24clv0g.eastus.containerApps.k4apps.io", + "ipSecurityRestrictions": [ + { + "name": "Allow work IP A subnet", + "description": "Allowing all IP's within the subnet below to access containerapp", + "action": "Allow", + "ipAddressRange": "192.168.1.1/32" + }, + { + "name": "Allow work IP B subnet", + "description": "Allowing all IP's within the subnet below to access containerapp", + "action": "Allow", + "ipAddressRange": "192.168.1.1/8" + } + ], + "stickySessions": { + "affinity": "sticky" + }, + "targetPort": 3000, + "traffic": [ + { + "revisionName": "testcontainerApp0-ab1234" + }, + { + "label": "staging", + "revisionName": "testcontainerApp0-ab4321" + } + ], + "transport": "auto" + }, + "maxInactiveRevisions": 10, + "runtime": { + "java": { + "enableMetrics": true + } + }, + "service": { + "type": "redis" + } + }, + "eventStreamEndpoint": "testEndpoint", + "latestReadyRevisionName": "testcontainerApp0-pjxhsye", + "latestRevisionFqdn": "testcontainerApp0-pjxhsye.demokube-t24clv0g.eastus.containerApps.k4apps.io", + "managedEnvironmentId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube", + "provisioningState": "Succeeded", + "runningStatus": "Stopped", + "template": { + "containers": [ + { + "name": "testcontainerApp0", + "image": "repo/testcontainerApp0:v4", + "resources": { + "cpu": 0.2, + "memory": "100Mi" + } + } + ], + "initContainers": [ + { + "name": "testinitcontainerApp0", + "image": "repo/testcontainerApp0:v4", + "resources": { + "cpu": 0.2, + "memory": "100Mi" + } + } + ], + "scale": { + "cooldownPeriod": 350, + "maxReplicas": 5, + "minReplicas": 1, + "pollingInterval": 35, + "rules": [ + { + "name": "httpscalingrule", + "http": { + "metadata": { + "concurrentRequests": "50" + } + } + } + ] + }, + "serviceBinds": [ + { + "name": "service", + "serviceId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/containerApps/service" + } + ] + }, + "workloadProfileName": "My-GP-01" + } + } +] diff --git a/verify-layer/fixturi-cloud/azure-containerapp.secrete.json b/verify-layer/fixturi-cloud/azure-containerapp.secrete.json new file mode 100644 index 0000000..adef040 --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-containerapp.secrete.json @@ -0,0 +1,148 @@ +[ + { + "name": "testcontainerApp0", + "type": "Microsoft.App/containerApps", + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/containerApps/testcontainerApp0", + "location": "East US", + "properties": { + "configuration": { + "dapr": { + "appHealth": { + "path": "/health", + "enabled": true, + "probeIntervalSeconds": 3, + "probeTimeoutMilliseconds": 1000, + "threshold": 3 + }, + "appPort": 3000, + "appProtocol": "http", + "enableApiLogging": true, + "enabled": true, + "httpMaxRequestSize": 10, + "httpReadBufferSize": 30, + "logLevel": "debug" + }, + "ingress": { + "customDomains": [ + { + "name": "www.my-name.com", + "bindingType": "SniEnabled", + "certificateId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube/certificates/my-certificate-for-my-name-dot-com" + }, + { + "name": "www.my--other-name.com", + "bindingType": "SniEnabled", + "certificateId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube/certificates/my-certificate-for-my-other-name-dot-com" + } + ], + "external": true, + "fqdn": "testcontainerApp0.demokube-t24clv0g.eastus.containerApps.k4apps.io", + "ipSecurityRestrictions": [ + { + "name": "Allow work IP A subnet", + "description": "Allowing all IP's within the subnet below to access containerapp", + "action": "Allow", + "ipAddressRange": "192.168.1.1/32" + }, + { + "name": "Allow work IP B subnet", + "description": "Allowing all IP's within the subnet below to access containerapp", + "action": "Allow", + "ipAddressRange": "192.168.1.1/8" + } + ], + "stickySessions": { + "affinity": "sticky" + }, + "targetPort": 3000, + "traffic": [ + { + "revisionName": "testcontainerApp0-ab1234" + }, + { + "label": "staging", + "revisionName": "testcontainerApp0-ab4321" + } + ], + "transport": "auto" + }, + "maxInactiveRevisions": 10, + "runtime": { + "java": { + "enableMetrics": true + } + }, + "service": { + "type": "redis" + }, + "secrets": [ + { + "name": "api-key", + "value": "AERE-SINTETIC-valoare-de-mediu-plantata-93c1" + } + ] + }, + "eventStreamEndpoint": "testEndpoint", + "latestReadyRevisionName": "testcontainerApp0-pjxhsye", + "latestRevisionFqdn": "testcontainerApp0-pjxhsye.demokube-t24clv0g.eastus.containerApps.k4apps.io", + "managedEnvironmentId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube", + "provisioningState": "Succeeded", + "runningStatus": "Running", + "template": { + "containers": [ + { + "name": "testcontainerApp0", + "image": "repo/testcontainerApp0:v4", + "resources": { + "cpu": 0.2, + "memory": "100Mi" + }, + "env": [ + { + "name": "DB_PASSWORD", + "value": "AERE-SINTETIC-valoare-de-mediu-plantata-93c1" + }, + { + "name": "API_KEY", + "secretRef": "api-key" + } + ] + } + ], + "initContainers": [ + { + "name": "testinitcontainerApp0", + "image": "repo/testcontainerApp0:v4", + "resources": { + "cpu": 0.2, + "memory": "100Mi" + } + } + ], + "scale": { + "cooldownPeriod": 350, + "maxReplicas": 5, + "minReplicas": 1, + "pollingInterval": 35, + "rules": [ + { + "name": "httpscalingrule", + "http": { + "metadata": { + "concurrentRequests": "50" + } + } + } + ] + }, + "serviceBinds": [ + { + "name": "service", + "serviceId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/containerApps/service" + } + ] + }, + "workloadProfileName": "My-GP-01" + } + } +] diff --git a/verify-layer/fixturi-cloud/azure-vm.fara-d.json b/verify-layer/fixturi-cloud/azure-vm.fara-d.json new file mode 100644 index 0000000..7f25f45 --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-vm.fara-d.json @@ -0,0 +1,917 @@ +[ + { + "type": "Microsoft.Compute/virtualMachines", + "location": "eastus", + "tags": {}, + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}", + "name": "{virtualMachineName}", + "plan": { + "name": "aaaaaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaaa", + "product": "aaaaaaaaaaaaaaaaaaaaaa", + "promotionCode": "aaaaaaaaaaaaaa" + }, + "resources": [ + { + "properties": { + "forceUpdateTag": "aaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaa", + "type": "aaaaaaaa", + "typeHandlerVersion": "aaaaaaaaaaaa", + "autoUpgradeMinorVersion": true, + "enableAutomaticUpgrade": true, + "settings": {}, + "protectedSettings": {}, + "provisioningState": "aaa", + "instanceView": { + "name": "aaaaaaaaaaaaaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaa", + "typeHandlerVersion": "aaaaaa", + "substatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "suppressFailures": true, + "protectedSettingsFromKeyVault": { + "sourceVault": { + "id": "/subscriptions/a53f7094-a16c-47af-abe4-b05c05d0d79a/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/kvName" + }, + "secretUrl": "https://kvName.vault.azure.net/secrets/secretName/79b88b3a6f5440ffb2e73e44a0db712e" + } + }, + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "aaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "location": "aaaaaaaaaaaaaaaa", + "tags": { + "key9428": "aaaaaaa" + } + } + ], + "identity": { + "principalId": "aaaaaaaaaaaaaaaa", + "tenantId": "aaaaa", + "type": "SystemAssigned", + "userAssignedIdentities": { + "key5688": { + "principalId": "aaaaaaaaaaaaaaa", + "clientId": "aaaaaaaaaaa" + } + } + }, + "zones": [ + "aaaaaaaaaaaaaaaaaaaaaaaaaaa" + ], + "extendedLocation": { + "name": "aaaa", + "type": "EdgeZone" + }, + "vmId": "{vmId}", + "availabilitySet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hardwareProfile": { + "vmSize": "Standard_A0", + "vmSizeProperties": { + "vCPUsAvailable": 7, + "vCPUsPerCore": 14 + } + }, + "storageProfile": { + "imageReference": { + "publisher": "MicrosoftWindowsServer", + "offer": "WindowsServer", + "sku": "2012-R2-Datacenter", + "version": "4.127.20170406", + "exactVersion": "aaaaaaaaaaaaa", + "sharedGalleryImageId": "aaaaaaaaaaaaaaa", + "communityGalleryImageId": "aaaa", + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "osDisk": { + "osType": "Windows", + "name": "test", + "createOption": "FromImage", + "vhd": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "caching": "None", + "diskSizeGB": 127, + "encryptionSettings": { + "diskEncryptionKey": { + "secretUrl": "aaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "keyEncryptionKey": { + "keyUrl": "aaaaaaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "enabled": true + }, + "image": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "writeAcceleratorEnabled": true, + "diffDiskSettings": { + "option": "Local", + "placement": "CacheDisk" + }, + "managedDisk": { + "storageAccountType": "Standard_LRS", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "securityProfile": { + "securityEncryptionType": "VMGuestStateOnly", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + }, + "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/testingexcludedisk_OsDisk_1_74cdaedcea50483d9833c96adefa100f" + }, + "deleteOption": "Delete" + }, + "dataDisks": [] + }, + "osProfile": { + "computerName": "Test", + "adminUsername": "Foo12", + "windowsConfiguration": { + "provisionVMAgent": true, + "enableAutomaticUpdates": true, + "timeZone": "aaaaaaaaaaaaaaaaaaaaaa", + "additionalUnattendContent": [ + { + "passName": "OobeSystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "AutoLogon", + "content": "aaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "patchSettings": { + "patchMode": "Manual", + "enableHotpatching": true, + "assessmentMode": "ImageDefault" + }, + "winRM": { + "listeners": [ + { + "protocol": "Http", + "certificateUrl": "aaaaaaaaaaaaaaaaaaaaa" + } + ] + } + }, + "secrets": [], + "allowExtensionOperations": true, + "customData": "aaaa", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "path": "aaaaaaaaaaaaaaaaaaaaaa", + "keyData": "aaa" + } + ] + }, + "provisionVMAgent": true, + "patchSettings": { + "patchMode": "ImageDefault", + "assessmentMode": "ImageDefault" + } + }, + "requireGuestProvisionSignal": true + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", + "properties": { + "primary": true, + "deleteOption": "Delete" + } + } + ], + "networkApiVersion": "2022-05-01", + "networkInterfaceConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "primary": true, + "deleteOption": "Delete", + "enableAcceleratedNetworking": true, + "disableTcpStateTracking": true, + "enableFpga": true, + "enableIPForwarding": true, + "networkSecurityGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "dnsSettings": { + "dnsServers": [ + "aaaaaaaaaaaaaaaaaaaaaaaa" + ] + }, + "ipConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "subnet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "primary": true, + "publicIPAddressConfiguration": { + "name": "aaaaaaaaaaaaaaaaaa", + "properties": { + "idleTimeoutInMinutes": 23, + "deleteOption": "Delete", + "dnsSettings": { + "domainNameLabel": "aaaaa" + }, + "ipTags": [ + { + "ipTagType": "aaaaa", + "tag": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "firstPartyServiceTagId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/firstPartyServiceTags/{firstPartyServiceTagName}" + } + ], + "publicIPPrefix": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "publicIPAddressVersion": "IPv4", + "publicIPAllocationMethod": "Dynamic" + }, + "sku": { + "name": "Basic", + "tier": "Regional" + } + }, + "privateIPAddressVersion": "IPv4", + "privateIPAddressPrefixLength": 28, + "applicationSecurityGroups": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "applicationGatewayBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "loadBalancerBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ] + } + } + ], + "dscpConfiguration": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + } + } + ] + }, + "provisioningState": "Succeeded", + "additionalCapabilities": { + "ultraSSDEnabled": true, + "hibernationEnabled": true + }, + "securityProfile": { + "uefiSettings": { + "secureBootEnabled": true, + "vTpmEnabled": true + }, + "encryptionAtHost": true, + "securityType": "TrustedLaunch" + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "aaaaaaaaaaaaaaaaaaaaa" + } + }, + "virtualMachineScaleSet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "proximityPlacementGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "priority": "Regular", + "evictionPolicy": "Deallocate", + "billingProfile": { + "maxPrice": 26 + }, + "host": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hostGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "licenseType": "aaaaaaaaaaaaaaa", + "extensionsTimeBudget": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "platformFaultDomain": 8, + "scheduledEventsProfile": { + "terminateNotificationProfile": { + "notBeforeTimeout": "PT10M", + "enable": true + }, + "osImageNotificationProfile": { + "notBeforeTimeout": "PT15M", + "enable": true + } + }, + "userData": "aaa", + "capacityReservation": { + "capacityReservationGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "applicationProfile": { + "galleryApplications": [ + { + "tags": "aaaaa", + "order": 4, + "packageReferenceId": "aaaaaaaaaaaaaaaaaaaaaa", + "configurationReference": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ] + }, + "timeCreated": "2022-01-14T16:43:41.683Z", + "resourceGroup": "{resourceGroupName}" + }, + { + "type": "Microsoft.Compute/virtualMachines", + "location": "eastus", + "tags": {}, + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}", + "name": "{virtualMachineName}", + "plan": { + "name": "aaaaaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaaa", + "product": "aaaaaaaaaaaaaaaaaaaaaa", + "promotionCode": "aaaaaaaaaaaaaa" + }, + "resources": [ + { + "properties": { + "forceUpdateTag": "aaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaa", + "type": "aaaaaaaa", + "typeHandlerVersion": "aaaaaaaaaaaa", + "autoUpgradeMinorVersion": true, + "enableAutomaticUpgrade": true, + "settings": {}, + "protectedSettings": {}, + "provisioningState": "aaa", + "instanceView": { + "name": "aaaaaaaaaaaaaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaa", + "typeHandlerVersion": "aaaaaa", + "substatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "suppressFailures": true, + "protectedSettingsFromKeyVault": { + "sourceVault": { + "id": "/subscriptions/a53f7094-a16c-47af-abe4-b05c05d0d79a/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/kvName" + }, + "secretUrl": "https://kvName.vault.azure.net/secrets/secretName/79b88b3a6f5440ffb2e73e44a0db712e" + } + }, + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "aaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "location": "aaaaaaaaaaaaaaaa", + "tags": { + "key9428": "aaaaaaa" + } + } + ], + "identity": { + "principalId": "aaaaaaaaaaaaaaaa", + "tenantId": "aaaaa", + "type": "SystemAssigned", + "userAssignedIdentities": { + "key5688": { + "principalId": "aaaaaaaaaaaaaaa", + "clientId": "aaaaaaaaaaa" + } + } + }, + "zones": [ + "aaaaaa" + ], + "extendedLocation": { + "name": "aaaa", + "type": "EdgeZone" + }, + "vmId": "{vmId}", + "availabilitySet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hardwareProfile": { + "vmSize": "Standard_A0", + "vmSizeProperties": { + "vCPUsAvailable": 7, + "vCPUsPerCore": 14 + } + }, + "storageProfile": { + "imageReference": { + "publisher": "MicrosoftWindowsServer", + "offer": "WindowsServer", + "sku": "2012-R2-Datacenter", + "version": "4.127.20170406", + "exactVersion": "aa", + "sharedGalleryImageId": "aaaaaaaaaaaaaaaaaaaaaaaaa", + "communityGalleryImageId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "id": "aaaaaaaa" + }, + "osDisk": { + "osType": "Windows", + "name": "test", + "createOption": "FromImage", + "vhd": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "caching": "None", + "diskSizeGB": 127, + "encryptionSettings": { + "diskEncryptionKey": { + "secretUrl": "aaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "keyEncryptionKey": { + "keyUrl": "aaaaaaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "enabled": true + }, + "image": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "writeAcceleratorEnabled": true, + "diffDiskSettings": { + "option": "Local", + "placement": "CacheDisk" + }, + "managedDisk": { + "storageAccountType": "Standard_LRS", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "securityProfile": { + "securityEncryptionType": "VMGuestStateOnly", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + }, + "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/testingexcludedisk_OsDisk_1_74cdaedcea50483d9833c96adefa100f" + }, + "deleteOption": "Delete" + }, + "dataDisks": [] + }, + "osProfile": { + "computerName": "Test", + "adminUsername": "Foo12", + "windowsConfiguration": { + "provisionVMAgent": true, + "enableAutomaticUpdates": true, + "timeZone": "aaaaaaaaaaaaaaaaaaaa", + "additionalUnattendContent": [ + { + "passName": "OobeSystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "AutoLogon", + "content": "aaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "patchSettings": { + "patchMode": "Manual", + "enableHotpatching": true, + "assessmentMode": "ImageDefault" + }, + "winRM": { + "listeners": [ + { + "protocol": "Http", + "certificateUrl": "aaaaaaaaaaaaaaaaaaaaa" + } + ] + } + }, + "secrets": [], + "allowExtensionOperations": true, + "customData": "aaaaaaaaaaaaaaaaaaaaaaa", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "path": "aaaaaaaaaaaaaaaaaaaaaa", + "keyData": "aaa" + } + ] + }, + "provisionVMAgent": true, + "patchSettings": { + "patchMode": "ImageDefault", + "assessmentMode": "ImageDefault" + } + }, + "requireGuestProvisionSignal": true + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", + "properties": { + "primary": true, + "deleteOption": "Delete" + } + } + ], + "networkApiVersion": "2022-05-01", + "networkInterfaceConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "primary": true, + "deleteOption": "Delete", + "enableAcceleratedNetworking": true, + "disableTcpStateTracking": true, + "enableFpga": true, + "enableIPForwarding": true, + "networkSecurityGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "dnsSettings": { + "dnsServers": [ + "aaaaaaaaaaaaaaaaaaaaaaaa" + ] + }, + "ipConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "subnet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "primary": true, + "publicIPAddressConfiguration": { + "name": "aaaaaaaaaaaaaaaaaa", + "properties": { + "idleTimeoutInMinutes": 23, + "deleteOption": "Delete", + "dnsSettings": { + "domainNameLabel": "aaaaa" + }, + "ipTags": [ + { + "ipTagType": "aaaaa", + "tag": "aaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "publicIPPrefix": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "publicIPAddressVersion": "IPv4", + "publicIPAllocationMethod": "Dynamic" + }, + "sku": { + "name": "Basic", + "tier": "Regional" + } + }, + "privateIPAddressVersion": "IPv4", + "privateIPAddressPrefixLength": 28, + "applicationSecurityGroups": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "applicationGatewayBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "loadBalancerBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ] + } + } + ], + "dscpConfiguration": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + } + } + ] + }, + "provisioningState": "Succeeded", + "additionalCapabilities": { + "ultraSSDEnabled": true, + "hibernationEnabled": true + }, + "securityProfile": { + "uefiSettings": { + "secureBootEnabled": true, + "vTpmEnabled": true + }, + "encryptionAtHost": true, + "securityType": "TrustedLaunch" + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "aaaaaaaaaaaaaaaaaaaaa" + } + }, + "virtualMachineScaleSet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "proximityPlacementGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "priority": "Regular", + "evictionPolicy": "Deallocate", + "billingProfile": { + "maxPrice": 26 + }, + "host": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hostGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "instanceView": { + "platformUpdateDomain": 1, + "platformFaultDomain": 29, + "computerName": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "osName": "aaaaaaaaaaa", + "osVersion": "aaaaaaaaaaaaaa", + "hyperVGeneration": "V1", + "rdpThumbPrint": "aaaaaaaaaaaaaaaaaaaaaaa", + "vmAgent": { + "vmAgentVersion": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "extensionHandlers": [ + { + "type": "aaaaa", + "typeHandlerVersion": "aaaaaaaaaaaaaaaaaaa", + "status": { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "maintenanceRedeployStatus": { + "isCustomerInitiatedMaintenanceAllowed": true, + "preMaintenanceWindowStartTime": "2022-01-14T16:43:41.682Z", + "preMaintenanceWindowEndTime": "2022-01-14T16:43:41.682Z", + "maintenanceWindowStartTime": "2022-01-14T16:43:41.682Z", + "maintenanceWindowEndTime": "2022-01-14T16:43:41.682Z", + "lastOperationResultCode": "None", + "lastOperationMessage": "aa" + }, + "disks": [ + { + "name": "a", + "encryptionSettings": [ + { + "diskEncryptionKey": { + "secretUrl": "aaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "keyEncryptionKey": { + "keyUrl": "aaaaaaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "enabled": true + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + } + ], + "extensions": [ + { + "name": "aaaaaaaaaaaaaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaa", + "typeHandlerVersion": "aaaaaa", + "substatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + } + ], + "vmHealth": { + "status": { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + }, + "bootDiagnostics": { + "consoleScreenshotBlobUri": "aaaaaaaaaaaaaaaaaaaaaaa", + "serialConsoleLogBlobUri": "aaaaaaaaaaaaaaaaaaa", + "status": { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + }, + "assignedHost": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "patchStatus": { + "availablePatchSummary": { + "status": "Unknown", + "assessmentActivityId": "aaaaaaaaaaaaaaaaaaa", + "rebootPending": true, + "criticalAndSecurityPatchCount": 22, + "otherPatchCount": 25, + "startTime": "2022-01-14T16:43:41.682Z", + "lastModifiedTime": "2022-01-14T16:43:41.683Z", + "error": { + "details": [ + { + "code": "aaaaaaaaaaaaaaaaaaaaa", + "target": "aaaaaa", + "message": "aaaaaaaaaaaaa" + } + ], + "innererror": { + "exceptiontype": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "errordetail": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "code": "aaaaaa", + "target": "aaaaaaaaa", + "message": "aaa" + } + }, + "lastPatchInstallationSummary": { + "status": "Unknown", + "installationActivityId": "aaaaaa", + "maintenanceWindowExceeded": true, + "notSelectedPatchCount": 20, + "excludedPatchCount": 1, + "pendingPatchCount": 2, + "installedPatchCount": 28, + "failedPatchCount": 30, + "startTime": "2022-01-14T16:43:41.683Z", + "lastModifiedTime": "2022-01-14T16:43:41.683Z", + "error": { + "details": [ + { + "code": "aaaaaaaaaaaaaaaaaaaaa", + "target": "aaaaaa", + "message": "aaaaaaaaaaaaa" + } + ], + "innererror": { + "exceptiontype": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "errordetail": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "code": "aaaaaa", + "target": "aaaaaaaaa", + "message": "aaa" + } + }, + "configurationStatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "isVMInStandbyPool": false + }, + "licenseType": "aaaaaaaaaaaaaa", + "extensionsTimeBudget": "aaaaaaaaaaaaaaaaaaaaaa", + "platformFaultDomain": 11, + "scheduledEventsProfile": { + "terminateNotificationProfile": { + "notBeforeTimeout": "PT10M", + "enable": true + }, + "osImageNotificationProfile": { + "notBeforeTimeout": "PT15M", + "enable": true + } + }, + "userData": "aaaaaaaaaaaaaaaaaaa", + "capacityReservation": { + "capacityReservationGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "applicationProfile": { + "galleryApplications": [ + { + "tags": "aaaaa", + "order": 4, + "packageReferenceId": "aaaaaaaaaaaaaaaaaaaaaa", + "configurationReference": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ] + }, + "timeCreated": "2022-01-14T16:43:41.685Z", + "resourceGroup": "{resourceGroupName}" + } +] diff --git a/verify-layer/fixturi-cloud/azure-vm.json b/verify-layer/fixturi-cloud/azure-vm.json new file mode 100644 index 0000000..50476a0 --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-vm.json @@ -0,0 +1,733 @@ +[ + { + "type": "Microsoft.Compute/virtualMachines", + "location": "eastus", + "tags": {}, + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}", + "name": "{virtualMachineName}", + "plan": { + "name": "aaaaaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaaa", + "product": "aaaaaaaaaaaaaaaaaaaaaa", + "promotionCode": "aaaaaaaaaaaaaa" + }, + "resources": [ + { + "properties": { + "forceUpdateTag": "aaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaa", + "type": "aaaaaaaa", + "typeHandlerVersion": "aaaaaaaaaaaa", + "autoUpgradeMinorVersion": true, + "enableAutomaticUpgrade": true, + "settings": {}, + "protectedSettings": {}, + "provisioningState": "aaa", + "instanceView": { + "name": "aaaaaaaaaaaaaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaa", + "typeHandlerVersion": "aaaaaa", + "substatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "suppressFailures": true, + "protectedSettingsFromKeyVault": { + "sourceVault": { + "id": "/subscriptions/a53f7094-a16c-47af-abe4-b05c05d0d79a/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/kvName" + }, + "secretUrl": "https://kvName.vault.azure.net/secrets/secretName/79b88b3a6f5440ffb2e73e44a0db712e" + } + }, + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "aaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "location": "aaaaaaaaaaaaaaaa", + "tags": { + "key9428": "aaaaaaa" + } + } + ], + "identity": { + "principalId": "aaaaaaaaaaaaaaaa", + "tenantId": "aaaaa", + "type": "SystemAssigned", + "userAssignedIdentities": { + "key5688": { + "principalId": "aaaaaaaaaaaaaaa", + "clientId": "aaaaaaaaaaa" + } + } + }, + "zones": [ + "aaaaaaaaaaaaaaaaaaaaaaaaaaa" + ], + "extendedLocation": { + "name": "aaaa", + "type": "EdgeZone" + }, + "vmId": "{vmId}", + "availabilitySet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hardwareProfile": { + "vmSize": "Standard_A0", + "vmSizeProperties": { + "vCPUsAvailable": 7, + "vCPUsPerCore": 14 + } + }, + "storageProfile": { + "imageReference": { + "publisher": "MicrosoftWindowsServer", + "offer": "WindowsServer", + "sku": "2012-R2-Datacenter", + "version": "4.127.20170406", + "exactVersion": "aaaaaaaaaaaaa", + "sharedGalleryImageId": "aaaaaaaaaaaaaaa", + "communityGalleryImageId": "aaaa", + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "osDisk": { + "osType": "Windows", + "name": "test", + "createOption": "FromImage", + "vhd": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "caching": "None", + "diskSizeGB": 127, + "encryptionSettings": { + "diskEncryptionKey": { + "secretUrl": "aaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "keyEncryptionKey": { + "keyUrl": "aaaaaaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "enabled": true + }, + "image": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "writeAcceleratorEnabled": true, + "diffDiskSettings": { + "option": "Local", + "placement": "CacheDisk" + }, + "managedDisk": { + "storageAccountType": "Standard_LRS", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "securityProfile": { + "securityEncryptionType": "VMGuestStateOnly", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + }, + "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/testingexcludedisk_OsDisk_1_74cdaedcea50483d9833c96adefa100f" + }, + "deleteOption": "Delete" + }, + "dataDisks": [] + }, + "osProfile": { + "computerName": "Test", + "adminUsername": "Foo12", + "windowsConfiguration": { + "provisionVMAgent": true, + "enableAutomaticUpdates": true, + "timeZone": "aaaaaaaaaaaaaaaaaaaaaa", + "additionalUnattendContent": [ + { + "passName": "OobeSystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "AutoLogon", + "content": "aaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "patchSettings": { + "patchMode": "Manual", + "enableHotpatching": true, + "assessmentMode": "ImageDefault" + }, + "winRM": { + "listeners": [ + { + "protocol": "Http", + "certificateUrl": "aaaaaaaaaaaaaaaaaaaaa" + } + ] + } + }, + "secrets": [], + "allowExtensionOperations": true, + "customData": "aaaa", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "path": "aaaaaaaaaaaaaaaaaaaaaa", + "keyData": "aaa" + } + ] + }, + "provisionVMAgent": true, + "patchSettings": { + "patchMode": "ImageDefault", + "assessmentMode": "ImageDefault" + } + }, + "requireGuestProvisionSignal": true + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", + "properties": { + "primary": true, + "deleteOption": "Delete" + } + } + ], + "networkApiVersion": "2022-05-01", + "networkInterfaceConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "primary": true, + "deleteOption": "Delete", + "enableAcceleratedNetworking": true, + "disableTcpStateTracking": true, + "enableFpga": true, + "enableIPForwarding": true, + "networkSecurityGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "dnsSettings": { + "dnsServers": [ + "aaaaaaaaaaaaaaaaaaaaaaaa" + ] + }, + "ipConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "subnet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "primary": true, + "publicIPAddressConfiguration": { + "name": "aaaaaaaaaaaaaaaaaa", + "properties": { + "idleTimeoutInMinutes": 23, + "deleteOption": "Delete", + "dnsSettings": { + "domainNameLabel": "aaaaa" + }, + "ipTags": [ + { + "ipTagType": "aaaaa", + "tag": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "firstPartyServiceTagId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/firstPartyServiceTags/{firstPartyServiceTagName}" + } + ], + "publicIPPrefix": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "publicIPAddressVersion": "IPv4", + "publicIPAllocationMethod": "Dynamic" + }, + "sku": { + "name": "Basic", + "tier": "Regional" + } + }, + "privateIPAddressVersion": "IPv4", + "privateIPAddressPrefixLength": 28, + "applicationSecurityGroups": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "applicationGatewayBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "loadBalancerBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ] + } + } + ], + "dscpConfiguration": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + } + } + ] + }, + "provisioningState": "Succeeded", + "additionalCapabilities": { + "ultraSSDEnabled": true, + "hibernationEnabled": true + }, + "securityProfile": { + "uefiSettings": { + "secureBootEnabled": true, + "vTpmEnabled": true + }, + "encryptionAtHost": true, + "securityType": "TrustedLaunch" + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "aaaaaaaaaaaaaaaaaaaaa" + } + }, + "virtualMachineScaleSet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "proximityPlacementGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "priority": "Regular", + "evictionPolicy": "Deallocate", + "billingProfile": { + "maxPrice": 26 + }, + "host": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hostGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "licenseType": "aaaaaaaaaaaaaaa", + "extensionsTimeBudget": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "platformFaultDomain": 8, + "scheduledEventsProfile": { + "terminateNotificationProfile": { + "notBeforeTimeout": "PT10M", + "enable": true + }, + "osImageNotificationProfile": { + "notBeforeTimeout": "PT15M", + "enable": true + } + }, + "userData": "aaa", + "capacityReservation": { + "capacityReservationGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "applicationProfile": { + "galleryApplications": [ + { + "tags": "aaaaa", + "order": 4, + "packageReferenceId": "aaaaaaaaaaaaaaaaaaaaaa", + "configurationReference": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ] + }, + "timeCreated": "2022-01-14T16:43:41.683Z", + "resourceGroup": "{resourceGroupName}", + "powerState": "VM running", + "publicIps": "", + "fqdns": "", + "privateIps": "10.0.0.4", + "macAddresses": "" + }, + { + "type": "Microsoft.Compute/virtualMachines", + "location": "eastus", + "tags": {}, + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}", + "name": "{virtualMachineName}", + "plan": { + "name": "aaaaaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaaa", + "product": "aaaaaaaaaaaaaaaaaaaaaa", + "promotionCode": "aaaaaaaaaaaaaa" + }, + "resources": [ + { + "properties": { + "forceUpdateTag": "aaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaa", + "type": "aaaaaaaa", + "typeHandlerVersion": "aaaaaaaaaaaa", + "autoUpgradeMinorVersion": true, + "enableAutomaticUpgrade": true, + "settings": {}, + "protectedSettings": {}, + "provisioningState": "aaa", + "instanceView": { + "name": "aaaaaaaaaaaaaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaa", + "typeHandlerVersion": "aaaaaa", + "substatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "suppressFailures": true, + "protectedSettingsFromKeyVault": { + "sourceVault": { + "id": "/subscriptions/a53f7094-a16c-47af-abe4-b05c05d0d79a/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/kvName" + }, + "secretUrl": "https://kvName.vault.azure.net/secrets/secretName/79b88b3a6f5440ffb2e73e44a0db712e" + } + }, + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "aaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "location": "aaaaaaaaaaaaaaaa", + "tags": { + "key9428": "aaaaaaa" + } + } + ], + "identity": { + "principalId": "aaaaaaaaaaaaaaaa", + "tenantId": "aaaaa", + "type": "SystemAssigned", + "userAssignedIdentities": { + "key5688": { + "principalId": "aaaaaaaaaaaaaaa", + "clientId": "aaaaaaaaaaa" + } + } + }, + "zones": [ + "aaaaaa" + ], + "extendedLocation": { + "name": "aaaa", + "type": "EdgeZone" + }, + "vmId": "{vmId}", + "availabilitySet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hardwareProfile": { + "vmSize": "Standard_A0", + "vmSizeProperties": { + "vCPUsAvailable": 7, + "vCPUsPerCore": 14 + } + }, + "storageProfile": { + "imageReference": { + "publisher": "MicrosoftWindowsServer", + "offer": "WindowsServer", + "sku": "2012-R2-Datacenter", + "version": "4.127.20170406", + "exactVersion": "aa", + "sharedGalleryImageId": "aaaaaaaaaaaaaaaaaaaaaaaaa", + "communityGalleryImageId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "id": "aaaaaaaa" + }, + "osDisk": { + "osType": "Windows", + "name": "test", + "createOption": "FromImage", + "vhd": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "caching": "None", + "diskSizeGB": 127, + "encryptionSettings": { + "diskEncryptionKey": { + "secretUrl": "aaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "keyEncryptionKey": { + "keyUrl": "aaaaaaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "enabled": true + }, + "image": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "writeAcceleratorEnabled": true, + "diffDiskSettings": { + "option": "Local", + "placement": "CacheDisk" + }, + "managedDisk": { + "storageAccountType": "Standard_LRS", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "securityProfile": { + "securityEncryptionType": "VMGuestStateOnly", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + }, + "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/testingexcludedisk_OsDisk_1_74cdaedcea50483d9833c96adefa100f" + }, + "deleteOption": "Delete" + }, + "dataDisks": [] + }, + "osProfile": { + "computerName": "Test", + "adminUsername": "Foo12", + "windowsConfiguration": { + "provisionVMAgent": true, + "enableAutomaticUpdates": true, + "timeZone": "aaaaaaaaaaaaaaaaaaaa", + "additionalUnattendContent": [ + { + "passName": "OobeSystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "AutoLogon", + "content": "aaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "patchSettings": { + "patchMode": "Manual", + "enableHotpatching": true, + "assessmentMode": "ImageDefault" + }, + "winRM": { + "listeners": [ + { + "protocol": "Http", + "certificateUrl": "aaaaaaaaaaaaaaaaaaaaa" + } + ] + } + }, + "secrets": [], + "allowExtensionOperations": true, + "customData": "aaaaaaaaaaaaaaaaaaaaaaa", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "path": "aaaaaaaaaaaaaaaaaaaaaa", + "keyData": "aaa" + } + ] + }, + "provisionVMAgent": true, + "patchSettings": { + "patchMode": "ImageDefault", + "assessmentMode": "ImageDefault" + } + }, + "requireGuestProvisionSignal": true + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", + "properties": { + "primary": true, + "deleteOption": "Delete" + } + } + ], + "networkApiVersion": "2022-05-01", + "networkInterfaceConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "primary": true, + "deleteOption": "Delete", + "enableAcceleratedNetworking": true, + "disableTcpStateTracking": true, + "enableFpga": true, + "enableIPForwarding": true, + "networkSecurityGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "dnsSettings": { + "dnsServers": [ + "aaaaaaaaaaaaaaaaaaaaaaaa" + ] + }, + "ipConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "subnet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "primary": true, + "publicIPAddressConfiguration": { + "name": "aaaaaaaaaaaaaaaaaa", + "properties": { + "idleTimeoutInMinutes": 23, + "deleteOption": "Delete", + "dnsSettings": { + "domainNameLabel": "aaaaa" + }, + "ipTags": [ + { + "ipTagType": "aaaaa", + "tag": "aaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "publicIPPrefix": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "publicIPAddressVersion": "IPv4", + "publicIPAllocationMethod": "Dynamic" + }, + "sku": { + "name": "Basic", + "tier": "Regional" + } + }, + "privateIPAddressVersion": "IPv4", + "privateIPAddressPrefixLength": 28, + "applicationSecurityGroups": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "applicationGatewayBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "loadBalancerBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ] + } + } + ], + "dscpConfiguration": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + } + } + ] + }, + "provisioningState": "Succeeded", + "additionalCapabilities": { + "ultraSSDEnabled": true, + "hibernationEnabled": true + }, + "securityProfile": { + "uefiSettings": { + "secureBootEnabled": true, + "vTpmEnabled": true + }, + "encryptionAtHost": true, + "securityType": "TrustedLaunch" + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "aaaaaaaaaaaaaaaaaaaaa" + } + }, + "virtualMachineScaleSet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "proximityPlacementGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "priority": "Regular", + "evictionPolicy": "Deallocate", + "billingProfile": { + "maxPrice": 26 + }, + "host": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hostGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "licenseType": "aaaaaaaaaaaaaa", + "extensionsTimeBudget": "aaaaaaaaaaaaaaaaaaaaaa", + "platformFaultDomain": 11, + "scheduledEventsProfile": { + "terminateNotificationProfile": { + "notBeforeTimeout": "PT10M", + "enable": true + }, + "osImageNotificationProfile": { + "notBeforeTimeout": "PT15M", + "enable": true + } + }, + "userData": "aaaaaaaaaaaaaaaaaaa", + "capacityReservation": { + "capacityReservationGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "applicationProfile": { + "galleryApplications": [ + { + "tags": "aaaaa", + "order": 4, + "packageReferenceId": "aaaaaaaaaaaaaaaaaaaaaa", + "configurationReference": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ] + }, + "timeCreated": "2022-01-14T16:43:41.685Z", + "resourceGroup": "{resourceGroupName}", + "powerState": "VM running", + "publicIps": "", + "fqdns": "", + "privateIps": "10.0.0.4", + "macAddresses": "" + } +] diff --git a/verify-layer/fixturi-cloud/azure-vm.oprita.json b/verify-layer/fixturi-cloud/azure-vm.oprita.json new file mode 100644 index 0000000..a6b4a1b --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-vm.oprita.json @@ -0,0 +1,1099 @@ +[ + { + "type": "Microsoft.Compute/virtualMachines", + "location": "eastus", + "tags": {}, + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}", + "name": "{virtualMachineName}", + "plan": { + "name": "aaaaaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaaa", + "product": "aaaaaaaaaaaaaaaaaaaaaa", + "promotionCode": "aaaaaaaaaaaaaa" + }, + "resources": [ + { + "properties": { + "forceUpdateTag": "aaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaa", + "type": "aaaaaaaa", + "typeHandlerVersion": "aaaaaaaaaaaa", + "autoUpgradeMinorVersion": true, + "enableAutomaticUpgrade": true, + "settings": {}, + "protectedSettings": {}, + "provisioningState": "aaa", + "instanceView": { + "name": "aaaaaaaaaaaaaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaa", + "typeHandlerVersion": "aaaaaa", + "substatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "suppressFailures": true, + "protectedSettingsFromKeyVault": { + "sourceVault": { + "id": "/subscriptions/a53f7094-a16c-47af-abe4-b05c05d0d79a/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/kvName" + }, + "secretUrl": "https://kvName.vault.azure.net/secrets/secretName/79b88b3a6f5440ffb2e73e44a0db712e" + } + }, + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "aaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "location": "aaaaaaaaaaaaaaaa", + "tags": { + "key9428": "aaaaaaa" + } + } + ], + "identity": { + "principalId": "aaaaaaaaaaaaaaaa", + "tenantId": "aaaaa", + "type": "SystemAssigned", + "userAssignedIdentities": { + "key5688": { + "principalId": "aaaaaaaaaaaaaaa", + "clientId": "aaaaaaaaaaa" + } + } + }, + "zones": [ + "aaaaaaaaaaaaaaaaaaaaaaaaaaa" + ], + "extendedLocation": { + "name": "aaaa", + "type": "EdgeZone" + }, + "vmId": "{vmId}", + "availabilitySet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hardwareProfile": { + "vmSize": "Standard_A0", + "vmSizeProperties": { + "vCPUsAvailable": 7, + "vCPUsPerCore": 14 + } + }, + "storageProfile": { + "imageReference": { + "publisher": "MicrosoftWindowsServer", + "offer": "WindowsServer", + "sku": "2012-R2-Datacenter", + "version": "4.127.20170406", + "exactVersion": "aaaaaaaaaaaaa", + "sharedGalleryImageId": "aaaaaaaaaaaaaaa", + "communityGalleryImageId": "aaaa", + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "osDisk": { + "osType": "Windows", + "name": "test", + "createOption": "FromImage", + "vhd": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "caching": "None", + "diskSizeGB": 127, + "encryptionSettings": { + "diskEncryptionKey": { + "secretUrl": "aaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "keyEncryptionKey": { + "keyUrl": "aaaaaaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "enabled": true + }, + "image": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "writeAcceleratorEnabled": true, + "diffDiskSettings": { + "option": "Local", + "placement": "CacheDisk" + }, + "managedDisk": { + "storageAccountType": "Standard_LRS", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "securityProfile": { + "securityEncryptionType": "VMGuestStateOnly", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + }, + "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/testingexcludedisk_OsDisk_1_74cdaedcea50483d9833c96adefa100f" + }, + "deleteOption": "Delete" + }, + "dataDisks": [] + }, + "osProfile": { + "computerName": "Test", + "adminUsername": "Foo12", + "windowsConfiguration": { + "provisionVMAgent": true, + "enableAutomaticUpdates": true, + "timeZone": "aaaaaaaaaaaaaaaaaaaaaa", + "additionalUnattendContent": [ + { + "passName": "OobeSystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "AutoLogon", + "content": "aaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "patchSettings": { + "patchMode": "Manual", + "enableHotpatching": true, + "assessmentMode": "ImageDefault" + }, + "winRM": { + "listeners": [ + { + "protocol": "Http", + "certificateUrl": "aaaaaaaaaaaaaaaaaaaaa" + } + ] + } + }, + "secrets": [], + "allowExtensionOperations": true, + "customData": "aaaa", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "path": "aaaaaaaaaaaaaaaaaaaaaa", + "keyData": "aaa" + } + ] + }, + "provisionVMAgent": true, + "patchSettings": { + "patchMode": "ImageDefault", + "assessmentMode": "ImageDefault" + } + }, + "requireGuestProvisionSignal": true + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", + "properties": { + "primary": true, + "deleteOption": "Delete" + } + } + ], + "networkApiVersion": "2022-05-01", + "networkInterfaceConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "primary": true, + "deleteOption": "Delete", + "enableAcceleratedNetworking": true, + "disableTcpStateTracking": true, + "enableFpga": true, + "enableIPForwarding": true, + "networkSecurityGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "dnsSettings": { + "dnsServers": [ + "aaaaaaaaaaaaaaaaaaaaaaaa" + ] + }, + "ipConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "subnet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "primary": true, + "publicIPAddressConfiguration": { + "name": "aaaaaaaaaaaaaaaaaa", + "properties": { + "idleTimeoutInMinutes": 23, + "deleteOption": "Delete", + "dnsSettings": { + "domainNameLabel": "aaaaa" + }, + "ipTags": [ + { + "ipTagType": "aaaaa", + "tag": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "firstPartyServiceTagId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/firstPartyServiceTags/{firstPartyServiceTagName}" + } + ], + "publicIPPrefix": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "publicIPAddressVersion": "IPv4", + "publicIPAllocationMethod": "Dynamic" + }, + "sku": { + "name": "Basic", + "tier": "Regional" + } + }, + "privateIPAddressVersion": "IPv4", + "privateIPAddressPrefixLength": 28, + "applicationSecurityGroups": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "applicationGatewayBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "loadBalancerBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ] + } + } + ], + "dscpConfiguration": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + } + } + ] + }, + "provisioningState": "Succeeded", + "additionalCapabilities": { + "ultraSSDEnabled": true, + "hibernationEnabled": true + }, + "securityProfile": { + "uefiSettings": { + "secureBootEnabled": true, + "vTpmEnabled": true + }, + "encryptionAtHost": true, + "securityType": "TrustedLaunch" + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "aaaaaaaaaaaaaaaaaaaaa" + } + }, + "virtualMachineScaleSet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "proximityPlacementGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "priority": "Regular", + "evictionPolicy": "Deallocate", + "billingProfile": { + "maxPrice": 26 + }, + "host": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hostGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "licenseType": "aaaaaaaaaaaaaaa", + "extensionsTimeBudget": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "platformFaultDomain": 8, + "scheduledEventsProfile": { + "terminateNotificationProfile": { + "notBeforeTimeout": "PT10M", + "enable": true + }, + "osImageNotificationProfile": { + "notBeforeTimeout": "PT15M", + "enable": true + } + }, + "userData": "aaa", + "capacityReservation": { + "capacityReservationGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "applicationProfile": { + "galleryApplications": [ + { + "tags": "aaaaa", + "order": 4, + "packageReferenceId": "aaaaaaaaaaaaaaaaaaaaaa", + "configurationReference": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ] + }, + "timeCreated": "2022-01-14T16:43:41.683Z", + "resourceGroup": "{resourceGroupName}", + "powerState": "VM running", + "publicIps": "", + "fqdns": "", + "privateIps": "10.0.0.4", + "macAddresses": "" + }, + { + "type": "Microsoft.Compute/virtualMachines", + "location": "eastus", + "tags": {}, + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}", + "name": "{virtualMachineName}", + "plan": { + "name": "aaaaaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaaa", + "product": "aaaaaaaaaaaaaaaaaaaaaa", + "promotionCode": "aaaaaaaaaaaaaa" + }, + "resources": [ + { + "properties": { + "forceUpdateTag": "aaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaa", + "type": "aaaaaaaa", + "typeHandlerVersion": "aaaaaaaaaaaa", + "autoUpgradeMinorVersion": true, + "enableAutomaticUpgrade": true, + "settings": {}, + "protectedSettings": {}, + "provisioningState": "aaa", + "instanceView": { + "name": "aaaaaaaaaaaaaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaa", + "typeHandlerVersion": "aaaaaa", + "substatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "suppressFailures": true, + "protectedSettingsFromKeyVault": { + "sourceVault": { + "id": "/subscriptions/a53f7094-a16c-47af-abe4-b05c05d0d79a/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/kvName" + }, + "secretUrl": "https://kvName.vault.azure.net/secrets/secretName/79b88b3a6f5440ffb2e73e44a0db712e" + } + }, + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "aaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "location": "aaaaaaaaaaaaaaaa", + "tags": { + "key9428": "aaaaaaa" + } + } + ], + "identity": { + "principalId": "aaaaaaaaaaaaaaaa", + "tenantId": "aaaaa", + "type": "SystemAssigned", + "userAssignedIdentities": { + "key5688": { + "principalId": "aaaaaaaaaaaaaaa", + "clientId": "aaaaaaaaaaa" + } + } + }, + "zones": [ + "aaaaaa" + ], + "extendedLocation": { + "name": "aaaa", + "type": "EdgeZone" + }, + "vmId": "{vmId}", + "availabilitySet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hardwareProfile": { + "vmSize": "Standard_A0", + "vmSizeProperties": { + "vCPUsAvailable": 7, + "vCPUsPerCore": 14 + } + }, + "storageProfile": { + "imageReference": { + "publisher": "MicrosoftWindowsServer", + "offer": "WindowsServer", + "sku": "2012-R2-Datacenter", + "version": "4.127.20170406", + "exactVersion": "aa", + "sharedGalleryImageId": "aaaaaaaaaaaaaaaaaaaaaaaaa", + "communityGalleryImageId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "id": "aaaaaaaa" + }, + "osDisk": { + "osType": "Windows", + "name": "test", + "createOption": "FromImage", + "vhd": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "caching": "None", + "diskSizeGB": 127, + "encryptionSettings": { + "diskEncryptionKey": { + "secretUrl": "aaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "keyEncryptionKey": { + "keyUrl": "aaaaaaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "enabled": true + }, + "image": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "writeAcceleratorEnabled": true, + "diffDiskSettings": { + "option": "Local", + "placement": "CacheDisk" + }, + "managedDisk": { + "storageAccountType": "Standard_LRS", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "securityProfile": { + "securityEncryptionType": "VMGuestStateOnly", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + }, + "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/testingexcludedisk_OsDisk_1_74cdaedcea50483d9833c96adefa100f" + }, + "deleteOption": "Delete" + }, + "dataDisks": [] + }, + "osProfile": { + "computerName": "Test", + "adminUsername": "Foo12", + "windowsConfiguration": { + "provisionVMAgent": true, + "enableAutomaticUpdates": true, + "timeZone": "aaaaaaaaaaaaaaaaaaaa", + "additionalUnattendContent": [ + { + "passName": "OobeSystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "AutoLogon", + "content": "aaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "patchSettings": { + "patchMode": "Manual", + "enableHotpatching": true, + "assessmentMode": "ImageDefault" + }, + "winRM": { + "listeners": [ + { + "protocol": "Http", + "certificateUrl": "aaaaaaaaaaaaaaaaaaaaa" + } + ] + } + }, + "secrets": [], + "allowExtensionOperations": true, + "customData": "aaaaaaaaaaaaaaaaaaaaaaa", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "path": "aaaaaaaaaaaaaaaaaaaaaa", + "keyData": "aaa" + } + ] + }, + "provisionVMAgent": true, + "patchSettings": { + "patchMode": "ImageDefault", + "assessmentMode": "ImageDefault" + } + }, + "requireGuestProvisionSignal": true + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", + "properties": { + "primary": true, + "deleteOption": "Delete" + } + } + ], + "networkApiVersion": "2022-05-01", + "networkInterfaceConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "primary": true, + "deleteOption": "Delete", + "enableAcceleratedNetworking": true, + "disableTcpStateTracking": true, + "enableFpga": true, + "enableIPForwarding": true, + "networkSecurityGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "dnsSettings": { + "dnsServers": [ + "aaaaaaaaaaaaaaaaaaaaaaaa" + ] + }, + "ipConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "subnet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "primary": true, + "publicIPAddressConfiguration": { + "name": "aaaaaaaaaaaaaaaaaa", + "properties": { + "idleTimeoutInMinutes": 23, + "deleteOption": "Delete", + "dnsSettings": { + "domainNameLabel": "aaaaa" + }, + "ipTags": [ + { + "ipTagType": "aaaaa", + "tag": "aaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "publicIPPrefix": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "publicIPAddressVersion": "IPv4", + "publicIPAllocationMethod": "Dynamic" + }, + "sku": { + "name": "Basic", + "tier": "Regional" + } + }, + "privateIPAddressVersion": "IPv4", + "privateIPAddressPrefixLength": 28, + "applicationSecurityGroups": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "applicationGatewayBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "loadBalancerBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ] + } + } + ], + "dscpConfiguration": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + } + } + ] + }, + "provisioningState": "Succeeded", + "additionalCapabilities": { + "ultraSSDEnabled": true, + "hibernationEnabled": true + }, + "securityProfile": { + "uefiSettings": { + "secureBootEnabled": true, + "vTpmEnabled": true + }, + "encryptionAtHost": true, + "securityType": "TrustedLaunch" + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "aaaaaaaaaaaaaaaaaaaaa" + } + }, + "virtualMachineScaleSet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "proximityPlacementGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "priority": "Regular", + "evictionPolicy": "Deallocate", + "billingProfile": { + "maxPrice": 26 + }, + "host": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hostGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "licenseType": "aaaaaaaaaaaaaa", + "extensionsTimeBudget": "aaaaaaaaaaaaaaaaaaaaaa", + "platformFaultDomain": 11, + "scheduledEventsProfile": { + "terminateNotificationProfile": { + "notBeforeTimeout": "PT10M", + "enable": true + }, + "osImageNotificationProfile": { + "notBeforeTimeout": "PT15M", + "enable": true + } + }, + "userData": "aaaaaaaaaaaaaaaaaaa", + "capacityReservation": { + "capacityReservationGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "applicationProfile": { + "galleryApplications": [ + { + "tags": "aaaaa", + "order": 4, + "packageReferenceId": "aaaaaaaaaaaaaaaaaaaaaa", + "configurationReference": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ] + }, + "timeCreated": "2022-01-14T16:43:41.685Z", + "resourceGroup": "{resourceGroupName}", + "powerState": "VM running", + "publicIps": "", + "fqdns": "", + "privateIps": "10.0.0.4", + "macAddresses": "" + }, + { + "type": "Microsoft.Compute/virtualMachines", + "location": "eastus", + "tags": {}, + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/vm-oprita", + "name": "vm-oprita", + "plan": { + "name": "aaaaaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaaa", + "product": "aaaaaaaaaaaaaaaaaaaaaa", + "promotionCode": "aaaaaaaaaaaaaa" + }, + "resources": [ + { + "properties": { + "forceUpdateTag": "aaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaa", + "type": "aaaaaaaa", + "typeHandlerVersion": "aaaaaaaaaaaa", + "autoUpgradeMinorVersion": true, + "enableAutomaticUpgrade": true, + "settings": {}, + "protectedSettings": {}, + "provisioningState": "aaa", + "instanceView": { + "name": "aaaaaaaaaaaaaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaa", + "typeHandlerVersion": "aaaaaa", + "substatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "suppressFailures": true, + "protectedSettingsFromKeyVault": { + "sourceVault": { + "id": "/subscriptions/a53f7094-a16c-47af-abe4-b05c05d0d79a/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/kvName" + }, + "secretUrl": "https://kvName.vault.azure.net/secrets/secretName/79b88b3a6f5440ffb2e73e44a0db712e" + } + }, + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "aaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "location": "aaaaaaaaaaaaaaaa", + "tags": { + "key9428": "aaaaaaa" + } + } + ], + "identity": { + "principalId": "aaaaaaaaaaaaaaaa", + "tenantId": "aaaaa", + "type": "SystemAssigned", + "userAssignedIdentities": { + "key5688": { + "principalId": "aaaaaaaaaaaaaaa", + "clientId": "aaaaaaaaaaa" + } + } + }, + "zones": [ + "aaaaaaaaaaaaaaaaaaaaaaaaaaa" + ], + "extendedLocation": { + "name": "aaaa", + "type": "EdgeZone" + }, + "vmId": "{vmId}", + "availabilitySet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hardwareProfile": { + "vmSize": "Standard_A0", + "vmSizeProperties": { + "vCPUsAvailable": 7, + "vCPUsPerCore": 14 + } + }, + "storageProfile": { + "imageReference": { + "publisher": "MicrosoftWindowsServer", + "offer": "WindowsServer", + "sku": "2012-R2-Datacenter", + "version": "4.127.20170406", + "exactVersion": "aaaaaaaaaaaaa", + "sharedGalleryImageId": "aaaaaaaaaaaaaaa", + "communityGalleryImageId": "aaaa", + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "osDisk": { + "osType": "Windows", + "name": "test", + "createOption": "FromImage", + "vhd": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "caching": "None", + "diskSizeGB": 127, + "encryptionSettings": { + "diskEncryptionKey": { + "secretUrl": "aaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "keyEncryptionKey": { + "keyUrl": "aaaaaaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "enabled": true + }, + "image": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "writeAcceleratorEnabled": true, + "diffDiskSettings": { + "option": "Local", + "placement": "CacheDisk" + }, + "managedDisk": { + "storageAccountType": "Standard_LRS", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "securityProfile": { + "securityEncryptionType": "VMGuestStateOnly", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + }, + "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/testingexcludedisk_OsDisk_1_74cdaedcea50483d9833c96adefa100f" + }, + "deleteOption": "Delete" + }, + "dataDisks": [] + }, + "osProfile": { + "computerName": "Test", + "adminUsername": "Foo12", + "windowsConfiguration": { + "provisionVMAgent": true, + "enableAutomaticUpdates": true, + "timeZone": "aaaaaaaaaaaaaaaaaaaaaa", + "additionalUnattendContent": [ + { + "passName": "OobeSystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "AutoLogon", + "content": "aaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "patchSettings": { + "patchMode": "Manual", + "enableHotpatching": true, + "assessmentMode": "ImageDefault" + }, + "winRM": { + "listeners": [ + { + "protocol": "Http", + "certificateUrl": "aaaaaaaaaaaaaaaaaaaaa" + } + ] + } + }, + "secrets": [], + "allowExtensionOperations": true, + "customData": "aaaa", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "path": "aaaaaaaaaaaaaaaaaaaaaa", + "keyData": "aaa" + } + ] + }, + "provisionVMAgent": true, + "patchSettings": { + "patchMode": "ImageDefault", + "assessmentMode": "ImageDefault" + } + }, + "requireGuestProvisionSignal": true + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", + "properties": { + "primary": true, + "deleteOption": "Delete" + } + } + ], + "networkApiVersion": "2022-05-01", + "networkInterfaceConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "primary": true, + "deleteOption": "Delete", + "enableAcceleratedNetworking": true, + "disableTcpStateTracking": true, + "enableFpga": true, + "enableIPForwarding": true, + "networkSecurityGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "dnsSettings": { + "dnsServers": [ + "aaaaaaaaaaaaaaaaaaaaaaaa" + ] + }, + "ipConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "subnet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "primary": true, + "publicIPAddressConfiguration": { + "name": "aaaaaaaaaaaaaaaaaa", + "properties": { + "idleTimeoutInMinutes": 23, + "deleteOption": "Delete", + "dnsSettings": { + "domainNameLabel": "aaaaa" + }, + "ipTags": [ + { + "ipTagType": "aaaaa", + "tag": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "firstPartyServiceTagId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/firstPartyServiceTags/{firstPartyServiceTagName}" + } + ], + "publicIPPrefix": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "publicIPAddressVersion": "IPv4", + "publicIPAllocationMethod": "Dynamic" + }, + "sku": { + "name": "Basic", + "tier": "Regional" + } + }, + "privateIPAddressVersion": "IPv4", + "privateIPAddressPrefixLength": 28, + "applicationSecurityGroups": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "applicationGatewayBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "loadBalancerBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ] + } + } + ], + "dscpConfiguration": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + } + } + ] + }, + "provisioningState": "Succeeded", + "additionalCapabilities": { + "ultraSSDEnabled": true, + "hibernationEnabled": true + }, + "securityProfile": { + "uefiSettings": { + "secureBootEnabled": true, + "vTpmEnabled": true + }, + "encryptionAtHost": true, + "securityType": "TrustedLaunch" + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "aaaaaaaaaaaaaaaaaaaaa" + } + }, + "virtualMachineScaleSet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "proximityPlacementGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "priority": "Regular", + "evictionPolicy": "Deallocate", + "billingProfile": { + "maxPrice": 26 + }, + "host": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hostGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "licenseType": "aaaaaaaaaaaaaaa", + "extensionsTimeBudget": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "platformFaultDomain": 8, + "scheduledEventsProfile": { + "terminateNotificationProfile": { + "notBeforeTimeout": "PT10M", + "enable": true + }, + "osImageNotificationProfile": { + "notBeforeTimeout": "PT15M", + "enable": true + } + }, + "userData": "aaa", + "capacityReservation": { + "capacityReservationGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "applicationProfile": { + "galleryApplications": [ + { + "tags": "aaaaa", + "order": 4, + "packageReferenceId": "aaaaaaaaaaaaaaaaaaaaaa", + "configurationReference": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ] + }, + "timeCreated": "2022-01-14T16:43:41.683Z", + "resourceGroup": "{resourceGroupName}", + "powerState": "VM deallocated", + "publicIps": "", + "fqdns": "", + "privateIps": "10.0.0.4", + "macAddresses": "" + } +] diff --git a/verify-layer/fixturi-cloud/azure-vm.secrete.json b/verify-layer/fixturi-cloud/azure-vm.secrete.json new file mode 100644 index 0000000..a8b704a --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-vm.secrete.json @@ -0,0 +1,736 @@ +[ + { + "type": "Microsoft.Compute/virtualMachines", + "location": "eastus", + "tags": { + "DB_PASSWORD": "AERE-SINTETIC-valoare-de-mediu-plantata-93c1", + "env": "prod" + }, + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}", + "name": "{virtualMachineName}", + "plan": { + "name": "aaaaaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaaa", + "product": "aaaaaaaaaaaaaaaaaaaaaa", + "promotionCode": "aaaaaaaaaaaaaa" + }, + "resources": [ + { + "properties": { + "forceUpdateTag": "aaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaa", + "type": "aaaaaaaa", + "typeHandlerVersion": "aaaaaaaaaaaa", + "autoUpgradeMinorVersion": true, + "enableAutomaticUpgrade": true, + "settings": {}, + "protectedSettings": {}, + "provisioningState": "aaa", + "instanceView": { + "name": "aaaaaaaaaaaaaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaa", + "typeHandlerVersion": "aaaaaa", + "substatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "suppressFailures": true, + "protectedSettingsFromKeyVault": { + "sourceVault": { + "id": "/subscriptions/a53f7094-a16c-47af-abe4-b05c05d0d79a/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/kvName" + }, + "secretUrl": "https://kvName.vault.azure.net/secrets/secretName/79b88b3a6f5440ffb2e73e44a0db712e" + } + }, + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "aaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "location": "aaaaaaaaaaaaaaaa", + "tags": { + "key9428": "aaaaaaa" + } + } + ], + "identity": { + "principalId": "aaaaaaaaaaaaaaaa", + "tenantId": "aaaaa", + "type": "SystemAssigned", + "userAssignedIdentities": { + "key5688": { + "principalId": "aaaaaaaaaaaaaaa", + "clientId": "aaaaaaaaaaa" + } + } + }, + "zones": [ + "aaaaaaaaaaaaaaaaaaaaaaaaaaa" + ], + "extendedLocation": { + "name": "aaaa", + "type": "EdgeZone" + }, + "vmId": "{vmId}", + "availabilitySet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hardwareProfile": { + "vmSize": "Standard_A0", + "vmSizeProperties": { + "vCPUsAvailable": 7, + "vCPUsPerCore": 14 + } + }, + "storageProfile": { + "imageReference": { + "publisher": "MicrosoftWindowsServer", + "offer": "WindowsServer", + "sku": "2012-R2-Datacenter", + "version": "4.127.20170406", + "exactVersion": "aaaaaaaaaaaaa", + "sharedGalleryImageId": "aaaaaaaaaaaaaaa", + "communityGalleryImageId": "aaaa", + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "osDisk": { + "osType": "Windows", + "name": "test", + "createOption": "FromImage", + "vhd": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "caching": "None", + "diskSizeGB": 127, + "encryptionSettings": { + "diskEncryptionKey": { + "secretUrl": "aaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "keyEncryptionKey": { + "keyUrl": "aaaaaaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "enabled": true + }, + "image": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "writeAcceleratorEnabled": true, + "diffDiskSettings": { + "option": "Local", + "placement": "CacheDisk" + }, + "managedDisk": { + "storageAccountType": "Standard_LRS", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "securityProfile": { + "securityEncryptionType": "VMGuestStateOnly", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + }, + "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/testingexcludedisk_OsDisk_1_74cdaedcea50483d9833c96adefa100f" + }, + "deleteOption": "Delete" + }, + "dataDisks": [] + }, + "osProfile": { + "computerName": "Test", + "adminUsername": "Foo12", + "windowsConfiguration": { + "provisionVMAgent": true, + "enableAutomaticUpdates": true, + "timeZone": "aaaaaaaaaaaaaaaaaaaaaa", + "additionalUnattendContent": [ + { + "passName": "OobeSystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "AutoLogon", + "content": "aaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "patchSettings": { + "patchMode": "Manual", + "enableHotpatching": true, + "assessmentMode": "ImageDefault" + }, + "winRM": { + "listeners": [ + { + "protocol": "Http", + "certificateUrl": "aaaaaaaaaaaaaaaaaaaaa" + } + ] + } + }, + "secrets": [], + "allowExtensionOperations": true, + "customData": "AERE-SINTETIC-customData-plantat-5e7b", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "path": "aaaaaaaaaaaaaaaaaaaaaa", + "keyData": "aaa" + } + ] + }, + "provisionVMAgent": true, + "patchSettings": { + "patchMode": "ImageDefault", + "assessmentMode": "ImageDefault" + } + }, + "requireGuestProvisionSignal": true + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", + "properties": { + "primary": true, + "deleteOption": "Delete" + } + } + ], + "networkApiVersion": "2022-05-01", + "networkInterfaceConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "primary": true, + "deleteOption": "Delete", + "enableAcceleratedNetworking": true, + "disableTcpStateTracking": true, + "enableFpga": true, + "enableIPForwarding": true, + "networkSecurityGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "dnsSettings": { + "dnsServers": [ + "aaaaaaaaaaaaaaaaaaaaaaaa" + ] + }, + "ipConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "subnet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "primary": true, + "publicIPAddressConfiguration": { + "name": "aaaaaaaaaaaaaaaaaa", + "properties": { + "idleTimeoutInMinutes": 23, + "deleteOption": "Delete", + "dnsSettings": { + "domainNameLabel": "aaaaa" + }, + "ipTags": [ + { + "ipTagType": "aaaaa", + "tag": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "firstPartyServiceTagId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/firstPartyServiceTags/{firstPartyServiceTagName}" + } + ], + "publicIPPrefix": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "publicIPAddressVersion": "IPv4", + "publicIPAllocationMethod": "Dynamic" + }, + "sku": { + "name": "Basic", + "tier": "Regional" + } + }, + "privateIPAddressVersion": "IPv4", + "privateIPAddressPrefixLength": 28, + "applicationSecurityGroups": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "applicationGatewayBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "loadBalancerBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ] + } + } + ], + "dscpConfiguration": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + } + } + ] + }, + "provisioningState": "Succeeded", + "additionalCapabilities": { + "ultraSSDEnabled": true, + "hibernationEnabled": true + }, + "securityProfile": { + "uefiSettings": { + "secureBootEnabled": true, + "vTpmEnabled": true + }, + "encryptionAtHost": true, + "securityType": "TrustedLaunch" + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "aaaaaaaaaaaaaaaaaaaaa" + } + }, + "virtualMachineScaleSet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "proximityPlacementGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "priority": "Regular", + "evictionPolicy": "Deallocate", + "billingProfile": { + "maxPrice": 26 + }, + "host": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hostGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "licenseType": "aaaaaaaaaaaaaaa", + "extensionsTimeBudget": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "platformFaultDomain": 8, + "scheduledEventsProfile": { + "terminateNotificationProfile": { + "notBeforeTimeout": "PT10M", + "enable": true + }, + "osImageNotificationProfile": { + "notBeforeTimeout": "PT15M", + "enable": true + } + }, + "userData": "AERE-SINTETIC-customData-plantat-5e7b", + "capacityReservation": { + "capacityReservationGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "applicationProfile": { + "galleryApplications": [ + { + "tags": "aaaaa", + "order": 4, + "packageReferenceId": "aaaaaaaaaaaaaaaaaaaaaa", + "configurationReference": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ] + }, + "timeCreated": "2022-01-14T16:43:41.683Z", + "resourceGroup": "{resourceGroupName}", + "powerState": "VM running", + "publicIps": "", + "fqdns": "", + "privateIps": "10.0.0.4", + "macAddresses": "" + }, + { + "type": "Microsoft.Compute/virtualMachines", + "location": "eastus", + "tags": {}, + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}", + "name": "{virtualMachineName}", + "plan": { + "name": "aaaaaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaaa", + "product": "aaaaaaaaaaaaaaaaaaaaaa", + "promotionCode": "aaaaaaaaaaaaaa" + }, + "resources": [ + { + "properties": { + "forceUpdateTag": "aaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaa", + "type": "aaaaaaaa", + "typeHandlerVersion": "aaaaaaaaaaaa", + "autoUpgradeMinorVersion": true, + "enableAutomaticUpgrade": true, + "settings": {}, + "protectedSettings": {}, + "provisioningState": "aaa", + "instanceView": { + "name": "aaaaaaaaaaaaaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaa", + "typeHandlerVersion": "aaaaaa", + "substatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "suppressFailures": true, + "protectedSettingsFromKeyVault": { + "sourceVault": { + "id": "/subscriptions/a53f7094-a16c-47af-abe4-b05c05d0d79a/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/kvName" + }, + "secretUrl": "https://kvName.vault.azure.net/secrets/secretName/79b88b3a6f5440ffb2e73e44a0db712e" + } + }, + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "aaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "location": "aaaaaaaaaaaaaaaa", + "tags": { + "key9428": "aaaaaaa" + } + } + ], + "identity": { + "principalId": "aaaaaaaaaaaaaaaa", + "tenantId": "aaaaa", + "type": "SystemAssigned", + "userAssignedIdentities": { + "key5688": { + "principalId": "aaaaaaaaaaaaaaa", + "clientId": "aaaaaaaaaaa" + } + } + }, + "zones": [ + "aaaaaa" + ], + "extendedLocation": { + "name": "aaaa", + "type": "EdgeZone" + }, + "vmId": "{vmId}", + "availabilitySet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hardwareProfile": { + "vmSize": "Standard_A0", + "vmSizeProperties": { + "vCPUsAvailable": 7, + "vCPUsPerCore": 14 + } + }, + "storageProfile": { + "imageReference": { + "publisher": "MicrosoftWindowsServer", + "offer": "WindowsServer", + "sku": "2012-R2-Datacenter", + "version": "4.127.20170406", + "exactVersion": "aa", + "sharedGalleryImageId": "aaaaaaaaaaaaaaaaaaaaaaaaa", + "communityGalleryImageId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "id": "aaaaaaaa" + }, + "osDisk": { + "osType": "Windows", + "name": "test", + "createOption": "FromImage", + "vhd": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "caching": "None", + "diskSizeGB": 127, + "encryptionSettings": { + "diskEncryptionKey": { + "secretUrl": "aaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "keyEncryptionKey": { + "keyUrl": "aaaaaaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "enabled": true + }, + "image": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "writeAcceleratorEnabled": true, + "diffDiskSettings": { + "option": "Local", + "placement": "CacheDisk" + }, + "managedDisk": { + "storageAccountType": "Standard_LRS", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "securityProfile": { + "securityEncryptionType": "VMGuestStateOnly", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + }, + "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/testingexcludedisk_OsDisk_1_74cdaedcea50483d9833c96adefa100f" + }, + "deleteOption": "Delete" + }, + "dataDisks": [] + }, + "osProfile": { + "computerName": "Test", + "adminUsername": "Foo12", + "windowsConfiguration": { + "provisionVMAgent": true, + "enableAutomaticUpdates": true, + "timeZone": "aaaaaaaaaaaaaaaaaaaa", + "additionalUnattendContent": [ + { + "passName": "OobeSystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "AutoLogon", + "content": "aaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "patchSettings": { + "patchMode": "Manual", + "enableHotpatching": true, + "assessmentMode": "ImageDefault" + }, + "winRM": { + "listeners": [ + { + "protocol": "Http", + "certificateUrl": "aaaaaaaaaaaaaaaaaaaaa" + } + ] + } + }, + "secrets": [], + "allowExtensionOperations": true, + "customData": "aaaaaaaaaaaaaaaaaaaaaaa", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "path": "aaaaaaaaaaaaaaaaaaaaaa", + "keyData": "aaa" + } + ] + }, + "provisionVMAgent": true, + "patchSettings": { + "patchMode": "ImageDefault", + "assessmentMode": "ImageDefault" + } + }, + "requireGuestProvisionSignal": true + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", + "properties": { + "primary": true, + "deleteOption": "Delete" + } + } + ], + "networkApiVersion": "2022-05-01", + "networkInterfaceConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "primary": true, + "deleteOption": "Delete", + "enableAcceleratedNetworking": true, + "disableTcpStateTracking": true, + "enableFpga": true, + "enableIPForwarding": true, + "networkSecurityGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "dnsSettings": { + "dnsServers": [ + "aaaaaaaaaaaaaaaaaaaaaaaa" + ] + }, + "ipConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "subnet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "primary": true, + "publicIPAddressConfiguration": { + "name": "aaaaaaaaaaaaaaaaaa", + "properties": { + "idleTimeoutInMinutes": 23, + "deleteOption": "Delete", + "dnsSettings": { + "domainNameLabel": "aaaaa" + }, + "ipTags": [ + { + "ipTagType": "aaaaa", + "tag": "aaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "publicIPPrefix": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "publicIPAddressVersion": "IPv4", + "publicIPAllocationMethod": "Dynamic" + }, + "sku": { + "name": "Basic", + "tier": "Regional" + } + }, + "privateIPAddressVersion": "IPv4", + "privateIPAddressPrefixLength": 28, + "applicationSecurityGroups": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "applicationGatewayBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "loadBalancerBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ] + } + } + ], + "dscpConfiguration": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + } + } + ] + }, + "provisioningState": "Succeeded", + "additionalCapabilities": { + "ultraSSDEnabled": true, + "hibernationEnabled": true + }, + "securityProfile": { + "uefiSettings": { + "secureBootEnabled": true, + "vTpmEnabled": true + }, + "encryptionAtHost": true, + "securityType": "TrustedLaunch" + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "aaaaaaaaaaaaaaaaaaaaa" + } + }, + "virtualMachineScaleSet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "proximityPlacementGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "priority": "Regular", + "evictionPolicy": "Deallocate", + "billingProfile": { + "maxPrice": 26 + }, + "host": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hostGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "licenseType": "aaaaaaaaaaaaaa", + "extensionsTimeBudget": "aaaaaaaaaaaaaaaaaaaaaa", + "platformFaultDomain": 11, + "scheduledEventsProfile": { + "terminateNotificationProfile": { + "notBeforeTimeout": "PT10M", + "enable": true + }, + "osImageNotificationProfile": { + "notBeforeTimeout": "PT15M", + "enable": true + } + }, + "userData": "aaaaaaaaaaaaaaaaaaa", + "capacityReservation": { + "capacityReservationGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "applicationProfile": { + "galleryApplications": [ + { + "tags": "aaaaa", + "order": 4, + "packageReferenceId": "aaaaaaaaaaaaaaaaaaaaaa", + "configurationReference": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ] + }, + "timeCreated": "2022-01-14T16:43:41.685Z", + "resourceGroup": "{resourceGroupName}", + "powerState": "VM running", + "publicIps": "", + "fqdns": "", + "privateIps": "10.0.0.4", + "macAddresses": "" + } +] diff --git a/verify-layer/fixturi-cloud/azure-webapp.json b/verify-layer/fixturi-cloud/azure-webapp.json new file mode 100644 index 0000000..54ee666 --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-webapp.json @@ -0,0 +1,232 @@ +[ + { + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/sites/sitef6141", + "name": "sitef6141", + "type": "Microsoft.Web/sites", + "kind": "app", + "location": "East US", + "state": "Running", + "hostNames": [ + "sitef6141.azurewebsites.net" + ], + "repositorySiteName": "sitef6141", + "usageState": "Normal", + "enabled": true, + "enabledHostNames": [ + "sitef6141.azurewebsites.net", + "sitef6141.scm.azurewebsites.net" + ], + "availabilityState": "Normal", + "hostNameSslStates": [ + { + "name": "sitef6141.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Standard" + }, + { + "name": "sitef6141.scm.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Repository" + } + ], + "serverFarmId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/serverfarms/DefaultAsp", + "reserved": false, + "isXenon": false, + "hyperV": false, + "lastModifiedTimeUtc": "2020-03-04T17:33:11.641Z", + "outboundVnetRouting": { + "allTraffic": false, + "applicationTraffic": false, + "contentShareTraffic": false, + "imagePullTraffic": false, + "backupRestoreTraffic": false + }, + "siteConfig": { + "numberOfWorkers": 1, + "defaultDocuments": [ + "Default.htm", + "Default.html", + "Default.asp", + "index.htm", + "index.html", + "iisstart.htm", + "default.aspx", + "index.php", + "hostingstart.html" + ], + "netFrameworkVersion": "v4.0", + "phpVersion": "5.6", + "pythonVersion": "", + "nodeVersion": "", + "powerShellVersion": "", + "linuxFxVersion": "DOCKER|mcr.microsoft.com/appsvc/staticsite:latest", + "requestTracingEnabled": false, + "remoteDebuggingEnabled": false, + "httpLoggingEnabled": false, + "acrUseManagedIdentityCreds": false, + "logsDirectorySizeLimit": 35, + "detailedErrorLoggingEnabled": false, + "use32BitWorkerProcess": true, + "webSocketsEnabled": false, + "alwaysOn": false, + "appCommandLine": "", + "managedPipelineMode": "Integrated", + "virtualApplications": [ + { + "virtualPath": "/", + "physicalPath": "site\\wwwroot", + "preloadEnabled": false + } + ], + "loadBalancing": "LeastRequests", + "autoHealEnabled": false, + "vnetName": "", + "vnetRouteAllEnabled": false, + "vnetPrivatePortsCount": 0, + "http20Enabled": false, + "minTlsVersion": "1.2", + "scmMinTlsVersion": "1.2", + "ftpsState": "AllAllowed", + "functionAppScaleLimit": 0, + "functionsRuntimeScaleMonitoringEnabled": false, + "minimumElasticInstanceCount": 0, + "azureStorageAccounts": {} + }, + "scmSiteAlsoStopped": false, + "clientAffinityEnabled": true, + "clientCertEnabled": false, + "clientCertMode": "Required", + "hostNamesDisabled": false, + "customDomainVerificationId": "7F3BB652450EF7AD0B6AA33064586E4A9CE823A46DF0B2EC6443A68086E84153", + "outboundIpAddresses": "203.0.113.201,198.51.100.144", + "possibleOutboundIpAddresses": "203.0.113.201,198.51.100.144,203.0.113.122,198.51.100.188", + "containerSize": 0, + "dailyMemoryTimeQuota": 0, + "resourceGroup": "testrg123", + "defaultHostName": "sitef6141.azurewebsites.net", + "httpsOnly": false, + "redundancyMode": "None", + "storageAccountRequired": false, + "keyVaultReferenceIdentity": "SystemAssigned", + "workloadProfileName": "myd4wp", + "resourceConfig": { + "cpu": 1, + "memory": "2.0Gi" + } + }, + { + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/sites/sitef7252", + "name": "sitef7252", + "type": "Microsoft.Web/sites", + "kind": "app", + "location": "East US", + "state": "Running", + "hostNames": [ + "sitef7252.azurewebsites.net" + ], + "repositorySiteName": "sitef7252", + "usageState": "Normal", + "enabled": true, + "enabledHostNames": [ + "sitef7252.azurewebsites.net", + "sitef7252.scm.azurewebsites.net" + ], + "availabilityState": "Normal", + "hostNameSslStates": [ + { + "name": "sitef7252.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Standard" + }, + { + "name": "sitef7252.scm.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Repository" + } + ], + "serverFarmId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/serverfarms/DefaultAsp", + "reserved": false, + "isXenon": false, + "hyperV": false, + "lastModifiedTimeUtc": "2020-03-04T17:33:11.641Z", + "outboundVnetRouting": { + "allTraffic": false, + "applicationTraffic": false, + "contentShareTraffic": false, + "imagePullTraffic": false, + "backupRestoreTraffic": false + }, + "siteConfig": { + "numberOfWorkers": 1, + "defaultDocuments": [ + "Default.htm", + "Default.html", + "Default.asp", + "index.htm", + "index.html", + "iisstart.htm", + "default.aspx", + "index.php", + "hostingstart.html" + ], + "netFrameworkVersion": "v4.0", + "phpVersion": "5.6", + "pythonVersion": "", + "nodeVersion": "", + "powerShellVersion": "", + "linuxFxVersion": "", + "requestTracingEnabled": false, + "remoteDebuggingEnabled": false, + "httpLoggingEnabled": false, + "acrUseManagedIdentityCreds": false, + "logsDirectorySizeLimit": 35, + "detailedErrorLoggingEnabled": false, + "use32BitWorkerProcess": true, + "webSocketsEnabled": false, + "alwaysOn": false, + "appCommandLine": "", + "managedPipelineMode": "Integrated", + "virtualApplications": [ + { + "virtualPath": "/", + "physicalPath": "site\\wwwroot", + "preloadEnabled": false + } + ], + "loadBalancing": "LeastRequests", + "autoHealEnabled": false, + "vnetName": "", + "vnetRouteAllEnabled": false, + "vnetPrivatePortsCount": 0, + "http20Enabled": false, + "minTlsVersion": "1.2", + "scmMinTlsVersion": "1.2", + "ftpsState": "AllAllowed", + "functionAppScaleLimit": 0, + "functionsRuntimeScaleMonitoringEnabled": false, + "minimumElasticInstanceCount": 0, + "azureStorageAccounts": {} + }, + "scmSiteAlsoStopped": false, + "clientAffinityEnabled": true, + "clientCertEnabled": false, + "clientCertMode": "Required", + "hostNamesDisabled": false, + "customDomainVerificationId": "7F3BB652450EF7AD0B6AA33064586E4A9CE823A46DF0B2EC6443A68086E84153", + "outboundIpAddresses": "203.0.113.201,198.51.100.144", + "possibleOutboundIpAddresses": "203.0.113.201,198.51.100.144,203.0.113.122,198.51.100.188", + "containerSize": 0, + "dailyMemoryTimeQuota": 0, + "resourceGroup": "testrg123", + "defaultHostName": "sitef7252.azurewebsites.net", + "httpsOnly": false, + "redundancyMode": "None", + "storageAccountRequired": false, + "keyVaultReferenceIdentity": "SystemAssigned", + "workloadProfileName": "myd4wp", + "resourceConfig": { + "cpu": 1, + "memory": "2.0Gi" + } + } +] diff --git a/verify-layer/fixturi-cloud/azure-webapp.oprita.json b/verify-layer/fixturi-cloud/azure-webapp.oprita.json new file mode 100644 index 0000000..9d65bac --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-webapp.oprita.json @@ -0,0 +1,347 @@ +[ + { + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/sites/sitef6141", + "name": "sitef6141", + "type": "Microsoft.Web/sites", + "kind": "app", + "location": "East US", + "state": "Running", + "hostNames": [ + "sitef6141.azurewebsites.net" + ], + "repositorySiteName": "sitef6141", + "usageState": "Normal", + "enabled": true, + "enabledHostNames": [ + "sitef6141.azurewebsites.net", + "sitef6141.scm.azurewebsites.net" + ], + "availabilityState": "Normal", + "hostNameSslStates": [ + { + "name": "sitef6141.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Standard" + }, + { + "name": "sitef6141.scm.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Repository" + } + ], + "serverFarmId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/serverfarms/DefaultAsp", + "reserved": false, + "isXenon": false, + "hyperV": false, + "lastModifiedTimeUtc": "2020-03-04T17:33:11.641Z", + "outboundVnetRouting": { + "allTraffic": false, + "applicationTraffic": false, + "contentShareTraffic": false, + "imagePullTraffic": false, + "backupRestoreTraffic": false + }, + "siteConfig": { + "numberOfWorkers": 1, + "defaultDocuments": [ + "Default.htm", + "Default.html", + "Default.asp", + "index.htm", + "index.html", + "iisstart.htm", + "default.aspx", + "index.php", + "hostingstart.html" + ], + "netFrameworkVersion": "v4.0", + "phpVersion": "5.6", + "pythonVersion": "", + "nodeVersion": "", + "powerShellVersion": "", + "linuxFxVersion": "DOCKER|mcr.microsoft.com/appsvc/staticsite:latest", + "requestTracingEnabled": false, + "remoteDebuggingEnabled": false, + "httpLoggingEnabled": false, + "acrUseManagedIdentityCreds": false, + "logsDirectorySizeLimit": 35, + "detailedErrorLoggingEnabled": false, + "use32BitWorkerProcess": true, + "webSocketsEnabled": false, + "alwaysOn": false, + "appCommandLine": "", + "managedPipelineMode": "Integrated", + "virtualApplications": [ + { + "virtualPath": "/", + "physicalPath": "site\\wwwroot", + "preloadEnabled": false + } + ], + "loadBalancing": "LeastRequests", + "autoHealEnabled": false, + "vnetName": "", + "vnetRouteAllEnabled": false, + "vnetPrivatePortsCount": 0, + "http20Enabled": false, + "minTlsVersion": "1.2", + "scmMinTlsVersion": "1.2", + "ftpsState": "AllAllowed", + "functionAppScaleLimit": 0, + "functionsRuntimeScaleMonitoringEnabled": false, + "minimumElasticInstanceCount": 0, + "azureStorageAccounts": {} + }, + "scmSiteAlsoStopped": false, + "clientAffinityEnabled": true, + "clientCertEnabled": false, + "clientCertMode": "Required", + "hostNamesDisabled": false, + "customDomainVerificationId": "7F3BB652450EF7AD0B6AA33064586E4A9CE823A46DF0B2EC6443A68086E84153", + "outboundIpAddresses": "203.0.113.201,198.51.100.144", + "possibleOutboundIpAddresses": "203.0.113.201,198.51.100.144,203.0.113.122,198.51.100.188", + "containerSize": 0, + "dailyMemoryTimeQuota": 0, + "resourceGroup": "testrg123", + "defaultHostName": "sitef6141.azurewebsites.net", + "httpsOnly": false, + "redundancyMode": "None", + "storageAccountRequired": false, + "keyVaultReferenceIdentity": "SystemAssigned", + "workloadProfileName": "myd4wp", + "resourceConfig": { + "cpu": 1, + "memory": "2.0Gi" + } + }, + { + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/sites/sitef7252", + "name": "sitef7252", + "type": "Microsoft.Web/sites", + "kind": "app", + "location": "East US", + "state": "Running", + "hostNames": [ + "sitef7252.azurewebsites.net" + ], + "repositorySiteName": "sitef7252", + "usageState": "Normal", + "enabled": true, + "enabledHostNames": [ + "sitef7252.azurewebsites.net", + "sitef7252.scm.azurewebsites.net" + ], + "availabilityState": "Normal", + "hostNameSslStates": [ + { + "name": "sitef7252.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Standard" + }, + { + "name": "sitef7252.scm.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Repository" + } + ], + "serverFarmId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/serverfarms/DefaultAsp", + "reserved": false, + "isXenon": false, + "hyperV": false, + "lastModifiedTimeUtc": "2020-03-04T17:33:11.641Z", + "outboundVnetRouting": { + "allTraffic": false, + "applicationTraffic": false, + "contentShareTraffic": false, + "imagePullTraffic": false, + "backupRestoreTraffic": false + }, + "siteConfig": { + "numberOfWorkers": 1, + "defaultDocuments": [ + "Default.htm", + "Default.html", + "Default.asp", + "index.htm", + "index.html", + "iisstart.htm", + "default.aspx", + "index.php", + "hostingstart.html" + ], + "netFrameworkVersion": "v4.0", + "phpVersion": "5.6", + "pythonVersion": "", + "nodeVersion": "", + "powerShellVersion": "", + "linuxFxVersion": "", + "requestTracingEnabled": false, + "remoteDebuggingEnabled": false, + "httpLoggingEnabled": false, + "acrUseManagedIdentityCreds": false, + "logsDirectorySizeLimit": 35, + "detailedErrorLoggingEnabled": false, + "use32BitWorkerProcess": true, + "webSocketsEnabled": false, + "alwaysOn": false, + "appCommandLine": "", + "managedPipelineMode": "Integrated", + "virtualApplications": [ + { + "virtualPath": "/", + "physicalPath": "site\\wwwroot", + "preloadEnabled": false + } + ], + "loadBalancing": "LeastRequests", + "autoHealEnabled": false, + "vnetName": "", + "vnetRouteAllEnabled": false, + "vnetPrivatePortsCount": 0, + "http20Enabled": false, + "minTlsVersion": "1.2", + "scmMinTlsVersion": "1.2", + "ftpsState": "AllAllowed", + "functionAppScaleLimit": 0, + "functionsRuntimeScaleMonitoringEnabled": false, + "minimumElasticInstanceCount": 0, + "azureStorageAccounts": {} + }, + "scmSiteAlsoStopped": false, + "clientAffinityEnabled": true, + "clientCertEnabled": false, + "clientCertMode": "Required", + "hostNamesDisabled": false, + "customDomainVerificationId": "7F3BB652450EF7AD0B6AA33064586E4A9CE823A46DF0B2EC6443A68086E84153", + "outboundIpAddresses": "203.0.113.201,198.51.100.144", + "possibleOutboundIpAddresses": "203.0.113.201,198.51.100.144,203.0.113.122,198.51.100.188", + "containerSize": 0, + "dailyMemoryTimeQuota": 0, + "resourceGroup": "testrg123", + "defaultHostName": "sitef7252.azurewebsites.net", + "httpsOnly": false, + "redundancyMode": "None", + "storageAccountRequired": false, + "keyVaultReferenceIdentity": "SystemAssigned", + "workloadProfileName": "myd4wp", + "resourceConfig": { + "cpu": 1, + "memory": "2.0Gi" + } + }, + { + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/sites/sitef0000", + "name": "sitef0000", + "type": "Microsoft.Web/sites", + "kind": "app", + "location": "East US", + "state": "Stopped", + "hostNames": [ + "sitef7252.azurewebsites.net" + ], + "repositorySiteName": "sitef7252", + "usageState": "Normal", + "enabled": true, + "enabledHostNames": [ + "sitef7252.azurewebsites.net", + "sitef7252.scm.azurewebsites.net" + ], + "availabilityState": "Normal", + "hostNameSslStates": [ + { + "name": "sitef7252.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Standard" + }, + { + "name": "sitef7252.scm.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Repository" + } + ], + "serverFarmId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/serverfarms/DefaultAsp", + "reserved": false, + "isXenon": false, + "hyperV": false, + "lastModifiedTimeUtc": "2020-03-04T17:33:11.641Z", + "outboundVnetRouting": { + "allTraffic": false, + "applicationTraffic": false, + "contentShareTraffic": false, + "imagePullTraffic": false, + "backupRestoreTraffic": false + }, + "siteConfig": { + "numberOfWorkers": 1, + "defaultDocuments": [ + "Default.htm", + "Default.html", + "Default.asp", + "index.htm", + "index.html", + "iisstart.htm", + "default.aspx", + "index.php", + "hostingstart.html" + ], + "netFrameworkVersion": "v4.0", + "phpVersion": "5.6", + "pythonVersion": "", + "nodeVersion": "", + "powerShellVersion": "", + "linuxFxVersion": "", + "requestTracingEnabled": false, + "remoteDebuggingEnabled": false, + "httpLoggingEnabled": false, + "acrUseManagedIdentityCreds": false, + "logsDirectorySizeLimit": 35, + "detailedErrorLoggingEnabled": false, + "use32BitWorkerProcess": true, + "webSocketsEnabled": false, + "alwaysOn": false, + "appCommandLine": "", + "managedPipelineMode": "Integrated", + "virtualApplications": [ + { + "virtualPath": "/", + "physicalPath": "site\\wwwroot", + "preloadEnabled": false + } + ], + "loadBalancing": "LeastRequests", + "autoHealEnabled": false, + "vnetName": "", + "vnetRouteAllEnabled": false, + "vnetPrivatePortsCount": 0, + "http20Enabled": false, + "minTlsVersion": "1.2", + "scmMinTlsVersion": "1.2", + "ftpsState": "AllAllowed", + "functionAppScaleLimit": 0, + "functionsRuntimeScaleMonitoringEnabled": false, + "minimumElasticInstanceCount": 0, + "azureStorageAccounts": {} + }, + "scmSiteAlsoStopped": false, + "clientAffinityEnabled": true, + "clientCertEnabled": false, + "clientCertMode": "Required", + "hostNamesDisabled": false, + "customDomainVerificationId": "7F3BB652450EF7AD0B6AA33064586E4A9CE823A46DF0B2EC6443A68086E84153", + "outboundIpAddresses": "203.0.113.201,198.51.100.144", + "possibleOutboundIpAddresses": "203.0.113.201,198.51.100.144,203.0.113.122,198.51.100.188", + "containerSize": 0, + "dailyMemoryTimeQuota": 0, + "resourceGroup": "testrg123", + "defaultHostName": "sitef7252.azurewebsites.net", + "httpsOnly": false, + "redundancyMode": "None", + "storageAccountRequired": false, + "keyVaultReferenceIdentity": "SystemAssigned", + "workloadProfileName": "myd4wp", + "resourceConfig": { + "cpu": 1, + "memory": "2.0Gi" + } + } +] diff --git a/verify-layer/fixturi-cloud/azure-webapp.secrete.json b/verify-layer/fixturi-cloud/azure-webapp.secrete.json new file mode 100644 index 0000000..0cb5d5e --- /dev/null +++ b/verify-layer/fixturi-cloud/azure-webapp.secrete.json @@ -0,0 +1,249 @@ +[ + { + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/sites/sitef6141", + "name": "sitef6141", + "type": "Microsoft.Web/sites", + "kind": "app", + "location": "East US", + "state": "Running", + "hostNames": [ + "sitef6141.azurewebsites.net" + ], + "repositorySiteName": "sitef6141", + "usageState": "Normal", + "enabled": true, + "enabledHostNames": [ + "sitef6141.azurewebsites.net", + "sitef6141.scm.azurewebsites.net" + ], + "availabilityState": "Normal", + "hostNameSslStates": [ + { + "name": "sitef6141.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Standard" + }, + { + "name": "sitef6141.scm.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Repository" + } + ], + "serverFarmId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/serverfarms/DefaultAsp", + "reserved": false, + "isXenon": false, + "hyperV": false, + "lastModifiedTimeUtc": "2020-03-04T17:33:11.641Z", + "outboundVnetRouting": { + "allTraffic": false, + "applicationTraffic": false, + "contentShareTraffic": false, + "imagePullTraffic": false, + "backupRestoreTraffic": false + }, + "siteConfig": { + "numberOfWorkers": 1, + "defaultDocuments": [ + "Default.htm", + "Default.html", + "Default.asp", + "index.htm", + "index.html", + "iisstart.htm", + "default.aspx", + "index.php", + "hostingstart.html" + ], + "netFrameworkVersion": "v4.0", + "phpVersion": "5.6", + "pythonVersion": "", + "nodeVersion": "", + "powerShellVersion": "", + "linuxFxVersion": "DOCKER|mcr.microsoft.com/appsvc/staticsite:latest", + "requestTracingEnabled": false, + "remoteDebuggingEnabled": false, + "httpLoggingEnabled": false, + "acrUseManagedIdentityCreds": false, + "logsDirectorySizeLimit": 35, + "detailedErrorLoggingEnabled": false, + "use32BitWorkerProcess": true, + "webSocketsEnabled": false, + "alwaysOn": false, + "appCommandLine": "", + "managedPipelineMode": "Integrated", + "virtualApplications": [ + { + "virtualPath": "/", + "physicalPath": "site\\wwwroot", + "preloadEnabled": false + } + ], + "loadBalancing": "LeastRequests", + "autoHealEnabled": false, + "vnetName": "", + "vnetRouteAllEnabled": false, + "vnetPrivatePortsCount": 0, + "http20Enabled": false, + "minTlsVersion": "1.2", + "scmMinTlsVersion": "1.2", + "ftpsState": "AllAllowed", + "functionAppScaleLimit": 0, + "functionsRuntimeScaleMonitoringEnabled": false, + "minimumElasticInstanceCount": 0, + "azureStorageAccounts": {}, + "appSettings": [ + { + "name": "DB_PASSWORD", + "value": "AERE-SINTETIC-valoare-de-mediu-plantata-93c1" + }, + { + "name": "WEBSITES_PORT", + "value": "8080" + } + ], + "connectionStrings": [ + { + "name": "Main", + "connectionString": "AERE-SINTETIC-valoare-de-mediu-plantata-93c1", + "type": "SQLAzure" + } + ] + }, + "scmSiteAlsoStopped": false, + "clientAffinityEnabled": true, + "clientCertEnabled": false, + "clientCertMode": "Required", + "hostNamesDisabled": false, + "customDomainVerificationId": "7F3BB652450EF7AD0B6AA33064586E4A9CE823A46DF0B2EC6443A68086E84153", + "outboundIpAddresses": "203.0.113.201,198.51.100.144", + "possibleOutboundIpAddresses": "203.0.113.201,198.51.100.144,203.0.113.122,198.51.100.188", + "containerSize": 0, + "dailyMemoryTimeQuota": 0, + "resourceGroup": "testrg123", + "defaultHostName": "sitef6141.azurewebsites.net", + "httpsOnly": false, + "redundancyMode": "None", + "storageAccountRequired": false, + "keyVaultReferenceIdentity": "SystemAssigned", + "workloadProfileName": "myd4wp", + "resourceConfig": { + "cpu": 1, + "memory": "2.0Gi" + } + }, + { + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/sites/sitef7252", + "name": "sitef7252", + "type": "Microsoft.Web/sites", + "kind": "app", + "location": "East US", + "state": "Running", + "hostNames": [ + "sitef7252.azurewebsites.net" + ], + "repositorySiteName": "sitef7252", + "usageState": "Normal", + "enabled": true, + "enabledHostNames": [ + "sitef7252.azurewebsites.net", + "sitef7252.scm.azurewebsites.net" + ], + "availabilityState": "Normal", + "hostNameSslStates": [ + { + "name": "sitef7252.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Standard" + }, + { + "name": "sitef7252.scm.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Repository" + } + ], + "serverFarmId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/serverfarms/DefaultAsp", + "reserved": false, + "isXenon": false, + "hyperV": false, + "lastModifiedTimeUtc": "2020-03-04T17:33:11.641Z", + "outboundVnetRouting": { + "allTraffic": false, + "applicationTraffic": false, + "contentShareTraffic": false, + "imagePullTraffic": false, + "backupRestoreTraffic": false + }, + "siteConfig": { + "numberOfWorkers": 1, + "defaultDocuments": [ + "Default.htm", + "Default.html", + "Default.asp", + "index.htm", + "index.html", + "iisstart.htm", + "default.aspx", + "index.php", + "hostingstart.html" + ], + "netFrameworkVersion": "v4.0", + "phpVersion": "5.6", + "pythonVersion": "", + "nodeVersion": "", + "powerShellVersion": "", + "linuxFxVersion": "", + "requestTracingEnabled": false, + "remoteDebuggingEnabled": false, + "httpLoggingEnabled": false, + "acrUseManagedIdentityCreds": false, + "logsDirectorySizeLimit": 35, + "detailedErrorLoggingEnabled": false, + "use32BitWorkerProcess": true, + "webSocketsEnabled": false, + "alwaysOn": false, + "appCommandLine": "", + "managedPipelineMode": "Integrated", + "virtualApplications": [ + { + "virtualPath": "/", + "physicalPath": "site\\wwwroot", + "preloadEnabled": false + } + ], + "loadBalancing": "LeastRequests", + "autoHealEnabled": false, + "vnetName": "", + "vnetRouteAllEnabled": false, + "vnetPrivatePortsCount": 0, + "http20Enabled": false, + "minTlsVersion": "1.2", + "scmMinTlsVersion": "1.2", + "ftpsState": "AllAllowed", + "functionAppScaleLimit": 0, + "functionsRuntimeScaleMonitoringEnabled": false, + "minimumElasticInstanceCount": 0, + "azureStorageAccounts": {} + }, + "scmSiteAlsoStopped": false, + "clientAffinityEnabled": true, + "clientCertEnabled": false, + "clientCertMode": "Required", + "hostNamesDisabled": false, + "customDomainVerificationId": "7F3BB652450EF7AD0B6AA33064586E4A9CE823A46DF0B2EC6443A68086E84153", + "outboundIpAddresses": "203.0.113.201,198.51.100.144", + "possibleOutboundIpAddresses": "203.0.113.201,198.51.100.144,203.0.113.122,198.51.100.188", + "containerSize": 0, + "dailyMemoryTimeQuota": 0, + "resourceGroup": "testrg123", + "defaultHostName": "sitef7252.azurewebsites.net", + "httpsOnly": false, + "redundancyMode": "None", + "storageAccountRequired": false, + "keyVaultReferenceIdentity": "SystemAssigned", + "workloadProfileName": "myd4wp", + "resourceConfig": { + "cpu": 1, + "memory": "2.0Gi" + } + } +] diff --git a/verify-layer/fixturi-cloud/deriva.mjs b/verify-layer/fixturi-cloud/deriva.mjs new file mode 100644 index 0000000..405fbe6 --- /dev/null +++ b/verify-layer/fixturi-cloud/deriva.mjs @@ -0,0 +1,90 @@ +#!/usr/bin/env node +// fixturi-cloud/deriva.mjs (B15, 2026-10-18): fixturile adaptoarelor pe furnizori de cloud, DERIVATE determinist din sursele din +// `surse/` (copiile exacte ale exemplelor din documentatia oficiala a fiecarui CLI/API; pentru GCP, unde documentatia nu are un exemplu +// de iesire, o forma construita din schema documentata, numita `din-schema`). Pentru fiecare sursa se scriu: +// .json forma pe care o scrie CLI-ul (pentru Azure: `properties` aplatizat cum face az, plus campurile pe care CLI-ul le +// adauga si pe care exemplul REST nu le are: powerState la `az vm list -d`, instanceView la `az container show`) +// .oprita.json aceeasi forma plus o incarcatura OPRITA (nu are voie sa intre in jurnal) +// .secrete.json aceeasi forma cu variabile de mediu CU VALORI plantate (valorile nu au voie sa apara in jurnal) +// plus cateva variante care exercita refuzurile pe nume (fara -d, fara instanceView). Tot ce e modificat fata de sursa e scris AICI, +// in cod, nu de mana in fisiere: proba re-deriva si compara octet cu octet cu ce e pe disc. +// node deriva.mjs scrie fixturile langa acest fisier +// node deriva.mjs --verifica compara cu ce e pe disc: 0 identice, 1 diferite +import fs from 'node:fs'; import path from 'node:path'; import { fileURLToPath, pathToFileURL } from 'node:url'; + +const AICI = path.dirname(fileURLToPath(import.meta.url)); +const SURSE = path.join(AICI, 'surse'); +export const SECRET = 'AERE-SINTETIC-valoare-de-mediu-plantata-93c1'; +export const SECRET_DATE = 'AERE-SINTETIC-customData-plantat-5e7b'; +const citeste = (f) => JSON.parse(fs.readFileSync(path.join(SURSE, f), 'utf8')); +const clona = (o) => JSON.parse(JSON.stringify(o)); +// az CLI scrie resursele ARM cu `properties` aplatizat in obiectul resursei (si la fel containerele dintr-un grup ACI) +const aplatizeaza = (o) => { const { properties, ...rest } = o; return { ...rest, ...(properties || {}) }; }; + +export function deriva() { + const out = {}; + // ---- AWS: iesirile CLI sunt copiate exact; variantele adauga/planteaza ---------------------------------------------------- + { const t = citeste('aws-ecs-describe-tasks.json'); const d = citeste('aws-ecs-describe-task-definition.json'); + // definitia din documentatie (hello_world:8) nu e cea a task-ului din exemplu (console-sample-app-static2:1): forma CLI primeste + // o definitie aliniata pe ARN-ul si pe containerul task-ului, cu un secret referit prin ARN (secrets[].valueFrom), nu prin valoare + const def = clona(d); def.taskDefinition.taskDefinitionArn = t.tasks[0].taskDefinitionArn; def.taskDefinition.family = 'console-sample-app-static2'; def.taskDefinition.revision = 1; + def.taskDefinition.containerDefinitions = [{ name: 'simple-app', image: 'httpd:2.4', cpu: 10, memory: 300, essential: true, command: ['httpd-foreground'], + environment: [{ name: 'HTTPD_PORT', value: '80' }], secrets: [{ name: 'API_TOKEN', valueFrom: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:api-token-AbCdEf' }], + mountPoints: [{ sourceVolume: 'www', containerPath: '/usr/local/apache2/htdocs', readOnly: true }], portMappings: [{ containerPort: 80, hostPort: 80 }] }]; + out['aws-ecs.json'] = clona(t); out['aws-ecs.definitii.json'] = def; + const op = clona(t); const oprit = clona(t.tasks[0]); oprit.taskArn = 'arn:aws:ecs:us-east-1:123456789012:task/MyCluster/0000000000000000000000oprita'; oprit.lastStatus = 'STOPPED'; oprit.desiredStatus = 'STOPPED'; oprit.stoppedReason = 'Essential container in task exited'; oprit.containers[0].lastStatus = 'STOPPED'; oprit.containers[0].exitCode = 0; op.tasks.push(oprit); + out['aws-ecs.oprita.json'] = op; + const sec = clona(t); sec.tasks[0].overrides.containerOverrides[0].environment = [{ name: 'OVERRIDE_TOKEN', value: SECRET }]; out['aws-ecs.secrete.json'] = sec; + const secDef = clona(def); secDef.taskDefinition.containerDefinitions[0].environment.push({ name: 'DB_PASSWORD', value: SECRET }); out['aws-ecs.secrete.definitii.json'] = secDef; } + { const e = citeste('aws-ec2-describe-instances.json'); out['aws-ec2.json'] = clona(e); + const op = clona(e); const oprit = clona(e.Reservations[0].Instances[0]); oprit.InstanceId = 'i-0000000000oprita00'; oprit.State = { Code: 80, Name: 'stopped' }; oprit.StateTransitionReason = 'User initiated (2026-10-17 20:00:00 GMT)'; op.Reservations[0].Instances.push(oprit); out['aws-ec2.oprita.json'] = op; + const sec = clona(e); sec.Reservations[0].Instances[0].Tags.push({ Key: 'DB_PASSWORD', Value: SECRET }); out['aws-ec2.secrete.json'] = sec; } + { const l = citeste('aws-lambda-list-functions.json'); out['aws-lambda.json'] = clona(l); + const op = clona(l); const oprit = clona(l.Functions[0]); oprit.FunctionName = 'inactive-function'; oprit.FunctionArn = 'arn:aws:lambda:us-west-2:123456789012:function:inactive-function'; oprit.State = 'Inactive'; oprit.StateReason = 'Function is inactive'; op.Functions.push(oprit); out['aws-lambda.oprita.json'] = op; + const sec = clona(l); sec.Functions[0].Environment = { Variables: { DB_PASSWORD: SECRET, LOG_LEVEL: 'info' } }; out['aws-lambda.secrete.json'] = sec; } + // ---- Azure: exemplele REST, aduse la forma CLI -------------------------------------------------------------------------------- + { const r = citeste('azure-vm-list-rest-2026-04-01.json'); const vms = r.responses['200'].body.value.map((v) => ({ ...aplatizeaza(v), resourceGroup: /\/resourceGroups\/([^/]+)\//i.exec(v.id)[1] })); + // `az vm list -d` adauga powerState (displayStatus-ul starii PowerState/* din instanceView) si scoate instanceView (azure-cli vm/custom.py get_vm_details) + const cuD = vms.map((v) => { const { instanceView, ...rest } = v; return { ...rest, powerState: 'VM running', publicIps: '', fqdns: '', privateIps: '10.0.0.4', macAddresses: '' }; }); + out['azure-vm.json'] = cuD; out['azure-vm.fara-d.json'] = vms; + const op = clona(cuD); const oprit = clona(cuD[0]); oprit.name = 'vm-oprita'; oprit.id = oprit.id.replace(/\/[^/]+$/, '/vm-oprita'); oprit.powerState = 'VM deallocated'; op.push(oprit); out['azure-vm.oprita.json'] = op; + const sec = clona(cuD); sec[0].osProfile.customData = SECRET_DATE; sec[0].userData = SECRET_DATE; sec[0].tags = { DB_PASSWORD: SECRET, env: 'prod' }; out['azure-vm.secrete.json'] = sec; } + { const r = citeste('azure-container-groups-list-rest-2026-07-01.json'); + // `az container show` poarta instanceView (ContainerPropertiesInstanceView: currentState {state, startTime, detailStatus}, restartCount); exemplul REST de list nu il are + const stare = (state, extra = {}) => ({ currentState: { state, startTime: '2026-10-18T06:00:00Z', detailStatus: '', ...extra }, events: [], restartCount: 0 }); + const grupuri = r.value.map((g) => { const f = aplatizeaza(g); f.resourceGroup = /\/resourceGroups\/([^/]+)\//i.exec(g.id)[1]; f.containers = f.containers.map(aplatizeaza); return f; }); + const cuStare = clona(grupuri); for (const g of cuStare) { g.instanceView = { state: 'Running', events: [] }; for (const c of g.containers) c.instanceView = stare('Running'); } + out['azure-container.json'] = cuStare; out['azure-container.fara-stare.json'] = grupuri; + const op = clona(cuStare); const oprit = clona(cuStare[0]); oprit.name = 'demo2'; oprit.id = oprit.id.replace(/\/[^/]+$/, '/demo2'); oprit.instanceView.state = 'Stopped'; oprit.containers[0].instanceView = stare('Terminated', { exitCode: 0, finishTime: '2026-10-18T06:05:00Z' }); op.push(oprit); out['azure-container.oprita.json'] = op; + const sec = clona(cuStare); sec[0].containers[0].environmentVariables = [{ name: 'DB_PASSWORD', value: SECRET }, { name: 'API_KEY', secureValue: SECRET }]; out['azure-container.secrete.json'] = sec; } + { const r = citeste('azure-containerapps-list-rest-2026-07-01.json'); const apps = r.responses['200'].body.value; out['azure-containerapp.json'] = clona(apps); + const op = clona(apps); const oprit = clona(apps[0]); oprit.name = 'testcontainerApp1'; oprit.id = oprit.id.replace(/\/[^/]+$/, '/testcontainerApp1'); oprit.properties.runningStatus = 'Stopped'; op.push(oprit); out['azure-containerapp.oprita.json'] = op; + const sec = clona(apps); sec[0].properties.template.containers[0].env = [{ name: 'DB_PASSWORD', value: SECRET }, { name: 'API_KEY', secretRef: 'api-key' }]; sec[0].properties.configuration.secrets = [{ name: 'api-key', value: SECRET }]; out['azure-containerapp.secrete.json'] = sec; } + { const r = citeste('azure-webapps-list-rest-2024-11-01.json'); const sites = r.value.map(aplatizeaza); + // primul sit primeste un runtime de container (cum il lasa `az webapp config container set`); exemplul REST are linuxFxVersion gol + sites[0].siteConfig.linuxFxVersion = 'DOCKER|mcr.microsoft.com/appsvc/staticsite:latest'; + out['azure-webapp.json'] = clona(sites); + const op = clona(sites); const oprit = clona(sites[1]); oprit.name = 'sitef0000'; oprit.id = oprit.id.replace(/\/[^/]+$/, '/sitef0000'); oprit.state = 'Stopped'; op.push(oprit); out['azure-webapp.oprita.json'] = op; + const sec = clona(sites); sec[0].siteConfig.appSettings = [{ name: 'DB_PASSWORD', value: SECRET }, { name: 'WEBSITES_PORT', value: '8080' }]; sec[0].siteConfig.connectionStrings = [{ name: 'Main', connectionString: SECRET, type: 'SQLAzure' }]; out['azure-webapp.secrete.json'] = sec; } + // ---- GCP: formele din schema ---------------------------------------------------------------------------------------------------- + { const i = citeste('gcp-compute-instances-din-schema.json'); out['gcp-compute.json'] = clona(i); + const op = clona(i); const oprit = clona(i[0]); oprit.name = 'api-2'; oprit.id = '4218766341062832346'; oprit.status = 'TERMINATED'; oprit.selfLink = oprit.selfLink.replace(/api-1$/, 'api-2'); oprit.lastStopTimestamp = '2026-10-17T20:00:00.000-07:00'; op.push(oprit); out['gcp-compute.oprita.json'] = op; + const sec = clona(i); sec[0].metadata.items.push({ key: 'user-data', value: SECRET }); sec[0].metadata.items.find((x) => x.key === 'startup-script').value = `#! /bin/bash\nexport DB_PASSWORD=${SECRET}\n`; out['gcp-compute.secrete.json'] = sec; } + { const s = citeste('gcp-run-services-din-schema.json'); out['gcp-run.json'] = clona(s); + const op = clona(s); const oprit = clona(s[0]); oprit.metadata.name = 'batch'; oprit.metadata.uid = '00000000-0000-4000-8000-00000000oprita'; oprit.status.conditions[0] = { type: 'Ready', status: 'False', reason: 'RevisionFailed', message: 'Revision batch-00001-abc is not ready.', lastTransitionTime: '2026-10-17T20:00:00.000000Z' }; op.push(oprit); out['gcp-run.oprita.json'] = op; + const sec = clona(s); sec[0].spec.template.spec.containers[0].env.push({ name: 'DB_PASSWORD_PLAIN', value: SECRET }); out['gcp-run.secrete.json'] = sec; } + return out; +} +export const FISIERE = Object.keys(deriva()); +export const text = (o) => JSON.stringify(o, null, 2) + '\n'; + +if (import.meta.url === pathToFileURL(process.argv[1] || '').href) { + const d = deriva(); let diferite = 0; + for (const [f, o] of Object.entries(d)) { + const p = path.join(AICI, f); const t = text(o); + if (process.argv.includes('--verifica')) { const pe = fs.existsSync(p) ? fs.readFileSync(p, 'utf8') : null; if (pe !== t) { diferite++; console.log('DIFERIT ' + f); } } + else fs.writeFileSync(p, t); + } + if (process.argv.includes('--verifica')) { console.log(diferite ? `${diferite} fixturi difera de derivare` : `fixturile de pe disc sunt cele derivate (${Object.keys(d).length})`); process.exitCode = diferite ? 1 : 0; } + else console.log(`scrise ${Object.keys(d).length} fixturi in ${AICI}`); +} diff --git a/verify-layer/fixturi-cloud/gcp-compute.json b/verify-layer/fixturi-cloud/gcp-compute.json new file mode 100644 index 0000000..da17fc9 --- /dev/null +++ b/verify-layer/fixturi-cloud/gcp-compute.json @@ -0,0 +1,110 @@ +[ + { + "kind": "compute#instance", + "id": "4218766341062832345", + "creationTimestamp": "2026-10-01T08:12:03.512-07:00", + "name": "api-1", + "description": "", + "tags": { + "items": [ + "http-server" + ], + "fingerprint": "Qm9vdHN0cmFw" + }, + "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/machineTypes/e2-standard-2", + "status": "RUNNING", + "zone": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a", + "networkInterfaces": [ + { + "kind": "compute#networkInterface", + "network": "https://www.googleapis.com/compute/v1/projects/example-project/global/networks/default", + "subnetwork": "https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/subnetworks/default", + "networkIP": "10.128.0.5", + "name": "nic0", + "fingerprint": "bmljMA==", + "stackType": "IPV4_ONLY" + } + ], + "disks": [ + { + "kind": "compute#attachedDisk", + "type": "PERSISTENT", + "mode": "READ_WRITE", + "source": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/disks/api-1", + "deviceName": "persistent-disk-0", + "index": 0, + "boot": true, + "autoDelete": true, + "licenses": [ + "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-bookworm" + ], + "interface": "SCSI", + "guestOsFeatures": [ + { + "type": "UEFI_COMPATIBLE" + }, + { + "type": "VIRTIO_SCSI_MULTIQUEUE" + }, + { + "type": "GVNIC" + } + ], + "diskSizeGb": "10", + "architecture": "X86_64" + } + ], + "metadata": { + "kind": "compute#metadata", + "fingerprint": "bWV0YWRhdGE=", + "items": [ + { + "key": "enable-oslogin", + "value": "TRUE" + }, + { + "key": "ssh-keys", + "value": "operator:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleExampleExampleExampleExampleExampleEx operator" + }, + { + "key": "startup-script", + "value": "#! /bin/bash\napt-get update\n" + } + ] + }, + "serviceAccounts": [ + { + "email": "123456789012-compute@developer.gserviceaccount.com", + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + ], + "selfLink": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/api-1", + "scheduling": { + "onHostMaintenance": "MIGRATE", + "automaticRestart": true, + "preemptible": false, + "provisioningModel": "STANDARD" + }, + "cpuPlatform": "Intel Broadwell", + "labels": { + "env": "prod", + "team": "payments" + }, + "labelFingerprint": "bGFiZWxz", + "startRestricted": false, + "deletionProtection": false, + "shieldedInstanceConfig": { + "enableSecureBoot": false, + "enableVtpm": true, + "enableIntegrityMonitoring": true + }, + "shieldedInstanceIntegrityPolicy": { + "updateAutoLearnPolicy": true + }, + "fingerprint": "aW5zdGFuY2U=", + "lastStartTimestamp": "2026-10-01T08:12:40.101-07:00", + "satisfiesPzi": true + } +] diff --git a/verify-layer/fixturi-cloud/gcp-compute.oprita.json b/verify-layer/fixturi-cloud/gcp-compute.oprita.json new file mode 100644 index 0000000..533a6ba --- /dev/null +++ b/verify-layer/fixturi-cloud/gcp-compute.oprita.json @@ -0,0 +1,219 @@ +[ + { + "kind": "compute#instance", + "id": "4218766341062832345", + "creationTimestamp": "2026-10-01T08:12:03.512-07:00", + "name": "api-1", + "description": "", + "tags": { + "items": [ + "http-server" + ], + "fingerprint": "Qm9vdHN0cmFw" + }, + "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/machineTypes/e2-standard-2", + "status": "RUNNING", + "zone": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a", + "networkInterfaces": [ + { + "kind": "compute#networkInterface", + "network": "https://www.googleapis.com/compute/v1/projects/example-project/global/networks/default", + "subnetwork": "https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/subnetworks/default", + "networkIP": "10.128.0.5", + "name": "nic0", + "fingerprint": "bmljMA==", + "stackType": "IPV4_ONLY" + } + ], + "disks": [ + { + "kind": "compute#attachedDisk", + "type": "PERSISTENT", + "mode": "READ_WRITE", + "source": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/disks/api-1", + "deviceName": "persistent-disk-0", + "index": 0, + "boot": true, + "autoDelete": true, + "licenses": [ + "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-bookworm" + ], + "interface": "SCSI", + "guestOsFeatures": [ + { + "type": "UEFI_COMPATIBLE" + }, + { + "type": "VIRTIO_SCSI_MULTIQUEUE" + }, + { + "type": "GVNIC" + } + ], + "diskSizeGb": "10", + "architecture": "X86_64" + } + ], + "metadata": { + "kind": "compute#metadata", + "fingerprint": "bWV0YWRhdGE=", + "items": [ + { + "key": "enable-oslogin", + "value": "TRUE" + }, + { + "key": "ssh-keys", + "value": "operator:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleExampleExampleExampleExampleExampleEx operator" + }, + { + "key": "startup-script", + "value": "#! /bin/bash\napt-get update\n" + } + ] + }, + "serviceAccounts": [ + { + "email": "123456789012-compute@developer.gserviceaccount.com", + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + ], + "selfLink": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/api-1", + "scheduling": { + "onHostMaintenance": "MIGRATE", + "automaticRestart": true, + "preemptible": false, + "provisioningModel": "STANDARD" + }, + "cpuPlatform": "Intel Broadwell", + "labels": { + "env": "prod", + "team": "payments" + }, + "labelFingerprint": "bGFiZWxz", + "startRestricted": false, + "deletionProtection": false, + "shieldedInstanceConfig": { + "enableSecureBoot": false, + "enableVtpm": true, + "enableIntegrityMonitoring": true + }, + "shieldedInstanceIntegrityPolicy": { + "updateAutoLearnPolicy": true + }, + "fingerprint": "aW5zdGFuY2U=", + "lastStartTimestamp": "2026-10-01T08:12:40.101-07:00", + "satisfiesPzi": true + }, + { + "kind": "compute#instance", + "id": "4218766341062832346", + "creationTimestamp": "2026-10-01T08:12:03.512-07:00", + "name": "api-2", + "description": "", + "tags": { + "items": [ + "http-server" + ], + "fingerprint": "Qm9vdHN0cmFw" + }, + "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/machineTypes/e2-standard-2", + "status": "TERMINATED", + "zone": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a", + "networkInterfaces": [ + { + "kind": "compute#networkInterface", + "network": "https://www.googleapis.com/compute/v1/projects/example-project/global/networks/default", + "subnetwork": "https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/subnetworks/default", + "networkIP": "10.128.0.5", + "name": "nic0", + "fingerprint": "bmljMA==", + "stackType": "IPV4_ONLY" + } + ], + "disks": [ + { + "kind": "compute#attachedDisk", + "type": "PERSISTENT", + "mode": "READ_WRITE", + "source": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/disks/api-1", + "deviceName": "persistent-disk-0", + "index": 0, + "boot": true, + "autoDelete": true, + "licenses": [ + "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-bookworm" + ], + "interface": "SCSI", + "guestOsFeatures": [ + { + "type": "UEFI_COMPATIBLE" + }, + { + "type": "VIRTIO_SCSI_MULTIQUEUE" + }, + { + "type": "GVNIC" + } + ], + "diskSizeGb": "10", + "architecture": "X86_64" + } + ], + "metadata": { + "kind": "compute#metadata", + "fingerprint": "bWV0YWRhdGE=", + "items": [ + { + "key": "enable-oslogin", + "value": "TRUE" + }, + { + "key": "ssh-keys", + "value": "operator:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleExampleExampleExampleExampleExampleEx operator" + }, + { + "key": "startup-script", + "value": "#! /bin/bash\napt-get update\n" + } + ] + }, + "serviceAccounts": [ + { + "email": "123456789012-compute@developer.gserviceaccount.com", + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + ], + "selfLink": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/api-2", + "scheduling": { + "onHostMaintenance": "MIGRATE", + "automaticRestart": true, + "preemptible": false, + "provisioningModel": "STANDARD" + }, + "cpuPlatform": "Intel Broadwell", + "labels": { + "env": "prod", + "team": "payments" + }, + "labelFingerprint": "bGFiZWxz", + "startRestricted": false, + "deletionProtection": false, + "shieldedInstanceConfig": { + "enableSecureBoot": false, + "enableVtpm": true, + "enableIntegrityMonitoring": true + }, + "shieldedInstanceIntegrityPolicy": { + "updateAutoLearnPolicy": true + }, + "fingerprint": "aW5zdGFuY2U=", + "lastStartTimestamp": "2026-10-01T08:12:40.101-07:00", + "satisfiesPzi": true, + "lastStopTimestamp": "2026-10-17T20:00:00.000-07:00" + } +] diff --git a/verify-layer/fixturi-cloud/gcp-compute.secrete.json b/verify-layer/fixturi-cloud/gcp-compute.secrete.json new file mode 100644 index 0000000..004808a --- /dev/null +++ b/verify-layer/fixturi-cloud/gcp-compute.secrete.json @@ -0,0 +1,114 @@ +[ + { + "kind": "compute#instance", + "id": "4218766341062832345", + "creationTimestamp": "2026-10-01T08:12:03.512-07:00", + "name": "api-1", + "description": "", + "tags": { + "items": [ + "http-server" + ], + "fingerprint": "Qm9vdHN0cmFw" + }, + "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/machineTypes/e2-standard-2", + "status": "RUNNING", + "zone": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a", + "networkInterfaces": [ + { + "kind": "compute#networkInterface", + "network": "https://www.googleapis.com/compute/v1/projects/example-project/global/networks/default", + "subnetwork": "https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/subnetworks/default", + "networkIP": "10.128.0.5", + "name": "nic0", + "fingerprint": "bmljMA==", + "stackType": "IPV4_ONLY" + } + ], + "disks": [ + { + "kind": "compute#attachedDisk", + "type": "PERSISTENT", + "mode": "READ_WRITE", + "source": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/disks/api-1", + "deviceName": "persistent-disk-0", + "index": 0, + "boot": true, + "autoDelete": true, + "licenses": [ + "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-bookworm" + ], + "interface": "SCSI", + "guestOsFeatures": [ + { + "type": "UEFI_COMPATIBLE" + }, + { + "type": "VIRTIO_SCSI_MULTIQUEUE" + }, + { + "type": "GVNIC" + } + ], + "diskSizeGb": "10", + "architecture": "X86_64" + } + ], + "metadata": { + "kind": "compute#metadata", + "fingerprint": "bWV0YWRhdGE=", + "items": [ + { + "key": "enable-oslogin", + "value": "TRUE" + }, + { + "key": "ssh-keys", + "value": "operator:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleExampleExampleExampleExampleExampleEx operator" + }, + { + "key": "startup-script", + "value": "#! /bin/bash\nexport DB_PASSWORD=AERE-SINTETIC-valoare-de-mediu-plantata-93c1\n" + }, + { + "key": "user-data", + "value": "AERE-SINTETIC-valoare-de-mediu-plantata-93c1" + } + ] + }, + "serviceAccounts": [ + { + "email": "123456789012-compute@developer.gserviceaccount.com", + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + ], + "selfLink": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/api-1", + "scheduling": { + "onHostMaintenance": "MIGRATE", + "automaticRestart": true, + "preemptible": false, + "provisioningModel": "STANDARD" + }, + "cpuPlatform": "Intel Broadwell", + "labels": { + "env": "prod", + "team": "payments" + }, + "labelFingerprint": "bGFiZWxz", + "startRestricted": false, + "deletionProtection": false, + "shieldedInstanceConfig": { + "enableSecureBoot": false, + "enableVtpm": true, + "enableIntegrityMonitoring": true + }, + "shieldedInstanceIntegrityPolicy": { + "updateAutoLearnPolicy": true + }, + "fingerprint": "aW5zdGFuY2U=", + "lastStartTimestamp": "2026-10-01T08:12:40.101-07:00", + "satisfiesPzi": true + } +] diff --git a/verify-layer/fixturi-cloud/gcp-run.json b/verify-layer/fixturi-cloud/gcp-run.json new file mode 100644 index 0000000..4dcccf6 --- /dev/null +++ b/verify-layer/fixturi-cloud/gcp-run.json @@ -0,0 +1,130 @@ +[ + { + "apiVersion": "serving.knative.dev/v1", + "kind": "Service", + "metadata": { + "name": "api", + "namespace": "123456789012", + "selfLink": "/apis/serving.knative.dev/v1/namespaces/123456789012/services/api", + "uid": "3f2a9c1e-5b7d-4e8f-9a0b-1c2d3e4f5a6b", + "resourceVersion": "AAYy1ZQ0JdU", + "generation": 3, + "creationTimestamp": "2026-09-30T14:02:11.431902Z", + "labels": { + "cloud.googleapis.com/location": "europe-west1" + }, + "annotations": { + "run.googleapis.com/ingress": "all", + "run.googleapis.com/ingress-status": "all", + "serving.knative.dev/creator": "operator@example.com", + "serving.knative.dev/lastModifier": "operator@example.com" + } + }, + "spec": { + "template": { + "metadata": { + "name": "api-00003-xyz", + "annotations": { + "autoscaling.knative.dev/maxScale": "10", + "run.googleapis.com/execution-environment": "gen2" + } + }, + "spec": { + "containerConcurrency": 80, + "timeoutSeconds": 300, + "serviceAccountName": "api-runner@example-project.iam.gserviceaccount.com", + "containers": [ + { + "name": "api-1", + "image": "europe-west1-docker.pkg.dev/example-project/apps/api@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", + "args": [ + "--port=8080" + ], + "ports": [ + { + "name": "http1", + "containerPort": 8080 + } + ], + "env": [ + { + "name": "LOG_LEVEL", + "value": "info" + }, + { + "name": "DB_PASSWORD", + "valueFrom": { + "secretKeyRef": { + "key": "latest", + "name": "db-password" + } + } + } + ], + "resources": { + "limits": { + "cpu": "1000m", + "memory": "512Mi" + } + }, + "volumeMounts": [ + { + "name": "cache", + "mountPath": "/cache" + } + ] + } + ], + "volumes": [ + { + "name": "cache", + "emptyDir": { + "medium": "Memory", + "sizeLimit": "128Mi" + } + } + ] + } + }, + "traffic": [ + { + "percent": 100, + "latestRevision": true + } + ] + }, + "status": { + "observedGeneration": 3, + "conditions": [ + { + "type": "Ready", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:22.870111Z" + }, + { + "type": "ConfigurationsReady", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:20.113005Z" + }, + { + "type": "RoutesReady", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:22.870111Z" + } + ], + "latestReadyRevisionName": "api-00003-xyz", + "latestCreatedRevisionName": "api-00003-xyz", + "traffic": [ + { + "revisionName": "api-00003-xyz", + "percent": 100, + "latestRevision": true + } + ], + "url": "https://api-abc123-ew.a.run.app", + "address": { + "url": "https://api-abc123-ew.a.run.app" + } + } + } +] diff --git a/verify-layer/fixturi-cloud/gcp-run.oprita.json b/verify-layer/fixturi-cloud/gcp-run.oprita.json new file mode 100644 index 0000000..2685abe --- /dev/null +++ b/verify-layer/fixturi-cloud/gcp-run.oprita.json @@ -0,0 +1,260 @@ +[ + { + "apiVersion": "serving.knative.dev/v1", + "kind": "Service", + "metadata": { + "name": "api", + "namespace": "123456789012", + "selfLink": "/apis/serving.knative.dev/v1/namespaces/123456789012/services/api", + "uid": "3f2a9c1e-5b7d-4e8f-9a0b-1c2d3e4f5a6b", + "resourceVersion": "AAYy1ZQ0JdU", + "generation": 3, + "creationTimestamp": "2026-09-30T14:02:11.431902Z", + "labels": { + "cloud.googleapis.com/location": "europe-west1" + }, + "annotations": { + "run.googleapis.com/ingress": "all", + "run.googleapis.com/ingress-status": "all", + "serving.knative.dev/creator": "operator@example.com", + "serving.knative.dev/lastModifier": "operator@example.com" + } + }, + "spec": { + "template": { + "metadata": { + "name": "api-00003-xyz", + "annotations": { + "autoscaling.knative.dev/maxScale": "10", + "run.googleapis.com/execution-environment": "gen2" + } + }, + "spec": { + "containerConcurrency": 80, + "timeoutSeconds": 300, + "serviceAccountName": "api-runner@example-project.iam.gserviceaccount.com", + "containers": [ + { + "name": "api-1", + "image": "europe-west1-docker.pkg.dev/example-project/apps/api@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", + "args": [ + "--port=8080" + ], + "ports": [ + { + "name": "http1", + "containerPort": 8080 + } + ], + "env": [ + { + "name": "LOG_LEVEL", + "value": "info" + }, + { + "name": "DB_PASSWORD", + "valueFrom": { + "secretKeyRef": { + "key": "latest", + "name": "db-password" + } + } + } + ], + "resources": { + "limits": { + "cpu": "1000m", + "memory": "512Mi" + } + }, + "volumeMounts": [ + { + "name": "cache", + "mountPath": "/cache" + } + ] + } + ], + "volumes": [ + { + "name": "cache", + "emptyDir": { + "medium": "Memory", + "sizeLimit": "128Mi" + } + } + ] + } + }, + "traffic": [ + { + "percent": 100, + "latestRevision": true + } + ] + }, + "status": { + "observedGeneration": 3, + "conditions": [ + { + "type": "Ready", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:22.870111Z" + }, + { + "type": "ConfigurationsReady", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:20.113005Z" + }, + { + "type": "RoutesReady", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:22.870111Z" + } + ], + "latestReadyRevisionName": "api-00003-xyz", + "latestCreatedRevisionName": "api-00003-xyz", + "traffic": [ + { + "revisionName": "api-00003-xyz", + "percent": 100, + "latestRevision": true + } + ], + "url": "https://api-abc123-ew.a.run.app", + "address": { + "url": "https://api-abc123-ew.a.run.app" + } + } + }, + { + "apiVersion": "serving.knative.dev/v1", + "kind": "Service", + "metadata": { + "name": "batch", + "namespace": "123456789012", + "selfLink": "/apis/serving.knative.dev/v1/namespaces/123456789012/services/api", + "uid": "00000000-0000-4000-8000-00000000oprita", + "resourceVersion": "AAYy1ZQ0JdU", + "generation": 3, + "creationTimestamp": "2026-09-30T14:02:11.431902Z", + "labels": { + "cloud.googleapis.com/location": "europe-west1" + }, + "annotations": { + "run.googleapis.com/ingress": "all", + "run.googleapis.com/ingress-status": "all", + "serving.knative.dev/creator": "operator@example.com", + "serving.knative.dev/lastModifier": "operator@example.com" + } + }, + "spec": { + "template": { + "metadata": { + "name": "api-00003-xyz", + "annotations": { + "autoscaling.knative.dev/maxScale": "10", + "run.googleapis.com/execution-environment": "gen2" + } + }, + "spec": { + "containerConcurrency": 80, + "timeoutSeconds": 300, + "serviceAccountName": "api-runner@example-project.iam.gserviceaccount.com", + "containers": [ + { + "name": "api-1", + "image": "europe-west1-docker.pkg.dev/example-project/apps/api@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", + "args": [ + "--port=8080" + ], + "ports": [ + { + "name": "http1", + "containerPort": 8080 + } + ], + "env": [ + { + "name": "LOG_LEVEL", + "value": "info" + }, + { + "name": "DB_PASSWORD", + "valueFrom": { + "secretKeyRef": { + "key": "latest", + "name": "db-password" + } + } + } + ], + "resources": { + "limits": { + "cpu": "1000m", + "memory": "512Mi" + } + }, + "volumeMounts": [ + { + "name": "cache", + "mountPath": "/cache" + } + ] + } + ], + "volumes": [ + { + "name": "cache", + "emptyDir": { + "medium": "Memory", + "sizeLimit": "128Mi" + } + } + ] + } + }, + "traffic": [ + { + "percent": 100, + "latestRevision": true + } + ] + }, + "status": { + "observedGeneration": 3, + "conditions": [ + { + "type": "Ready", + "status": "False", + "reason": "RevisionFailed", + "message": "Revision batch-00001-abc is not ready.", + "lastTransitionTime": "2026-10-17T20:00:00.000000Z" + }, + { + "type": "ConfigurationsReady", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:20.113005Z" + }, + { + "type": "RoutesReady", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:22.870111Z" + } + ], + "latestReadyRevisionName": "api-00003-xyz", + "latestCreatedRevisionName": "api-00003-xyz", + "traffic": [ + { + "revisionName": "api-00003-xyz", + "percent": 100, + "latestRevision": true + } + ], + "url": "https://api-abc123-ew.a.run.app", + "address": { + "url": "https://api-abc123-ew.a.run.app" + } + } + } +] diff --git a/verify-layer/fixturi-cloud/gcp-run.secrete.json b/verify-layer/fixturi-cloud/gcp-run.secrete.json new file mode 100644 index 0000000..739511f --- /dev/null +++ b/verify-layer/fixturi-cloud/gcp-run.secrete.json @@ -0,0 +1,134 @@ +[ + { + "apiVersion": "serving.knative.dev/v1", + "kind": "Service", + "metadata": { + "name": "api", + "namespace": "123456789012", + "selfLink": "/apis/serving.knative.dev/v1/namespaces/123456789012/services/api", + "uid": "3f2a9c1e-5b7d-4e8f-9a0b-1c2d3e4f5a6b", + "resourceVersion": "AAYy1ZQ0JdU", + "generation": 3, + "creationTimestamp": "2026-09-30T14:02:11.431902Z", + "labels": { + "cloud.googleapis.com/location": "europe-west1" + }, + "annotations": { + "run.googleapis.com/ingress": "all", + "run.googleapis.com/ingress-status": "all", + "serving.knative.dev/creator": "operator@example.com", + "serving.knative.dev/lastModifier": "operator@example.com" + } + }, + "spec": { + "template": { + "metadata": { + "name": "api-00003-xyz", + "annotations": { + "autoscaling.knative.dev/maxScale": "10", + "run.googleapis.com/execution-environment": "gen2" + } + }, + "spec": { + "containerConcurrency": 80, + "timeoutSeconds": 300, + "serviceAccountName": "api-runner@example-project.iam.gserviceaccount.com", + "containers": [ + { + "name": "api-1", + "image": "europe-west1-docker.pkg.dev/example-project/apps/api@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", + "args": [ + "--port=8080" + ], + "ports": [ + { + "name": "http1", + "containerPort": 8080 + } + ], + "env": [ + { + "name": "LOG_LEVEL", + "value": "info" + }, + { + "name": "DB_PASSWORD", + "valueFrom": { + "secretKeyRef": { + "key": "latest", + "name": "db-password" + } + } + }, + { + "name": "DB_PASSWORD_PLAIN", + "value": "AERE-SINTETIC-valoare-de-mediu-plantata-93c1" + } + ], + "resources": { + "limits": { + "cpu": "1000m", + "memory": "512Mi" + } + }, + "volumeMounts": [ + { + "name": "cache", + "mountPath": "/cache" + } + ] + } + ], + "volumes": [ + { + "name": "cache", + "emptyDir": { + "medium": "Memory", + "sizeLimit": "128Mi" + } + } + ] + } + }, + "traffic": [ + { + "percent": 100, + "latestRevision": true + } + ] + }, + "status": { + "observedGeneration": 3, + "conditions": [ + { + "type": "Ready", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:22.870111Z" + }, + { + "type": "ConfigurationsReady", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:20.113005Z" + }, + { + "type": "RoutesReady", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:22.870111Z" + } + ], + "latestReadyRevisionName": "api-00003-xyz", + "latestCreatedRevisionName": "api-00003-xyz", + "traffic": [ + { + "revisionName": "api-00003-xyz", + "percent": 100, + "latestRevision": true + } + ], + "url": "https://api-abc123-ew.a.run.app", + "address": { + "url": "https://api-abc123-ew.a.run.app" + } + } + } +] diff --git a/verify-layer/fixturi-cloud/surse/aws-ec2-describe-instances.json b/verify-layer/fixturi-cloud/surse/aws-ec2-describe-instances.json new file mode 100644 index 0000000..da64601 --- /dev/null +++ b/verify-layer/fixturi-cloud/surse/aws-ec2-describe-instances.json @@ -0,0 +1,154 @@ +{ + "Reservations": [ + { + "Groups": [], + "Instances": [ + { + "AmiLaunchIndex": 0, + "ImageId": "ami-0abcdef1234567890", + "InstanceId": "i-1234567890abcdef0", + "InstanceType": "t3.nano", + "KeyName": "my-key-pair", + "LaunchTime": "2022-11-15T10:48:59+00:00", + "Monitoring": { + "State": "disabled" + }, + "Placement": { + "AvailabilityZone": "us-east-2a", + "GroupName": "", + "Tenancy": "default" + }, + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157", + "ProductCodes": [], + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIpAddress": "34.253.223.13", + "State": { + "Code": 16, + "Name": "running" + }, + "StateTransitionReason": "", + "SubnetId": "subnet-04a636d18e83cfacb", + "VpcId": "vpc-1234567890abcdef0", + "Architecture": "x86_64", + "BlockDeviceMappings": [ + { + "DeviceName": "/dev/xvda", + "Ebs": { + "AttachTime": "2022-11-15T10:49:00+00:00", + "DeleteOnTermination": true, + "Status": "attached", + "VolumeId": "vol-02e6ccdca7de29cf2" + } + } + ], + "ClientToken": "1234abcd-1234-abcd-1234-d46a8903e9bc", + "EbsOptimized": true, + "EnaSupport": true, + "Hypervisor": "xen", + "IamInstanceProfile": { + "Arn": "arn:aws:iam::111111111111:instance-profile/AmazonSSMRoleForInstancesQuickSetup", + "Id": "111111111111111111111" + }, + "NetworkInterfaces": [ + { + "Association": { + "IpOwnerId": "amazon", + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIp": "34.253.223.13" + }, + "Attachment": { + "AttachTime": "2022-11-15T10:48:59+00:00", + "AttachmentId": "eni-attach-1234567890abcdefg", + "DeleteOnTermination": true, + "DeviceIndex": 0, + "Status": "attached", + "NetworkCardIndex": 0 + }, + "Description": "", + "Groups": [ + { + "GroupName": "launch-wizard-146", + "GroupId": "sg-1234567890abcdefg" + } + ], + "Ipv6Addresses": [], + "MacAddress": "00:11:22:33:44:55", + "NetworkInterfaceId": "eni-1234567890abcdefg", + "OwnerId": "104024344472", + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157", + "PrivateIpAddresses": [ + { + "Association": { + "IpOwnerId": "amazon", + "PublicDnsName": "ec2-34-253-223-13.us-east-2.compute.amazonaws.com", + "PublicIp": "34.253.223.13" + }, + "Primary": true, + "PrivateDnsName": "ip-10-0-0-157.us-east-2.compute.internal", + "PrivateIpAddress": "10-0-0-157" + } + ], + "SourceDestCheck": true, + "Status": "in-use", + "SubnetId": "subnet-1234567890abcdefg", + "VpcId": "vpc-1234567890abcdefg", + "InterfaceType": "interface" + } + ], + "RootDeviceName": "/dev/xvda", + "RootDeviceType": "ebs", + "SecurityGroups": [ + { + "GroupName": "launch-wizard-146", + "GroupId": "sg-1234567890abcdefg" + } + ], + "SourceDestCheck": true, + "Tags": [ + { + "Key": "Name", + "Value": "my-instance" + } + ], + "VirtualizationType": "hvm", + "CpuOptions": { + "CoreCount": 1, + "ThreadsPerCore": 2 + }, + "CapacityReservationSpecification": { + "CapacityReservationPreference": "open" + }, + "HibernationOptions": { + "Configured": false + }, + "MetadataOptions": { + "State": "applied", + "HttpTokens": "optional", + "HttpPutResponseHopLimit": 1, + "HttpEndpoint": "enabled", + "HttpProtocolIpv6": "disabled", + "InstanceMetadataTags": "enabled" + }, + "EnclaveOptions": { + "Enabled": false + }, + "PlatformDetails": "Linux/UNIX", + "UsageOperation": "RunInstances", + "UsageOperationUpdateTime": "2022-11-15T10:48:59+00:00", + "PrivateDnsNameOptions": { + "HostnameType": "ip-name", + "EnableResourceNameDnsARecord": true, + "EnableResourceNameDnsAAAARecord": false + }, + "MaintenanceOptions": { + "AutoRecovery": "default" + } + } + ], + "OwnerId": "111111111111", + "ReservationId": "r-1234567890abcdefg" + } + ] +} diff --git a/verify-layer/fixturi-cloud/surse/aws-ecs-describe-task-definition.json b/verify-layer/fixturi-cloud/surse/aws-ecs-describe-task-definition.json new file mode 100644 index 0000000..bb247ce --- /dev/null +++ b/verify-layer/fixturi-cloud/surse/aws-ecs-describe-task-definition.json @@ -0,0 +1,54 @@ +{ + "taskDefinition": { + "taskDefinitionArn": "arn:aws:ecs:us-east-1:012345678910:task-definition/hello_world:8", + "containerDefinitions": [ + { + "cpu": 10, + "environment": [], + "essential": true, + "image": "wordpress", + "links": [ + "mysql" + ], + "memory": 500, + "mountPoints": [], + "name": "wordpress", + "portMappings": [ + { + "containerPort": 80, + "hostPort": 80 + } + ], + "volumesFrom": [] + }, + { + "cpu": 10, + "environment": [ + { + "name": "MYSQL_ROOT_PASSWORD", + "value": "password" + } + ], + "essential": true, + "image": "mysql", + "memory": 500, + "mountPoints": [], + "name": "mysql", + "portMappings": [], + "volumesFrom": [] + } + ], + "family": "hello_world", + "revision": 8, + "volumes": [], + "status": "ACTIVE", + "placementConstraints": [], + "compatibilities": [ + "EXTERNAL", + "EC2" + ], + "registeredAt": "2024-06-21T11:15:12.669000-05:00", + "registeredBy": "arn:aws:sts::012345678910:assumed-role/demo-role/jane-doe" + }, + "tags": [] +} diff --git a/verify-layer/fixturi-cloud/surse/aws-ecs-describe-tasks.json b/verify-layer/fixturi-cloud/surse/aws-ecs-describe-tasks.json new file mode 100644 index 0000000..e07bf0f --- /dev/null +++ b/verify-layer/fixturi-cloud/surse/aws-ecs-describe-tasks.json @@ -0,0 +1,66 @@ +{ + "tasks": [ + { + "attachments": [], + "attributes": [ + { + "name": "ecs.cpu-architecture", + "value": "x86_64" + } + ], + "availabilityZone": "us-east-1b", + "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/MyCluster", + "connectivity": "CONNECTED", + "connectivityAt": "2021-08-11T12:21:26.681000-04:00", + "containerInstanceArn": "arn:aws:ecs:us-east-1:123456789012:container-instance/test/025c7e2c5e054a6790a29fc1fEXAMPLE", + "containers": [ + { + "containerArn": "arn:aws:ecs:us-east-1:123456789012:container/MyCluster/4d590253bb114126b7afa7b58eea9221/a992d1cc-ea46-474a-b6e8-24688EXAMPLE", + "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/MyCluster/4d590253bb114126b7afa7b58EXAMPLE", + "name": "simple-app", + "image": "httpd:2.4", + "runtimeId": "91251eed27db90006ad67b1a08187290869f216557717dd5c39b37c94EXAMPLE", + "lastStatus": "RUNNING", + "networkBindings": [ + { + "bindIP": "0.0.0.0", + "containerPort": 80, + "hostPort": 80, + "protocol": "tcp" + } + ], + "networkInterfaces": [], + "healthStatus": "UNKNOWN", + "cpu": "10", + "memory": "300" + } + ], + "cpu": "10", + "createdAt": "2021-08-11T12:21:26.681000-04:00", + "desiredStatus": "RUNNING", + "enableExecuteCommand": false, + "group": "service:testupdate", + "healthStatus": "UNKNOWN", + "lastStatus": "RUNNING", + "launchType": "EC2", + "memory": "300", + "overrides": { + "containerOverrides": [ + { + "name": "simple-app" + } + ], + "inferenceAcceleratorOverrides": [] + }, + "pullStartedAt": "2021-08-11T12:21:28.234000-04:00", + "pullStoppedAt": "2021-08-11T12:21:33.793000-04:00", + "startedAt": "2021-08-11T12:21:34.945000-04:00", + "startedBy": "ecs-svc/968695068243EXAMPLE", + "tags": [], + "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/MyCluster/4d590253bb114126b7afa7b58eea9221", + "taskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:task-definition/console-sample-app-static2:1", + "version": 2 + } + ], + "failures": [] +} diff --git a/verify-layer/fixturi-cloud/surse/aws-lambda-list-functions.json b/verify-layer/fixturi-cloud/surse/aws-lambda-list-functions.json new file mode 100644 index 0000000..96d585b --- /dev/null +++ b/verify-layer/fixturi-cloud/surse/aws-lambda-list-functions.json @@ -0,0 +1,78 @@ +{ + "Functions": [ + { + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "CodeSha256": "dBG9m8SGdmlEjw/JYXlhhvCrAv5TxvXsbL/RMr0fT/I=", + "FunctionName": "helloworld", + "MemorySize": 128, + "RevisionId": "1718e831-badf-4253-9518-d0644210af7b", + "CodeSize": 294, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:helloworld", + "Handler": "helloworld.handler", + "Role": "arn:aws:iam::123456789012:role/service-role/MyTestFunction-role-zgur6bf4", + "Timeout": 3, + "LastModified": "2025-09-23T18:32:33.857+0000", + "Runtime": "nodejs22.x", + "Description": "" + }, + { + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "CodeSha256": "sU0cJ2/hOZevwV/lTxCuQqK3gDZP3i8gUoqUUVRmY6E=", + "FunctionName": "my-function", + "VpcConfig": { + "SubnetIds": [], + "VpcId": "", + "SecurityGroupIds": [] + }, + "MemorySize": 256, + "RevisionId": "93017fc9-59cb-41dc-901b-4845ce4bf668", + "CodeSize": 266, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function", + "Handler": "index.handler", + "Role": "arn:aws:iam::123456789012:role/service-role/helloWorldPython-role-uy3l9qyq", + "Timeout": 3, + "LastModified": "2025-10-01T16:47:28.490+0000", + "Runtime": "nodejs22.x", + "Description": "" + }, + { + "Layers": [ + { + "CodeSize": 41784542, + "Arn": "arn:aws:lambda:us-west-2:420165488524:layer:AWSLambda-Python37-SciPy1x:2" + }, + { + "CodeSize": 4121, + "Arn": "arn:aws:lambda:us-west-2:123456789012:layer:pythonLayer:1" + } + ], + "TracingConfig": { + "Mode": "PassThrough" + }, + "Version": "$LATEST", + "CodeSha256": "ZQukCqxtkqFgyF2cU41Avj99TKQ/hNihPtDtRcc08mI=", + "FunctionName": "my-python-function", + "VpcConfig": { + "SubnetIds": [], + "VpcId": "", + "SecurityGroupIds": [] + }, + "MemorySize": 128, + "RevisionId": "80b4eabc-acf7-4ea8-919a-e874c213707d", + "CodeSize": 299, + "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-python-function", + "Handler": "lambda_function.lambda_handler", + "Role": "arn:aws:iam::123456789012:role/service-role/my-python-function-role-z5g7dr6n", + "Timeout": 3, + "LastModified": "2025-10-01T19:40:41.643+0000", + "Runtime": "python3.11", + "Description": "" + } + ] +} diff --git a/verify-layer/fixturi-cloud/surse/azure-container-groups-list-rest-2026-07-01.json b/verify-layer/fixturi-cloud/surse/azure-container-groups-list-rest-2026-07-01.json new file mode 100644 index 0000000..3596793 --- /dev/null +++ b/verify-layer/fixturi-cloud/surse/azure-container-groups-list-rest-2026-07-01.json @@ -0,0 +1,71 @@ +{ + "value": [ + { + "name": "demo1", + "type": "Microsoft.ContainerInstance/containerGroups", + "id": "/subscriptions/subid/resourceGroups/demo/providers/Microsoft.ContainerInstance/containerGroups/demo1", + "location": "WestUs", + "properties": { + "containers": [ + { + "name": "demo1", + "properties": { + "command": [], + "environmentVariables": [], + "image": "nginx", + "ports": [ + { + "port": 80 + } + ], + "resources": { + "requests": { + "cpu": 1, + "memoryInGB": 1.5 + } + }, + "volumeMounts": [ + { + "name": "volume1", + "mountPath": "/mnt/volume1", + "readOnly": false + } + ] + } + } + ], + "imageRegistryCredentials": [ + { + "server": "azcloudconsoleregistry.azurecr.io", + "username": "azcloudconsoleregistry" + } + ], + "ipAddress": { + "type": "Public", + "ip": "10.0.0.1", + "ports": [ + { + "port": 80, + "protocol": "TCP" + } + ] + }, + "osType": "Linux", + "provisioningState": "Succeeded", + "volumes": [ + { + "name": "volume1", + "azureFile": { + "readOnly": false, + "shareName": "share1", + "storageAccountName": "storage1" + } + } + ] + }, + "zones": [ + "1" + ] + } + ] +} diff --git a/verify-layer/fixturi-cloud/surse/azure-containerapps-list-rest-2026-07-01.json b/verify-layer/fixturi-cloud/surse/azure-containerapps-list-rest-2026-07-01.json new file mode 100644 index 0000000..7e60565 --- /dev/null +++ b/verify-layer/fixturi-cloud/surse/azure-containerapps-list-rest-2026-07-01.json @@ -0,0 +1,148 @@ +{ + "parameters": { + "api-version": "2026-07-01", + "subscriptionId": "34adfa4f-cedf-4dc0-ba29-b6d1a69ab345" + }, + "responses": { + "200": { + "body": { + "nextLink": null, + "value": [ + { + "name": "testcontainerApp0", + "type": "Microsoft.App/containerApps", + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/containerApps/testcontainerApp0", + "location": "East US", + "properties": { + "configuration": { + "dapr": { + "appHealth": { + "path": "/health", + "enabled": true, + "probeIntervalSeconds": 3, + "probeTimeoutMilliseconds": 1000, + "threshold": 3 + }, + "appPort": 3000, + "appProtocol": "http", + "enableApiLogging": true, + "enabled": true, + "httpMaxRequestSize": 10, + "httpReadBufferSize": 30, + "logLevel": "debug" + }, + "ingress": { + "customDomains": [ + { + "name": "www.my-name.com", + "bindingType": "SniEnabled", + "certificateId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube/certificates/my-certificate-for-my-name-dot-com" + }, + { + "name": "www.my--other-name.com", + "bindingType": "SniEnabled", + "certificateId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube/certificates/my-certificate-for-my-other-name-dot-com" + } + ], + "external": true, + "fqdn": "testcontainerApp0.demokube-t24clv0g.eastus.containerApps.k4apps.io", + "ipSecurityRestrictions": [ + { + "name": "Allow work IP A subnet", + "description": "Allowing all IP's within the subnet below to access containerapp", + "action": "Allow", + "ipAddressRange": "192.168.1.1/32" + }, + { + "name": "Allow work IP B subnet", + "description": "Allowing all IP's within the subnet below to access containerapp", + "action": "Allow", + "ipAddressRange": "192.168.1.1/8" + } + ], + "stickySessions": { + "affinity": "sticky" + }, + "targetPort": 3000, + "traffic": [ + { + "revisionName": "testcontainerApp0-ab1234" + }, + { + "label": "staging", + "revisionName": "testcontainerApp0-ab4321" + } + ], + "transport": "auto" + }, + "maxInactiveRevisions": 10, + "runtime": { + "java": { + "enableMetrics": true + } + }, + "service": { + "type": "redis" + } + }, + "eventStreamEndpoint": "testEndpoint", + "latestReadyRevisionName": "testcontainerApp0-pjxhsye", + "latestRevisionFqdn": "testcontainerApp0-pjxhsye.demokube-t24clv0g.eastus.containerApps.k4apps.io", + "managedEnvironmentId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/managedEnvironments/demokube", + "provisioningState": "Succeeded", + "runningStatus": "Running", + "template": { + "containers": [ + { + "name": "testcontainerApp0", + "image": "repo/testcontainerApp0:v4", + "resources": { + "cpu": 0.2, + "memory": "100Mi" + } + } + ], + "initContainers": [ + { + "name": "testinitcontainerApp0", + "image": "repo/testcontainerApp0:v4", + "resources": { + "cpu": 0.2, + "memory": "100Mi" + } + } + ], + "scale": { + "cooldownPeriod": 350, + "maxReplicas": 5, + "minReplicas": 1, + "pollingInterval": 35, + "rules": [ + { + "name": "httpscalingrule", + "http": { + "metadata": { + "concurrentRequests": "50" + } + } + } + ] + }, + "serviceBinds": [ + { + "name": "service", + "serviceId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/rg/providers/Microsoft.App/containerApps/service" + } + ] + }, + "workloadProfileName": "My-GP-01" + } + } + ] + }, + "headers": {} + } + }, + "operationId": "ContainerApps_ListBySubscription", + "title": "List Container Apps by subscription" +} diff --git a/verify-layer/fixturi-cloud/surse/azure-vm-list-rest-2026-04-01.json b/verify-layer/fixturi-cloud/surse/azure-vm-list-rest-2026-04-01.json new file mode 100644 index 0000000..dc5d854 --- /dev/null +++ b/verify-layer/fixturi-cloud/surse/azure-vm-list-rest-2026-04-01.json @@ -0,0 +1,936 @@ +{ + "parameters": { + "resourceGroupName": "rgcompute", + "$filter": "aaaaaaaaaaaaaaaaaaaaaaa", + "api-version": "2026-04-01", + "subscriptionId": "{subscription-id}" + }, + "responses": { + "200": { + "body": { + "value": [ + { + "properties": { + "vmId": "{vmId}", + "availabilitySet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hardwareProfile": { + "vmSize": "Standard_A0", + "vmSizeProperties": { + "vCPUsAvailable": 7, + "vCPUsPerCore": 14 + } + }, + "storageProfile": { + "imageReference": { + "publisher": "MicrosoftWindowsServer", + "offer": "WindowsServer", + "sku": "2012-R2-Datacenter", + "version": "4.127.20170406", + "exactVersion": "aaaaaaaaaaaaa", + "sharedGalleryImageId": "aaaaaaaaaaaaaaa", + "communityGalleryImageId": "aaaa", + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "osDisk": { + "osType": "Windows", + "name": "test", + "createOption": "FromImage", + "vhd": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "caching": "None", + "diskSizeGB": 127, + "encryptionSettings": { + "diskEncryptionKey": { + "secretUrl": "aaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "keyEncryptionKey": { + "keyUrl": "aaaaaaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "enabled": true + }, + "image": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "writeAcceleratorEnabled": true, + "diffDiskSettings": { + "option": "Local", + "placement": "CacheDisk" + }, + "managedDisk": { + "storageAccountType": "Standard_LRS", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "securityProfile": { + "securityEncryptionType": "VMGuestStateOnly", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + }, + "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/testingexcludedisk_OsDisk_1_74cdaedcea50483d9833c96adefa100f" + }, + "deleteOption": "Delete" + }, + "dataDisks": [] + }, + "osProfile": { + "computerName": "Test", + "adminUsername": "Foo12", + "windowsConfiguration": { + "provisionVMAgent": true, + "enableAutomaticUpdates": true, + "timeZone": "aaaaaaaaaaaaaaaaaaaaaa", + "additionalUnattendContent": [ + { + "passName": "OobeSystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "AutoLogon", + "content": "aaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "patchSettings": { + "patchMode": "Manual", + "enableHotpatching": true, + "assessmentMode": "ImageDefault" + }, + "winRM": { + "listeners": [ + { + "protocol": "Http", + "certificateUrl": "aaaaaaaaaaaaaaaaaaaaa" + } + ] + } + }, + "secrets": [], + "allowExtensionOperations": true, + "customData": "aaaa", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "path": "aaaaaaaaaaaaaaaaaaaaaa", + "keyData": "aaa" + } + ] + }, + "provisionVMAgent": true, + "patchSettings": { + "patchMode": "ImageDefault", + "assessmentMode": "ImageDefault" + } + }, + "requireGuestProvisionSignal": true + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", + "properties": { + "primary": true, + "deleteOption": "Delete" + } + } + ], + "networkApiVersion": "2022-05-01", + "networkInterfaceConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "primary": true, + "deleteOption": "Delete", + "enableAcceleratedNetworking": true, + "disableTcpStateTracking": true, + "enableFpga": true, + "enableIPForwarding": true, + "networkSecurityGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "dnsSettings": { + "dnsServers": [ + "aaaaaaaaaaaaaaaaaaaaaaaa" + ] + }, + "ipConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "subnet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "primary": true, + "publicIPAddressConfiguration": { + "name": "aaaaaaaaaaaaaaaaaa", + "properties": { + "idleTimeoutInMinutes": 23, + "deleteOption": "Delete", + "dnsSettings": { + "domainNameLabel": "aaaaa" + }, + "ipTags": [ + { + "ipTagType": "aaaaa", + "tag": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "firstPartyServiceTagId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/firstPartyServiceTags/{firstPartyServiceTagName}" + } + ], + "publicIPPrefix": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "publicIPAddressVersion": "IPv4", + "publicIPAllocationMethod": "Dynamic" + }, + "sku": { + "name": "Basic", + "tier": "Regional" + } + }, + "privateIPAddressVersion": "IPv4", + "privateIPAddressPrefixLength": 28, + "applicationSecurityGroups": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "applicationGatewayBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "loadBalancerBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ] + } + } + ], + "dscpConfiguration": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + } + } + ] + }, + "provisioningState": "Succeeded", + "additionalCapabilities": { + "ultraSSDEnabled": true, + "hibernationEnabled": true + }, + "securityProfile": { + "uefiSettings": { + "secureBootEnabled": true, + "vTpmEnabled": true + }, + "encryptionAtHost": true, + "securityType": "TrustedLaunch" + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "aaaaaaaaaaaaaaaaaaaaa" + } + }, + "virtualMachineScaleSet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "proximityPlacementGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "priority": "Regular", + "evictionPolicy": "Deallocate", + "billingProfile": { + "maxPrice": 26 + }, + "host": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hostGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "licenseType": "aaaaaaaaaaaaaaa", + "extensionsTimeBudget": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "platformFaultDomain": 8, + "scheduledEventsProfile": { + "terminateNotificationProfile": { + "notBeforeTimeout": "PT10M", + "enable": true + }, + "osImageNotificationProfile": { + "notBeforeTimeout": "PT15M", + "enable": true + } + }, + "userData": "aaa", + "capacityReservation": { + "capacityReservationGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "applicationProfile": { + "galleryApplications": [ + { + "tags": "aaaaa", + "order": 4, + "packageReferenceId": "aaaaaaaaaaaaaaaaaaaaaa", + "configurationReference": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ] + }, + "timeCreated": "2022-01-14T16:43:41.683Z" + }, + "type": "Microsoft.Compute/virtualMachines", + "location": "eastus", + "tags": {}, + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}", + "name": "{virtualMachineName}", + "plan": { + "name": "aaaaaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaaa", + "product": "aaaaaaaaaaaaaaaaaaaaaa", + "promotionCode": "aaaaaaaaaaaaaa" + }, + "resources": [ + { + "properties": { + "forceUpdateTag": "aaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaa", + "type": "aaaaaaaa", + "typeHandlerVersion": "aaaaaaaaaaaa", + "autoUpgradeMinorVersion": true, + "enableAutomaticUpgrade": true, + "settings": {}, + "protectedSettings": {}, + "provisioningState": "aaa", + "instanceView": { + "name": "aaaaaaaaaaaaaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaa", + "typeHandlerVersion": "aaaaaa", + "substatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "suppressFailures": true, + "protectedSettingsFromKeyVault": { + "sourceVault": { + "id": "/subscriptions/a53f7094-a16c-47af-abe4-b05c05d0d79a/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/kvName" + }, + "secretUrl": "https://kvName.vault.azure.net/secrets/secretName/79b88b3a6f5440ffb2e73e44a0db712e" + } + }, + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "aaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "location": "aaaaaaaaaaaaaaaa", + "tags": { + "key9428": "aaaaaaa" + } + } + ], + "identity": { + "principalId": "aaaaaaaaaaaaaaaa", + "tenantId": "aaaaa", + "type": "SystemAssigned", + "userAssignedIdentities": { + "key5688": { + "principalId": "aaaaaaaaaaaaaaa", + "clientId": "aaaaaaaaaaa" + } + } + }, + "zones": [ + "aaaaaaaaaaaaaaaaaaaaaaaaaaa" + ], + "extendedLocation": { + "name": "aaaa", + "type": "EdgeZone" + } + }, + { + "properties": { + "vmId": "{vmId}", + "availabilitySet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hardwareProfile": { + "vmSize": "Standard_A0", + "vmSizeProperties": { + "vCPUsAvailable": 7, + "vCPUsPerCore": 14 + } + }, + "storageProfile": { + "imageReference": { + "publisher": "MicrosoftWindowsServer", + "offer": "WindowsServer", + "sku": "2012-R2-Datacenter", + "version": "4.127.20170406", + "exactVersion": "aa", + "sharedGalleryImageId": "aaaaaaaaaaaaaaaaaaaaaaaaa", + "communityGalleryImageId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "id": "aaaaaaaa" + }, + "osDisk": { + "osType": "Windows", + "name": "test", + "createOption": "FromImage", + "vhd": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "caching": "None", + "diskSizeGB": 127, + "encryptionSettings": { + "diskEncryptionKey": { + "secretUrl": "aaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "keyEncryptionKey": { + "keyUrl": "aaaaaaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "enabled": true + }, + "image": { + "uri": "https://{storageAccountName}.blob.core.windows.net/{containerName}/{vhdName}.vhd" + }, + "writeAcceleratorEnabled": true, + "diffDiskSettings": { + "option": "Local", + "placement": "CacheDisk" + }, + "managedDisk": { + "storageAccountType": "Standard_LRS", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "securityProfile": { + "securityEncryptionType": "VMGuestStateOnly", + "diskEncryptionSet": { + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + }, + "id": "/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/testingexcludedisk_OsDisk_1_74cdaedcea50483d9833c96adefa100f" + }, + "deleteOption": "Delete" + }, + "dataDisks": [] + }, + "osProfile": { + "computerName": "Test", + "adminUsername": "Foo12", + "windowsConfiguration": { + "provisionVMAgent": true, + "enableAutomaticUpdates": true, + "timeZone": "aaaaaaaaaaaaaaaaaaaa", + "additionalUnattendContent": [ + { + "passName": "OobeSystem", + "componentName": "Microsoft-Windows-Shell-Setup", + "settingName": "AutoLogon", + "content": "aaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "patchSettings": { + "patchMode": "Manual", + "enableHotpatching": true, + "assessmentMode": "ImageDefault" + }, + "winRM": { + "listeners": [ + { + "protocol": "Http", + "certificateUrl": "aaaaaaaaaaaaaaaaaaaaa" + } + ] + } + }, + "secrets": [], + "allowExtensionOperations": true, + "customData": "aaaaaaaaaaaaaaaaaaaaaaa", + "linuxConfiguration": { + "disablePasswordAuthentication": true, + "ssh": { + "publicKeys": [ + { + "path": "aaaaaaaaaaaaaaaaaaaaaa", + "keyData": "aaa" + } + ] + }, + "provisionVMAgent": true, + "patchSettings": { + "patchMode": "ImageDefault", + "assessmentMode": "ImageDefault" + } + }, + "requireGuestProvisionSignal": true + }, + "networkProfile": { + "networkInterfaces": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkInterfaces/{networkInterfaceName}", + "properties": { + "primary": true, + "deleteOption": "Delete" + } + } + ], + "networkApiVersion": "2022-05-01", + "networkInterfaceConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "primary": true, + "deleteOption": "Delete", + "enableAcceleratedNetworking": true, + "disableTcpStateTracking": true, + "enableFpga": true, + "enableIPForwarding": true, + "networkSecurityGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "dnsSettings": { + "dnsServers": [ + "aaaaaaaaaaaaaaaaaaaaaaaa" + ] + }, + "ipConfigurations": [ + { + "name": "aaaaaaaa", + "properties": { + "subnet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "primary": true, + "publicIPAddressConfiguration": { + "name": "aaaaaaaaaaaaaaaaaa", + "properties": { + "idleTimeoutInMinutes": 23, + "deleteOption": "Delete", + "dnsSettings": { + "domainNameLabel": "aaaaa" + }, + "ipTags": [ + { + "ipTagType": "aaaaa", + "tag": "aaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ], + "publicIPPrefix": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "publicIPAddressVersion": "IPv4", + "publicIPAllocationMethod": "Dynamic" + }, + "sku": { + "name": "Basic", + "tier": "Regional" + } + }, + "privateIPAddressVersion": "IPv4", + "privateIPAddressPrefixLength": 28, + "applicationSecurityGroups": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "applicationGatewayBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ], + "loadBalancerBackendAddressPools": [ + { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + ] + } + } + ], + "dscpConfiguration": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + } + } + ] + }, + "provisioningState": "Succeeded", + "additionalCapabilities": { + "ultraSSDEnabled": true, + "hibernationEnabled": true + }, + "securityProfile": { + "uefiSettings": { + "secureBootEnabled": true, + "vTpmEnabled": true + }, + "encryptionAtHost": true, + "securityType": "TrustedLaunch" + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "aaaaaaaaaaaaaaaaaaaaa" + } + }, + "virtualMachineScaleSet": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "proximityPlacementGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "priority": "Regular", + "evictionPolicy": "Deallocate", + "billingProfile": { + "maxPrice": 26 + }, + "host": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "hostGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + }, + "instanceView": { + "platformUpdateDomain": 1, + "platformFaultDomain": 29, + "computerName": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "osName": "aaaaaaaaaaa", + "osVersion": "aaaaaaaaaaaaaa", + "hyperVGeneration": "V1", + "rdpThumbPrint": "aaaaaaaaaaaaaaaaaaaaaaa", + "vmAgent": { + "vmAgentVersion": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "extensionHandlers": [ + { + "type": "aaaaa", + "typeHandlerVersion": "aaaaaaaaaaaaaaaaaaa", + "status": { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "maintenanceRedeployStatus": { + "isCustomerInitiatedMaintenanceAllowed": true, + "preMaintenanceWindowStartTime": "2022-01-14T16:43:41.682Z", + "preMaintenanceWindowEndTime": "2022-01-14T16:43:41.682Z", + "maintenanceWindowStartTime": "2022-01-14T16:43:41.682Z", + "maintenanceWindowEndTime": "2022-01-14T16:43:41.682Z", + "lastOperationResultCode": "None", + "lastOperationMessage": "aa" + }, + "disks": [ + { + "name": "a", + "encryptionSettings": [ + { + "diskEncryptionKey": { + "secretUrl": "aaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "keyEncryptionKey": { + "keyUrl": "aaaaaaaaaaaaa", + "sourceVault": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "enabled": true + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + } + ], + "extensions": [ + { + "name": "aaaaaaaaaaaaaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaa", + "typeHandlerVersion": "aaaaaa", + "substatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + } + ], + "vmHealth": { + "status": { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + }, + "bootDiagnostics": { + "consoleScreenshotBlobUri": "aaaaaaaaaaaaaaaaaaaaaaa", + "serialConsoleLogBlobUri": "aaaaaaaaaaaaaaaaaaa", + "status": { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + }, + "assignedHost": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "patchStatus": { + "availablePatchSummary": { + "status": "Unknown", + "assessmentActivityId": "aaaaaaaaaaaaaaaaaaa", + "rebootPending": true, + "criticalAndSecurityPatchCount": 22, + "otherPatchCount": 25, + "startTime": "2022-01-14T16:43:41.682Z", + "lastModifiedTime": "2022-01-14T16:43:41.683Z", + "error": { + "details": [ + { + "code": "aaaaaaaaaaaaaaaaaaaaa", + "target": "aaaaaa", + "message": "aaaaaaaaaaaaa" + } + ], + "innererror": { + "exceptiontype": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "errordetail": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "code": "aaaaaa", + "target": "aaaaaaaaa", + "message": "aaa" + } + }, + "lastPatchInstallationSummary": { + "status": "Unknown", + "installationActivityId": "aaaaaa", + "maintenanceWindowExceeded": true, + "notSelectedPatchCount": 20, + "excludedPatchCount": 1, + "pendingPatchCount": 2, + "installedPatchCount": 28, + "failedPatchCount": 30, + "startTime": "2022-01-14T16:43:41.683Z", + "lastModifiedTime": "2022-01-14T16:43:41.683Z", + "error": { + "details": [ + { + "code": "aaaaaaaaaaaaaaaaaaaaa", + "target": "aaaaaa", + "message": "aaaaaaaaaaaaa" + } + ], + "innererror": { + "exceptiontype": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "errordetail": "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "code": "aaaaaa", + "target": "aaaaaaaaa", + "message": "aaa" + } + }, + "configurationStatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "isVMInStandbyPool": false + }, + "licenseType": "aaaaaaaaaaaaaa", + "extensionsTimeBudget": "aaaaaaaaaaaaaaaaaaaaaa", + "platformFaultDomain": 11, + "scheduledEventsProfile": { + "terminateNotificationProfile": { + "notBeforeTimeout": "PT10M", + "enable": true + }, + "osImageNotificationProfile": { + "notBeforeTimeout": "PT15M", + "enable": true + } + }, + "userData": "aaaaaaaaaaaaaaaaaaa", + "capacityReservation": { + "capacityReservationGroup": { + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}" + } + }, + "applicationProfile": { + "galleryApplications": [ + { + "tags": "aaaaa", + "order": 4, + "packageReferenceId": "aaaaaaaaaaaaaaaaaaaaaa", + "configurationReference": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + } + ] + }, + "timeCreated": "2022-01-14T16:43:41.685Z" + }, + "type": "Microsoft.Compute/virtualMachines", + "location": "eastus", + "tags": {}, + "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}", + "name": "{virtualMachineName}", + "plan": { + "name": "aaaaaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaaa", + "product": "aaaaaaaaaaaaaaaaaaaaaa", + "promotionCode": "aaaaaaaaaaaaaa" + }, + "resources": [ + { + "properties": { + "forceUpdateTag": "aaaaaaaaaaaaaaa", + "publisher": "aaaaaaaaaaaaaaaa", + "type": "aaaaaaaa", + "typeHandlerVersion": "aaaaaaaaaaaa", + "autoUpgradeMinorVersion": true, + "enableAutomaticUpgrade": true, + "settings": {}, + "protectedSettings": {}, + "provisioningState": "aaa", + "instanceView": { + "name": "aaaaaaaaaaaaaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaa", + "typeHandlerVersion": "aaaaaa", + "substatuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ], + "statuses": [ + { + "code": "aaa", + "level": "Info", + "displayStatus": "aaaaaaaaaaaaaaaaaaaaaaaa", + "message": "aaaaaaaaaaaaaaaaaaa", + "time": "2022-01-14T16:43:41.657Z" + } + ] + }, + "suppressFailures": true, + "protectedSettingsFromKeyVault": { + "sourceVault": { + "id": "/subscriptions/a53f7094-a16c-47af-abe4-b05c05d0d79a/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/kvName" + }, + "secretUrl": "https://kvName.vault.azure.net/secrets/secretName/79b88b3a6f5440ffb2e73e44a0db712e" + } + }, + "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "aaaaaaaaaaaaa", + "type": "aaaaaaaaaaaaaaaaaaaaaaaaaaa", + "location": "aaaaaaaaaaaaaaaa", + "tags": { + "key9428": "aaaaaaa" + } + } + ], + "identity": { + "principalId": "aaaaaaaaaaaaaaaa", + "tenantId": "aaaaa", + "type": "SystemAssigned", + "userAssignedIdentities": { + "key5688": { + "principalId": "aaaaaaaaaaaaaaa", + "clientId": "aaaaaaaaaaa" + } + } + }, + "zones": [ + "aaaaaa" + ], + "extendedLocation": { + "name": "aaaa", + "type": "EdgeZone" + } + } + ], + "nextLink": "a://example.com/a" + } + } + }, + "operationId": "VirtualMachines_List", + "title": "VirtualMachine_List_MaximumSet_Gen" +} diff --git a/verify-layer/fixturi-cloud/surse/azure-webapps-list-rest-2024-11-01.json b/verify-layer/fixturi-cloud/surse/azure-webapps-list-rest-2024-11-01.json new file mode 100644 index 0000000..356fe87 --- /dev/null +++ b/verify-layer/fixturi-cloud/surse/azure-webapps-list-rest-2024-11-01.json @@ -0,0 +1,238 @@ +{ + "value": [ + { + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/sites/sitef6141", + "name": "sitef6141", + "type": "Microsoft.Web/sites", + "kind": "app", + "location": "East US", + "properties": { + "state": "Running", + "hostNames": [ + "sitef6141.azurewebsites.net" + ], + "repositorySiteName": "sitef6141", + "usageState": "Normal", + "enabled": true, + "enabledHostNames": [ + "sitef6141.azurewebsites.net", + "sitef6141.scm.azurewebsites.net" + ], + "availabilityState": "Normal", + "hostNameSslStates": [ + { + "name": "sitef6141.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Standard" + }, + { + "name": "sitef6141.scm.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Repository" + } + ], + "serverFarmId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/serverfarms/DefaultAsp", + "reserved": false, + "isXenon": false, + "hyperV": false, + "lastModifiedTimeUtc": "2020-03-04T17:33:11.641Z", + "outboundVnetRouting": { + "allTraffic": false, + "applicationTraffic": false, + "contentShareTraffic": false, + "imagePullTraffic": false, + "backupRestoreTraffic": false + }, + "siteConfig": { + "numberOfWorkers": 1, + "defaultDocuments": [ + "Default.htm", + "Default.html", + "Default.asp", + "index.htm", + "index.html", + "iisstart.htm", + "default.aspx", + "index.php", + "hostingstart.html" + ], + "netFrameworkVersion": "v4.0", + "phpVersion": "5.6", + "pythonVersion": "", + "nodeVersion": "", + "powerShellVersion": "", + "linuxFxVersion": "", + "requestTracingEnabled": false, + "remoteDebuggingEnabled": false, + "httpLoggingEnabled": false, + "acrUseManagedIdentityCreds": false, + "logsDirectorySizeLimit": 35, + "detailedErrorLoggingEnabled": false, + "use32BitWorkerProcess": true, + "webSocketsEnabled": false, + "alwaysOn": false, + "appCommandLine": "", + "managedPipelineMode": "Integrated", + "virtualApplications": [ + { + "virtualPath": "/", + "physicalPath": "site\\wwwroot", + "preloadEnabled": false + } + ], + "loadBalancing": "LeastRequests", + "autoHealEnabled": false, + "vnetName": "", + "vnetRouteAllEnabled": false, + "vnetPrivatePortsCount": 0, + "http20Enabled": false, + "minTlsVersion": "1.2", + "scmMinTlsVersion": "1.2", + "ftpsState": "AllAllowed", + "functionAppScaleLimit": 0, + "functionsRuntimeScaleMonitoringEnabled": false, + "minimumElasticInstanceCount": 0, + "azureStorageAccounts": {} + }, + "scmSiteAlsoStopped": false, + "clientAffinityEnabled": true, + "clientCertEnabled": false, + "clientCertMode": "Required", + "hostNamesDisabled": false, + "customDomainVerificationId": "7F3BB652450EF7AD0B6AA33064586E4A9CE823A46DF0B2EC6443A68086E84153", + "outboundIpAddresses": "203.0.113.201,198.51.100.144", + "possibleOutboundIpAddresses": "203.0.113.201,198.51.100.144,203.0.113.122,198.51.100.188", + "containerSize": 0, + "dailyMemoryTimeQuota": 0, + "resourceGroup": "testrg123", + "defaultHostName": "sitef6141.azurewebsites.net", + "httpsOnly": false, + "redundancyMode": "None", + "storageAccountRequired": false, + "keyVaultReferenceIdentity": "SystemAssigned", + "workloadProfileName": "myd4wp", + "resourceConfig": { + "cpu": 1, + "memory": "2.0Gi" + } + } + }, + { + "id": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/sites/sitef7252", + "name": "sitef7252", + "type": "Microsoft.Web/sites", + "kind": "app", + "location": "East US", + "properties": { + "state": "Running", + "hostNames": [ + "sitef7252.azurewebsites.net" + ], + "repositorySiteName": "sitef7252", + "usageState": "Normal", + "enabled": true, + "enabledHostNames": [ + "sitef7252.azurewebsites.net", + "sitef7252.scm.azurewebsites.net" + ], + "availabilityState": "Normal", + "hostNameSslStates": [ + { + "name": "sitef7252.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Standard" + }, + { + "name": "sitef7252.scm.azurewebsites.net", + "sslState": "Disabled", + "hostType": "Repository" + } + ], + "serverFarmId": "/subscriptions/34adfa4f-cedf-4dc0-ba29-b6d1a69ab345/resourceGroups/testrg123/providers/Microsoft.Web/serverfarms/DefaultAsp", + "reserved": false, + "isXenon": false, + "hyperV": false, + "lastModifiedTimeUtc": "2020-03-04T17:33:11.641Z", + "outboundVnetRouting": { + "allTraffic": false, + "applicationTraffic": false, + "contentShareTraffic": false, + "imagePullTraffic": false, + "backupRestoreTraffic": false + }, + "siteConfig": { + "numberOfWorkers": 1, + "defaultDocuments": [ + "Default.htm", + "Default.html", + "Default.asp", + "index.htm", + "index.html", + "iisstart.htm", + "default.aspx", + "index.php", + "hostingstart.html" + ], + "netFrameworkVersion": "v4.0", + "phpVersion": "5.6", + "pythonVersion": "", + "nodeVersion": "", + "powerShellVersion": "", + "linuxFxVersion": "", + "requestTracingEnabled": false, + "remoteDebuggingEnabled": false, + "httpLoggingEnabled": false, + "acrUseManagedIdentityCreds": false, + "logsDirectorySizeLimit": 35, + "detailedErrorLoggingEnabled": false, + "use32BitWorkerProcess": true, + "webSocketsEnabled": false, + "alwaysOn": false, + "appCommandLine": "", + "managedPipelineMode": "Integrated", + "virtualApplications": [ + { + "virtualPath": "/", + "physicalPath": "site\\wwwroot", + "preloadEnabled": false + } + ], + "loadBalancing": "LeastRequests", + "autoHealEnabled": false, + "vnetName": "", + "vnetRouteAllEnabled": false, + "vnetPrivatePortsCount": 0, + "http20Enabled": false, + "minTlsVersion": "1.2", + "scmMinTlsVersion": "1.2", + "ftpsState": "AllAllowed", + "functionAppScaleLimit": 0, + "functionsRuntimeScaleMonitoringEnabled": false, + "minimumElasticInstanceCount": 0, + "azureStorageAccounts": {} + }, + "scmSiteAlsoStopped": false, + "clientAffinityEnabled": true, + "clientCertEnabled": false, + "clientCertMode": "Required", + "hostNamesDisabled": false, + "customDomainVerificationId": "7F3BB652450EF7AD0B6AA33064586E4A9CE823A46DF0B2EC6443A68086E84153", + "outboundIpAddresses": "203.0.113.201,198.51.100.144", + "possibleOutboundIpAddresses": "203.0.113.201,198.51.100.144,203.0.113.122,198.51.100.188", + "containerSize": 0, + "dailyMemoryTimeQuota": 0, + "resourceGroup": "testrg123", + "defaultHostName": "sitef7252.azurewebsites.net", + "httpsOnly": false, + "redundancyMode": "None", + "storageAccountRequired": false, + "keyVaultReferenceIdentity": "SystemAssigned", + "workloadProfileName": "myd4wp", + "resourceConfig": { + "cpu": 1, + "memory": "2.0Gi" + } + } + } + ] +} diff --git a/verify-layer/fixturi-cloud/surse/gcp-compute-instances-din-schema.json b/verify-layer/fixturi-cloud/surse/gcp-compute-instances-din-schema.json new file mode 100644 index 0000000..35a55d3 --- /dev/null +++ b/verify-layer/fixturi-cloud/surse/gcp-compute-instances-din-schema.json @@ -0,0 +1,95 @@ +[ + { + "kind": "compute#instance", + "id": "4218766341062832345", + "creationTimestamp": "2026-10-01T08:12:03.512-07:00", + "name": "api-1", + "description": "", + "tags": { + "items": [ + "http-server" + ], + "fingerprint": "Qm9vdHN0cmFw" + }, + "machineType": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/machineTypes/e2-standard-2", + "status": "RUNNING", + "zone": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a", + "networkInterfaces": [ + { + "kind": "compute#networkInterface", + "network": "https://www.googleapis.com/compute/v1/projects/example-project/global/networks/default", + "subnetwork": "https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/subnetworks/default", + "networkIP": "10.128.0.5", + "name": "nic0", + "fingerprint": "bmljMA==", + "stackType": "IPV4_ONLY" + } + ], + "disks": [ + { + "kind": "compute#attachedDisk", + "type": "PERSISTENT", + "mode": "READ_WRITE", + "source": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/disks/api-1", + "deviceName": "persistent-disk-0", + "index": 0, + "boot": true, + "autoDelete": true, + "licenses": [ + "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-bookworm" + ], + "interface": "SCSI", + "guestOsFeatures": [ + { "type": "UEFI_COMPATIBLE" }, + { "type": "VIRTIO_SCSI_MULTIQUEUE" }, + { "type": "GVNIC" } + ], + "diskSizeGb": "10", + "architecture": "X86_64" + } + ], + "metadata": { + "kind": "compute#metadata", + "fingerprint": "bWV0YWRhdGE=", + "items": [ + { "key": "enable-oslogin", "value": "TRUE" }, + { "key": "ssh-keys", "value": "operator:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleExampleExampleExampleExampleExampleEx operator" }, + { "key": "startup-script", "value": "#! /bin/bash\napt-get update\n" } + ] + }, + "serviceAccounts": [ + { + "email": "123456789012-compute@developer.gserviceaccount.com", + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + ], + "selfLink": "https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/api-1", + "scheduling": { + "onHostMaintenance": "MIGRATE", + "automaticRestart": true, + "preemptible": false, + "provisioningModel": "STANDARD" + }, + "cpuPlatform": "Intel Broadwell", + "labels": { + "env": "prod", + "team": "payments" + }, + "labelFingerprint": "bGFiZWxz", + "startRestricted": false, + "deletionProtection": false, + "shieldedInstanceConfig": { + "enableSecureBoot": false, + "enableVtpm": true, + "enableIntegrityMonitoring": true + }, + "shieldedInstanceIntegrityPolicy": { + "updateAutoLearnPolicy": true + }, + "fingerprint": "aW5zdGFuY2U=", + "lastStartTimestamp": "2026-10-01T08:12:40.101-07:00", + "satisfiesPzi": true + } +] diff --git a/verify-layer/fixturi-cloud/surse/gcp-run-services-din-schema.json b/verify-layer/fixturi-cloud/surse/gcp-run-services-din-schema.json new file mode 100644 index 0000000..4dcccf6 --- /dev/null +++ b/verify-layer/fixturi-cloud/surse/gcp-run-services-din-schema.json @@ -0,0 +1,130 @@ +[ + { + "apiVersion": "serving.knative.dev/v1", + "kind": "Service", + "metadata": { + "name": "api", + "namespace": "123456789012", + "selfLink": "/apis/serving.knative.dev/v1/namespaces/123456789012/services/api", + "uid": "3f2a9c1e-5b7d-4e8f-9a0b-1c2d3e4f5a6b", + "resourceVersion": "AAYy1ZQ0JdU", + "generation": 3, + "creationTimestamp": "2026-09-30T14:02:11.431902Z", + "labels": { + "cloud.googleapis.com/location": "europe-west1" + }, + "annotations": { + "run.googleapis.com/ingress": "all", + "run.googleapis.com/ingress-status": "all", + "serving.knative.dev/creator": "operator@example.com", + "serving.knative.dev/lastModifier": "operator@example.com" + } + }, + "spec": { + "template": { + "metadata": { + "name": "api-00003-xyz", + "annotations": { + "autoscaling.knative.dev/maxScale": "10", + "run.googleapis.com/execution-environment": "gen2" + } + }, + "spec": { + "containerConcurrency": 80, + "timeoutSeconds": 300, + "serviceAccountName": "api-runner@example-project.iam.gserviceaccount.com", + "containers": [ + { + "name": "api-1", + "image": "europe-west1-docker.pkg.dev/example-project/apps/api@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", + "args": [ + "--port=8080" + ], + "ports": [ + { + "name": "http1", + "containerPort": 8080 + } + ], + "env": [ + { + "name": "LOG_LEVEL", + "value": "info" + }, + { + "name": "DB_PASSWORD", + "valueFrom": { + "secretKeyRef": { + "key": "latest", + "name": "db-password" + } + } + } + ], + "resources": { + "limits": { + "cpu": "1000m", + "memory": "512Mi" + } + }, + "volumeMounts": [ + { + "name": "cache", + "mountPath": "/cache" + } + ] + } + ], + "volumes": [ + { + "name": "cache", + "emptyDir": { + "medium": "Memory", + "sizeLimit": "128Mi" + } + } + ] + } + }, + "traffic": [ + { + "percent": 100, + "latestRevision": true + } + ] + }, + "status": { + "observedGeneration": 3, + "conditions": [ + { + "type": "Ready", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:22.870111Z" + }, + { + "type": "ConfigurationsReady", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:20.113005Z" + }, + { + "type": "RoutesReady", + "status": "True", + "lastTransitionTime": "2026-10-10T09:15:22.870111Z" + } + ], + "latestReadyRevisionName": "api-00003-xyz", + "latestCreatedRevisionName": "api-00003-xyz", + "traffic": [ + { + "revisionName": "api-00003-xyz", + "percent": 100, + "latestRevision": true + } + ], + "url": "https://api-abc123-ew.a.run.app", + "address": { + "url": "https://api-abc123-ew.a.run.app" + } + } + } +] diff --git a/verify-layer/proba-adaptoare-cloud.mjs b/verify-layer/proba-adaptoare-cloud.mjs new file mode 100644 index 0000000..3b40517 --- /dev/null +++ b/verify-layer/proba-adaptoare-cloud.mjs @@ -0,0 +1,120 @@ +'use strict'; +// proba-adaptoare-cloud.mjs (B15, 2026-10-18): proba adaptoarelor pe furnizori de cloud ale sidecar-ului (scan --source aws-ecs | aws-ec2 | +// aws-lambda | azure-vm | azure-container | azure-containerapp | azure-webapp | gcp-compute | gcp-run), pe fixturile DERIVATE din +// documentatia oficiala a fiecarui CLI (fixturi-cloud/). Pentru fiecare adaptor: +// 1 exportul documentat -> exact incarcaturile care RULEAZA, cu identitatile asteptate (nume si versiune in plic) +// 2 CONFIDENTIALITATE: valorile de mediu plantate (si customData/userData) NU apar nici in jurnal, nici in descriptori; NUMELE da +// 3 incarcatura OPRITA din varianta `.oprita` NU intra (acelasi numar de intrari, numele ei lipseste din tot ce s-a scris) +// 4 exportul ALTUI CLI e refuzat PE NUME (mesajul numeste comanda asteptata), nimic scris +// 5 fiecare descriptor re-hashat (canonic, chei sortate la toate nivelurile) = digestul din plicul lui din lant +// 6 fiecare plic e VALID pentru verificatorul AIP-23 comun (AERE_VERIFY_PROOF; altfel SARIT, cod 2) +// plus: fixturile de pe disc sunt cele derivate; o sursa necunoscuta e refuzata; ECS fara definitii spune `not-in-export`; `az vm list` +// fara -d si `az container list` fara instanceView sunt refuzate pe nume; referinta ARN a unui secret ECS si cheile Azure de retea nu intra. +// node proba-adaptoare-cloud.mjs -> 0 toate cum trebuia, 1 cel putin una rea, 2 cel putin una SARITA +// Mediu: AERE_SIDECAR_MODUL (copia masurata, pentru controlul negativ), AERE_VERIFY_PROOF (verificatorul AIP-23). +// NEMASURAT aici, spus si in fixturi-cloud/README.md: iesirea unui CONT REAL la oricare furnizor; nu avem conturi. + +import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import crypto from 'node:crypto'; +import { execFileSync } from 'node:child_process'; import { fileURLToPath, pathToFileURL } from 'node:url'; + +const AICI = path.dirname(fileURLToPath(import.meta.url)); +const SIDE = process.env.AERE_SIDECAR_MODUL ? path.resolve(process.env.AERE_SIDECAR_MODUL) : path.join(AICI, 'sidecar.mjs'); +const VERIFY = process.env.AERE_VERIFY_PROOF ? path.resolve(process.env.AERE_VERIFY_PROOF) : path.resolve(AICI, '..', 'aere-proof-protocol', 'verify.mjs'); +const areVerificator = fs.existsSync(VERIFY); +const FX = path.join(AICI, 'fixturi-cloud'); +const { deriva, text: textFixtura, SECRET, SECRET_DATE } = await import(pathToFileURL(path.join(FX, 'deriva.mjs')).href); +const T = fs.mkdtempSync(path.join(os.tmpdir(), 'avl-cloud-')); +let rele = 0, bune = 0, sarite = 0; +const cer = (n, c) => { console.log(` [${c ? 'OK ' : 'RAU '}] ${n}`); if (c) bune++; else rele++; }; +const sari = (n) => { console.log(` [SARIT] ${n} (verificatorul AIP-23 nu e la ${VERIFY}; dati AERE_VERIFY_PROOF)`); sarite++; }; +function side(args) { try { return { cod: 0, out: execFileSync(process.execPath, [SIDE, ...args], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }) }; } catch (e) { return { cod: e.status ?? 1, out: (e.stdout || '') + (e.stderr || '') }; } } +const linii = (p) => (fs.existsSync(p) ? fs.readFileSync(p, 'utf8').split('\n').filter((l) => l.trim()).map((l) => JSON.parse(l)) : []); +const textul = (p) => (fs.existsSync(p) ? fs.readFileSync(p, 'utf8') : ''); +const valid = (f) => { try { execFileSync(process.execPath, [VERIFY, f], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }); return true; } catch { return false; } }; +// re-derivarea canonica, scrisa AICI, nu importata: chei sortate la toate nivelurile +const canon = (v) => (Array.isArray(v) ? '[' + v.map(canon).join(',') + ']' : v && typeof v === 'object' ? '{' + Object.keys(v).sort().map((k) => JSON.stringify(k) + ':' + canon(v[k])).join(',') + '}' : JSON.stringify(v)); +const shaCanon = (o) => '0x' + crypto.createHash('sha256').update(Buffer.from(canon(o), 'utf8')).digest('hex'); +const F = (f) => path.join(FX, f); +const egal = (a, b) => JSON.stringify(a) === JSON.stringify(b); +const scan = (src, fixtura, log, extra = []) => side(['scan', '--source', src, '--input', F(fixtura), '--host', 'h', '--log', log, '--at', '2026-10-18T10:00:00Z', ...extra]); + +// pentru fiecare adaptor: exportul, identitatile asteptate (din fixtura documentata), numele variabilelor plantate, marcajul incarcaturii oprite, +// exportul altui CLI si comanda pe care refuzul trebuie sa o numeasca +const H64 = '0123456789abcdef'.repeat(4); +const A = [ + { src: 'aws-ecs', extra: ['--task-definitions', F('aws-ecs.definitii.json')], extraSecrete: ['--task-definitions', F('aws-ecs.secrete.definitii.json')], + nume: ['ecs:MyCluster/4d590253bb114126b7afa7b58eea9221/simple-app'], versiuni: ['httpd:2.4'], numeEnv: ['API_TOKEN', 'HTTPD_PORT'], numePlantate: ['DB_PASSWORD', 'OVERRIDE_TOKEN'], + oprit: '0000000000000000000000oprita', altCli: 'aws-ec2.json', refuz: 'aws ecs describe-tasks' }, + { src: 'aws-ec2', nume: ['ec2:us-east-2/i-1234567890abcdef0'], versiuni: ['ami-0abcdef1234567890'], numeEnv: ['Name'], numePlantate: ['DB_PASSWORD'], oprit: 'i-0000000000oprita00', altCli: 'aws-lambda.json', refuz: 'aws ec2 describe-instances' }, + { src: 'aws-lambda', nume: ['lambda:us-west-2/helloworld', 'lambda:us-west-2/my-function', 'lambda:us-west-2/my-python-function'], + versiuni: ['dBG9m8SGdmlEjw/JYXlhhvCrAv5TxvXsbL/RMr0fT/I=', 'sU0cJ2/hOZevwV/lTxCuQqK3gDZP3i8gUoqUUVRmY6E=', 'ZQukCqxtkqFgyF2cU41Avj99TKQ/hNihPtDtRcc08mI='], + numeEnv: [], numePlantate: ['DB_PASSWORD', 'LOG_LEVEL'], oprit: 'inactive-function', altCli: 'aws-ecs.json', refuz: 'aws lambda list-functions' }, + { src: 'azure-vm', nume: ['azvm:{resourceGroupName}/{virtualMachineName}', 'azvm:{resourceGroupName}/{virtualMachineName}'], versiuni: ['aaaaaaaaaaaaa', 'aa'], numeEnv: [], numePlantate: ['DB_PASSWORD', 'env'], + plantateInPlus: [SECRET_DATE], oprit: 'vm-oprita', altCli: 'azure-container.json', refuz: 'az vm list -d' }, + { src: 'azure-container', nume: ['aci:demo/demo1/demo1'], versiuni: ['nginx'], numeEnv: [], numePlantate: ['API_KEY', 'DB_PASSWORD'], oprit: 'demo2', altCli: 'azure-vm.json', refuz: 'az container list' }, + { src: 'azure-containerapp', nume: ['aca:rg/testcontainerApp0/testcontainerApp0'], versiuni: ['repo/testcontainerApp0:v4'], numeEnv: [], numePlantate: ['API_KEY', 'DB_PASSWORD'], oprit: 'testcontainerApp1', altCli: 'azure-webapp.json', refuz: 'az containerapp list' }, + { src: 'azure-webapp', nume: ['azwebapp:testrg123/sitef6141', 'azwebapp:testrg123/sitef7252'], versiuni: ['mcr.microsoft.com/appsvc/staticsite:latest', '?'], numeEnv: [], numePlantate: ['DB_PASSWORD', 'WEBSITES_PORT'], + oprit: 'sitef0000', altCli: 'azure-containerapp.json', refuz: 'az webapp list --show-details' }, + { src: 'gcp-compute', nume: ['gce:us-central1-a/api-1'], versiuni: ['4218766341062832345'], numeEnv: ['enable-oslogin', 'ssh-keys', 'startup-script'], numePlantate: ['user-data'], oprit: 'api-2', altCli: 'gcp-run.json', refuz: 'gcloud compute instances list --format=json' }, + { src: 'gcp-run', nume: ['run:europe-west1/api/api-1'], versiuni: ['sha256:' + H64], numeEnv: ['DB_PASSWORD', 'LOG_LEVEL'], numePlantate: ['DB_PASSWORD_PLAIN'], oprit: '"batch"', altCli: 'gcp-compute.json', refuz: 'gcloud run services list --format=json' }, +]; + +try { + // fixturile de pe disc sunt EXACT cele derivate din surse (altfel proba ar masura un fisier editat de mana) + const derivate = deriva(); const difera = Object.entries(derivate).filter(([f, o]) => textul(F(f)) !== textFixtura(o)).map(([f]) => f); + cer(`fixturile de pe disc sunt cele derivate de deriva.mjs (${Object.keys(derivate).length} fisiere)`, difera.length === 0 && Object.keys(derivate).length >= 27); + cer('CONTROL: o sursa necunoscuta e refuzata (cod 2) si uzanta numeste toate sursele', (() => { const r = side(['scan', '--source', 'aws-foo', '--input', F('aws-ecs.json'), '--log', path.join(T, 'foo.log')]); return r.cod === 2 && A.every((a) => r.out.includes(a.src)) && !fs.existsSync(path.join(T, 'foo.log')); })()); + + const plicuri = []; + for (const a of A) { + const P = (s) => `${a.src}: ${s}`; + // 1: exportul documentat -> incarcaturile care ruleaza, identitatile exacte + const log = path.join(T, a.src + '.log'); const des = log + '.descriptori.jsonl'; + const r1 = scan(a.src, a.src + '.json', log, a.extra || []); + const L = linii(log); const D = linii(des); + const numeScrise = D.map((d) => d.name); const numeInPlic = L.map((e) => e.proof.statement.name); + cer(P(`exportul documentat -> ${a.nume.length} intrari, identitatile exacte (${a.nume.map((n, i) => `${n}@${a.versiuni[i]}`).join(', ')})`), + r1.cod === 0 && L.length === a.nume.length && egal(numeScrise, a.nume) && egal(numeInPlic, a.nume.map((n, i) => `h/${n}@${a.versiuni[i]}`))); + // 5: re-hash + cer(P('descriptorii re-hashati (canonic, adanc) = digestul din plicurile lantului'), D.length === L.length && D.length > 0 && D.every((d) => shaCanon(d.descriptor) === d.sha256 && L[d.seq].proof.statement.sha256 === d.sha256)); + if (a.numeEnv.length) cer(P(`control pozitiv: numele documentate (${a.numeEnv.join(', ')}) sunt in descriptori`), a.numeEnv.every((n) => textul(des).includes(`"${n}"`))); + for (const e of L) plicuri.push({ src: a.src, f: path.join(T, `${a.src}-${e.seq}.json`), p: e.proof }); + // 2: confidentialitate, pe varianta cu valori plantate + const logS = path.join(T, a.src + '.secrete.log'); const desS = logS + '.descriptori.jsonl'; + const r2 = scan(a.src, a.src + '.secrete.json', logS, a.extraSecrete || a.extra || []); + const tot = textul(logS) + textul(desS); const plantate = [SECRET, ...(a.plantateInPlus || [])]; + cer(P(`CONFIDENTIALITATE: valorile plantate NU apar nici in jurnal, nici in descriptori; NUMELE (${a.numePlantate.join(', ')}) da`), + r2.cod === 0 && linii(logS).length === a.nume.length && plantate.every((s) => !tot.includes(s)) && a.numePlantate.every((n) => textul(desS).includes(`"${n}"`))); + // 3: incarcatura oprita nu intra + const logO = path.join(T, a.src + '.oprita.log'); const r3 = scan(a.src, a.src + '.oprita.json', logO, a.extra || []); + const totO = textul(logO) + textul(logO + '.descriptori.jsonl'); + cer(P(`incarcatura OPRITA (${a.oprit}) NU intra: tot atatea intrari ca fara ea, numele ei lipseste`), r3.cod === 0 && linii(logO).length === a.nume.length && !totO.includes(a.oprit)); + // 4: exportul altui CLI, refuzat pe nume + const logA = path.join(T, a.src + '.alt.log'); const r4 = scan(a.src, a.altCli, logA); + cer(P(`CONTROL: export de alt CLI (${a.altCli}) refuzat PE NUME (cod 2, "not the output of \`${a.refuz}\`"), nimic scris`), r4.cod === 2 && r4.out.includes(`is not the output of \`${a.refuz}\``) && !fs.existsSync(logA)); + } + // 6: moatul, pentru toate plicurile adaptoarelor deodata + if (areVerificator) { let toate = true; for (const x of plicuri) { fs.writeFileSync(x.f, JSON.stringify(x.p)); if (!valid(x.f)) toate = false; } cer(`moat: fiecare plic al celor ${A.length} adaptoare (${plicuri.length}) e VALID pentru verificatorul AIP-23 comun`, toate && plicuri.length >= 13); } + else sari(`moat: fiecare plic al celor ${A.length} adaptoare e VALID pentru verificatorul AIP-23 comun`); + + // particularitati documentate + { const log = path.join(T, 'ecs-fara-def.log'); const r = scan('aws-ecs', 'aws-ecs.json', log); const d = linii(log + '.descriptori.jsonl')[0]?.descriptor || {}; + cer('aws-ecs fara --task-definitions: intra, cu envSource not-in-export si envNames goale (numele stau in definitie)', r.cod === 0 && d.envSource === 'not-in-export' && egal(d.envNames, []) && d.commandSha256 === null); } + { const d = linii(path.join(T, 'aws-ecs.log.descriptori.jsonl'))[0]?.descriptor || {}; const t = textul(path.join(T, 'aws-ecs.log.descriptori.jsonl')); + cer('aws-ecs cu definitii: envSource task-definition, referinta ARN a secretului (valueFrom) NU intra, montarea intra cu calea din container', d.envSource === 'task-definition' && !t.includes('secretsmanager') && egal(d.mounts, ['/usr/local/apache2/htdocs'])); } + { const r = scan('azure-vm', 'azure-vm.fara-d.json', path.join(T, 'vm-fara-d.log')); + cer('CONTROL: `az vm list` fara -d (fara powerState) -> refuzat pe nume (cod 2), nimic scris', r.cod === 2 && /has no powerState/.test(r.out) && r.out.includes('az vm list -d') && !fs.existsSync(path.join(T, 'vm-fara-d.log'))); } + { const t = textul(path.join(T, 'azure-vm.secrete.log.descriptori.jsonl')); + cer('azure-vm: customData, userData, adminUsername, cheile ssh si adresele (publicIps, privateIps) NU sunt chei ale descriptorului', t.length > 0 && !/"(customData|userData|adminUsername|publicKeys|publicIps|privateIps|fqdns|macAddresses)"/.test(t)); } + { const r = scan('azure-container', 'azure-container.fara-stare.json', path.join(T, 'aci-fara-stare.log')); + cer('CONTROL: `az container list` fara instanceView -> refuzat pe nume (cod 2, cere `az container show`), nimic scris', r.cod === 2 && /instanceView\.currentState/.test(r.out) && r.out.includes('az container show') && !fs.existsSync(path.join(T, 'aci-fara-stare.log'))); } + { const d = linii(path.join(T, 'azure-webapp.log.descriptori.jsonl')).map((x) => x.descriptor); + cer('azure-webapp: situl cu DOCKER|imagine are imageIdentity declared si imaginea; cel fara runtime in export are not-in-export', d.length === 2 && d[0].imageIdentity === 'declared' && d[0].image === 'mcr.microsoft.com/appsvc/staticsite:latest' && d[1].imageIdentity === 'not-in-export' && d[1].image === null); } + { const d = linii(path.join(T, 'gcp-run.log.descriptori.jsonl'))[0]?.descriptor || {}; + cer('gcp-run: imaginea data prin digest -> imageIdentity digest, regiunea din eticheta cloud.googleapis.com/location, valueFrom nu intra', d.imageIdentity === 'digest' && d.imageDigest === 'sha256:' + H64 && d.region === 'europe-west1' && !JSON.stringify(d).includes('secretKeyRef')); } + { const d = linii(path.join(T, 'aws-lambda.log.descriptori.jsonl')).map((x) => x.descriptor); + cer('aws-lambda: list-functions nu poarta State -> state not-in-export, identitatea e CodeSha256 (imageIdentity codeSha256)', d.length === 3 && d.every((x) => x.state === 'not-in-export' && x.imageIdentity === 'codeSha256' && x.codeSha256)); } +} catch (e) { console.log(` [RAU ] proba a cazut: ${e.stack || e.message}`); rele++; } +finally { fs.rmSync(T, { recursive: true, force: true }); } +console.log(`\nB15 adaptoare cloud: ${bune}/${bune + rele + sarite} cum trebuia${sarite ? `, ${sarite} SARITE` : ''} (sidecar: ${SIDE})`); +process.exitCode = rele ? 1 : sarite ? 2 : 0; diff --git a/verify-layer/sidecar.mjs b/verify-layer/sidecar.mjs index 72c736d..41ebf45 100644 --- a/verify-layer/sidecar.mjs +++ b/verify-layer/sidecar.mjs @@ -18,6 +18,9 @@ // sidecar record --kind proof --proof-file f.json (leaga orice plic AIP-23 gata facut, dupa ce ii verifica forma si integritatea) // sidecar scan --source docker|kubernetes --input export.json (fiecare container care RULEAZA; NUMAI numele variabilelor de mediu, // linia de comanda ca hash; exportul il face operatorul) +// sidecar scan --source aws-ecs|aws-ec2|aws-lambda|azure-vm|azure-container|azure-containerapp|azure-webapp|gcp-compute|gcp-run +// --input export.json [--task-definitions f] (B15, 2026-10-18: exportul CLI-ului furnizorului, facut de operator; aceeasi +// forma: numai ce RULEAZA, numai NUMELE variabilelor, nicio acreditare si niciun apel la API) // sidecar verify-log --log p [--attested cap.json [--signer head.pub.pem]] -> 0 intreg (si continua capul atestat), 1 rupt sau necontinuat // sidecar attest-head --log p [--out f] [--sign-key head.key.pem] -> capul lantului ca plic AIP-23 aere-audit-head, semnat ML-DSA-65 // sidecar keygen --out -> cheia ML-DSA-65 cu care operatorul semneaza capetele (head.key.pem 0600, head.pub.pem) @@ -184,6 +187,243 @@ export function descrieKubernetes(lista) { return out; } +// ---- adaptoarele pe furnizori de cloud (B15, 2026-10-18): ACEEASI forma, onesta ------------------------------------------------ +// Exportul il face operatorul cu CLI-ul furnizorului, cu acreditarile LUI, pe masina lui; sidecar-ul citeste fisierul si atat: nicio +// acreditare in sidecar, niciun apel la un API. Fiecare adaptor: (1) refuza pe nume un fisier care nu e iesirea CLI-ului numit; +// (2) ia numai incarcaturile pe care exportul le declara ca RULEAZA; (3) scrie identitatea (imagine + digest cand exportul il are, +// altfel id-ul masinii/serviciului + imaginea declarata, `imageIdentity: 'declared'`), regiunea/zona, NUMAI numele variabilelor de +// mediu (si ale etichetelor, setarilor, cheilor de metadata), NICIO valoare de userData/customData/metadata (nu se copiaza deloc). +// Descriptorul e canonic (chei sortate la toate nivelurile) si devine un plic 'data' prin acelasi constructor ca Docker/Kubernetes. +// Masurate pe iesirile DOCUMENTATE ale CLI-urilor (fixturi-cloud/), nu pe un cont real: nu avem conturi la AWS/Azure/GCP. +const canonicAdanc = (v) => (Array.isArray(v) ? '[' + v.map((x) => canonicAdanc(x === undefined ? null : x)).join(',') + ']' + : v && typeof v === 'object' ? '{' + Object.keys(v).filter((k) => v[k] !== undefined).sort().map((k) => JSON.stringify(k) + ':' + canonicAdanc(v[k])).join(',') + '}' + : JSON.stringify(v === undefined ? null : v)); +const numeDin = (lista, cheie = 'name') => [...new Set((Array.isArray(lista) ? lista : []).map((e) => (e && typeof e === 'object' ? e[cheie] : e)).filter((n) => typeof n === 'string' && n))].sort(); +const ultimul = (url) => (typeof url === 'string' && url ? url.split('/').filter(Boolean).pop() || null : null); +const grupulDin = (id) => { const m = /\/resourceGroups\/([^/]+)\//i.exec(String(id || '')); return m ? m[1] : null; }; +const digestDinImagine = (img) => { const m = /@(sha256:[0-9a-fA-F]{64})$/.exec(String(img || '')); return m ? m[1].toLowerCase() : null; }; +// az CLI scrie resursele ARM cu `properties` aplatizat; `az rest` si extensia containerapp le lasa imbricate: se citesc amandoua formele +const aplatizat = (o) => (o && typeof o === 'object' && o.properties && typeof o.properties === 'object' ? { ...o.properties, ...o } : o); +const intrare = (nume, version, d) => ({ name: nume, version: version || '?', content: Buffer.from(canonicAdanc(d), 'utf8') }); + +/** `aws ecs describe-tasks` (+ optional `aws ecs describe-task-definition`, una sau o lista, pentru numele variabilelor si comanda) */ +export function descrieAwsEcs(j, definitii = null) { + if (!(!!j && !Array.isArray(j) && Array.isArray(j.tasks) /*FORMA:aws-ecs*/)) throw new Error('aws-ecs: the input is not the output of `aws ecs describe-tasks` (an object with tasks[])'); + const defs = new Map(); + for (const d of definitii == null ? [] : Array.isArray(definitii) ? definitii : [definitii]) { + const td = d && d.taskDefinition; + if (!(!!td && typeof td.taskDefinitionArn === 'string' && Array.isArray(td.containerDefinitions) /*FORMA:aws-ecs-definitii*/)) throw new Error('aws-ecs: --task-definitions is not the output of `aws ecs describe-task-definition` (taskDefinition.containerDefinitions[])'); + defs.set(td.taskDefinitionArn, td); + } + const out = []; + for (const t of j.tasks) { + if (!(!!t && t.lastStatus === 'RUNNING' /*RULEAZA:aws-ecs*/)) continue; + const td = defs.get(t.taskDefinitionArn) || null; + const region = String(t.taskArn || '').split(':')[3] || null; + for (const c of t.containers || []) { + // si containerul trebuie sa ruleze: un task RUNNING poate avea un container neesential deja oprit + if (!(!!c && c.lastStatus === 'RUNNING' /*RULEAZA:aws-ecs-container*/)) continue; + const cd = td ? td.containerDefinitions.find((x) => x && x.name === c.name) || null : null; + const over = (t.overrides?.containerOverrides || []).find((x) => x && x.name === c.name) || null; + const d = { + runtime: 'aws-ecs', region, clusterArn: t.clusterArn || null, taskArn: t.taskArn || null, taskDefinitionArn: t.taskDefinitionArn || null, + container: c.name, image: c.image || cd?.image || null, imageDigest: c.imageDigest || null, imageIdentity: c.imageDigest ? 'digest' : 'declared', + runtimeId: c.runtimeId || null, launchType: t.launchType || null, availabilityZone: t.availabilityZone || null, startedAt: t.startedAt || null, + group: t.group || null, taskVersion: t.version ?? null, + commandSha256: cd ? sha256(Buffer.from(JSON.stringify([...(cd.entryPoint || []), ...(over?.command || cd.command || [])]), 'utf8')) : null, + // numele din definitie (environment + secrets, al caror valueFrom e un ARN, nu o valoare) si din overrides; valorile nu intra + envNames: numeDin([...(cd?.environment || []), ...(cd?.secrets || []), ...(over?.environment || [])] /*NUME:aws-ecs*/), + envSource: td ? (over?.environment ? 'task-definition+overrides' : 'task-definition') : over?.environment ? 'overrides-only' : 'not-in-export', + mounts: (cd?.mountPoints || []).map((m) => m && m.containerPath).filter(Boolean).sort(), + }; + out.push(intrare(`ecs:${ultimul(t.clusterArn)}/${ultimul(t.taskArn)}/${c.name}`, c.imageDigest || c.image, d)); + } + } + return out; +} + +/** `aws ec2 describe-instances` */ +export function descrieAwsEc2(j) { + if (!(!!j && !Array.isArray(j) && Array.isArray(j.Reservations) /*FORMA:aws-ec2*/)) throw new Error('aws-ec2: the input is not the output of `aws ec2 describe-instances` (an object with Reservations[])'); + const out = []; + for (const r of j.Reservations) for (const i of r?.Instances || []) { + if (!(!!i && i.State?.Name === 'running' /*RULEAZA:aws-ec2*/)) continue; + const zona = i.Placement?.AvailabilityZone || null; const region = zona ? zona.replace(/[a-z]$/, '') : null; + // userData nu e in describe-instances si nu se cere; valorile etichetelor nu intra (o eticheta poate purta orice) + const d = { + runtime: 'aws-ec2', region, availabilityZone: zona, instanceId: i.InstanceId || null, imageId: i.ImageId || null, imageIdentity: 'declared', + instanceType: i.InstanceType || null, architecture: i.Architecture || null, platformDetails: i.PlatformDetails || null, virtualizationType: i.VirtualizationType || null, + bootMode: i.BootMode || null, launchTime: i.LaunchTime || null, iamInstanceProfileArn: i.IamInstanceProfile?.Arn || null, rootDeviceType: i.RootDeviceType || null, + imdsV2Required: i.MetadataOptions ? i.MetadataOptions.HttpTokens === 'required' : null, tagKeys: numeDin(i.Tags, 'Key' /*NUME:aws-ec2*/), + }; + out.push(intrare(`ec2:${region}/${i.InstanceId}`, i.ImageId, d)); + } + return out; +} + +/** `aws lambda list-functions`: list-functions nu intoarce State (nota din documentatia lui); o functie e inregistrata ca desfasurata, + * cu `state: 'not-in-export'`; daca exportul poarta State (get-function-configuration), numai `Active` intra */ +export function descrieAwsLambda(j) { + if (!(!!j && !Array.isArray(j) && Array.isArray(j.Functions) /*FORMA:aws-lambda*/)) throw new Error('aws-lambda: the input is not the output of `aws lambda list-functions` (an object with Functions[])'); + const out = []; + for (const f of j.Functions) { + if (!(!!f && (f.State === undefined || f.State === 'Active') /*RULEAZA:aws-lambda*/)) continue; + const region = String(f.FunctionArn || '').split(':')[3] || null; + const d = { + runtime: 'aws-lambda', region, functionArn: f.FunctionArn || null, functionName: f.FunctionName || null, packageType: f.PackageType || 'Zip', + functionRuntime: f.Runtime || null, handler: f.Handler || null, codeSha256: f.CodeSha256 || null, imageIdentity: f.CodeSha256 ? 'codeSha256' : 'declared', + codeSize: f.CodeSize ?? null, lastModified: f.LastModified || null, functionVersion: f.Version || null, revisionId: f.RevisionId || null, + architectures: [...(f.Architectures || [])].sort(), layers: numeDin(f.Layers, 'Arn'), state: f.State ?? 'not-in-export', + envNames: Object.keys(f.Environment?.Variables || {}).sort() /*NUME:aws-lambda*/, + }; + out.push(intrare(`lambda:${region}/${f.FunctionName}`, f.CodeSha256, d)); + } + return out; +} + +/** `az vm list -d` (--show-details adauga powerState; fara el exportul nu spune daca masina merge, si e refuzat) */ +export function descrieAzureVm(j) { + if (!(Array.isArray(j) && j.every((v) => v && typeof v.id === 'string' && /\/providers\/Microsoft\.Compute\/virtualMachines\//i.test(v.id)) /*FORMA:azure-vm*/)) throw new Error('azure-vm: the input is not the output of `az vm list -d` (an array of Microsoft.Compute/virtualMachines resources)'); + const vms = j.map(aplatizat); + if (!(vms.length === 0 || vms.some((v) => typeof v.powerState === 'string') /*FORMA:azure-vm-d*/)) throw new Error('azure-vm: the export has no powerState: run `az vm list -d` (--show-details), which adds the power state of each machine'); + const out = []; + for (const v of vms) { + if (!(v.powerState === 'VM running' /*RULEAZA:azure-vm*/)) continue; + const ir = v.storageProfile?.imageReference || {}; const rg = v.resourceGroup || grupulDin(v.id); + // customData, userData, adminUsername, cheile ssh, adresele: nu se copiaza; etichetele intra numai cu numele + const d = { + runtime: 'azure-vm', id: v.id, name: v.name || null, resourceGroup: rg, location: v.location || null, zones: [...(v.zones || [])].sort(), vmId: v.vmId || null, + vmSize: v.hardwareProfile?.vmSize || null, + imageReference: Object.fromEntries(['publisher', 'offer', 'sku', 'version', 'exactVersion', 'id', 'sharedGalleryImageId', 'communityGalleryImageId'].filter((k) => ir[k] != null).map((k) => [k, ir[k]])), + imageIdentity: 'declared', osType: v.storageProfile?.osDisk?.osType || null, computerName: v.osProfile?.computerName || null, + provisioningState: v.provisioningState || null, powerState: v.powerState, timeCreated: v.timeCreated || null, tagKeys: Object.keys(v.tags || {}).sort() /*NUME:azure-vm*/, + }; + out.push(intrare(`azvm:${rg}/${v.name}`, ir.exactVersion || ir.version || ir.id, d)); + } + return out; +} + +/** `az container list` / `az container show` (Azure Container Instances): starea fiecarui container e in instanceView.currentState */ +export function descrieAzureContainer(j) { + if (!(Array.isArray(j) && j.every((g) => g && typeof g.id === 'string' && /\/providers\/Microsoft\.ContainerInstance\/containerGroups\//i.test(g.id)) /*FORMA:azure-container*/)) throw new Error('azure-container: the input is not the output of `az container list` or `az container show` (an array of Microsoft.ContainerInstance/containerGroups resources)'); + const out = []; let cuStare = 0; + for (const g0 of j) { + const g = aplatizat(g0); const rg = g.resourceGroup || grupulDin(g.id); + for (const c0 of g.containers || []) { + const c = aplatizat(c0); const st = c.instanceView?.currentState || null; if (st) cuStare++; + if (!(!!st && st.state === 'Running' /*RULEAZA:azure-container*/)) continue; + // environmentVariables intra cu numele (value si secureValue nu), imageRegistryCredentials nu intra deloc + const d = { + runtime: 'azure-container', groupId: g.id, group: g.name || null, resourceGroup: rg, location: g.location || null, zones: [...(g.zones || [])].sort(), osType: g.osType || null, + provisioningState: g.provisioningState || null, container: c.name || null, image: c.image || null, imageDigest: digestDinImagine(c.image), imageIdentity: digestDinImagine(c.image) ? 'digest' : 'declared', + commandSha256: sha256(Buffer.from(JSON.stringify(c.command || []), 'utf8')), envNames: numeDin(c.environmentVariables /*NUME:azure-container*/), + mounts: (c.volumeMounts || []).map((m) => m && m.mountPath).filter(Boolean).sort(), startedAt: st.startTime || null, restartCount: c.instanceView?.restartCount ?? null, + }; + out.push(intrare(`aci:${rg}/${g.name}/${c.name}`, digestDinImagine(c.image) || c.image, d)); + } + } + if (j.length && cuStare === 0) throw new Error('azure-container: no container in the export carries instanceView.currentState (`az container list` may omit it): collect `az container show -g -n -o json` outputs into a JSON array'); + return out; +} + +/** `az containerapp list` (Azure Container Apps): runningStatus e al aplicatiei; numai `Running` intra (Progressing, Stopped, Suspended + * si `Ready`, pe care specificatia il enumera fara sa il defineasca, nu); initContainers nu intra (nu ruleaza continuu) */ +export function descrieAzureContainerApp(j) { + if (!(Array.isArray(j) && j.every((a) => a && typeof a.id === 'string' && /\/providers\/Microsoft\.App\/containerApps\//i.test(a.id)) /*FORMA:azure-containerapp*/)) throw new Error('azure-containerapp: the input is not the output of `az containerapp list` (an array of Microsoft.App/containerApps resources)'); + const out = []; + for (const a0 of j) { + const a = aplatizat(a0); + if (!(a.runningStatus === 'Running' /*RULEAZA:azure-containerapp*/)) continue; + const rg = a.resourceGroup || grupulDin(a.id); + for (const c of a.template?.containers || []) { + if (!c) continue; + // env intra cu numele; secretRef e numele unui secret, nu valoarea lui; configuration.secrets nu se citeste deloc + const d = { + runtime: 'azure-containerapp', appId: a.id, app: a.name || null, resourceGroup: rg, location: a.location || null, environmentId: a.environmentId || a.managedEnvironmentId || null, + provisioningState: a.provisioningState || null, runningStatus: a.runningStatus, latestReadyRevisionName: a.latestReadyRevisionName || null, latestRevisionName: a.latestRevisionName || null, + workloadProfileName: a.workloadProfileName || null, container: c.name || null, image: c.image || null, imageDigest: digestDinImagine(c.image), imageIdentity: digestDinImagine(c.image) ? 'digest' : 'declared', + commandSha256: sha256(Buffer.from(JSON.stringify([...(c.command || []), ...(c.args || [])]), 'utf8')), envNames: numeDin(c.env /*NUME:azure-containerapp*/), envSecretRefs: numeDin(c.env, 'secretRef'), + mounts: (c.volumeMounts || []).map((m) => m && m.mountPath).filter(Boolean).sort(), + }; + out.push(intrare(`aca:${rg}/${a.name}/${c.name}`, digestDinImagine(c.image) || c.image, d)); + } + } + return out; +} + +/** `az webapp list --show-details` (App Service): state e al sitului; runtime-ul e linuxFxVersion/windowsFxVersion (DOCKER|imagine + * pentru un container); appSettings si connectionStrings intra numai cu numele (API-ul le ascunde oricum la citirile obisnuite) */ +export function descrieAzureWebapp(j) { + if (!(Array.isArray(j) && j.every((s) => s && typeof s.id === 'string' && /\/providers\/Microsoft\.Web\/sites\//i.test(s.id)) /*FORMA:azure-webapp*/)) throw new Error('azure-webapp: the input is not the output of `az webapp list --show-details` (an array of Microsoft.Web/sites resources)'); + const out = []; + for (const s0 of j) { + const s = aplatizat(s0); + if (!(s.state === 'Running' /*RULEAZA:azure-webapp*/)) continue; + const rg = s.resourceGroup || grupulDin(s.id); const sc = s.siteConfig && typeof s.siteConfig === 'object' ? s.siteConfig : null; + const fx = sc?.linuxFxVersion || sc?.windowsFxVersion || null; const m = /^DOCKER\|(.+)$/i.exec(fx || ''); const image = m ? m[1] : null; + const d = { + runtime: 'azure-webapp', id: s.id, name: s.name || null, resourceGroup: rg, location: s.location || null, kind: s.kind || null, state: s.state, defaultHostName: s.defaultHostName || null, + fxVersion: fx, image, imageDigest: digestDinImagine(image), imageIdentity: digestDinImagine(image) ? 'digest' : fx ? 'declared' : 'not-in-export', + lastModifiedTimeUtc: s.lastModifiedTimeUtc || null, httpsOnly: s.httpsOnly ?? null, minTlsVersion: sc?.minTlsVersion || null, siteConfigInExport: !!sc, + appSettingNames: numeDin(sc?.appSettings /*NUME:azure-webapp*/), connectionStringNames: numeDin(sc?.connectionStrings), + }; + out.push(intrare(`azwebapp:${rg}/${s.name}`, digestDinImagine(image) || image || fx, d)); + } + return out; +} + +/** `gcloud compute instances list --format=json`: metadata.items intra numai cu cheile (startup-script, user-data, ssh-keys stau acolo) */ +export function descrieGcpCompute(j) { + if (!(Array.isArray(j) && j.every((i) => i && i.kind === 'compute#instance') /*FORMA:gcp-compute*/)) throw new Error('gcp-compute: the input is not the output of `gcloud compute instances list --format=json` (an array of compute#instance resources)'); + const out = []; + for (const i of j) { + if (!(i.status === 'RUNNING' /*RULEAZA:gcp-compute*/)) continue; + const boot = (i.disks || []).find((d) => d && d.boot) || null; const zona = ultimul(i.zone); + const d = { + runtime: 'gcp-compute', id: i.id != null ? String(i.id) : null, name: i.name || null, zone: zona, machineType: ultimul(i.machineType), status: i.status, cpuPlatform: i.cpuPlatform || null, + creationTimestamp: i.creationTimestamp || null, lastStartTimestamp: i.lastStartTimestamp || null, + bootDisk: boot ? { source: ultimul(boot.source), licenses: (boot.licenses || []).map(ultimul).filter(Boolean).sort(), architecture: boot.architecture || null, diskSizeGb: boot.diskSizeGb ?? null } : null, + imageIdentity: 'declared', serviceAccounts: numeDin(i.serviceAccounts, 'email'), labelKeys: Object.keys(i.labels || {}).sort(), metadataKeys: numeDin(i.metadata?.items, 'key' /*NUME:gcp-compute*/), + selfLink: i.selfLink || null, + }; + out.push(intrare(`gce:${zona}/${i.name}`, i.id != null ? String(i.id) : null, d)); + } + return out; +} + +/** `gcloud run services list --format=json` (Knative Service, Cloud Run Admin API v1): ruleaza = conditia Ready e True */ +export function descrieGcpRun(j) { + if (!(Array.isArray(j) && j.every((s) => s && s.apiVersion === 'serving.knative.dev/v1' && s.kind === 'Service') /*FORMA:gcp-run*/)) throw new Error('gcp-run: the input is not the output of `gcloud run services list --format=json` (an array of serving.knative.dev/v1 Service resources)'); + const out = []; + for (const s of j) { + const ready = (s.status?.conditions || []).find((c) => c && c.type === 'Ready') || null; + if (!(!!ready && ready.status === 'True' /*RULEAZA:gcp-run*/)) continue; + const md = s.metadata || {}; const region = md.labels?.['cloud.googleapis.com/location'] || null; const spec = s.spec?.template?.spec || {}; + (spec.containers || []).forEach((c, idx) => { + if (!c) return; + const nume = c.name || `container-${idx}`; + // env intra cu numele; value si valueFrom (referinta la Secret Manager) nu + const d = { + runtime: 'gcp-run', service: md.name || null, namespace: md.namespace || null, region, uid: md.uid || null, generation: md.generation ?? null, observedGeneration: s.status?.observedGeneration ?? null, + latestReadyRevisionName: s.status?.latestReadyRevisionName || null, latestCreatedRevisionName: s.status?.latestCreatedRevisionName || null, url: s.status?.url || null, + serviceAccountName: spec.serviceAccountName || null, container: nume, image: c.image || null, imageDigest: digestDinImagine(c.image), imageIdentity: digestDinImagine(c.image) ? 'digest' : 'declared', + commandSha256: sha256(Buffer.from(JSON.stringify([...(c.command || []), ...(c.args || [])]), 'utf8')), envNames: numeDin(c.env /*NUME:gcp-run*/), + mounts: (c.volumeMounts || []).map((m) => m && m.mountPath).filter(Boolean).sort(), readySince: ready.lastTransitionTime || null, + }; + out.push(intrare(`run:${region}/${md.name}/${nume}`, digestDinImagine(c.image) || s.status?.latestReadyRevisionName || c.image, d)); + }); + } + return out; +} + +/** sursa -> adaptor; `aws-ecs` primeste si definitiile de task (optional) */ +export const ADAPTOARE = { + docker: descrieDocker, kubernetes: descrieKubernetes, + 'aws-ecs': descrieAwsEcs, 'aws-ec2': descrieAwsEc2, 'aws-lambda': descrieAwsLambda, + 'azure-vm': descrieAzureVm, 'azure-container': descrieAzureContainer, 'azure-containerapp': descrieAzureContainerApp, 'azure-webapp': descrieAzureWebapp, + 'gcp-compute': descrieGcpCompute, 'gcp-run': descrieGcpRun, +}; + // ---- scrierea: un singur scriitor odata ---------------------------------------------------------------------------------------- // Doi scriitori fara lacat citeau aceeasi lungime si scriau acelasi seq: lantul se rupea, si de atunci ORICE adaugare era refuzata // (revizuirea adversariala 2026-09-29, masurat: doi scriitori concurenti rup lantul). Lacatul e un fisier creat exclusiv langa @@ -277,13 +517,14 @@ async function main() { } case 'scan': { const src = get('--source'); const f = get('--input'); - if (!['docker', 'kubernetes'].includes(src) || !f) { console.error('scan --source docker|kubernetes --input '); return 2; } + if (!ADAPTOARE[src] || !f) { console.error(`scan --source ${Object.keys(ADAPTOARE).join('|')} --input [--task-definitions ]`); return 2; } let desc; try { const j = JSON.parse(fs.readFileSync(f, 'utf8')); - desc = src === 'docker' ? descrieDocker(j) : descrieKubernetes(j); + const td = get('--task-definitions'); + desc = src === 'aws-ecs' ? descrieAwsEcs(j, td ? JSON.parse(fs.readFileSync(td, 'utf8')) : null) : ADAPTOARE[src](j); } catch (e) { console.error('scan: ' + e.message); return 2; } - if (desc.length === 0) { console.error('scan: no running container in the export; a zero is not recorded'); return 2; } + if (desc.length === 0) { console.error('scan: no running workload (container, task, instance, function or service) in the export; a zero is not recorded'); return 2; } // plicul 'data' poarta numai digestul descriptorului; descriptorul insusi (fara valori de mediu, prin constructie) sta // alaturi, ca un auditor sa il poata re-hasha si compara cu plicul din lant; scris sub acelasi lacat const desFile = get('--descriptors', log + '.descriptori.jsonl'); @@ -293,7 +534,7 @@ async function main() { fs.appendFileSync(desFile, JSON.stringify({ seq: r.seq, name: d.name, sha256: sha256(d.content), descriptor: JSON.parse(d.content.toString('utf8')) }) + '\n'); console.log(`recorded seq=${r.seq} ${d.name} ${String(d.version || '?').slice(0, 19)}`); }); - console.log(`scan ${src}: ${desc.length} running containers, ${desc.length} envelopes in ${log}, descriptors in ${desFile}`); + console.log(`scan ${src}: ${desc.length} running ${['docker', 'kubernetes'].includes(src) ? 'containers' : 'workloads'}, ${desc.length} envelopes in ${log}, descriptors in ${desFile}`); return 0; } case 'verify-log': {