Skip to content

Commit 402ad34

Browse files
author
Tong Li
committed
[CE-386][CE-387]Refactor code to reduce duplicate code
Fabric peer creates chaincode container using docker in docker method. This create challenges while docker endpoint in k8s cluster is unknown. In this patch set, a k8s daemon set is introduced to start up a DINK pod on each k8s node to make sure that the VM endpoint is available. This patch set also remove a lot of duplicate code. Change-Id: I7bb1c4d7a1746c236dc21751617ed7a3c431921d Signed-off-by: Tong Li <litong01@us.ibm.com>
1 parent d6475e5 commit 402ad34

File tree

17 files changed

+318
-375
lines changed

17 files changed

+318
-375
lines changed
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
---
2+
- name: Setup and initialize variables
3+
set_fact:
4+
fabricworkdir: "/opt/gopath/{{ env }}/fabric"
5+
fabricpath: "/opt/gopath/{{ env }}/src/github.com/hyperledger/fabric"
6+
gopath: "/opt/gopath/{{ env }}"
7+
peers: "{{ [] }}"
8+
orderers: "{{ [] }}"
9+
cas: "{{ [] }}"
10+
kafkas: "{{ [] }}"
11+
zookeepers: "{{ [] }}"
12+
znodes: ""
13+
zkparam: ""
14+
index: 1
15+
zoo_ids: "{{ {} }}"
16+
kafka_ids: "{{ {} }}"
17+
zookeeperls: "{{ [] }}"
18+
kafkals: "{{ [] }}"
19+
peerls: "{{ [] }}"
20+
ordererls: "{{ [] }}"
21+
cals: "{{ [] }}"
22+
allpeers: "{{ [] }}"
23+
allcas: "{{ [] }}"
24+
allorderers: "{{ [] }}"
25+
clipeer: "{}"
26+
cliorderer: "{}"
27+
28+
- name: Make sure that working directory exists and clean
29+
file:
30+
path: "{{ fabricworkdir }}/run"
31+
state: "{{ item }}"
32+
mode: 0775
33+
with_items:
34+
- "absent"
35+
- "directory"
36+
37+
- name: Create component list
38+
set_fact:
39+
cals: "{{ cals | default([]) + item.value.cas | default([]) }}"
40+
ordererls: "{{ ordererls | default([]) + item.value.orderers | default([]) }}"
41+
peerls: "{{ peerls | default([]) + item.value.peers | default([]) }}"
42+
zookeeperls: "{{ zookeeperls | default([]) + item.value.zookeepers | default([]) }}"
43+
kafkals: "{{ kafkals | default([]) + item.value.kafkas | default([]) }}"
44+
with_dict: "{{ fabric.network }}"
45+
46+
- name: Sort component list
47+
set_fact:
48+
zookeeperls: "{{ zookeeperls | sort }}"
49+
kafkals: "{{ kafkals | sort }}"
50+
51+
- name: Generate zookeeper node list
52+
set_fact:
53+
znodes: "{{ znodes }} server.{{ index }}={{ item }}:2888:3888"
54+
zkparam: "{{ zkparam + item }}:2181 "
55+
zoo_ids: "{{ zoo_ids | combine({item: index}) }}"
56+
index: "{{ index | int + 1 }}"
57+
with_items: "{{ zookeeperls | default([]) }}"
58+
59+
- name: Reset the index
60+
set_fact:
61+
index: 1
62+
63+
- name: Generate kafka broker ids
64+
set_fact:
65+
kafka_ids: "{{ kafka_ids | combine({item: index}) }}"
66+
index: "{{ index | int + 1 }}"
67+
with_items: "{{ kafkals | default([]) }}"
68+
69+
- name: Get all ca object list
70+
set_fact:
71+
allcas: |
72+
{{ allcas | default([]) + [{ 'org':item.split('.')[-1],
73+
'name':item | replace('.', '-') }] }}
74+
with_items: "{{ cals }}"
75+
76+
- name: Get all peer object list
77+
set_fact:
78+
allpeers: |
79+
{{ allpeers | default([]) + [{'org':item.split('@')[1].split('.')[-1],
80+
'name':item.split('@')[1] | replace('.', '-'),
81+
'role':item.split('@')[0]}] }}
82+
with_items: "{{ peerls }}"
83+
84+
- name: Get all orderer object list
85+
set_fact:
86+
allorderers: |
87+
{{ allorderers | default([]) + [{ 'org':item.split('.')[-1],
88+
'name':item | replace('.', '-') }] }}
89+
with_items: "{{ ordererls }}"
90+
91+
- name: Find all anchor peers
92+
set_fact:
93+
anchor_peers: "{{ allpeers | selectattr('role', 'equalto', 'anchor') | list }}"
94+
when: allpeers is defined and (allpeers | length > 0)
95+
96+
- name: Create org anchor peer hash
97+
set_fact:
98+
org_anchor: "{{ org_anchor | default({}) | combine( { item.org: item } ) }}"
99+
with_items: "{{ anchor_peers }}"
100+
when: anchor_peers is defined and (anchor_peers | length > 0)
101+
102+
- name: Select a peer to run channel and chaincode command
103+
set_fact:
104+
clipeer: "{{ allpeers | random }}"
105+
when: allpeers | default([]) | length > 0
106+
107+
- name: Select an orderer to run channel and chaincode command
108+
set_fact:
109+
cliorderer: "{{ allorderers | random }}"
110+
when: allorderers | default([]) | length > 0
111+
112+
- name: Get ca, peer and orderer orgs
113+
set_fact:
114+
caorgs: "{{ allcas | default([]) | map(attribute='org') | list | unique | sort }}"
115+
peerorgs: "{{ allpeers | default([]) | map(attribute='org') | list | unique | sort }}"
116+
ordererorgs: "{{ allorderers | default([]) | map(attribute='org') | list | unique | sort }}"
117+
118+
- name: Create all orgs list
119+
set_fact:
120+
allorgs: "{{ (caorgs + peerorgs + ordererorgs) | sort | unique }}"
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
- name: Make sure that working directory is clean
3+
file:
4+
path: "/opt/gopath/{{ env }}/fabric/run"
5+
state: "absent"

