Skip to content

Commit 5cec203

Browse files
committed
gen hcloud image for buildkite on-demand agent
1 parent 24ad5e9 commit 5cec203

7 files changed

Lines changed: 171 additions & 33 deletions

File tree

ansible/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
library
2+
13
.cache/
24
*.pyc
35

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
---
2+
- hosts: localhost
3+
become: False
4+
vars_files:
5+
- vars/passwords.yml # hcloud_dlang_ci_token
6+
tasks:
7+
- name: get server to build image
8+
uri:
9+
url: "https://api.hetzner.cloud/v1/servers?name=gen-ci-agent-image"
10+
headers:
11+
Authorization: "Bearer {{ hcloud_dlang_ci_token }}"
12+
status_code: 200
13+
return_content: yes
14+
register: result
15+
tags: create
16+
- name: set server facts
17+
set_fact:
18+
server: "{{ result.json.servers[0] }}"
19+
tags: create
20+
when: result.json.servers | length
21+
- name: create server to build image
22+
uri:
23+
url: "https://api.hetzner.cloud/v1/servers"
24+
method: POST
25+
headers:
26+
Authorization: "Bearer {{ hcloud_dlang_ci_token }}"
27+
Content-Type: application/json
28+
body: |-
29+
{
30+
"name": "gen-ci-agent-image",
31+
"server_type": "cx11",
32+
"image": "ubuntu-16.04",
33+
"ssh_keys": ["dawg@FedoraX64", "seb@wilzba.ch"]
34+
}
35+
status_code: 201
36+
return_content: yes
37+
register: result
38+
tags: create
39+
when: server is not defined
40+
- name: set server facts
41+
set_fact:
42+
server: "{{ result.json.server }}"
43+
tags: create
44+
when: server is not defined
45+
- name: wait for ssh to come up
46+
wait_for:
47+
port: 22
48+
host: "{{ server.public_net.ipv4.ip }}"
49+
search_regex: OpenSSH
50+
tags: create
51+
- name: add build server as new host
52+
add_host:
53+
hostname: gen-ci-agent-image
54+
ansible_ssh_host: "{{ server.public_net.ipv4.ip }}"
55+
groups:
56+
- hcloud
57+
- buildkite_demand_agents
58+
tags: create
59+
60+
- hosts: gen-ci-agent-image
61+
user: root
62+
gather_facts: False
63+
pre_tasks:
64+
- name: install python
65+
raw: |
66+
if [ ! -e /usr/bin/python ]; then
67+
apt-get update -qq && apt-get install -qq --no-install-recommends python-minimal python-apt
68+
fi
69+
- name: gather facts
70+
setup:
71+
72+
- hosts: gen-ci-agent-image
73+
gather_facts: False
74+
vars_files:
75+
- vars/passwords.yml # hcloud_dlang_ci_token
76+
roles:
77+
- role: users
78+
tags: users
79+
ansible_ssh_user: root
80+
groups_for_roles:
81+
- role: admin
82+
groups: sudo,adm,lxd
83+
- role: common
84+
tags: common
85+
- role: test_deps
86+
tags: deps
87+
- role: buildkite_agent
88+
tags: buildkite_agent
89+
priority: 2
90+
num_agents: 8 # for CX51 server
91+
agent_tags: '"queue=default,memory=high"'
92+
93+
- hosts: localhost
94+
become: False
95+
vars_files:
96+
- vars/passwords.yml # hcloud_dlang_ci_token
97+
tasks:
98+
- name: shutdown server
99+
uri:
100+
url: "https://api.hetzner.cloud/v1/servers/{{ server.id }}/actions/shutdown"
101+
method: POST
102+
headers:
103+
Authorization: "Bearer {{ hcloud_dlang_ci_token }}"
104+
status_code: 201
105+
tags: image
106+
- name: create snapshot
107+
uri:
108+
url: "https://api.hetzner.cloud/v1/servers/{{ server.id }}/actions/create_image"
109+
method: POST
110+
headers:
111+
Authorization: "Bearer {{ hcloud_dlang_ci_token }}"
112+
Content-Type: application/json
113+
body: '{ "description": "ci-agent" }'
114+
status_code: 201
115+
tags: image
116+
- name: delete server
117+
uri:
118+
url: "https://api.hetzner.cloud/v1/servers/{{ server.id }}"
119+
method: DELETE
120+
headers:
121+
Authorization: "Bearer {{ hcloud_dlang_ci_token }}"
122+
tags: image
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ansible_ssh_extra_args: '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

ansible/inventories/static

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,14 @@ lxd_containers
4040
[scaleway:children]
4141
scaleway_metal
4242

43+
# running at Hetzner cloud
44+
[hcloud]
45+
4346
# all non-containerized host
4447
[servers:children]
4548
lxd_hosts
4649
scaleway
50+
hcloud
4751

4852
# admin setting
4953
[servers:vars]

ansible/roles/buildkite_agent/defaults/main.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22
agent_version: 3.4.0
33
priority: 5 # Higher priority agents are assigned work first
44
stop_timeout: 5min # systemd TimeoutStopSec for graceful agent shutdown
5+
num_agents: 1
56
agent_tags: '"queue=default,memory=high"'
67
allowed_pipelines:

ansible/roles/buildkite_agent/tasks/main.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,12 @@
4343
TimeoutStopSec={{ stop_timeout }}
4444
KillMode=mixed
4545
notify: systemctl daemon-reload
46-
- name: enable buildkite-agent
47-
service: { name: buildkite-agent, enabled: yes, state: started }
46+
47+
- name: disable buildkite-agent
48+
service: { name: buildkite-agent, enabled: no, state: stopped }
49+
- name: enable buildkite-agents
50+
service: { name: "buildkite-agent@{{ item }}", enabled: yes, state: started }
51+
with_items: "{{ range(1, num_agents + 1) | list }}"
4852

