install.yml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  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. # Deployment of ansible-service-broker starts here
  29. - name: create openshift-ansible-service-broker project
  30. oc_project:
  31. name: openshift-ansible-service-broker
  32. state: present
  33. - name: create ansible-service-broker serviceaccount
  34. oc_serviceaccount:
  35. name: asb
  36. namespace: openshift-ansible-service-broker
  37. state: present
  38. - name: create ansible-service-broker client serviceaccount
  39. oc_serviceaccount:
  40. name: asb-client
  41. namespace: openshift-ansible-service-broker
  42. state: present
  43. - name: Create asb-auth cluster role
  44. oc_clusterrole:
  45. state: present
  46. name: asb-auth
  47. rules:
  48. - apiGroups: [""]
  49. resources: ["namespaces"]
  50. verbs: ["create", "delete"]
  51. - apiGroups: ["authorization.openshift.io"]
  52. resources: ["subjectrulesreview"]
  53. verbs: ["create"]
  54. - apiGroups: ["authorization.k8s.io"]
  55. resources: ["subjectaccessreviews"]
  56. verbs: ["create"]
  57. - apiGroups: ["authentication.k8s.io"]
  58. resources: ["tokenreviews"]
  59. verbs: ["create"]
  60. - apiGroups: ["image.openshift.io", ""]
  61. resources: ["images"]
  62. verbs: ["get", "list"]
  63. - name: Create asb-access cluster role
  64. oc_clusterrole:
  65. state: present
  66. name: asb-access
  67. rules:
  68. - nonResourceURLs: ["/ansible-service-broker", "/ansible-service-broker/*"]
  69. verbs: ["get", "post", "put", "patch", "delete"]
  70. - name: Bind admin cluster-role to asb serviceaccount
  71. oc_adm_policy_user:
  72. state: present
  73. resource_kind: cluster-role
  74. resource_name: admin
  75. user: "system:serviceaccount:openshift-ansible-service-broker:asb"
  76. - name: Bind auth cluster role to asb service account
  77. oc_adm_policy_user:
  78. state: present
  79. resource_kind: cluster-role
  80. resource_name: asb-auth
  81. user: "system:serviceaccount:openshift-ansible-service-broker:asb"
  82. - name: Bind asb-access role to asb-client service account
  83. oc_adm_policy_user:
  84. state: present
  85. resource_kind: cluster-role
  86. resource_name: asb-access
  87. user: "system:serviceaccount:openshift-ansible-service-broker:asb-client"
  88. - name: create asb-client token secret
  89. oc_obj:
  90. name: asb-client
  91. namespace: openshift-ansible-service-broker
  92. state: present
  93. kind: Secret
  94. content:
  95. path: /tmp/asbclientsecretout
  96. data:
  97. apiVersion: v1
  98. kind: Secret
  99. metadata:
  100. name: asb-client
  101. namespace: openshift-ansible-service-broker
  102. annotations:
  103. kubernetes.io/service-account.name: asb-client
  104. type: kubernetes.io/service-account-token
  105. - oc_secret:
  106. state: list
  107. namespace: openshift-ansible-service-broker
  108. name: asb-client
  109. register: asb_client_secret
  110. - set_fact:
  111. service_ca_crt: "{{ asb_client_secret.results.results.0.data['service-ca.crt'] }}"
  112. # Using oc_obj because oc_service doesn't seem to allow annotations
  113. # TODO: Extend oc_service to allow annotations
  114. - name: create ansible-service-broker service
  115. oc_obj:
  116. name: asb
  117. namespace: openshift-ansible-service-broker
  118. state: present
  119. kind: Service
  120. content:
  121. path: /tmp/asbsvcout
  122. data:
  123. apiVersion: v1
  124. kind: Service
  125. metadata:
  126. name: asb
  127. namespace: openshift-ansible-service-broker
  128. labels:
  129. app: openshift-ansible-service-broker
  130. service: asb
  131. annotations:
  132. service.alpha.openshift.io/serving-cert-secret-name: asb-tls
  133. spec:
  134. ports:
  135. - name: port-1338
  136. port: 1338
  137. targetPort: 1338
  138. protocol: TCP
  139. selector:
  140. app: openshift-ansible-service-broker
  141. service: asb
  142. - name: create route for ansible-service-broker service
  143. oc_route:
  144. name: asb-1338
  145. namespace: openshift-ansible-service-broker
  146. state: present
  147. labels:
  148. app: openshift-ansible-service-broker
  149. service: asb
  150. service_name: asb
  151. port: 1338
  152. tls_termination: Reencrypt
  153. - name: create persistent volume claim for etcd
  154. oc_obj:
  155. name: etcd
  156. namespace: openshift-ansible-service-broker
  157. state: present
  158. kind: PersistentVolumeClaim
  159. content:
  160. path: /tmp/pvcout
  161. data:
  162. apiVersion: v1
  163. kind: PersistentVolumeClaim
  164. metadata:
  165. name: etcd
  166. namespace: openshift-ansible-service-broker
  167. spec:
  168. accessModes:
  169. - ReadWriteOnce
  170. resources:
  171. requests:
  172. storage: 1Gi
  173. - name: Create Ansible Service Broker deployment config
  174. oc_obj:
  175. name: asb
  176. namespace: openshift-ansible-service-broker
  177. state: present
  178. kind: DeploymentConfig
  179. content:
  180. path: /tmp/dcout
  181. data:
  182. apiVersion: v1
  183. kind: DeploymentConfig
  184. metadata:
  185. name: asb
  186. labels:
  187. app: openshift-ansible-service-broker
  188. service: asb
  189. spec:
  190. replicas: 1
  191. selector:
  192. app: openshift-ansible-service-broker
  193. strategy:
  194. type: Rolling
  195. template:
  196. metadata:
  197. labels:
  198. app: openshift-ansible-service-broker
  199. service: asb
  200. spec:
  201. serviceAccount: asb
  202. containers:
  203. - image: "{{ ansible_service_broker_image }}"
  204. name: asb
  205. imagePullPolicy: IfNotPresent
  206. volumeMounts:
  207. - name: config-volume
  208. mountPath: /etc/ansible-service-broker
  209. - name: asb-tls
  210. mountPath: /etc/tls/private
  211. ports:
  212. - containerPort: 1338
  213. protocol: TCP
  214. env:
  215. - name: BROKER_CONFIG
  216. value: /etc/ansible-service-broker/config.yaml
  217. resources: {}
  218. terminationMessagePath: /tmp/termination-log
  219. readinessProbe:
  220. httpGet:
  221. port: 1338
  222. path: /healthz
  223. scheme: HTTPS
  224. initialDelaySeconds: 15
  225. timeoutSeconds: 1
  226. livenessProbe:
  227. httpGet:
  228. port: 1338
  229. path: /healthz
  230. scheme: HTTPS
  231. initialDelaySeconds: 15
  232. timeoutSeconds: 1
  233. - image: "{{ ansible_service_broker_etcd_image }}"
  234. name: etcd
  235. imagePullPolicy: IfNotPresent
  236. terminationMessagePath: /tmp/termination-log
  237. workingDir: /etcd
  238. args:
  239. - "{{ ansible_service_broker_etcd_image_etcd_path }}"
  240. - "--data-dir=/data"
  241. - "--listen-client-urls=http://0.0.0.0:2379"
  242. - "--advertise-client-urls=http://0.0.0.0:2379"
  243. ports:
  244. - containerPort: 2379
  245. protocol: TCP
  246. env:
  247. - name: ETCDCTL_API
  248. value: "3"
  249. volumeMounts:
  250. - mountPath: /data
  251. name: etcd
  252. volumes:
  253. - name: etcd
  254. persistentVolumeClaim:
  255. claimName: etcd
  256. - name: config-volume
  257. configMap:
  258. name: broker-config
  259. items:
  260. - key: broker-config
  261. path: config.yaml
  262. - name: asb-tls
  263. secret:
  264. secretName: asb-tls
  265. # TODO: saw a oc_configmap in the library, but didn't understand how to get it to do the following:
  266. - name: Create config map for ansible-service-broker
  267. oc_obj:
  268. name: broker-config
  269. namespace: openshift-ansible-service-broker
  270. state: present
  271. kind: ConfigMap
  272. content:
  273. path: /tmp/cmout
  274. data:
  275. apiVersion: v1
  276. kind: ConfigMap
  277. metadata:
  278. name: broker-config
  279. namespace: openshift-ansible-service-broker
  280. labels:
  281. app: openshift-ansible-service-broker
  282. data:
  283. broker-config: |
  284. registry:
  285. - type: {{ ansible_service_broker_registry_type }}
  286. name: {{ ansible_service_broker_registry_name }}
  287. url: {{ ansible_service_broker_registry_url }}
  288. org: {{ ansible_service_broker_registry_organization }}
  289. tag: {{ ansible_service_broker_registry_tag }}
  290. white_list: {{ ansible_service_broker_registry_whitelist }}
  291. dao:
  292. etcd_host: 0.0.0.0
  293. etcd_port: 2379
  294. log:
  295. logfile: /var/log/ansible-service-broker/asb.log
  296. stdout: true
  297. level: {{ ansible_service_broker_log_level }}
  298. color: true
  299. openshift:
  300. host: ""
  301. ca_file: ""
  302. bearer_token_file: ""
  303. sandbox_role: {{ ansible_service_broker_sandbox_role }}
  304. image_pull_policy: {{ ansible_service_broker_image_pull_policy }}
  305. broker:
  306. dev_broker: {{ ansible_service_broker_dev_broker | bool | lower }}
  307. bootstrap_on_startup: {{ ansible_service_broker_bootstrap_on_startup | bool | lower }}
  308. refresh_interval: {{ ansible_service_broker_refresh_interval }}
  309. launch_apb_on_bind: {{ ansible_service_broker_launch_apb_on_bind | bool | lower }}
  310. output_request: {{ ansible_service_broker_output_request | bool | lower }}
  311. recovery: {{ ansible_service_broker_recovery | bool | lower }}
  312. ssl_cert_key: /etc/tls/private/tls.key
  313. ssl_cert: /etc/tls/private/tls.crt
  314. auto_escalate: {{ ansible_service_broker_auto_escalate }}
  315. auth:
  316. - type: basic
  317. enabled: false
  318. - oc_secret:
  319. name: asb-registry-auth
  320. namespace: openshift-ansible-service-broker
  321. state: present
  322. contents:
  323. - path: username
  324. data: {{ ansible_service_broker_registry_user }}
  325. - path: password
  326. data: {{ ansible_service_broker_registry_password }}
  327. - name: Create the Broker resource in the catalog
  328. oc_obj:
  329. name: ansible-service-broker
  330. state: present
  331. kind: ClusterServiceBroker
  332. content:
  333. path: /tmp/brokerout
  334. data:
  335. apiVersion: servicecatalog.k8s.io/v1beta1
  336. kind: ClusterServiceBroker
  337. metadata:
  338. name: ansible-service-broker
  339. spec:
  340. url: https://asb.openshift-ansible-service-broker.svc:1338/ansible-service-broker
  341. authInfo:
  342. bearer:
  343. secretRef:
  344. name: asb-client
  345. namespace: openshift-ansible-service-broker
  346. kind: Secret
  347. caBundle: "{{ service_ca_crt }}"