src/agent/ansible/roles/deploy_compose/certsetup/tasks/apply.yml

Lines changed: 8 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,6 @@
11
---
2-
- name: Setup few variables
3-
set_fact:
4-
fabricworkdir: "/opt/gopath/{{ env }}/fabric"
5-
fabricpath: "/opt/gopath/{{ env }}/src/github.com/hyperledger/fabric"
6-
gopath: "/opt/gopath/{{ env }}"
7-
8-
- name: Create component list
9-
set_fact:
10-
cals: "{{ cals | default([]) + item.value.cas | default([]) }}"
11-
peerls: "{{ peerls | default([]) + item.value.peers | default([]) }}"
12-
ordererls: "{{ ordererls | default([]) + item.value.orderers | default([]) }}"
13-
kafkals: "{{ kafkals | default([]) + item.value.kafkas | default([]) }}"
14-
with_dict: "{{ fabric.network }}"
15-
16-
- name: Get ca object list
17-
set_fact:
18-
cas: |
19-
{{ cas | default([]) + [{ 'org':item.split('.')[-1],
20-
'name':item | replace('.', '-') }] }}
21-
with_items: "{{ cals }}"
22-
when: cals | length > 0
23-
24-
- name: Get ca object list
25-
set_fact:
26-
cas: "{{ cas | default([]) }}"
27-
28-
- name: Get peer object list
29-
set_fact:
30-
peers: |
31-
{{ peers | default([]) + [{'org':item.split('@')[1].split('.')[-1],
32-
'name':item.split('@')[1] | replace('.','-'),
33-
'role':item.split('@')[0]}] }}
34-
with_items: "{{ peerls }}"
35-
36-
- name: Find all anchor peers
37-
set_fact:
38-
anchor_peers: "{{ peers | selectattr('role', 'equalto', 'anchor') | list }}"
39-
40-
- name: Create org anchor peer hash
41-
set_fact:
42-
org_anchor: "{{ org_anchor | default({}) | combine( { item.org: item } ) }}"
43-
with_items: "{{ anchor_peers }}"
44-
45-
- name: Sort the peer list
46-
set_fact:
47-
peers: "{{ peers | sort(attribute='org') }}"
48-
49-
- name: Get orderer object list
50-
set_fact:
51-
orderers: |
52-
{{ orderers | default([]) + [{'org':item.split('.')[-1],
53-
'name':item | replace('.', '-') }] }}
54-
with_items: "{{ ordererls }}"
55-
56-
- name: Sort the orderer list
57-
set_fact:
58-
orderers: "{{ orderers | sort(attribute='org') }}"
59-
allorgs: "{{ [] }}"
60-
61-
- name: Sort the ca and kafka list
62-
set_fact:
63-
caorgs: "{{ cas | map(attribute='org') | list | unique | sort }}"
64-
peerorgs: "{{ peers | map(attribute='org') | list | unique | sort }}"
65-
ordererorgs: "{{ orderers | map(attribute='org') | list | unique | sort }}"
66-
kafkas: "{{ kafkals | sort }}"
67-
68-
- name: Create all orgs list
69-
set_fact:
70-
allorgs: "{{ caorgs + peerorgs + ordererorgs | sort }}"
71-
72-
- name: Filter the all orgs list
73-
set_fact:
74-
allorgs: "{{ allorgs | unique | sort }}"
2+
- name: Reuse common code
3+
include_tasks: "{{ playbook_dir }}/../common/config_apply.yml"
754

