Skip to content

Commit 6c789d5

Browse files
authored
Allow hiding all_rw checkbox in WebUI (#1547)
1 parent 460bca6 commit 6c789d5

File tree

9 files changed

+165
-36
lines changed

9 files changed

+165
-36
lines changed

CHANGELOG.rst

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ and this project adheres to
1212
[Unreleased]
1313
-------------------------------------------------------------------------------
1414

15+
- 'Make all instances writeable' configuration field can be hidden via
16+
frontend-core's ``set_variable`` feature or at runtime.
17+
1518
-------------------------------------------------------------------------------
1619
[2.7.1] - 2021-08-18
1720
-------------------------------------------------------------------------------

test/entrypoint/srv_basic.lua

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ if frontend and frontend.set_variable then
1717
-- which doesn't support it yet.
1818
frontend.set_variable('cartridge_refresh_interval', 500)
1919
frontend.set_variable('cartridge_stat_period', 2)
20+
frontend.set_variable('cartridge_hide_all_rw', false)
2021
end
2122

2223
package.preload['mymodule'] = function()

webui/README.md

+5-2
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@
77
`cartridge_stat_period` - Refresh period for all cluster stats
88
(includes issues, suggestions and server stats).
99

10+
`cartridge_hide_all_rw` - Hide 'Make all instances writeable' configuration field
11+
('Create replica set' and 'Edit replica set' forms).
12+
1013
## Emittable frontend core events
1114

1215
Events dispatchable by module `cartridge`:
1316

14-
`cluster:login:done` - Emits after succesful authorization.
17+
`cluster:login:done` - Emits after successful authorization.
1518
Provides object describing auth state and username.
1619

17-
`cluster:logout:done` - Emits after succesful logging out.
20+
`cluster:logout:done` - Emits after successful logging out.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
describe('Test the cartridge_hide_all_rw frontend core variable', () => {
2+
before(() => {
3+
cy.task('tarantool', {
4+
code: `
5+
cleanup()
6+
7+
_G.cluster = helpers.Cluster:new({
8+
datadir = fio.tempdir(),
9+
server_command = helpers.entrypoint('srv_basic'),
10+
use_vshard = false,
11+
cookie = helpers.random_cookie(),
12+
env = {},
13+
replicasets = {{
14+
uuid = helpers.uuid('a'),
15+
alias = 'dummy',
16+
roles = {},
17+
servers = {{http_port = 8080}},
18+
}}
19+
})
20+
21+
local server = _G.cluster:server('dummy-1')
22+
server.env.TARANTOOL_CONSOLE_SOCK =
23+
_G.cluster.datadir .. '/' .. server.alias .. '.control'
24+
server:start()
25+
26+
return true
27+
`
28+
}).should('deep.eq', [true]);
29+
});
30+
31+
beforeEach(() => {
32+
cy.task('tarantool', {
33+
code: `
34+
local server = _G.cluster:server('dummy-1')
35+
return {
36+
sock = server.env.TARANTOOL_CONSOLE_SOCK,
37+
advertise_uri = server.advertise_uri,
38+
replicaset_uuid = server.replicaset_uuid,
39+
}
40+
`
41+
}).then(([ret]) => {
42+
expect(ret.sock).to.be.a('string');
43+
expect(ret.advertise_uri).to.be.a('string');
44+
expect(ret.replicaset_uuid).to.be.a('string');
45+
cy.wrap(ret).as('main_server');
46+
});
47+
})
48+
49+
after(() => {
50+
cy.task('tarantool', { code: `cleanup()` });
51+
});
52+
53+
function hideAllRW(value) {
54+
cy.get('@main_server').then(srv => {
55+
cy.task('tarantool', {
56+
host: 'unix/',
57+
port: srv.sock,
58+
code: `
59+
local frontend = package.loaded['frontend-core']
60+
frontend.set_variable("cartridge_hide_all_rw", ${value})
61+
return true
62+
`
63+
}).should('deep.eq', [true]);
64+
})
65+
}
66+
67+
it('Test CreateReplicasetForm', function () {
68+
////////////////////////////////////////////////////////////////////
69+
cy.log('cartridge_hide_all_rw is unset');
70+
hideAllRW('nil');
71+
cy.visit(`/admin/cluster/dashboard?s=${this.main_server.advertise_uri}`);
72+
73+
cy.get('.meta-test__ConfigureServerModal input[name="all_rw"]').should('exist');
74+
75+
////////////////////////////////////////////////////////////////////
76+
cy.log('cartridge_hide_all_rw is true');
77+
hideAllRW('true')
78+
cy.reload()
79+
80+
cy.get('.meta-test__ConfigureServerModal').contains('dummy-1');
81+
cy.get('.meta-test__ConfigureServerModal input[name="all_rw"]').should('not.exist');
82+
83+
////////////////////////////////////////////////////////////////////
84+
cy.log('cartridge_hide_all_rw is false');
85+
hideAllRW('false');
86+
cy.reload()
87+
88+
cy.get('.meta-test__ConfigureServerModal input[name="all_rw"]').should('exist');
89+
90+
});
91+
92+
it('Test: EditReplicasetForm', function () {
93+
cy.task('tarantool', { code: '_G.cluster:bootstrap()' });
94+
95+
////////////////////////////////////////////////////////////////////
96+
cy.log('cartridge_hide_all_rw is unset');
97+
hideAllRW('nil');
98+
cy.visit(`/admin/cluster/dashboard?r=${this.main_server.replicaset_uuid}`);
99+
100+
cy.get('.meta-test__EditReplicasetModal input[name="all_rw"]').should('exist');
101+
102+
////////////////////////////////////////////////////////////////////
103+
cy.log('cartridge_hide_all_rw is true');
104+
hideAllRW('true')
105+
cy.reload()
106+
107+
cy.get('.meta-test__EditReplicasetModal').contains('dummy');
108+
cy.get('.meta-test__EditReplicasetModal input[name="all_rw"]').should('not.exist');
109+
110+
////////////////////////////////////////////////////////////////////
111+
cy.log('cartridge_hide_all_rw is false');
112+
hideAllRW('false');
113+
cy.reload()
114+
115+
cy.get('.meta-test__EditReplicasetModal input[name="all_rw"]').should('exist');
116+
});
117+
});

webui/package-lock.json

+1-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

webui/package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,7 @@
118118
"lint": "eslint ./src",
119119
"lint-fix": "eslint --fix ./src",
120120
"lint:test": "eslint ./cypress",
121-
"lint:test-fix": "eslint --fix ./cypress",
122-
"cy:dev": "CYPRESS_baseUrl=http://localhost:3000 cypress open"
121+
"lint:test-fix": "eslint --fix ./cypress"
123122
},
124123
"jest": {
125124
"collectCoverageFrom": [

webui/src/components/CreateReplicasetForm.js

+16-13
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ CreateReplicasetFormProps) => (
116116
const activeDependencies = getRolesDependencies(values.roles, knownRoles)
117117
const VShardGroupInputDisabled = isVShardGroupInputDisabled(values.roles);
118118
const rolesColumns = (knownRoles && knownRoles.length > 6) ? 3 : 2;
119+
const { cartridge_hide_all_rw } = (window.__tarantool_variables || {});
119120

120121
return (
121122
<form onSubmit={handleSubmit}>
@@ -247,19 +248,21 @@ CreateReplicasetFormProps) => (
247248
</FormField>
248249
)}
249250
</Field>
250-
<Field name='all_rw'>
251-
{({ input: { name: fieldName, value, onChange } }) => (
252-
<FormField className={styles.field} label='All writable' info={allRwTooltipInfo}>
253-
<Checkbox
254-
onChange={onChange}
255-
name={fieldName}
256-
checked={value}
257-
>
258-
Make all instances writeable
259-
</Checkbox>
260-
</FormField>
261-
)}
262-
</Field>
251+
{cartridge_hide_all_rw !== true && (
252+
<Field name='all_rw'>
253+
{({ input: { name: fieldName, value, onChange } }) => (
254+
<FormField className={styles.field} label='All writable' info={allRwTooltipInfo}>
255+
<Checkbox
256+
onChange={onChange}
257+
name={fieldName}
258+
checked={value}
259+
>
260+
Make all instances writeable
261+
</Checkbox>
262+
</FormField>
263+
)}
264+
</Field>
265+
)}
263266
</div>
264267
<PopupFooter
265268
controls={([

webui/src/components/EditReplicasetForm.js

+20-17
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ EditReplicasetFormProps) => {
138138
const activeDependencies = getRolesDependencies(values.roles, knownRoles)
139139
const VShardGroupInputDisabled = isVShardGroupInputDisabled(values.roles, replicaset);
140140
const rolesColumns = (knownRoles && knownRoles.length > 6) ? 3 : 2;
141+
const { cartridge_hide_all_rw } = (window.__tarantool_variables || {});
141142

142143
return (
143144
<form onSubmit={handleSubmit}>
@@ -281,24 +282,26 @@ EditReplicasetFormProps) => {
281282
</FormField>
282283
)}
283284
</Field>
284-
<Field name='all_rw'>
285-
{({ input: { name: fieldName, value, onChange } }) => (
286-
<FormField
287-
className={styles.field}
288-
label='All writable'
289-
info={allRwTooltipInfo}
290-
largeMargins
291-
>
292-
<Checkbox
293-
onChange={onChange}
294-
name={fieldName}
295-
checked={value}
285+
{cartridge_hide_all_rw !== true && (
286+
<Field name='all_rw'>
287+
{({ input: { name: fieldName, value, onChange } }) => (
288+
<FormField
289+
className={styles.field}
290+
label='All writable'
291+
info={allRwTooltipInfo}
292+
largeMargins
296293
>
297-
Make all instances writeable
298-
</Checkbox>
299-
</FormField>
300-
)}
301-
</Field>
294+
<Checkbox
295+
onChange={onChange}
296+
name={fieldName}
297+
checked={value}
298+
>
299+
Make all instances writeable
300+
</Checkbox>
301+
</FormField>
302+
)}
303+
</Field>
304+
)}
302305
<Field name='master'>
303306
{({ input: { name, value, onChange }, meta: { error } }) => (
304307
<LabeledInput

webui/src/components/ReplicasetList/ReplicasetList.js

+1
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ class ReplicasetList extends React.PureComponent {
226226
intent='secondary'
227227
onClick={() => this.handleEditReplicasetRequest(replicaset)}
228228
text='Edit'
229+
data-cy='meta-test__editBtn'
229230
/>
230231
</div>
231232
<ReplicasetRoles className={styles.roles} roles={replicaset.roles}/>

0 commit comments

Comments
 (0)