[Fleet] improvements to install packages script run by daily job (#148517)

## Summary

Related to https://github.com/elastic/ingest-dev/issues/1487

Improvements to the script run by the [daily
job](https://buildkite.com/elastic/kibana-fleet-packages)

- logging time it took to install packages
- ordering install time in descending order
- added prerelease flag
- delete each package after install

Sample run locally:
```
 │ info  dga@0.0.3 took 19.224s
       │ info  endpoint@8.7.0-next took 12.971s
       │ info  apm@8.7.0-preview-1672912576 took 10.047s
       │ info  aws@1.28.3 took 9.959s
       │ info  slack@0.2.1 took 9.063s
       │ info  journald@0.0.4 took 8.945s
       │ info  panw@3.4.2 took 8.569s
       │ info  auth0@1.3.1 took 7.578s
       │ info  auditd_manager@1.5.0 took 7.541s
       │ info  logstash@2.1.1-preview1 took 7.252s
       │ info  etcd@0.2.0 took 7.223s
       │ info  oracle_weblogic@0.3.0 took 7.128s
       │ info  oracle@1.9.2 took 7.11s
       │ info  barracuda@0.12.1 took 6.907s
       │ info  azure_billing@1.1.1 took 6.843s
       │ info  checkpoint@1.10.0 took 6.469s
       │ info  auditd@3.4.2 took 6.194s
       │ info  proofpoint_tap@1.3.1 took 6.118s
       │ info  zeek@2.6.1 took 5.998s
       │ info  synthetics@0.11.5 took 5.936s
       │ info  elasticsearch@1.1.0-preview1 took 5.884s
       │ info  memcached@0.2.0 took 5.747s
       │ info  salesforce@0.2.0 took 5.585s
       │ info  sonicwall_firewall@1.2.0 took 5.46s
       │ info  gcp@2.15.1 took 5.16s
       │ info  cisco_aironet@0.2.0 took 5.124s
       │ info  containerd@0.2.1 took 5.121s
       │ info  azure@1.5.5 took 5.115s
       │ info  crowdstrike@1.8.2 took 5.113s
       │ info  ibmmq@0.2.0 took 5.089s
       │ info  postgresql@1.5.0 took 5.082s
       │ info  proofpoint@0.9.1 took 5.082s
       │ info  netskope@1.5.0 took 5.05s
       │ info  cisco_asa@2.11.0 took 4.996s
       │ info  darktrace@0.2.0 took 4.856s
       │ info  box_events@0.3.0 took 4.801s
       │ info  cassandra@1.3.0 took 4.699s
       │ info  citrix_adc@0.5.0 took 4.626s
       │ info  system@1.20.4 took 4.507s
       │ info  aws_logs@0.3.2 took 4.473s
       │ info  atlassian_confluence@1.6.1 took 4.456s
       │ info  cisco_ftd@2.7.0 took 4.431s
       │ info  istio@0.2.2 took 4.217s
       │ info  prometheus@1.0.1 took 4.189s
       │ info  snyk@1.5.0 took 4.18s
       │ info  cisco_meraki@1.4.1 took 4.174s
       │ info  nginx@1.6.0 took 4.157s
       │ info  infoblox_nios@1.5.0 took 4.155s
       │ info  o365@1.9.2 took 4.151s
       │ info  osquery@1.6.1 took 4.133s
       │ info  vsphere@1.2.1 took 4.129s
       │ info  cyberark_pta@0.3.0 took 4.127s
       │ info  security_detection_engine@8.4.1 took 4.126s
       │ info  ti_cif3@0.3.1 took 4.124s
       │ info  nats@1.3.0 took 4.119s
       │ info  santa@3.4.1 took 4.117s
       │ info  citrix_waf@1.2.0 took 4.116s
       │ info  fortinet_fortigate@1.5.0 took 4.115s
       │ info  websphere_application_server@0.2.0 took 4.115s
       │ info  hid_bravura_monitor@1.3.2 took 4.113s
       │ info  windows@1.15.2 took 4.113s
       │ info  microsoft_sqlserver@1.11.1 took 4.11s
       │ info  sysmon_linux@0.1.0 took 4.11s
       │ info  problemchild@0.0.4 took 4.109s
       │ info  nagios_xi@0.2.0 took 4.108s
       │ info  pfsense@1.5.0 took 4.108s
       │ info  osquery_manager@1.5.1 took 4.107s
       │ info  spring_boot@0.6.1 took 4.107s
       │ info  suricata@2.5.3 took 4.107s
       │ info  influxdb@0.1.0 took 4.106s
       │ info  zookeeper@1.4.0 took 4.106s
       │ info  redisenterprise@0.2.0 took 4.104s
       │ info  apache@1.7.0 took 4.103s
       │ info  cloudflare@2.3.1 took 4.101s
       │ info  nginx_ingress_controller@1.6.0 took 4.101s
       │ info  elastic_package_registry@0.0.6 took 4.1s
       │ info  activemq@0.5.0 took 4.098s
       │ info  couchbase@0.12.1 took 4.097s
       │ info  hadoop@0.3.0 took 4.096s
       │ info  redis@1.4.0 took 4.096s
       │ info  github@1.6.0 took 4.095s
       │ info  hashicorp_vault@1.8.0 took 4.095s
       │ info  iptables@1.3.0 took 4.095s
       │ info  cyberarkpas@2.8.0 took 4.094s
       │ info  lmd@0.0.1 took 4.094s
       │ info  zscaler_zpa@1.4.1 took 4.094s
       │ info  microsoft_defender_endpoint@2.6.0 took 4.093s
       │ info  google_workspace@2.1.0 took 4.092s
       │ info  mongodb@1.5.2 took 4.092s
       │ info  ded@0.0.2 took 4.091s
       │ info  network_traffic@1.8.0 took 4.091s
       │ info  cisco_duo@1.7.0 took 4.09s
       │ info  cloud_security_posture@1.2.2 took 4.09s
       │ info  cisco_secure_email_gateway@1.4.0 took 4.088s
       │ info  docker@2.4.0 took 4.088s
       │ info  linux@0.6.8 took 4.087s
       │ info  azure_metrics@1.0.13 took 4.086s
       │ info  tenable_sc@1.6.2 took 4.086s
       │ info  cloudflare_logpush@0.4.0 took 4.084s
       │ info  m365_defender@1.4.3 took 4.083s
       │ info  iis@1.3.0 took 4.082s
       │ info  fortinet@1.9.0 took 4.054s
       │ info  lastpass@0.2.4 took 4.048s
       │ info  squid@0.11.2 took 4.043s
       │ info  ti_cybersixgill@1.8.1 took 4.027s
       │ info  udp@1.5.0 took 3.996s
       │ info  kafka_log@1.0.0 took 3.968s
       │ info  cockroachdb@1.0.0 took 3.89s
       │ info  atlassian_bitbucket@1.5.1 took 3.884s
       │ info  http_endpoint@1.5.0 took 3.862s
       │ info  1password@1.7.1 took 3.824s
       │ info  ping_one@0.2.0 took 3.623s
       │ info  atlassian_jira@1.6.1 took 3.438s
       │ info  zscaler_zia@2.6.1 took 3.37s
       │ info  traefik@1.5.0 took 3.176s
       │ info  modsecurity@1.4.1 took 3.175s
       │ info  couchdb@0.2.0 took 3.158s
       │ info  ti_otx@1.6.1 took 3.146s
       │ info  ti_threatq@1.7.1 took 3.142s
       │ info  f5_bigip@0.1.0 took 3.125s
       │ info  cisco_ise@1.5.0 took 3.119s
       │ info  microsoft_exchange_online_message_trace@0.1.0 took 3.119s
       │ info  jamf_compliance_reporter@0.4.0 took 3.118s
       │ info  infoblox_bloxone_ddi@0.2.2 took 3.116s
       │ info  symantec_endpoint@2.2.0 took 3.112s
       │ info  php_fpm@0.2.1 took 3.111s
       │ info  okta@1.13.0 took 3.108s
       │ info  mysql@1.4.0 took 3.105s
       │ info  log@1.1.0 took 3.103s
       │ info  ti_util@1.1.0 took 3.103s
       │ info  coredns@0.1.0 took 3.102s
       │ info  lyve_cloud@1.0.0 took 3.1s
       │ info  qnap_nas@1.6.0 took 3.098s
       │ info  apache_spark@0.3.0 took 3.094s
       │ info  ti_anomali@1.8.0 took 3.092s
       │ info  haproxy@1.4.0 took 3.091s
       │ info  kubernetes@1.29.2 took 3.091s
       │ info  trend_micro_vision_one@0.2.2 took 3.091s
       │ info  stan@1.3.0 took 3.089s
       │ info  akamai@2.3.0 took 3.088s
       │ info  netflow@2.3.2 took 3.088s
       │ info  ti_misp@1.8.0 took 3.088s
       │ info  azure_application_insights@1.0.4 took 3.087s
       │ info  mimecast@1.4.2 took 3.085s
       │ info  carbon_black_cloud@1.5.0 took 3.084s
       │ info  cef@2.5.0 took 3.084s
       │ info  ti_abusech@1.8.0 took 3.083s
       │ info  kafka@1.3.1 took 3.082s
       │ info  elastic_agent@1.4.0 took 3.081s
       │ info  radware@0.10.2 took 3.08s
       │ info  sentinel_one@1.4.0 took 3.079s
       │ info  awsfargate@0.2.0 took 3.078s
       │ info  cisco_nexus@0.8.0 took 3.075s
       │ info  sophos@2.6.0 took 3.075s
       │ info  rabbitmq@1.4.0 took 3.072s
       │ info  fortinet_fortimanager@1.2.0 took 3.071s
       │ info  f5@0.12.1 took 3.069s
       │ info  fortinet_forticlient@1.2.0 took 3.064s
       │ info  sonicwall@0.8.2 took 3.064s
       │ info  juniper@1.2.0 took 3.062s
       │ info  juniper_srx@1.7.0 took 3.062s
       │ info  juniper_netscreen@0.5.1 took 3.059s
       │ info  infoblox@0.8.1 took 3.057s
       │ info  juniper_junos@0.5.1 took 3.056s
       │ info  fortinet_fortimail@1.2.0 took 3.052s
       │ info  barracuda_cloudgen_firewall@0.2.0 took 2.142s
       │ info  cisco_ios@1.11.0 took 2.108s
       │ info  fireeye@1.8.0 took 2.108s
       │ info  bluecoat@0.11.1 took 2.079s
       │ info  fortinet_fortiedr@1.3.0 took 2.074s
       │ info  gcp_metrics@0.0.1 took 2.074s
       │ info  cylance@0.11.1 took 2.068s
       │ info  pulse_connect_secure@1.4.0 took 2.064s
       │ info  cisco_umbrella@1.5.0 took 2.062s
       │ info  platform_observability@0.0.1 took 2.061s
       │ info  beat@0.0.1 took 2.06s
       │ info  snort@1.3.0 took 2.06s
       │ info  tcp@1.5.0 took 2.06s
       │ info  zoom@1.6.0 took 2.06s
       │ info  mattermost@1.5.0 took 2.058s
       │ info  panw_cortex_xdr@1.5.2 took 2.058s
       │ info  carbonblack_edr@1.6.0 took 2.057s
       │ info  httpjson@1.6.1 took 2.057s
       │ info  ti_recordedfuture@1.4.1 took 2.057s
       │ info  jolokia@0.0.3 took 2.056s
       │ info  microsoft_dhcp@1.9.0 took 2.055s
       │ info  netscout@0.11.2 took 2.055s
       │ info  fleet_server@1.2.0 took 2.054s
       │ info  airflow@0.0.1 took 2.053s
       │ info  imperva@0.11.2 took 2.052s
       │ info  tomcat@1.7.1 took 2.051s
       │ info  cisco_secure_endpoint@2.7.1 took 2.05s
       │ info  gcp_pubsub@1.3.0 took 2.05s
       │ info  kibana@2.1.0-preview1 took 2.05s
       │ info  cloud_defend@0.1.0 took 2.049s
       │ info  fim@1.3.0 took 2.049s
       │ info  keycloak@1.6.0 took 2.049s
       │ info  mysql_enterprise@1.3.0 took 2.049s
       │ info  zerofox@1.6.0 took 2.049s
       │ info  winlog@1.9.0 took 2.048s
       └- ✖ fail: Fleet packages test install all fleet packages should work and install all packages
       │      Error: Some package install failed: zscaler@0.1.2
       │       at Context.<anonymous> (install_all.ts:79:15)
       │       at runMicrotasks (<anonymous>)
       │       at processTicksAndRejections (node:internal/process/task_queues:96:5)
       │       at Object.apply (wrap_function.js:73:16)
       │ 
       │ 
     └-> "after all" hook: afterTestSuite.trigger for "should work and install all packages"
   └-> "after all" hook: afterTestSuite.trigger in "Fleet packages test"

0 passing (23.0m)
1 failing

```

The `zscaler` issue seems to be a real issue with the package:
```
       │        body: {
       │          statusCode: 400,
       │          error: 'Bad Request',
       │          message: 'Invalid top-level package manifest: one or more fields missing of name, version, description, title, format_version, owner'
       │        },
```

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Julia Bardi 2023-01-09 16:00:26 +01:00 committed by GitHub
parent ba06f68752
commit ee0856d75b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -22,12 +22,30 @@ export default function (providerContext: FtrProviderContext) {
function installPackage(
name: string,
version: string
): Promise<{ name: string; success: boolean; error?: any }> {
): Promise<{ name: string; version: string; success: boolean; error?: any; took?: number }> {
const start = Date.now();
return supertest
.post(`/api/fleet/epm/packages/${name}/${version}`)
.set('kbn-xsrf', 'xxx')
.send({ force: true })
.expect(200)
.then(() => {
const end = Date.now();
return { name, version, success: true, took: (end - start) / 1000 };
})
.catch((error) => {
return { name, version, success: false, error };
});
}
async function deletePackage(
name: string,
version: string
): Promise<{ name: string; success: boolean; error?: any }> {
return supertest
.delete(`/api/fleet/epm/packages/${name}/${version}`)
.set('kbn-xsrf', 'xxx')
.expect(200)
.then(() => {
return { name, success: true };
})
@ -41,22 +59,34 @@ export default function (providerContext: FtrProviderContext) {
it('should work and install all packages', async () => {
const {
body: { items: packages },
} = await supertest.get('/api/fleet/epm/packages').expect(200);
} = await supertest.get('/api/fleet/epm/packages?prerelease=true').expect(200);
const allResults = [];
for (const pkg of packages) {
const pkgName = `${pkg.name}@${pkg.version}`;
// skip deprecated failing package https://github.com/elastic/integrations/issues/4947
if (pkg.name === 'zscaler') continue;
const res = await installPackage(pkg.name, pkg.version);
allResults.push(res);
if (res.success) {
await deletePackage(pkg.name, pkg.version);
}
}
const succeededInstall = allResults
.filter((res) => res.success === true)
.sort((a, b) => (b.took ?? 0) - (a.took ?? 0));
succeededInstall.forEach((res) => {
const pkgName = `${res.name}@${res.version}`;
if (!res.success) {
logger.info(`${pkgName} failed: ${res?.error?.message}`);
} else {
logger.info(`${pkgName}`);
logger.info(`${pkgName} took ${res.took}s`);
}
}
});
const failedInstall = allResults.filter((res) => res.success === false);
if (failedInstall.length) {
throw new Error(
`Some package installe failed: ${failedInstall.map((res) => res.name).join(', ')}`
`Some package install failed: ${failedInstall
.map((res) => `${res.name}@${res.version}`)
.join(', ')}`
);
}
});