Skip to content

Commit 0b4e005

Browse files
committed
feat: Add a "safe registration" experiment
This experiment will try to register hosts in a "safe" way: using a low concurrency number and only using the minimum number of repos (only RHEL 8 for now).
1 parent 0f0637f commit 0b4e005

File tree

1 file changed

+201
-0
lines changed

1 file changed

+201
-0
lines changed
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
#!/bin/bash
2+
3+
source experiment/run-library.sh
4+
5+
organization="${PARAM_organization:-Default Organization}"
6+
manifest="${PARAM_manifest:-conf/contperf/manifest_SCA.zip}"
7+
inventory="${PARAM_inventory:-conf/contperf/inventory.ini}"
8+
local_conf="${PARAM_local_conf:-conf/satperf.local.yaml}"
9+
10+
concurrent_registrations=${PARAM_concurrent_registrations:-125}
11+
12+
wait_interval=${PARAM_wait_interval:-30}
13+
14+
cdn_url_full="${PARAM_cdn_url_full:-https://cdn.redhat.com/}"
15+
16+
repo_sat_tools="${PARAM_repo_sat_tools:-http://mirror.example.com/Satellite_Tools_x86_64/}"
17+
# repo_sat_tools_puppet="${PARAM_repo_sat_tools_puppet:-none}" # Older example: http://mirror.example.com/Satellite_Tools_Puppet_4_6_3_RHEL7_x86_64/
18+
19+
# repo_sat_client_7="${PARAM_repo_sat_client_7:-http://mirror.example.com/Satellite_Client_7_x86_64/}"
20+
repo_sat_client_8="${PARAM_repo_sat_client_8:-http://mirror.example.com/Satellite_Client_8_x86_64/}"
21+
# repo_sat_client_9="${PARAM_repo_sat_client_9:-http://mirror.example.com/Satellite_Client_9_x86_64/}"
22+
23+
rhel_subscription="${PARAM_rhel_subscription:-Red Hat Enterprise Linux Server, Standard (Physical or Virtual Nodes)}"
24+
25+
dl="Default Location"
26+
27+
opts="--forks 100 -i $inventory"
28+
opts_adhoc="$opts -e @conf/satperf.yaml -e @$local_conf"
29+
30+
31+
section "Checking environment"
32+
generic_environment_check
33+
34+
35+
section "Prepare for Red Hat content"
36+
h_out "--no-headers --csv organization list --fields name" | grep --quiet "^$organization$" \
37+
|| h 00-ensure-org.log "organization create --name '$organization'"
38+
skip_measurement='true' h 00-ensure-loc-in-org.log "organization add-location --name '$organization' --location '$dl'"
39+
skip_measurement='true' ap 01-manifest-excercise.log \
40+
-e "manifest=../../$manifest" \
41+
playbooks/tests/manifest-excercise.yaml
42+
e ManifestUpload $logs/01-manifest-excercise.log
43+
e ManifestRefresh $logs/01-manifest-excercise.log
44+
e ManifestDelete $logs/01-manifest-excercise.log
45+
skip_measurement='true' h 02-manifest-upload.log "subscription upload --file '/root/manifest-auto.zip' --organization '$organization'"
46+
s $wait_interval
47+
48+
49+
export skip_measurement='true'
50+
section "Sync from CDN" # do not measure becasue of unpredictable network latency
51+
h 00b-set-cdn-stage.log "organization update --name '$organization' --redhat-repository-url '$cdn_url_full'"
52+
53+
h 00b-manifest-refresh.log "subscription refresh-manifest --organization '$organization'"
54+
55+
# h 12b-reposet-enable-rhel7.log "repository-set enable --organization '$organization' --product 'Red Hat Enterprise Linux Server' --name 'Red Hat Enterprise Linux 7 Server (RPMs)' --releasever '7Server' --basearch 'x86_64'"
56+
# h 12b-repo-sync-rhel7.log "repository synchronize --organization '$organization' --product 'Red Hat Enterprise Linux Server' --name 'Red Hat Enterprise Linux 7 Server RPMs x86_64 7Server'" &
57+
# h 12b-repo-sync-rhel7optional.log "repository synchronize --organization '$organization' --product 'Red Hat Enterprise Linux Server' --name 'Red Hat Enterprise Linux 7 Server - Optional RPMs x86_64 7Server'" &
58+
59+
h 12b-reposet-enable-rhel8baseos.log "repository-set enable --organization '$organization' --product 'Red Hat Enterprise Linux for x86_64' --name 'Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)' --releasever '8' --basearch 'x86_64'"
60+
h 12b-repo-sync-rhel8baseos.log "repository synchronize --organization '$organization' --product 'Red Hat Enterprise Linux for x86_64' --name 'Red Hat Enterprise Linux 8 for x86_64 - BaseOS RPMs 8'" &
61+
h 12b-reposet-enable-rhel8appstream.log "repository-set enable --organization '$organization' --product 'Red Hat Enterprise Linux for x86_64' --name 'Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)' --releasever '8' --basearch 'x86_64'"
62+
h 12b-repo-sync-rhel8appstream.log "repository synchronize --organization '$organization' --product 'Red Hat Enterprise Linux for x86_64' --name 'Red Hat Enterprise Linux 8 for x86_64 - AppStream RPMs 8'" &
63+
64+
# h 12b-reposet-enable-rhel9baseos.log "repository-set enable --organization '$organization' --product 'Red Hat Enterprise Linux for x86_64' --name 'Red Hat Enterprise Linux 9 for x86_64 - BaseOS (RPMs)' --releasever '9' --basearch 'x86_64'"
65+
# h 12b-repo-sync-rhel9baseos.log "repository synchronize --organization '$organization' --product 'Red Hat Enterprise Linux for x86_64' --name 'Red Hat Enterprise Linux 9 for x86_64 - BaseOS RPMs 9'" &
66+
# h 12b-reposet-enable-rhel9appstream.log "repository-set enable --organization '$organization' --product 'Red Hat Enterprise Linux for x86_64' --name 'Red Hat Enterprise Linux 9 for x86_64 - AppStream (RPMs)' --releasever '9' --basearch 'x86_64'"
67+
# h 12b-repo-sync-rhel9appstream.log "repository synchronize --organization '$organization' --product 'Red Hat Enterprise Linux for x86_64' --name 'Red Hat Enterprise Linux 9 for x86_64 - AppStream RPMs 9'" &
68+
wait
69+
unset skip_measurement
70+
71+
72+
export skip_measurement='true'
73+
section "Sync Tools repo"
74+
h product-create.log "product create --organization '$organization' --name SatToolsProduct"
75+
76+
h repository-create-sat-tools.log "repository create --organization '$organization' --product SatToolsProduct --name SatToolsRepo --content-type yum --url '$repo_sat_tools'"
77+
h repository-sync-sat-tools.log "repository synchronize --organization '$organization' --product SatToolsProduct --name SatToolsRepo" &
78+
79+
# [ "$repo_sat_tools_puppet" != "none" ] \
80+
# && h repository-create-puppet-upgrade.log "repository create --organization '$organization' --product SatToolsProduct --name SatToolsPuppetRepo --content-type yum --url '$repo_sat_tools_puppet'"
81+
# [ "$repo_sat_tools_puppet" != "none" ] \
82+
# && h repository-sync-puppet-upgrade.log "repository synchronize --organization '$organization' --product SatToolsProduct --name SatToolsPuppetRepo" &
83+
wait
84+
unset skip_measurement
85+
86+
87+
export skip_measurement='true'
88+
section "Sync Client repos"
89+
h 30-sat-client-product-create.log "product create --organization '$organization' --name SatClientProduct"
90+
91+
# h 30-repository-create-sat-client_7.log "repository create --organization '$organization' --product SatClientProduct --name SatClient7Repo --content-type yum --url '$repo_sat_client_7'"
92+
# h 30-repository-sync-sat-client_7.log "repository synchronize --organization '$organization' --product SatClientProduct --name SatClient7Repo" &
93+
94+
h 30-repository-create-sat-client_8.log "repository create --organization '$organization' --product SatClientProduct --name SatClient8Repo --content-type yum --url '$repo_sat_client_8'"
95+
h 30-repository-sync-sat-client_8.log "repository synchronize --organization '$organization' --product SatClientProduct --name SatClient8Repo" &
96+
97+
# h 30-repository-create-sat-client_9.log "repository create --organization '$organization' --product SatClientProduct --name SatClient9Repo --content-type yum --url '$repo_sat_client_9'"
98+
# h 30-repository-sync-sat-client_9.log "repository synchronize --organization '$organization' --product SatClientProduct --name SatClient9Repo" &
99+
wait
100+
unset skip_measurement
101+
102+
103+
export skip_measurement='true'
104+
section "Synchronise capsules"
105+
tmp=$( mktemp )
106+
h_out "--no-headers --csv capsule list --organization '$organization'" | grep '^[0-9]\+,' >$tmp
107+
for capsule_id in $( cat $tmp | cut -d ',' -f 1 | grep -v '1' ); do
108+
h 13b-capsule-sync-$capsule_id.log "capsule content synchronize --organization '$organization' --id '$capsule_id'"
109+
done
110+
s $wait_interval
111+
unset skip_measurement
112+
113+
114+
export skip_measurement='true'
115+
section "Prepare for registrations"
116+
tmp=$( mktemp )
117+
118+
h_out "--no-headers --csv domain list --search 'name = {{ containers_domain }}'" | grep --quiet '^[0-9]\+,' \
119+
|| h 42-domain-create.log "domain create --name '{{ containers_domain }}' --organizations '$organization'"
120+
121+
h_out "--no-headers --csv location list --organization '$organization'" | grep '^[0-9]\+,' >$tmp
122+
location_ids=$( cut -d ',' -f 1 $tmp | tr '\n' ',' | sed 's/,$//' )
123+
h 42-domain-update.log "domain update --name '{{ containers_domain }}' --organizations '$organization' --location-ids '$location_ids'"
124+
125+
h 43-ak-create.log "activation-key create --content-view '$organization View' --lifecycle-environment Library --name ActivationKey --organization '$organization'"
126+
127+
h_out "--csv subscription list --organization '$organization' --search 'name = \"$rhel_subscription\"'" >$logs/subs-list-rhel.log
128+
rhel_subs_id=$( tail -n 1 $logs/subs-list-rhel.log | cut -d ',' -f 1 )
129+
h 43-ak-add-subs-rhel.log "activation-key add-subscription --organization '$organization' --name ActivationKey --subscription-id '$rhel_subs_id'"
130+
131+
h_out "--csv subscription list --organization '$organization' --search 'name = SatToolsProduct'" >$logs/subs-list-tools.log
132+
tools_subs_id=$( tail -n 1 $logs/subs-list-tools.log | cut -d ',' -f 1 )
133+
h 43-ak-add-subs-tools.log "activation-key add-subscription --organization '$organization' --name ActivationKey --subscription-id '$tools_subs_id'"
134+
135+
h_out "--csv subscription list --organization '$organization' --search 'name = SatClientProduct'" >$logs/subs-list-client.log
136+
client_subs_id=$( tail -n 1 $logs/subs-list-client.log | cut -d ',' -f 1 )
137+
h 43-ak-add-subs-client.log "activation-key add-subscription --organization '$organization' --name ActivationKey --subscription-id '$client_subs_id'"
138+
139+
tmp=$( mktemp )
140+
h_out "--no-headers --csv capsule list --organization '$organization'" | grep '^[0-9]\+,' >$tmp
141+
for row in $( cut -d ' ' -f 1 $tmp ); do
142+
capsule_id=$( echo "$row" | cut -d ',' -f 1 )
143+
capsule_name=$( echo "$row" | cut -d ',' -f 2 )
144+
subnet_name="subnet-for-$capsule_name"
145+
hostgroup_name="hostgroup-for-$capsule_name"
146+
if [ "$capsule_id" -eq 1 ]; then
147+
location_name="$dl"
148+
else
149+
location_name="Location for $capsule_name"
150+
fi
151+
152+
h_out "--no-headers --csv subnet list --search 'name = $subnet_name'" | grep --quiet '^[0-9]\+,' \
153+
|| h 44-subnet-create-$capsule_name.log "subnet create --name '$subnet_name' --ipam None --domains '{{ containers_domain }}' --organization '$organization' --network 172.0.0.0 --mask 255.0.0.0 --location '$location_name'"
154+
155+
subnet_id=$( h_out "--output yaml subnet info --name '$subnet_name'" | grep '^Id:' | cut -d ' ' -f 2 )
156+
a 45-subnet-add-rex-capsule-$capsule_name.log satellite6 \
157+
-m "shell" \
158+
-a "curl --silent --insecure -u {{ sat_user }}:{{ sat_pass }} -X PUT -H 'Accept: application/json' -H 'Content-Type: application/json' https://localhost/api/v2/subnets/$subnet_id -d '{\"subnet\": {\"remote_execution_proxy_ids\": [\"$capsule_id\"]}}'"
159+
h_out "--no-headers --csv hostgroup list --search 'name = $hostgroup_name'" | grep --quiet '^[0-9]\+,' \
160+
|| ap 41-hostgroup-create-$capsule_name.log \
161+
-e "organization='$organization'" \
162+
-e "hostgroup_name=$hostgroup_name" \
163+
-e "subnet_name=$subnet_name" \
164+
playbooks/satellite/hostgroup-create.yaml
165+
done
166+
167+
ap 44-generate-host-registration-command.log \
168+
-e "ak=ActivationKey" \
169+
playbooks/satellite/host-registration_generate-command.yaml \
170+
ap 44-recreate-client-scripts.log \
171+
playbooks/satellite/client-scripts.yaml
172+
unset skip_measurement
173+
174+
175+
section "Register"
176+
number_container_hosts=$( ansible -i $inventory --list-hosts container_hosts 2>/dev/null | grep '^ hosts' | sed 's/^ hosts (\([0-9]\+\)):$/\1/' )
177+
number_containers_per_container_host=$( ansible -i $inventory -m debug -a "var=containers_count" container_hosts[0] | awk '/ "containers_count":/ {print $NF}' )
178+
total_number_containers=$(( number_container_hosts * number_containers_per_container_host ))
179+
registration_iterations=$(( ( total_number_containers + concurrent_registrations - 1 ) / concurrent_registrations )) # We want ceiling rounding: Ceiling( X / Y ) = ( X + Y – 1 ) / Y
180+
concurrent_registrations_per_container_host=$(( concurrent_registrations / number_container_hosts ))
181+
182+
log "Going to register $total_number_containers hosts: $concurrent_registrations_per_container_host hosts per container host ($number_container_hosts available) in $(( registration_iterations + 1 )) batches."
183+
184+
for (( i=1; i <= ( registration_iterations + 1 ); i++ )); do
185+
skip_measurement='true' ap 44b-register-$i.log \
186+
-e "size=${concurrent_registrations_per_container_host}" \
187+
-e "registration_logs='../../$logs/44b-register-container-host-client-logs'" \
188+
-e "method=clients_host-registration" \
189+
playbooks/tests/registrations.yaml
190+
s $wait_interval
191+
done
192+
grep Register $logs/44b-register-*.log >$logs/44b-register-overall.log
193+
e Register $logs/44b-register-overall.log
194+
195+
196+
section "Sosreport"
197+
ap sosreporter-gatherer.log \
198+
-e "sosreport_gatherer_local_dir='../../$logs/sosreport/'" \
199+
playbooks/satellite/sosreport_gatherer.yaml
200+
201+
junit_upload

0 commit comments

Comments
 (0)