install.yml 12 KB

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