Project

General

Profile

Feature #3688

Target-specific resoures

Added by Vadim about 2 months ago. Updated about 1 month ago.

Status:
Feedback
Priority:
Normal
Assignee:
Target version:
-
Start date:
11/26/2020
Due date:
% Done:

0%

Estimated time:
Affects Version:
RapidDeploy - 5.0-FIX
Timesheet Code:
Additional version details:

Description

Hello.

Have another one brilliant idea of how to improve Your perfect software. :D

It is normal, that single deployment project several targets. Different configurations, different environments. RD does allow to configure all those things. Great. But... :) I do can configure different environments by setting different values to data dictionary variables. But what if there are a lot of such variables which are different for each environment but are common for different projects? For example, database connection settings: host, port, user, password can be common for all projects but valid for single environment only. That means that in each project I will have to write in same settings in the same targets. Not the best approach. Especially when it is necessary to change some details. I think that it could be great to have resources in targets or targets in resources. :D Second variant is even more nice maybe.
For example. I have resource db_connections (data dictionary). There are 4 fields: host, port, user and password. And to make this resource valid for all necessary environments I add a targets to it: Dev server and write in Dev database settings there, Live server and write in Live database settings there. And when resource is added to the project it "covers" matching targets. If resource does not contain target that is configured in project - project or target values are used (as now).

At this time when configuring projects I have up to 4 fields that differ from target to target. Not so much, I can manage that. But what will I do when project will contain 10 or 20 such parameters? That will be a catastrophe for me. :)

Of course, maybe I just miss some RD features and You have already thought about such things. Then maybe You could tell me where to search for the solution. :) But if not - please let me know what do You think about this. :)

Best regards,
Vadim.


Files

image001.png (153 KB) image001.png Mariano, 11/30/2020 07:17 PM
clipboard-202012100915-thri6.png (105 KB) clipboard-202012100915-thri6.png Vadim, 12/10/2020 07:15 AM
#1

Updated by Richard about 2 months ago

  • Assignee set to Mariano
#2

Updated by Mariano about 2 months ago

  • Status changed from New to Feedback
  • Assignee changed from Mariano to Vadim

Hey Vadim,

I think you have a conditional feature to do things spetially for different targets in the orchestration. It is called Target Specific, you can add it via "TRG Specific" button in orchestration panel. Then via targets dictionary entries you can set different values for this target.

So, via Target Specific branch, you can manage behaviour and via target dictionary entries, you can manage data for every target.

I think via those features you can make your request.

Let me know if I am missing something else.

Cheers,
MP

#3

Updated by Vadim about 2 months ago

Hi Mariano.

That's the thing - target specific branch - I was thinking about but didn't remember. Nice thing. But really not what I am talking about. :)

This Target Specific branch allows to implement different deployment logic depending on required target in single project. That's not my case. I have single deployment logic for all targets. I need to have different Data Dictionary values for different targets. And I can have that configuring project targets. And here is the problem I want to solve! I have Data Dictionary values, that are different for targets but common for projects. I'd like to have a single place to store those values as it is done in Resources, but I cannot use Resources on a target configuration level. So I cannot create a target-specific resource, and also I cannot assign a target-specific values to the resource.

If You need we can organize new Zoom meeting to make this case clear. :) Because I think that Target Specific branch cannot solve my problem, but can make project management more difficult.

Best regards,
Vadim.

#4

Updated by Mariano about 2 months ago

Hey Vadim,

I got your point, so you don't need a new feature, you need to centralise you data dictionary including also target specific values, let me know if I am wrong.

Well, I think some customers do this just sharing same FS location between projects and setting different orchestration file names.

So, in every single project you like to merge, do this:

1 - Set same location "SCM Repository" -> Project root directory
2 - Set different name to "General" -> Orchestration file name

I would strong recomend before do this, please backup your projects via project "Download" button.

Hope this helps. Let me know if there is any doubt.

Regards,
MP

#5

Updated by Mariano about 2 months ago

Sent by email from Vadim:

Hello Mariano.

Am writing from Outlook as cannot find button to add a comment on a page. J

I‘d say that You still don‘t get my main idea. J I don‘t want to share all my values between the projects. Only specific.

Will try to illustrate what I want.

For example I have project „task_scheduler_service“. It has a lot of data dictionary variables:

For example, here such variables as buildProjectName and buildVersionNumber are specific for this project, but are global for all this project‘s targets.
At the same time such variable as networkMappingCommand is target-specific. It‘s value fully belongs to a target, but can be used in any project. So value „--network dev_network“ should be used on a Dev server only, value „--network live_network“ should be used on a Live server only. That can be handled by a target configuration. But that configuration I cannot share between several projects.

Let‘s say that having these variables on a screenshot we use them in a such way:
1. Variables dockerCommand, dockerBuildRepository, dockerUserName and dockerPassword are global for all projects and targets;
2. Variables buildProjectName, buildVersionNumber and containerCommand are global for all targets of this project (they depend on project only and are the same for any target);
3. Other variables, such as loggingDriverCommand, memcachedServiceHost and networkMappingCommand, depend on a target and are fully independent from project (they are the same for all projects on the same target).

