diff --git a/ansible/playbook.yml b/ansible/playbook.yml index 0385699..6a8c9e3 100644 --- a/ansible/playbook.yml +++ b/ansible/playbook.yml @@ -3,3 +3,5 @@ roles: - common - dynomite + - elasticsearch + - conductor diff --git a/ansible/roles/common/defaults/main.yaml b/ansible/roles/common/defaults/main.yaml index 39413cb..40272be 100644 --- a/ansible/roles/common/defaults/main.yaml +++ b/ansible/roles/common/defaults/main.yaml @@ -1,12 +1,3 @@ --- target_path: /tmp/conductor_setup_test - -conductor_network: conductor-network - -dynomite_shards: 3 -dynomite_replicas: 3 - -elasticsearch_replicas: 1 - -conductor_replicas: 2 - +conductor_network: conductor-network diff --git a/ansible/roles/conductor/conductor-swarm-config.properties b/ansible/roles/conductor/conductor-swarm-config.properties new file mode 100644 index 0000000..751daee --- /dev/null +++ b/ansible/roles/conductor/conductor-swarm-config.properties @@ -0,0 +1,58 @@ +# Servers. +conductor.jetty.server.enabled=true +conductor.grpc.server.enabled=false + +# Database persistence model. Possible values are memory, redis, and dynomite. +# If ommitted, the persistence used is memory +# +# memory : The data is stored in memory and lost when the server dies. Useful for testing or demo +# redis : non-Dynomite based redis instance +# dynomite : Dynomite cluster. Use this for HA configuration. + +db=dynomite + +# Dynomite Cluster details. +# format is host:port:rack separated by semicolon +workflow.dynomite.cluster.hosts=dynomite1:8102:us-east-1b;dynomite2:8102:us-east-1b;dynomite3:8102:us-east-2b;dynomite4:8102:us-east-2b + +# Dynomite cluster name +workflow.dynomite.cluster.name=dyno1 + +# Namespace for the keys stored in Dynomite/Redis +workflow.namespace.prefix=conductor + +# Namespace prefix for the dyno queues +workflow.namespace.queue.prefix=conductor_queues + +# No. of threads allocated to dyno-queues (optional) +queues.dynomite.threads=10 + +# Non-quorum port used to connect to local redis. Used by dyno-queues. +# When using redis directly, set this to the same port as redis server +# For Dynomite, this is 22122 by default or the local redis-server port used by Dynomite. +queues.dynomite.nonQuorum.port=22122 + +# Elastic search instance type. Possible values are memory and external. +# If not specified, the instance type will be embedded in memory +# +# memory: The instance is created in memory and lost when the server dies. Useful for development and testing. +# external: Elastic search instance runs outside of the server. Data is persisted and does not get lost when +# the server dies. Useful for more stable environments like staging or production. +workflow.elasticsearch.instanceType=external + +# Transport address to elasticsearch +workflow.elasticsearch.url=elasticsearch:9300 + +# Name of the elasticsearch cluster +workflow.elasticsearch.index.name=conductor + +# Additional modules (optional) +# conductor.additional.modules=class_extending_com.google.inject.AbstractModule + +# Additional modules for metrics collection (optional) +# conductor.additional.modules=com.netflix.conductor.contribs.metrics.MetricsRegistryModule,com.netflix.conductor.contribs.metrics.LoggingMetricsModule +# com.netflix.conductor.contribs.metrics.LoggingMetricsModule.reportPeriodSeconds=15 + +# Load sample kitchen sink workflow +loadSample=false + diff --git a/ansible/roles/conductor/defaults/main.yaml b/ansible/roles/conductor/defaults/main.yaml new file mode 100644 index 0000000..395bcda --- /dev/null +++ b/ansible/roles/conductor/defaults/main.yaml @@ -0,0 +1,3 @@ +--- +conductor_replicas: 2 +conductor_config: conductor-swarm-config.properties diff --git a/ansible/roles/conductor/tasks/main.yaml b/ansible/roles/conductor/tasks/main.yaml new file mode 100644 index 0000000..f4b48fa --- /dev/null +++ b/ansible/roles/conductor/tasks/main.yaml @@ -0,0 +1,10 @@ +--- +- name: Generate conductor-swarm + template: + src: templates/conductor-swarm.yaml.j2 + dest: "{{ target_path }}/conductor-swarm.yaml" + +- name: Copy conductor config + copy: + src: "{{ conductor_config }}" + dest: "{{ target_path }}/{{ conductor_config }}" diff --git a/ansible/roles/conductor/templates/conductor-swarm.yaml.j2 b/ansible/roles/conductor/templates/conductor-swarm.yaml.j2 new file mode 100644 index 0000000..4d5eef3 --- /dev/null +++ b/ansible/roles/conductor/templates/conductor-swarm.yaml.j2 @@ -0,0 +1,55 @@ +version: '3.6' + +services: + conductor-server: + environment: + - CONFIG_PROP={{ conductor_config }} + image: nubisware/conductor-server + networks: + - {{ conductor_network }} + ports: + - "8080:8080" + deploy: + mode: replicated + replicas: {{ conductor_replicas }} + #endpoint_mode: dnsrr + placement: + constraints: [node.role == worker] + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + configs: + - source: swarm-config + target: /app/config/{{ conductor_network }} + + logging: + driver: "journald" + + conductor-ui: + environment: + - WF_SERVER=http://conductor-server:8080/api/ + image: nubisware/conductor-ui + networks: + - {{ conductor_network }} + ports: + - "5000:5000" + deploy: + mode: replicated + replicas: {{ conductor_replicas }} + #endpoint_mode: dnsrr + placement: + constraints: [node.role == worker] + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + +networks: + {{ conductor_network }}: + +configs: + swarm-config: + file: ./{{ conductor_config }} diff --git a/ansible/roles/dynomite/defaults/main.yaml b/ansible/roles/dynomite/defaults/main.yaml new file mode 100644 index 0000000..f6e10ce --- /dev/null +++ b/ansible/roles/dynomite/defaults/main.yaml @@ -0,0 +1,3 @@ +--- +dynomite_shards: 3 +dynomite_replicas: 3 diff --git a/ansible/roles/dynomite/tasks/main.yaml b/ansible/roles/dynomite/tasks/main.yaml index 755ce35..a2904b8 100644 --- a/ansible/roles/dynomite/tasks/main.yaml +++ b/ansible/roles/dynomite/tasks/main.yaml @@ -1,7 +1,4 @@ --- -- name: Hello world dynomite - command: echo "Hello world" - - name: Generate seedlist template: src: templates/seeds.list.j2 diff --git a/ansible/roles/elasticsearch/defaults/main.yaml b/ansible/roles/elasticsearch/defaults/main.yaml new file mode 100644 index 0000000..b3e9cca --- /dev/null +++ b/ansible/roles/elasticsearch/defaults/main.yaml @@ -0,0 +1,2 @@ +--- +elasticsearch_replicas: 1 diff --git a/ansible/roles/elasticsearch/tasks/main.yaml b/ansible/roles/elasticsearch/tasks/main.yaml new file mode 100644 index 0000000..deaa520 --- /dev/null +++ b/ansible/roles/elasticsearch/tasks/main.yaml @@ -0,0 +1,5 @@ +--- +- name: Generate elasticsearch swarm + template: + src: templates/elasticsearch-swarm.yaml.j2 + dest: "{{ target_path }}/elasticsearch-swarm.yaml" diff --git a/ansible/roles/elasticsearch/templates/elasticsearch-swarm.yaml.j2 b/ansible/roles/elasticsearch/templates/elasticsearch-swarm.yaml.j2 new file mode 100644 index 0000000..9b00953 --- /dev/null +++ b/ansible/roles/elasticsearch/templates/elasticsearch-swarm.yaml.j2 @@ -0,0 +1,31 @@ +version: '3.6' + +services: + + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:5.6.8 + environment: + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + - transport.host=0.0.0.0 + - discovery.type=single-node + - xpack.security.enabled=false + networks: + {{ conductor_network }}: + aliases: + - es + logging: + driver: "journald" + deploy: + mode: replicated + replicas: {{ elasticsearch_replicas }} + #endpoint_mode: dnsrr + placement: + constraints: [node.role == worker] + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + +networks: + {{ conductor_network }}: