install.yml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  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 | default(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: validate_facts.yml
  28. - include: 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. - name: Create asb-access cluster role
  62. oc_clusterrole:
  63. state: present
  64. name: asb-access
  65. rules:
  66. - nonResourceURLs: ["/ansible-service-broker", "/ansible-service-broker/*"]
  67. verbs: ["get", "post", "put", "patch", "delete"]
  68. - name: Bind admin cluster-role to asb serviceaccount
  69. oc_adm_policy_user:
  70. state: present
  71. resource_kind: cluster-role
  72. resource_name: admin
  73. user: "system:serviceaccount:openshift-ansible-service-broker:asb"
  74. - name: Bind auth cluster role to asb service account
  75. oc_adm_policy_user:
  76. state: present
  77. resource_kind: cluster-role
  78. resource_name: asb-auth
  79. user: "system:serviceaccount:openshift-ansible-service-broker:asb"
  80. - name: Bind asb-access role to asb-client service account
  81. oc_adm_policy_user:
  82. state: present
  83. resource_kind: cluster-role
  84. resource_name: asb-access
  85. user: "system:serviceaccount:openshift-ansible-service-broker:asb-client"
  86. - name: create asb-client token secret
  87. oc_obj:
  88. name: asb-client
  89. namespace: openshift-ansible-service-broker
  90. state: present
  91. kind: Secret
  92. content:
  93. path: /tmp/asbclientsecretout
  94. data:
  95. apiVersion: v1
  96. kind: Secret
  97. metadata:
  98. name: asb-client
  99. namespace: openshift-ansible-service-broker
  100. annotations:
  101. kubernetes.io/service-account.name: asb-client
  102. type: kubernetes.io/service-account-token
  103. - name: Create etcd-auth secret
  104. oc_secret:
  105. name: etcd-auth-secret
  106. namespace: openshift-ansible-service-broker
  107. contents:
  108. - path: ca.crt
  109. data: '{{ etcd_ca_cert }}'
  110. - name: Create broker-etcd-auth secret
  111. oc_secret:
  112. name: broker-etcd-auth-secret
  113. namespace: openshift-ansible-service-broker
  114. contents:
  115. - path: client.crt
  116. data: '{{ etcd_client_cert }}'
  117. - path: client.key
  118. data: '{{ etcd_client_key }}'
  119. - oc_secret:
  120. state: list
  121. namespace: openshift-ansible-service-broker
  122. name: asb-client
  123. register: asb_client_secret
  124. - set_fact:
  125. service_ca_crt: "{{ asb_client_secret.results.results.0.data['service-ca.crt'] }}"
  126. # Using oc_obj because oc_service doesn't seem to allow annotations
  127. # TODO: Extend oc_service to allow annotations
  128. - name: create ansible-service-broker service
  129. oc_obj:
  130. name: asb
  131. namespace: openshift-ansible-service-broker
  132. state: present
  133. kind: Service
  134. content:
  135. path: /tmp/asbsvcout
  136. data:
  137. apiVersion: v1
  138. kind: Service
  139. metadata:
  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. spec:
  148. ports:
  149. - name: port-1338
  150. port: 1338
  151. targetPort: 1338
  152. protocol: TCP
  153. selector:
  154. app: openshift-ansible-service-broker
  155. service: asb
  156. - name: create asb-etcd service
  157. oc_obj:
  158. name: asb-etcd
  159. namespace: openshift-ansible-service-broker
  160. state: present
  161. kind: Service
  162. content:
  163. path: /tmp/asbetcdsvcout
  164. data:
  165. apiVersion: v1
  166. kind: Service
  167. metadata:
  168. name: asb-etcd
  169. labels:
  170. app: etcd
  171. service: asb-etcd
  172. annotations:
  173. service.alpha.openshift.io/serving-cert-secret-name: etcd-tls
  174. spec:
  175. ports:
  176. - name: port-2379
  177. port: 2379
  178. targetPort: 2379
  179. protocol: TCP
  180. selector:
  181. app: etcd
  182. service: asb-etcd
  183. - name: create route for ansible-service-broker service
  184. oc_route:
  185. name: asb-1338
  186. namespace: openshift-ansible-service-broker
  187. state: present
  188. labels:
  189. app: openshift-ansible-service-broker
  190. service: asb
  191. service_name: asb
  192. port: 1338
  193. tls_termination: Reencrypt
  194. - name: create persistent volume claim for etcd
  195. oc_obj:
  196. name: etcd
  197. namespace: openshift-ansible-service-broker
  198. state: present
  199. kind: PersistentVolumeClaim
  200. content:
  201. path: /tmp/pvcout
  202. data:
  203. apiVersion: v1
  204. kind: PersistentVolumeClaim
  205. metadata:
  206. name: etcd
  207. namespace: openshift-ansible-service-broker
  208. spec:
  209. accessModes:
  210. - ReadWriteOnce
  211. resources:
  212. requests:
  213. storage: 1Gi
  214. - name: Create Ansible Service Broker deployment config
  215. oc_obj:
  216. name: asb
  217. namespace: openshift-ansible-service-broker
  218. state: present
  219. kind: DeploymentConfig
  220. content:
  221. path: /tmp/dcout
  222. data:
  223. apiVersion: v1
  224. kind: DeploymentConfig
  225. metadata:
  226. name: asb
  227. labels:
  228. app: openshift-ansible-service-broker
  229. service: asb
  230. spec:
  231. replicas: 1
  232. selector:
  233. app: openshift-ansible-service-broker
  234. strategy:
  235. type: Rolling
  236. template:
  237. metadata:
  238. labels:
  239. app: openshift-ansible-service-broker
  240. service: asb
  241. spec:
  242. serviceAccount: asb
  243. containers:
  244. - image: "{{ ansible_service_broker_image }}"
  245. name: asb
  246. imagePullPolicy: IfNotPresent
  247. volumeMounts:
  248. - name: config-volume
  249. mountPath: /etc/ansible-service-broker
  250. - name: asb-tls
  251. mountPath: /etc/tls/private
  252. - name: asb-etcd-auth
  253. mountPath: /var/run/asb-etcd-auth
  254. ports:
  255. - containerPort: 1338
  256. protocol: TCP
  257. env:
  258. - name: BROKER_CONFIG
  259. value: /etc/ansible-service-broker/config.yaml
  260. resources: {}
  261. terminationMessagePath: /tmp/termination-log
  262. readinessProbe:
  263. httpGet:
  264. port: 1338
  265. path: /healthz
  266. scheme: HTTPS
  267. initialDelaySeconds: 15
  268. timeoutSeconds: 1
  269. livenessProbe:
  270. httpGet:
  271. port: 1338
  272. path: /healthz
  273. scheme: HTTPS
  274. initialDelaySeconds: 15
  275. timeoutSeconds: 1
  276. volumes:
  277. - name: config-volume
  278. configMap:
  279. name: broker-config
  280. items:
  281. - key: broker-config
  282. path: config.yaml
  283. - name: asb-tls
  284. secret:
  285. secretName: asb-tls
  286. - name: asb-etcd-auth
  287. secret:
  288. secretName: broker-etcd-auth-secret
  289. - name: Create asb-etcd deployment config
  290. oc_obj:
  291. name: etcd
  292. namespace: openshift-ansible-service-broker
  293. state: present
  294. kind: DeploymentConfig
  295. content:
  296. path: /tmp/dcout
  297. data:
  298. apiVersion: v1
  299. kind: DeploymentConfig
  300. metadata:
  301. name: asb-etcd
  302. labels:
  303. app: etcd
  304. service: asb-etcd
  305. spec:
  306. replicas: 1
  307. selector:
  308. app: etcd
  309. strategy:
  310. type: Rolling
  311. template:
  312. metadata:
  313. labels:
  314. app: etcd
  315. service: asb-etcd
  316. spec:
  317. serviceAccount: asb
  318. containers:
  319. - image: "{{ ansible_service_broker_etcd_image }}"
  320. name: etcd
  321. imagePullPolicy: IfNotPresent
  322. terminationMessagePath: /tmp/termination-log
  323. workingDir: /etcd
  324. args:
  325. - "{{ ansible_service_broker_etcd_image_etcd_path }}"
  326. - "--data-dir=/data"
  327. - "--listen-client-urls=https://0.0.0.0:2379"
  328. - "--advertise-client-urls=https://0.0.0.0:2379"
  329. - "--client-cert-auth"
  330. - "--trusted-ca-file=/var/run/etcd-auth-secret/ca.crt"
  331. - "--cert-file=/etc/tls/private/tls.crt"
  332. - "--key-file=/etc/tls/private/tls.key"
  333. ports:
  334. - containerPort: 2379
  335. protocol: TCP
  336. env:
  337. - name: ETCDCTL_API
  338. value: "3"
  339. volumeMounts:
  340. - name: etcd
  341. mountPath: /data
  342. - name: etcd-tls
  343. mountPath: /etc/tls/private
  344. - name: etcd-auth
  345. mountPath: /var/run/etcd-auth-secret
  346. volumes:
  347. - name: etcd
  348. persistentVolumeClaim:
  349. claimName: etcd
  350. - name: etcd-tls
  351. secret:
  352. secretName: etcd-tls
  353. - name: etcd-auth
  354. secret:
  355. secretName: etcd-auth-secret
  356. # TODO: saw a oc_configmap in the library, but didn't understand how to get it to do the following:
  357. - name: Create config map for ansible-service-broker
  358. oc_obj:
  359. name: broker-config
  360. namespace: openshift-ansible-service-broker
  361. state: present
  362. kind: ConfigMap
  363. content:
  364. path: /tmp/cmout
  365. data:
  366. apiVersion: v1
  367. kind: ConfigMap
  368. metadata:
  369. name: broker-config
  370. namespace: openshift-ansible-service-broker
  371. labels:
  372. app: openshift-ansible-service-broker
  373. data:
  374. broker-config: |
  375. registry:
  376. - type: {{ ansible_service_broker_registry_type }}
  377. name: {{ ansible_service_broker_registry_name }}
  378. url: {{ ansible_service_broker_registry_url }}
  379. user: {{ ansible_service_broker_registry_user }}
  380. pass: {{ ansible_service_broker_registry_password }}
  381. org: {{ ansible_service_broker_registry_organization }}
  382. tag: {{ ansible_service_broker_registry_tag }}
  383. white_list: {{ ansible_service_broker_registry_whitelist }}
  384. - type: local_registry
  385. namespaces: ['openshift']
  386. white_list: {{ ansible_service_broker_local_registry_whitelist }}
  387. dao:
  388. etcd_host: asb-etcd.openshift-ansible-service-broker.svc
  389. etcd_port: 2379
  390. etcd_ca_file: /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
  391. etcd_client_cert: /var/run/asb-etcd-auth/client.crt
  392. etcd_client_key: /var/run/asb-etcd-auth/client.key
  393. log:
  394. stdout: true
  395. level: {{ ansible_service_broker_log_level }}
  396. color: true
  397. openshift:
  398. host: ""
  399. ca_file: ""
  400. bearer_token_file: ""
  401. sandbox_role: {{ ansible_service_broker_sandbox_role }}
  402. image_pull_policy: {{ ansible_service_broker_image_pull_policy }}
  403. broker:
  404. dev_broker: {{ ansible_service_broker_dev_broker | bool | lower }}
  405. bootstrap_on_startup: {{ ansible_service_broker_bootstrap_on_startup | bool | lower }}
  406. refresh_interval: {{ ansible_service_broker_refresh_interval }}
  407. launch_apb_on_bind: {{ ansible_service_broker_launch_apb_on_bind | bool | lower }}
  408. output_request: {{ ansible_service_broker_output_request | bool | lower }}
  409. recovery: {{ ansible_service_broker_recovery | bool | lower }}
  410. ssl_cert_key: /etc/tls/private/tls.key
  411. ssl_cert: /etc/tls/private/tls.crt
  412. auto_escalate: {{ ansible_service_broker_auto_escalate }}
  413. auth:
  414. - type: basic
  415. enabled: false
  416. - name: Create the Broker resource in the catalog
  417. oc_obj:
  418. name: ansible-service-broker
  419. state: present
  420. kind: ClusterServiceBroker
  421. content:
  422. path: /tmp/brokerout
  423. data:
  424. apiVersion: servicecatalog.k8s.io/v1beta1
  425. kind: ClusterServiceBroker
  426. metadata:
  427. name: ansible-service-broker
  428. spec:
  429. url: https://asb.openshift-ansible-service-broker.svc:1338/ansible-service-broker
  430. authInfo:
  431. bearer:
  432. secretRef:
  433. name: asb-client
  434. namespace: openshift-ansible-service-broker
  435. kind: Secret
  436. caBundle: "{{ service_ca_crt }}"