install.yml 12 KB

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