765
- name: Ensure certificate directory is clean
776
file:
@@ -93,7 +22,7 @@
9322

9423
- name: Combine all orgs into one location
9524
shell: >-
96-
mv {{ item }}/* . && rm -rf {{ item }}
25+
if [ -d '{{ item }}' ]; then mv {{ item }}/* . && rm -rf {{ item }}; fi
9726
args:
9827
chdir: "{{ fabricworkdir }}/keyfiles"
9928
with_items:
@@ -115,7 +44,7 @@
11544

11645
- name: Rename admin private key
11746
shell: >-
118-
ls | cat -n | while read n f; do mv "$f" "admin_private.key"; done
47+
ls *_sk | cat -n | while read n f; do mv "$f" "admin_private.key"; done
11948
args:
12049
chdir: "{{ fabricworkdir }}/keyfiles/{{ item }}/users/Admin@{{ item }}/msp/keystore"
12150
with_items: "{{ allorgs }}"
@@ -149,7 +78,7 @@
14978
template:
15079
src: "{{ playbook_dir }}/../deploy_compose/certsetup/templates/core.j2"
15180
dest: "{{ fabricworkdir }}/keyfiles/{{ item.org }}/peers/{{ item.name }}.{{ item.org }}/core.yaml"
152-
with_items: "{{ peers }}"
81+
with_items: "{{ allpeers }}"
15382

15483
- name: Create config tx file
15584
template:
@@ -165,6 +94,7 @@
16594
-outputCreateChannelTx keyfiles/firstchannel.tx -channelID firstchannel
16695
args:
16796
chdir: "{{ fabricworkdir }}"
97+
when: allorderers | length > 0
16898

16999
- name: Define the anchor peer for organizations
170100
shell: >-
@@ -184,7 +114,8 @@
184114
{{ fabricworkdir }}/keyfiles/{{ item.org }}/peers/{{ item.name }}.{{ item.org }}
185115
args:
186116
chdir: "{{ fabricworkdir }}"
187-
with_items: "{{ peers }}"
117+
when: allorderers | length > 0
118+
with_items: "{{ allpeers }}"
188119

189120
- name: Create a zip file of all certificates
190121
archive:

src/agent/ansible/roles/deploy_compose/certsetup/templates/configtx.j2

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ Organizations:
1212
Name: {{ org }}
1313
ID: {{ org }}
1414
MSPDir: {{ fabricworkdir }}/keyfiles/{{ org }}/msp
15-
{% if org_anchor[org] is defined %}
1615
{% if project_version | version_compare('1.2.0','>=') or 'stable' in project_version or project_version == 'latest' %}
1716
Policies:
1817
Readers:
@@ -25,9 +24,11 @@ Organizations:
2524
Type: Signature
2625
Rule: "OR('{{ org }}.admin')"
2726
{% endif %}
27+
{% if org_anchor is defined and org_anchor[org] is defined %}
2828
AnchorPeers:
2929
- Host: {{ org_anchor[org].name }}
3030
Port: 7051
31+
{% endif %}
3132
{% else %}
3233
{% if project_version | version_compare('1.2.0','>=') or 'stable' in project_version or project_version == 'latest' %}
3334
Policies:
@@ -41,7 +42,6 @@ Organizations:
4142
Type: Signature
4243
Rule: "OR('{{ org }}.admin')"
4344
{% endif %}
44-
{% endif %}
4545

4646
{% endfor %}
4747
{% endif %}
@@ -61,22 +61,22 @@ Capabilities:
6161
V1_1: true
6262
{% endif %}
6363
{% endif %}
64-
64+
{% if allorderers is defined and ( allorderers|length > 0) %}
6565
Orderer: &OrdererDefaults
6666
OrdererType: kafka
6767
Addresses:
68-
{% for orderer in orderers %}
68+
{% for orderer in allorderers %}
6969
- {{ orderer.name }}:7050
7070
{% endfor %}
7171
BatchTimeout: 2s
7272
BatchSize:
7373
MaxMessageCount: 10
7474
AbsoluteMaxBytes: 98 MB
7575
PreferredMaxBytes: 512 KB
76-
{% if kafkas | length > 0 %}
76+
{% if kafkals | length > 0 %}
7777
Kafka:
7878
Brokers:
79-
{% for item in kafkas %}
79+
{% for item in kafkals %}
8080
- {{ item }}:9092
8181
{% endfor %}
8282
{% endif %}
@@ -103,7 +103,7 @@ Orderer: &OrdererDefaults
103103
Capabilities:
104104
<<: *OrdererCapabilities
105105
{% endif %}
106-
106+
{% endif %}
107107
Application: &ApplicationDefaults
108108
Organizations:
109109
{% for org in peerorgs %}
@@ -153,8 +153,10 @@ Profiles:
153153
Capabilities:
154154
<<: *ChannelCapabilities
155155
{% endif %}
156+
{% if allorderers is defined and ( allorderers|length > 0) %}
156157
Orderer:
157158
<<: *OrdererDefaults
159+
{% endif %}
158160
Consortiums:
159161
FabricConsortium:
160162
Organizations:

src/agent/ansible/roles/deploy_compose/certsetup/templates/connection.j2

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
"channels": {
1515
"firstchannel": {
1616
"orderers": [
17-
{% for orderer in orderers %}
17+
{% for orderer in allorderers %}
1818
"{{ orderer.name }}"{{ '' if loop.last else ',' }}
1919
{% endfor %}
2020
],
2121
"peers": {
22-
{% for peer in peers %}
22+
{% for peer in allpeers %}
2323
"{{ peer.name }}": {
2424
"endorsingPeer": true, "chaincodeQuery": true, "eventSource": true
2525
}{{ '' if loop.last else ',' }}
@@ -32,20 +32,20 @@
3232
"{{ org }}": {
3333
"mspid": "{{ org }}",
3434
"peers": [
35-
{% for peer in peers|selectattr('org', 'equalto', org)|list %}
35+
{% for peer in allpeers|selectattr('org', 'equalto', org)|list %}
3636
"{{ peer.name }}"{{ '' if loop.last else ',' }}
3737
{% endfor %}
3838
],
3939
"certificateAuthorities": [
40-
{% for ca in cas|selectattr('org', 'equalto', org)|list %}
40+
{% for ca in allcas|selectattr('org', 'equalto', org)|list %}
4141
"{{ ca.name }}"{{ '' if loop.last else ',' }}
4242
{% endfor %}
4343
]
4444
}{{ '' if loop.last else ',' }}
4545
{% endfor %}
4646
},
4747
"orderers": {
48-
{% for orderer in orderers %}
48+
{% for orderer in allorderers %}
4949
"{{ orderer.name }}": {
5050
"url": "{{ fabric.tls|ternary('grpcs','grpc') }}://{{ orderer.name }}:7050",
5151
"grpcOptions": {
@@ -58,7 +58,7 @@
5858
{% endfor %}
5959
},
6060
"peers": {
61-
{% for peer in peers %}
61+
{% for peer in allpeers|selectattr('org', 'equalto', item)|list %}
6262
"{{ peer.name }}": {
6363
"url": "{{ fabric.tls|ternary('grpcs','grpc') }}://{{ peer.name }}:7051",
6464
"eventUrl": "{{ fabric.tls|ternary('grpcs','grpc') }}://{{ peer.name }}:7053",
@@ -72,7 +72,7 @@
7272
{% endfor %}
7373
},
7474
"certificateAuthorities": {
75-
{% for ca in cas %}
75+
{% for ca in allcas|selectattr('org', 'equalto', item)|list %}
7676
"{{ ca.name }}": {
7777
"url": "{{ fabric.tls|ternary('https','http') }}://{{ca.name}}:7054",
7878
"caName": "{{ ca.name }}",

0 commit comments

Comments
 (0)