Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hi all,
I am facing the below issue. Can someone please let me know if anyone has a solution for the issue I am facing.,
Objective: To segregate the apps for Dev and QA
Number of nodes: 3 (1 central and 2 rim nodes)
Purpose of nodes: Central, Dev and QA
Description: Based on the approach taken following the article - https://community.qlik.com/t5/Qlik-Sense-Documents/Using-Rules-to-segregate-Consumption-from-Develop... I was able to separate the Dev apps and QA apps for different nodes, this is what it looks like - Central Node - All apps will be visible here, Dev Node - Only the apps tagged with "Dev" tag are visible here, QA Node - Only the apps tagged with "QA" custom property are visible in this node.
Block: This approach is working for all the existing apps that have been tagged with the Dev and QA values from the custom properties. However, incase any new app is created and published, since there is no Custom Property tagged for these apps the apps are only visible in central nodes and not on the rim nodes. I want to automatically add a Custom Property to the even the new apps based on the streams they are present in.
Does anyone know how I can achieve this? or maybe I can try a different approach to meet my requirements.
@Levi_Turner/@Andre_Sostizzo it would be really helpful, if you guys could take a look at this
Thanks for your help in advance.
What are your load balancing rules? Which of the Dev / QA nodes do you want the apps on?
Hi, if the rule should assign new apps based of the stream they are, could be the solution to add a custom property to those streams? and based of the custom property value set the node they should use.
resource.stream.@Property="Value"
Hi @Levi_Turner / @rubenmarin , thanks for taking the time to look at the issue that I am facing.
@Levi_Turner , here is my load balancing rule:
(
node.@NodeType = "Central" and resource.stream.Empty()
)
or
(
node.@NodeType = "Dev" and
(node.@EngineType=resource.@EngineType)
or
(node.@EngineType.empty() and resource.@EngineType.empty())
and !resource.stream.Empty()
)
or
(
node.@NodeType = "QA" and
(node.@EngineType=resource.@EngineType)
or
(node.@EngineType.empty() and resource.@EngineType.empty())
and !resource.stream.Empty()
)
Where NodeType is a exclusive Node custom property and EngineType is a custom property created for Apps, Stream & Node.
Here, Nodes have both NodeType & EngineType custom properties assigned to them, where as Streams and the apps present inside those streams have the EngineType.
@rubenmarin , I did assign the EngineType custom property to the streams.
Hi, if the property is on streams, I think it should be "resource.stream.@EngineType" instead of "resource.@EngineType"
Hi @rubenmarin & @Levi_Turner , my apologies for the delay in response.
@rubenmarin , I kind of rewrote my custom property. But yeah, I took your advice and instead of going into resource by resource. Stream, I used just resource for my new LBR. Just to recap -
Requirement: Server Isolation to prevent resource contention between Dev and QA. Any apps that are tagged to either Dev or QA should be visible on their respective nodes.
Node Setup:
Node 1 - Central: Serves as the manager and worker - handles general workloads (any prescheduled reloads), should reload apps that are not tagged to Dev or QA.
Node 2 - Dev: Dedicated strictly for Dev reloads and pinning Dev apps to this node, should be able to reload work stream apps
Node 3 - QA: Dedicated strictly for QA reloads and pinning QA apps to this node, should be able to reload work stream apps
Metadata & Tagging:
I use two Custom Properties: @NodeType (applied to Nodes) and @AppType (applied to Apps, Streams and Nodes).
Values used are: 'Central', 'Dev', and 'QA'.
Load Balancing Rule Used:
Resource filter = *
Advanced Condition:
(
(
node.@NodeType = "IW NPrinting"
and
resource.@AppType = "IW NPrinting"
)
or
(
node.@NodeType = "CW NPrinting"
and
resource.@AppType = "CW NPrinting"
)
or
(
node.@NodeType = "Q2"
and
resource.@AppType != "IW NPrinting"
and
resource.@AppType != "CW NPrinting"
)
)
Result: I was able to successfully successfully isolate the Dev apps when I hub for the nodes, the same for QA as well. Previously, I ran into a problem where newly published apps will not have the custom property unless manually added. Now based on the stream it is in, I was able to automate adding the custom property via the Qlik QRS API which solved for the previous issue.
However, I am currently noticing that, although I have all these custom properties setup and the Isolation is successful, whenever an app that is tagged to the Custom property but is unpublished/published - for my requirement I want to reload unpublished apps specifically on their respective nodes. I am tagging even the unpublished apps as well and they are visible on the work stream when accessing that servers hub, but the reload tasks are getting shared across the nodes. Which is something that we do not want to see, we want the apps to reload on whatever they are hosted on but instead we are seeing Dev apps being reloaded by QA & Central and vice versa when monitored from the Reloads Monitor app. Could you please help me with this. Please let me know if you need any more information.
Once again my apologies for the delay and thank you in advance.