install.yml 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. ---
  2. # Fact setting and validations
  3. - name: Set default image variables based on deployment type
  4. include_vars: "{{ item }}"
  5. with_first_found:
  6. - "{{ openshift_deployment_type }}.yml"
  7. - "default_images.yml"
  8. - name: set ansible_service_broker facts
  9. set_fact:
  10. ansible_service_broker_image_prefix: "{{ ansible_service_broker_image_prefix | default(__ansible_service_broker_image_prefix) }}"
  11. ansible_service_broker_image_tag: "{{ ansible_service_broker_image_tag | default(__ansible_service_broker_image_tag) }}"
  12. ansible_service_broker_etcd_image_prefix: "{{ ansible_service_broker_etcd_image_prefix | default(__ansible_service_broker_etcd_image_prefix) }}"
  13. ansible_service_broker_etcd_image_tag: "{{ ansible_service_broker_etcd_image_tag | default(__ansible_service_broker_etcd_image_tag) }}"
  14. ansible_service_broker_etcd_image_etcd_path: "{{ ansible_service_broker_etcd_image_etcd_path | default(__ansible_service_broker_etcd_image_etcd_path) }}"
  15. ansible_service_broker_registry_type: "{{ ansible_service_broker_registry_type | default(__ansible_service_broker_registry_type) }}"
  16. ansible_service_broker_registry_name: "{{ ansible_service_broker_registry_name | default(__ansible_service_broker_registry_name) }}"
  17. ansible_service_broker_registry_url: "{{ ansible_service_broker_registry_url | default(__ansible_service_broker_registry_url) }}"
  18. ansible_service_broker_registry_user: "{{ ansible_service_broker_registry_user | default(__ansible_service_broker_registry_user) }}"
  19. ansible_service_broker_registry_password: "{{ ansible_service_broker_registry_password | default(__ansible_service_broker_registry_password) }}"
  20. ansible_service_broker_registry_organization: "{{ ansible_service_broker_registry_organization | default(__ansible_service_broker_registry_organization) }}"
  21. ansible_service_broker_registry_tag: "{{ ansible_service_broker_registry_tag | default(__ansible_service_broker_registry_tag) }}"
  22. ansible_service_broker_registry_whitelist: "{{ ansible_service_broker_registry_whitelist | default(__ansible_service_broker_registry_whitelist) }}"
  23. - name: set ansible-service-broker image facts using set prefix and tag
  24. set_fact:
  25. ansible_service_broker_image: "{{ ansible_service_broker_image_prefix }}ansible-service-broker:{{ ansible_service_broker_image_tag }}"
  26. ansible_service_broker_etcd_image: "{{ ansible_service_broker_etcd_image_prefix }}etcd:{{ ansible_service_broker_etcd_image_tag }}"
  27. - include_tasks: validate_facts.yml
  28. - include_tasks: generate_certs.yml
  29. # Deployment of ansible-service-broker starts here
  30. - name: create openshift-ansible-service-broker project
  31. oc_project:
  32. name: openshift-ansible-service-broker
  33. state: present
  34. - name: create ansible-service-broker serviceaccount
  35. oc_serviceaccount:
  36. name: asb
  37. namespace: openshift-ansible-service-broker
  38. state: present
  39. - name: create ansible-service-broker client serviceaccount
  40. oc_serviceaccount:
  41. name: asb-client
  42. namespace: openshift-ansible-service-broker
  43. state: present
  44. - name: Create asb-auth cluster role
  45. oc_clusterrole:
  46. state: present
  47. name: asb-auth
  48. rules:
  49. - apiGroups: [""]
  50. resources: ["namespaces"]
  51. verbs: ["create", "delete"]
  52. - apiGroups: ["authorization.openshift.io"]
  53. resources: ["subjectrulesreview"]
  54. verbs: ["create"]
  55. - apiGroups: ["authorization.k8s.io"]
  56. resources: ["subjectaccessreviews"]
  57. verbs: ["create"]
  58. - apiGroups: ["authentication.k8s.io"]
  59. resources: ["tokenreviews"]
  60. verbs: ["create"]
  61. - apiGroups: ["image.openshift.io", ""]
  62. resources: ["images"]
  63. verbs: ["get", "list"]
  64. - apiGroups: ["network.openshift.io"]
  65. resources: ["clusternetworks", "netnamespaces"]
  66. verbs: ["get"]
  67. - apiGroups: ["network.openshift.io"]
  68. resources: ["netnamespaces"]
  69. verbs: ["update"]
  70. - apiGroups: ["networking.k8s.io"]
  71. resources: ["networkpolicies"]
  72. verbs: ["create", "delete"]
  73. - name: Create asb-access cluster role
  74. oc_clusterrole:
  75. state: present
  76. name: asb-access
  77. rules:
  78. - nonResourceURLs: ["/ansible-service-broker", "/ansible-service-broker/*"]
  79. verbs: ["get", "post", "put", "patch", "delete"]
  80. - name: Bind admin cluster-role to asb serviceaccount
  81. oc_adm_policy_user:
  82. state: present
  83. resource_kind: cluster-role
  84. resource_name: admin
  85. user: "system:serviceaccount:openshift-ansible-service-broker:asb"
  86. - name: Bind auth cluster role to asb service account
  87. oc_adm_policy_user:
  88. state: present
  89. resource_kind: cluster-role
  90. resource_name: asb-auth
  91. user: "system:serviceaccount:openshift-ansible-service-broker:asb"
  92. - name: Bind asb-access role to asb-client service account
  93. oc_adm_policy_user:
  94. state: present
  95. resource_kind: cluster-role
  96. resource_name: asb-access
  97. user: "system:serviceaccount:openshift-ansible-service-broker:asb-client"
  98. - name: create asb-client token secret
  99. oc_obj:
  100. name: asb-client
  101. namespace: openshift-ansible-service-broker
  102. state: present
  103. kind: Secret
  104. content:
  105. path: /tmp/asbclientsecretout
  106. data:
  107. apiVersion: v1
  108. kind: Secret
  109. metadata:
  110. name: asb-client
  111. namespace: openshift-ansible-service-broker
  112. annotations:
  113. kubernetes.io/service-account.name: asb-client
  114. type: kubernetes.io/service-account-token
  115. - name: Create etcd-auth secret
  116. oc_secret:
  117. name: etcd-auth-secret
  118. namespace: openshift-ansible-service-broker
  119. contents:
  120. - path: ca.crt
  121. data: '{{ etcd_ca_cert }}'
  122. - name: Create broker-etcd-auth secret
  123. oc_secret:
  124. name: broker-etcd-auth-secret
  125. namespace: openshift-ansible-service-broker
  126. contents:
  127. - path: client.crt
  128. data: '{{ etcd_client_cert }}'
  129. - path: client.key
  130. data: '{{ etcd_client_key }}'
  131. - oc_secret:
  132. state: list
  133. namespace: openshift-ansible-service-broker
  134. name: asb-client
  135. register: asb_client_secret
  136. - set_fact:
  137. service_ca_crt: "{{ asb_client_secret.results.results.0.data['service-ca.crt'] }}"
  138. - name: create ansible-service-broker service
  139. oc_service:
  140. name: asb
  141. namespace: openshift-ansible-service-broker
  142. labels:
  143. app: openshift-ansible-service-broker
  144. service: asb
  145. annotations:
  146. service.alpha.openshift.io/serving-cert-secret-name: asb-tls
  147. ports:
  148. - name: port-1338
  149. port: 1338
  150. targetPort: 1338
  151. protocol: TCP
  152. selector:
  153. app: openshift-ansible-service-broker
  154. service: asb
  155. - name: create asb-etcd service
  156. oc_service:
  157. name: asb-etcd
  158. namespace: openshift-ansible-service-broker
  159. labels:
  160. app: etcd
  161. service: asb-etcd
  162. annotations:
  163. service.alpha.openshift.io/serving-cert-secret-name: etcd-tls
  164. ports:
  165. - name: port-2379
  166. port: 2379
  167. targetPort: 2379
  168. protocol: TCP
  169. selector:
  170. app: etcd
  171. service: asb-etcd
  172. - name: create route for ansible-service-broker service
  173. oc_route:
  174. name: asb-1338
  175. namespace: openshift-ansible-service-broker
  176. state: present
  177. labels:
  178. app: openshift-ansible-service-broker
  179. service: asb
  180. service_name: asb
  181. port: 1338
  182. tls_termination: Reencrypt
  183. - name: create persistent volume claim for etcd
  184. oc_pvc:
  185. name: etcd
  186. namespace: openshift-ansible-service-broker
  187. access_modes:
  188. - ReadWriteOnce
  189. volume_capacity: 1G
  190. - name: Search for existing Ansible Service Broker deployment config
  191. oc_obj:
  192. name: asb
  193. namespace: openshift-ansible-service-broker
  194. kind: DeploymentConfig
  195. state: list
  196. register: asb_dc
  197. - name: Create Ansible Service Broker deployment config
  198. when: asb_dc.results.results.0 | length == 0
  199. oc_obj:
  200. force: yes
  201. name: asb
  202. namespace: openshift-ansible-service-broker
  203. state: present
  204. kind: DeploymentConfig
  205. content:
  206. path: /tmp/dcout
  207. data:
  208. apiVersion: v1
  209. kind: DeploymentConfig
  210. metadata:
  211. name: asb
  212. labels:
  213. app: openshift-ansible-service-broker
  214. service: asb
  215. spec:
  216. replicas: 1
  217. selector:
  218. app: openshift-ansible-service-broker
  219. strategy:
  220. type: Rolling
  221. template:
  222. metadata:
  223. labels:
  224. app: openshift-ansible-service-broker
  225. service: asb
  226. spec:
  227. serviceAccount: asb
  228. containers:
  229. - image: "{{ ansible_service_broker_image }}"
  230. name: asb
  231. imagePullPolicy: IfNotPresent
  232. volumeMounts:
  233. - name: config-volume
  234. mountPath: /etc/ansible-service-broker
  235. - name: asb-tls
  236. mountPath: /etc/tls/private
  237. - name: asb-etcd-auth
  238. mountPath: /var/run/asb-etcd-auth
  239. ports:
  240. - containerPort: 1338
  241. protocol: TCP
  242. env:
  243. - name: BROKER_CONFIG
  244. value: /etc/ansible-service-broker/config.yaml
  245. - name: HTTP_PROXY
  246. value: "{{ openshift.common.http_proxy | default('') }}"
  247. - name: HTTPS_PROXY
  248. value: "{{ openshift.common.https_proxy | default('') }}"
  249. - name: NO_PROXY
  250. value: "{{ openshift.common.no_proxy | default('') }}"
  251. resources: {}
  252. terminationMessagePath: /tmp/termination-log
  253. readinessProbe:
  254. httpGet:
  255. port: 1338
  256. path: /healthz
  257. scheme: HTTPS
  258. initialDelaySeconds: 15
  259. timeoutSeconds: 1
  260. livenessProbe:
  261. httpGet:
  262. port: 1338
  263. path: /healthz
  264. scheme: HTTPS
  265. initialDelaySeconds: 15
  266. timeoutSeconds: 1
  267. volumes:
  268. - name: config-volume
  269. configMap:
  270. name: broker-config
  271. items:
  272. - key: broker-config
  273. path: config.yaml
  274. - name: asb-tls
  275. secret:
  276. secretName: asb-tls
  277. - name: asb-etcd-auth
  278. secret:
  279. secretName: broker-etcd-auth-secret
  280. - name: Search for existing Ansible Service Broker etcd deployment config
  281. oc_obj:
  282. name: asb-etcd
  283. namespace: openshift-ansible-service-broker
  284. kind: DeploymentConfig
  285. state: list
  286. register: asb_etcd_dc
  287. - name: Create asb-etcd deployment config
  288. when: asb_etcd_dc.results.results.0 | length == 0
  289. oc_obj:
  290. name: asb-etcd
  291. namespace: openshift-ansible-service-broker
  292. state: present
  293. kind: DeploymentConfig
  294. content:
  295. path: /tmp/dcout
  296. data:
  297. apiVersion: v1
  298. kind: DeploymentConfig
  299. metadata:
  300. name: asb-etcd
  301. labels:
  302. app: etcd
  303. service: asb-etcd
  304. spec:
  305. replicas: 1
  306. selector:
  307. app: etcd
  308. strategy:
  309. type: Rolling
  310. template:
  311. metadata:
  312. labels:
  313. app: etcd
  314. service: asb-etcd
  315. spec:
  316. serviceAccount: asb
  317. containers:
  318. - image: "{{ ansible_service_broker_etcd_image }}"
  319. name: etcd
  320. imagePullPolicy: IfNotPresent
  321. terminationMessagePath: /tmp/termination-log
  322. workingDir: /etcd
  323. args:
  324. - "{{ ansible_service_broker_etcd_image_etcd_path }}"
  325. - "--data-dir=/data"
  326. - "--listen-client-urls=https://0.0.0.0:2379"
  327. - "--advertise-client-urls=https://asb-etcd.openshift-ansible-service-broker.svc:2379"
  328. - "--client-cert-auth"
  329. - "--trusted-ca-file=/var/run/etcd-auth-secret/ca.crt"
  330. - "--cert-file=/etc/tls/private/tls.crt"
  331. - "--key-file=/etc/tls/private/tls.key"
  332. ports:
  333. - containerPort: 2379
  334. protocol: TCP
  335. env:
  336. - name: ETCDCTL_API
  337. value: "3"
  338. volumeMounts:
  339. - name: etcd
  340. mountPath: /data
  341. - name: etcd-tls
  342. mountPath: /etc/tls/private
  343. - name: etcd-auth
  344. mountPath: /var/run/etcd-auth-secret
  345. volumes:
  346. - name: etcd
  347. persistentVolumeClaim:
  348. claimName: etcd
  349. - name: etcd-tls
  350. secret:
  351. secretName: etcd-tls
  352. - name: etcd-auth
  353. secret:
  354. secretName: etcd-auth-secret
  355. - name: set auth name and type facts if needed
  356. set_fact:
  357. ansible_service_broker_registry_auth_type: "secret"
  358. ansible_service_broker_registry_auth_name: "asb-registry-auth"
  359. when: ansible_service_broker_registry_user != "" and ansible_service_broker_registry_password != ""
  360. # TODO: saw a oc_configmap in the library, but didn't understand how to get it to do the following:
  361. - name: Create config map for ansible-service-broker
  362. oc_obj:
  363. name: broker-config
  364. namespace: openshift-ansible-service-broker
  365. state: present
  366. kind: ConfigMap
  367. content:
  368. path: /tmp/cmout
  369. data:
  370. apiVersion: v1
  371. kind: ConfigMap
  372. metadata:
  373. name: broker-config
  374. namespace: openshift-ansible-service-broker
  375. labels:
  376. app: openshift-ansible-service-broker
  377. data:
  378. broker-config: |
  379. registry:
  380. - type: {{ ansible_service_broker_registry_type }}
  381. name: {{ ansible_service_broker_registry_name }}
  382. url: {{ ansible_service_broker_registry_url }}
  383. org: {{ ansible_service_broker_registry_organization }}
  384. tag: {{ ansible_service_broker_registry_tag }}
  385. white_list: {{ ansible_service_broker_registry_whitelist | to_yaml }}
  386. auth_type: "{{ ansible_service_broker_registry_auth_type | default("") }}"
  387. auth_name: "{{ ansible_service_broker_registry_auth_name | default("") }}"
  388. - type: local_openshift
  389. name: localregistry
  390. namespaces: ['openshift']
  391. white_list: {{ ansible_service_broker_local_registry_whitelist | to_yaml }}
  392. dao:
  393. etcd_host: asb-etcd.openshift-ansible-service-broker.svc
  394. etcd_port: 2379
  395. etcd_ca_file: /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
  396. etcd_client_cert: /var/run/asb-etcd-auth/client.crt
  397. etcd_client_key: /var/run/asb-etcd-auth/client.key
  398. log:
  399. stdout: true
  400. level: {{ ansible_service_broker_log_level }}
  401. color: true
  402. openshift:
  403. host: ""
  404. ca_file: ""
  405. bearer_token_file: ""
  406. sandbox_role: {{ ansible_service_broker_sandbox_role }}
  407. image_pull_policy: {{ ansible_service_broker_image_pull_policy }}
  408. keep_namespace: {{ ansible_service_broker_keep_namespace | bool | lower }}
  409. keep_namespace_on_error: {{ ansible_service_broker_keep_namespace_on_error | bool | lower }}
  410. broker:
  411. dev_broker: {{ ansible_service_broker_dev_broker | bool | lower }}
  412. bootstrap_on_startup: {{ ansible_service_broker_bootstrap_on_startup | bool | lower }}
  413. refresh_interval: {{ ansible_service_broker_refresh_interval }}
  414. launch_apb_on_bind: {{ ansible_service_broker_launch_apb_on_bind | bool | lower }}
  415. output_request: {{ ansible_service_broker_output_request | bool | lower }}
  416. recovery: {{ ansible_service_broker_recovery | bool | lower }}
  417. ssl_cert_key: /etc/tls/private/tls.key
  418. ssl_cert: /etc/tls/private/tls.crt
  419. auto_escalate: {{ ansible_service_broker_auto_escalate }}
  420. auth:
  421. - type: basic
  422. enabled: false
  423. - oc_secret:
  424. name: asb-registry-auth
  425. namespace: openshift-ansible-service-broker
  426. state: present
  427. contents:
  428. - path: username
  429. data: "{{ ansible_service_broker_registry_user }}"
  430. - path: password
  431. data: "{{ ansible_service_broker_registry_password }}"
  432. when: ansible_service_broker_registry_user != "" and ansible_service_broker_registry_password != ""
  433. - name: Create the Broker resource in the catalog
  434. oc_obj:
  435. name: ansible-service-broker
  436. state: present
  437. kind: ClusterServiceBroker
  438. content:
  439. path: /tmp/brokerout
  440. data:
  441. apiVersion: servicecatalog.k8s.io/v1beta1
  442. kind: ClusterServiceBroker
  443. metadata:
  444. name: ansible-service-broker
  445. spec:
  446. url: https://asb.openshift-ansible-service-broker.svc:1338/ansible-service-broker
  447. authInfo:
  448. bearer:
  449. secretRef:
  450. name: asb-client
  451. namespace: openshift-ansible-service-broker
  452. kind: Secret
  453. caBundle: "{{ service_ca_crt }}"