So if we have such set of variables we can configure our projects in a next way:
1. Variables from a group 1 are global all over the system, so we can store them in a resource. Nice. Works perfectly. Once configured can be used anywhere.
2. Variables from a group 2 are project-specific, so we can store those in a project‘s data dictionary. Also works perfectly. These are project settings and stay the same all over all targets, that are assigned to the project.
3. Variables from a group 3 are target-specific, but are project-independent. From one side they should be configured globally to allow using them in any project (project-independent values should be available in any project). From another side, these variables values depend on a target, so when storing them globally it should be necessary to make separate storages for all possible targets. But that could not solve problem as it is impossible to select resource at a target configuration level. So now it is necessary to write these values manually to all project targets. It is not possible to store and edit them at one place.
One more time, I‘d like to be able to configure some resource with variables loggingDriverCommand, memcachedServiceHost and networkMappingCommand in two (for example, Dev and Live) sets of values and use those values in any project in the system so that Dev set goes to a Dev target and Live set goes to a Live target. And when memcachedServiceHost changes I go to the resource, change that value for Dev, change value for Live and am happy that do not have to go over my 12 projects checking targets and changing values. J

That‘s why I was thinking about possibility to manage resources at a target configuration layer – I open target configuration window, add resource with necessary values and those values are written into the variables for that target only. But later I realized, that this can be very hard to implement. And maybe it could be possible to make resources be „targetted“ just like projects are. I mean, there could be possibility to add a certain target specification (existing in some project?) to a resource and set resource variables values so that these values could be used on a certain targets only.

Looks quite complicated. But that‘s a real situation that I‘m facing now and will face more and more times in future.

Please let me know if it‘s more or less clear now.

#6

Updated by Mariano about 2 months ago

  • Assignee changed from Mariano to Vadim

Hey Vadim,

Not sure why you cannot add notes to the ticket, if the problem is still there, could you please send me a screenshot of the support page to see why you cannot add notes to the tickets.

Regarding to your question, I think I got your point. You like to have a way to set target data dictionary entries in a centralised data dictionary resource, right?

Well, it should breaks the current data dictionary model of scopes levels, you have resource, project and target scopes, in this order. Honestly, I am not sure if it is worth to change this scope model anyway.

I think you can do some workaround like you can set some resource data dictionary entries and use the entry keys into target definition.

for example, data dictionary resource A:
@TARGET_A_VALUE@ = value for target A
@TARGET_B_VALUE@ = value for target B
@RESOURCE_KEY@=value for resource

then in any project, you need to add this data dictionary resource A:
Project -> "Target A": @RESOURCE_KEY@=@TARGET_A_VALUE@
Project -> "Target B": @RESOURCE_KEY@=@TARGET_B_VALUE@

So, if you set this in N projects and you like to change these targets values wihtout changing all project target scope values, you just need to change the resource A values and then create new packages in the N projects to get the resource values.

Hope this helps,

Cheers

MP

#7

Updated by Vadim about 1 month ago

Hi Mariano.

Thank You for the reply.
Regarding the possibility to add comments - I was logged out and didn't realize that. Strange that I was able to review all my tickets, just wasn't able to edit. :)

Regarding the resources. I did as You recommended. From resource side that looks quite nice, but not from the project side. :) The amount of an items in data dictionary raised dramatically (parameters count x target count).
Here is how I configured one resource for 3 now existing targets:

One project can have several such resources (they describe connection to DB and one project can connect to several different databases). Try to imagine how many items I will have in project data dictionary when I add all those. :)

Maybe there is possibility to hide somehow items, that are not used in project directly? Maybe some kind of resource nesting is possible? I mean that I could create resource with all values for all targets, then another resource that consolidates those values to a single item. And only that short resource with single item is added to a project. For example the lowest level resource could be configured as on a screenshot, then on the top there could be another resource with single item @dbConnectionFltc@=@dbConnectionFltcDev@. And only this one resource is added to a project. Really don't know how those resources could be invisibly connected at backend. :)

Or maybe it is possible to make data dictionary item grouping in a project? Just by the source resources. With possibility to collapse and make overall item list shorter. :)

I really don't want to see all settings in one list inside one project. All possible settings. As there will be described all items for all targets. :)
Really grouping with show-hide possibility could solve navigation problem. :) What do You think about that? That should not affect any technical side of resources and projects. :)

Will be waiting for Your reply.

Best regards,
Vadim.

#8

Updated by Mariano about 1 month ago

  • Assignee changed from Vadim to Mariano

Hey Vadim, I will add this to the wish list, I have to think about how to integrate this into the UI. But I think the main idea I got it. I think we need to work in the UI under resources to edit data dictionaries for target scopes in some way.

Regards,
MP

#9

Updated by Mariano about 1 month ago

  • Tracker changed from Support to Feature
#10

Updated by Vadim about 1 month ago

Hi Mariano.

That could be nice to make something to that. :) I had about 50 data dictionary items in project but after i configured and added all necessary database connections as I described earlier, I got about 200 data dictionary items in project. :) That's really a lot. It's hard to find something there now. :)

Best regards,
Vadim.

Also available in: Atom PDF