4953
- include_tasks: agent_shutdown_check.yml
5054
when: inventory_hostname in groups.buildkite_demand_agents

ansible/vars/passwords.yml

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,36 @@
11
$ANSIBLE_VAULT;1.1;AES256
2-
37363036353564396261626166663836353137353237393630363339343633636133306134356166
3-
3365313335356335313230303766346139393835313532660a626335383366633636646563666166
4-
64633632643263656163666531613336336662613837373931396463373339363430666233373766
5-
6337613630343466310a626533356162363630666264643532363237396135623138653633336565
6-
34386336653665613334653433393836653336313538313561666465633762383364356236323037
7-
31376438323637383033666562656130613738303532333565383464393031336537386361333061
8-
34316335636264643435663564323566353038386632373235633630316234633936643936373761
9-
38356430356364663132346163343566646230333638663136636337383130653633653031396231
10-
37653566376235656164323035366132306330316531313861633131643232636166653066386233
11-
63333037363862613331363833626263623039343261396538623331633836306161646237393764
12-
65363537303538613466356363383665646264306237373961613231323933363536326164663165
13-
31656230376462633137653266323366663435333136323466643862613539316130386335396662
14-
62373630616538616335333639663433376435353837313335363231386665323761343265386266
15-
61343839336430313937386538646366663462373638656462623261346661656131623131383437
16-
30323733636462383537643232343632366434316637373338373230643334636239666631393235
17-
31643561376661343333623765643935643764383564383166393533343234393066373064356363
18-
64623166373130366430623866616238346131653530623262386239633735653262626566646332
19-
35646664323761663064653930336136306332336539623439623865346561323264663634323331
20-
30393538623836643266353036386461356338653439303431333634393533346531623839663735
21-
61623236613734616538636337336431633164333538356137353832663339356333653637666139
22-
65383561343837646235633832356162333031353764316632353330303964303266663637663062
23-
33396631393032663966646564373064333866633866653862626334386431353532396635316165
24-
38633438623638326164643761616237353235316134396234343339333335613530666665333839
25-
30316331356437373239333936626531353231346137396566613035643336643635623931343931
26-
61383232353539613039343061383830653730663261333335323135653432393238366431306538
27-
65343235326630643835306436623830663965336462653061643535653964326437343962646636
28-
33353263353861393133393266636132336535326665656161666366363930623339393638323533
29-
34616432366137386130616330323564653061633364396339616365666537383664643164383864
30-
65363435656435386663396139303037303736386539663563663165663837653061656434336435
31-
62366330653233326462393835323231613938623935623833333263366239663933646438356663
32-
313238373963343239303835626533613935
2+
31326432306536333237393931613062636632343838623335366433373166313962393134343435
3+
3365663566666232316466346461653130316639653263300a386331353136343665653733303865
4+
66316662303934363863306165393131626263336663386166666535373231623434396436323061
5+
6238323664373464390a323430346139656664386432383831313632366433656664366130616361
6+
61653132343031623466343765653039303635643737386635356538326262326662656666386633
7+
30333034313333393266616236353363316638303862623133613364373866313830383337653864
8+
66393734313764653866646330346238316338353937363163623565616133353739643532373363
9+
38373161336335663630663636356663343135663866623964363635353932323261653861373137
10+
62356131376465306564336361326437623136366132663536383734303862376162333463666339
11+
39626164306464326464666135633966646466653831313632393135353166656130653530653330
12+
33656161653562623338336332323062333931306436336337626539623836336464343163376466
13+
62366261613639313334663233343633386265663031326566323034323766643238636232376166
14+
32373563653730303232376261373732626537303466306337643930336264616631326232356261
15+
61643433353866333630323765393536306332363966373236333861633035326437613765343063
16+
62663233663838343961613830626663613733303631616131633465316637653366303263356439
17+
65303866643465333262366433643264613433623962666332396634666131333039386634613132
18+
37343933313765373638336134643961336536313630656362663239373035633539383737366439
19+
61383537373963643063636565336162626362376639333639366665323031313962346163643066
20+
35313335626566633634393335633539326235626230346637663431316233343665633033646530
21+
66626130663931663933353836343231393165343634396263313130663838323732333435313362
22+
61366638306565326636393830373038346339323439623230326632666331623965343935343036
23+
36633333326438666338333331663335653232643231363432653362656162643966313637386432
24+
34333230356266646335613137363434303266323561336363383465616637633764373938303965
25+
36633364656637353439373831326532353737666136393237386539363539663439623431303332
26+
39393935366263356161393266313934353134666530653232376433303239366165643432383733
27+
61663264626665363737343836373263646364646437653464623263336633303537666137313139
28+
65333663333465343339393630396230613165663631646633356665313037393633316266333265
29+
63363634303437653665393634663462356632623133323838646264383436633464613765326633
30+
38656430613335303538613863343235323936333139626431346330663130326165393065326666
31+
34356435656439386335326562626431656266666163363563336463663566613339383763623434
32+
33393038376630613031353330616165383330373837396136346466316333306463643966646262
33+
66386338343135353530613937373732313439316231663433653662626366346433313666623137
34+
39363333633132666434323162333562626161326332626133316237306530646565396465393165
35+
61363939663432633531643732633261323065303937653764633763616465393433373161666534
36+
356530393339323734393261643639666338

0 commit comments

Comments
 (0)