You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openwhisk.apache.org by GitBox <gi...@apache.org> on 2018/02/28 23:39:13 UTC

[GitHub] csantanapr closed pull request #2622: ansible playbooks for deploying each of the providers

csantanapr closed pull request #2622: ansible playbooks for deploying each of the providers
URL: https://github.com/apache/incubator-openwhisk/pull/2622
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/ansible/alarmstrigger.yml b/ansible/alarmstrigger.yml
new file mode 100644
index 0000000000..8d94265ebe
--- /dev/null
+++ b/ansible/alarmstrigger.yml
@@ -0,0 +1,14 @@
+
+# This playbook deploys the alarms trigger service
+
+# Deploy alarms trigger
+- hosts: edge
+  roles:
+  - alarmstrigger
+
+- hosts: ansible
+  tasks:
+  - include: "{{ playbook_dir }}/tasks/installProviderActions.yml"
+    with_items: 
+    - "{{ provider_repos.openwhisk_package_alarms }}"
+    when: mode == "deploy"
\ No newline at end of file
diff --git a/ansible/cloudanttrigger.yml b/ansible/cloudanttrigger.yml
new file mode 100644
index 0000000000..c1c78c07aa
--- /dev/null
+++ b/ansible/cloudanttrigger.yml
@@ -0,0 +1,14 @@
+
+# This playbook deploys the cloudant trigger service
+
+# Deploy cloudant trigger
+- hosts: edge
+  roles:
+  - cloudanttrigger
+    
+- hosts: ansible
+  tasks:
+  - include: "{{ playbook_dir }}/tasks/installProviderActions.yml"
+    with_items: 
+    - "{{ provider_repos.openwhisk_package_cloudant }}"
+    when: mode == "deploy"
\ No newline at end of file
diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 2763ec5e5e..5b5b0592ba 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -298,3 +298,65 @@ cli_os:
 cli_arch:
   - amd64
   - 386
+
+# The exposed ports of the container for the providers
+providers:
+  alarmstrigger:
+    port: 11001
+  cloudanttrigger:
+    port: 11002
+  kafkatrigger:
+    port: 11003
+
+# The provider_repos is used to specify all the provider names and repository URLs,
+# so that openwhisk knows where to download the providers and install them. The key
+# specifies the provider name and the url saves the URL of the repository. The location
+# specifies the destination to save the code of the catalog. The version specifies the hash
+# of the commit to be cloned. If it is omitted or set to HEAD, the latest commit will be
+# selected. The repo_update specifies whether to retrieve new revisions from the origin
+# repository. The default value is yes, meaning that it will retrieve the new
+# revisions. The install_actions key, when set to true, will install the provider actions.
+# In the case of the kafka provider the messagehub_only key, when set to true, will only
+# install the actions for message hub and will skip the actions for generic kafka. When
+# messagehub_only is set to false, the actions for message hub and generic kafka will both
+# be installed. The keys url and location are mandatory while version and repo_update
+# are optional. To add a new repository, please follow the template by adding:
+#
+# provider_repos:
+#   ...
+#   <provider-name>:
+#     url: <URL of repository>, mandatory.
+#     location: <local location to save the provider>, mandatory.
+#     version: <hash of the commit>, optional, default to HEAD.
+#     repo_update: <whether to retrieve new revisions from the origin repository>,
+#                  optional, default to yes. Yes means to retrieve the new revisions, and
+#                  no means not to retrieve the new revisions.
+#     trigger_port: <the port to expose for the provider container>, mandatory.
+#
+provider_repos:
+  openwhisk_package_alarms:
+    url: https://github.com/apache/incubator-openwhisk-package-alarms.git
+    location: "{{ openwhisk_home }}/../openwhisk-package-alarms"
+    version: "HEAD"
+    docker_tag: "latest"
+    repo_update: "no"
+    install_actions: true
+    trigger_port: "{{ providers.alarmstrigger.port }}"
+  openwhisk_package_cloudant:
+    url: https://github.com/apache/incubator-openwhisk-package-cloudant.git
+    location: "{{ openwhisk_home }}/../openwhisk-package-cloudant"
+    version: "HEAD"
+    docker_tag: "latest"
+    repo_update: "no"
+    install_actions: true
+    trigger_port: "{{ providers.cloudanttrigger.port }}"
+  openwhisk_package_kafka:
+    url: https://github.com/apache/incubator-openwhisk-package-kafka.git
+    location: "{{ openwhisk_home }}/../openwhisk-package-kafka"
+    version: "HEAD"
+    docker_tag: "latest"
+    repo_update: "no"
+    install_actions: true
+    messagehub_only: false
+    trigger_port: "{{ providers.kafkatrigger.port }}"
+    
\ No newline at end of file
diff --git a/ansible/kafkatrigger.yml b/ansible/kafkatrigger.yml
new file mode 100644
index 0000000000..c9564a3291
--- /dev/null
+++ b/ansible/kafkatrigger.yml
@@ -0,0 +1,14 @@
+
+# This playbook deploys the kafka trigger service
+
+# Deploy kafka trigger
+- hosts: edge
+  roles:
+  - kafkatrigger
+
+- hosts: ansible
+  tasks:
+  - include: "{{ playbook_dir }}/tasks/installProviderActions.yml"
+    with_items: 
+    - "{{ provider_repos.openwhisk_package_kafka }}"
+    when: mode == "deploy"
\ No newline at end of file
diff --git a/ansible/providers.yml b/ansible/providers.yml
new file mode 100644
index 0000000000..5e686d3575
--- /dev/null
+++ b/ansible/providers.yml
@@ -0,0 +1,9 @@
+
+- include: alarmstrigger.yml
+  when: "'openwhisk_package_alarms' in provider_repos"
+
+- include: cloudanttrigger.yml
+  when: "'openwhisk_package_cloudant' in provider_repos"
+
+- include: kafkatrigger.yml
+  when: "'openwhisk_package_kafka' in provider_repos"
\ No newline at end of file
diff --git a/ansible/roles/alarmstrigger/tasks/clean.yml b/ansible/roles/alarmstrigger/tasks/clean.yml
new file mode 100644
index 0000000000..327aa43ad7
--- /dev/null
+++ b/ansible/roles/alarmstrigger/tasks/clean.yml
@@ -0,0 +1,15 @@
+
+# Remove the alarms trigger service and logs directory.
+
+- name: remove alarms trigger
+  docker_container:
+    name: catalog_alarms
+    state: absent
+  ignore_errors: true
+
+- name: remove alarms trigger logs directory
+  file:
+    path: "{{ whisk_logs_dir }}/alarms-trigger"
+    state: absent
+  become: true
+  
\ No newline at end of file
diff --git a/ansible/roles/alarmstrigger/tasks/deploy.yml b/ansible/roles/alarmstrigger/tasks/deploy.yml
new file mode 100644
index 0000000000..99d9edc05f
--- /dev/null
+++ b/ansible/roles/alarmstrigger/tasks/deploy.yml
@@ -0,0 +1,38 @@
+
+- name: pull the alarmstrigger image from dockerhub
+  shell: "docker pull openwhisk/alarmprovider:{{ provider_repos.openwhisk_package_alarms.docker_tag }}"
+
+- name: ensure alarms-trigger logs directory is created with permissions
+  file:
+    path: "{{ whisk_logs_dir }}/alarms-trigger"
+    state: directory
+    mode: 0777
+  become: true
+
+- name: (re)start alarms trigger service
+  docker_container:
+    name: catalog_alarms
+    image: "openwhisk/alarmprovider:{{ provider_repos.openwhisk_package_alarms.docker_tag }}"
+    state: started
+    recreate: true
+    restart_policy: "{{ docker.restart.policy }}"
+    hostname: alarmstrigger
+    env:
+      "PORT": 8080
+      "ROUTER_HOST": "{{ groups['edge'] | first }}"
+      "DB_PREFIX": "{{ db_prefix }}"
+      "DB_USERNAME": "{{ db_username }}"
+      "DB_PASSWORD": "{{ db_password }}"
+      "DB_HOST": "{{ db_host }}:{{ db_port }}"
+      "DB_PROTOCOL": "{{ db_protocol }}"
+    ports:
+    - "{{ providers.alarmstrigger.port }}:8080"
+    volumes:
+    - "{{ whisk_logs_dir }}/alarms-trigger:/logs"
+
+- name: wait until alarms trigger in this host is up and running
+  wait_for:
+    delay: 2
+    host: "{{ inventory_hostname }}"
+    port: "{{ providers.alarmstrigger.port }}"
+    timeout: 60
diff --git a/ansible/roles/alarmstrigger/tasks/main.yml b/ansible/roles/alarmstrigger/tasks/main.yml
new file mode 100644
index 0000000000..1ab0f27575
--- /dev/null
+++ b/ansible/roles/alarmstrigger/tasks/main.yml
@@ -0,0 +1,10 @@
+
+# deploy mode will deploy the alarms trigger service.
+# clean mode will remove the alarms service container and logs directory.
+
+- include: deploy.yml
+  when: mode == "deploy"
+
+- include: clean.yml
+  when: mode == "clean"
+  
\ No newline at end of file
diff --git a/ansible/roles/cloudanttrigger/tasks/clean.yml b/ansible/roles/cloudanttrigger/tasks/clean.yml
new file mode 100644
index 0000000000..d0c1a3c336
--- /dev/null
+++ b/ansible/roles/cloudanttrigger/tasks/clean.yml
@@ -0,0 +1,15 @@
+
+# Remove the cloudant trigger service and logs directory.
+
+- name: remove cloudant trigger
+  docker_container:
+    name: catalog_cloudant
+    state: absent
+  ignore_errors: true
+
+- name: remove cloudant trigger logs directory
+  file:
+    path: "{{ whisk_logs_dir }}/cloudant-trigger"
+    state: absent
+  become: true
+  
\ No newline at end of file
diff --git a/ansible/roles/cloudanttrigger/tasks/deploy.yml b/ansible/roles/cloudanttrigger/tasks/deploy.yml
new file mode 100644
index 0000000000..8967321f83
--- /dev/null
+++ b/ansible/roles/cloudanttrigger/tasks/deploy.yml
@@ -0,0 +1,38 @@
+
+- name: pull the cloudanttrigger image from dockerhub
+  shell: "docker pull openwhisk/cloudantprovider:{{ provider_repos.openwhisk_package_cloudant.docker_tag }}"
+
+- name: ensure cloudant-trigger log directory is created with permissions
+  file:
+    path: "{{ whisk_logs_dir }}/cloudant-trigger"
+    state: directory
+    mode: 0777
+  become: true
+
+- name: (re)start cloudant trigger
+  docker_container:
+    name: catalog_cloudant
+    image: "openwhisk/cloudantprovider:{{provider_repos.openwhisk_package_cloudant.docker_tag }}"
+    state: started
+    recreate: true
+    restart_policy: "{{ docker.restart.policy }}"
+    hostname: cloudanttrigger
+    env:
+      "ROUTER_HOST": "{{ groups['edge'] | first }}"
+      "DB_PREFIX": "{{ db_prefix }}"
+      "DB_USERNAME": "{{ db_username }}"
+      "DB_PASSWORD": "{{ db_password }}"
+      "DB_HOST": "{{ db_host }}"
+      "DB_PROTOCOL": "{{ db_protocol }}"
+    ports:
+    - "{{ providers.cloudanttrigger.port }}:8080"
+    volumes:
+    - "{{ whisk_logs_dir }}/cloudant-trigger:/logs"
+
+- name: wait until cloudant trigger on this host is up and running
+  wait_for:
+    delay: 2
+    host: "{{ inventory_hostname }}"
+    port: "{{ providers.cloudanttrigger.port }}"
+    timeout: 60
+  
\ No newline at end of file
diff --git a/ansible/roles/cloudanttrigger/tasks/main.yml b/ansible/roles/cloudanttrigger/tasks/main.yml
new file mode 100644
index 0000000000..12ab5f6467
--- /dev/null
+++ b/ansible/roles/cloudanttrigger/tasks/main.yml
@@ -0,0 +1,9 @@
+
+# deploy mode will deploy the cloudant trigger service.
+# clean mode will remove the cloudant service container and logs directory.
+
+- include: deploy.yml
+  when: mode == "deploy"
+
+- include: clean.yml
+  when: mode == "clean"
diff --git a/ansible/roles/kafkatrigger/tasks/clean.yml b/ansible/roles/kafkatrigger/tasks/clean.yml
new file mode 100644
index 0000000000..2a974f74ce
--- /dev/null
+++ b/ansible/roles/kafkatrigger/tasks/clean.yml
@@ -0,0 +1,15 @@
+
+# Remove the kafka trigger service and logs directory.
+
+- name: remove kafka trigger
+  docker_container:
+    name: catalog_kafka
+    state: absent
+  ignore_errors: true
+
+- name: remove kafka trigger logs directory
+  file:
+    path: "{{ whisk_logs_dir }}/kafka-trigger"
+    state: absent
+  become: true
+  
\ No newline at end of file
diff --git a/ansible/roles/kafkatrigger/tasks/deploy.yml b/ansible/roles/kafkatrigger/tasks/deploy.yml
new file mode 100644
index 0000000000..ace23ec362
--- /dev/null
+++ b/ansible/roles/kafkatrigger/tasks/deploy.yml
@@ -0,0 +1,43 @@
+
+- set_fact:
+    router_host_mapping: "{ '{{ whisk_api_host_name | default('dummy')}}':'{{ groups['router'] | default(groups['edge']) | first }}' }"
+
+- name: pull the kafka trigger image from dockerhub
+  shell: "docker pull openwhisk/kafkaprovider:{{ provider_repos.openwhisk_package_kafka.docker_tag }}"
+
+- name: ensure kafka-trigger log directory is created with permissions
+  file:
+    path: "{{ whisk_logs_dir }}/kafka-trigger"
+    state: directory
+    mode: 0777
+  become: true
+
+- name: (re)start kafka trigger
+  docker_container:
+    name: catalog_kafka
+    image: "openwhisk/kafkaprovider:{{ provider_repos.openwhisk_package_alarms.docker_tag }}"
+    state: started
+    recreate: true
+    restart_policy: "{{ docker.restart.policy }}"
+    hostname: kafkatrigger
+    env:
+      "PORT": 5000
+      "DB_USER": "{{ db_username }}"
+      "DB_PASS": "{{ db_password }}"
+      "DB_URL": "{{ db_protocol }}://{{ db_host }}:{{ db_port }}"
+      "DB_PREFIX": "{{ db_prefix }}"
+      "LOCAL_DEV": true
+      "GENERIC_KAFKA": false
+    ports:
+    - "{{ providers.kafkatrigger.port }}:5000"
+    volumes:
+    - "{{ whisk_logs_dir }}/kafka-trigger:/logs"
+    etc_hosts:
+      "{{ router_host_mapping | default({}) }}"
+
+- name: wait until kafka trigger on this host is up and running
+  wait_for:
+    delay: 2
+    host: "{{ inventory_hostname }}"
+    port: "{{ providers.kafkatrigger.port }}"
+    timeout: 60
diff --git a/ansible/roles/kafkatrigger/tasks/main.yml b/ansible/roles/kafkatrigger/tasks/main.yml
new file mode 100644
index 0000000000..358a6c837f
--- /dev/null
+++ b/ansible/roles/kafkatrigger/tasks/main.yml
@@ -0,0 +1,9 @@
+
+# deploy mode will deploy the kafka trigger service.
+# clean mode will remove the kafka service container and logs directory.
+
+- include: deploy.yml
+  when: mode == "deploy"
+
+- include: clean.yml
+  when: mode == "clean"
\ No newline at end of file
diff --git a/ansible/tasks/installProviderActions.yml b/ansible/tasks/installProviderActions.yml
new file mode 100644
index 0000000000..f8463ba18f
--- /dev/null
+++ b/ansible/tasks/installProviderActions.yml
@@ -0,0 +1,48 @@
+
+# This task will download the provider repositories and install their actions
+
+- set_fact:
+    provider_location={{ item.location }}
+    provider_repo_url={{ item.url }}
+    edge_host={{ groups['edge'] | first }}
+    version="HEAD"
+    repo_update="yes"
+    install_actions=true
+    api_host={{ whisk_api_host_name | default(groups['edge'] | first) }}
+    db_url="{{ db_protocol }}://{{ db_username }}:{{ db_password }}@{{ db_host }}:{{ db_port }}"
+
+- set_fact:
+    version={{ item.version }}
+  when: item.version is defined
+
+- set_fact:
+    repo_update={{ item.repo_update }}
+  when: item.repo_update is defined
+
+- set_fact:
+    install_actions={{ item.install_actions }}
+  when: item.install_actions is defined
+
+- set_fact:
+    messagehub_only={{ item.messagehub_only }}
+  when: item.messagehub_only is defined
+
+- name: download the provider repository to the provider location if neccessary
+  git:
+    depth: 1
+    repo: "{{ provider_repo_url }}"
+    dest: "{{ provider_location }}"
+    update: "{{ repo_update }}"
+    version: "{{ version }}"
+
+- name: install the actions from the provider location
+  shell: ./installCatalog.sh {{ catalog_auth_key }} {{ edge_host }} {{ db_url }} {{ db_prefix }} {{ api_host }} chdir={{ provider_location }}
+  environment:
+    OPENWHISK_HOME: "{{ openwhisk_home }}"
+  when: install_actions == true
+
+- name: install the kafka actions
+  shell: ./installKafka.sh {{ catalog_auth_key }} {{ edge_host }} {{ db_url }} {{ db_prefix }} {{ api_host }} chdir={{ provider_location }}
+  environment:
+    OPENWHISK_HOME: "{{ openwhisk_home }}"
+  when: install_actions == true and messagehub_only is defined and messagehub_only != true
\ No newline at end of file


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services