标签: configuration-management

构建相同C/C++应用程序变体的最佳方法是什么

我有三个密切相关的应用程序,它们是从相同的源代码构建的 - 比方说APP_A,APP_B和APP_C.APP_C是APP_B的超集,APP_B又是APP_A的超集.

到目前为止,我一直在使用预处理器定义来指定正在构建的应用程序,它就像这样工作.

// File: app_defines.h
#define APP_A 0
#define APP_B 1
#define APP_C 2
Run Code Online (Sandbox Code Playgroud)

然后我的IDE构建选项指定(例如)

#define APPLICATION APP_B
Run Code Online (Sandbox Code Playgroud)

...在源代码中,我会有类似的东西

#include "app_defines.h"

#if APPLICATION >= APP_B
// extra features for APPB and APP_C
#endif
Run Code Online (Sandbox Code Playgroud)

然而,我今天早上在脚上射击并且浪费了很多时间,只需从一个文件中省略#include"app_defines.h"的行.一切编译得很好,但应用程序在启动时与AVs崩溃.

我想知道更好的处理方法是什么.以前,这通常是我认为#define可以使用的少数几次之一(无论如何都是在C++中),但我仍然很糟糕,并且编译器没有保护我.

c++ configuration-management c-preprocessor software-product-lines

6
推荐指数
3
解决办法
929
查看次数

6
推荐指数
1
解决办法
3905
查看次数

多个应用程序,共享设置:使用注册表或基于XML的配置?

我的情景

我有一个类库,将从多个单独的可执行应用程序中调用.此类库需要知道要访问的数据库服务器的地址(以及许多其他配置选项,身份验证信息等).我有一个独立于类库的配置和管理应用程序,它还需要知道并设置这些配置选项.

我的问题

通常的做法是在Windows注册表中存储这些特定于用户的配置选项,还是首选对类库使用典型的"App.config"XML方法,并允许配置工具更改和修改它?

我倾向于注册表方法,但我知道许多人对不使用它有意见.你会怎么做?

c# registry configuration configuration-management

6
推荐指数
2
解决办法
1687
查看次数

在页面加载时将初始配置变量发送到Ajax客户端的常用方法是什么?

复杂的web-app可以具有大量用户和/或上下文特定的元和配置信息.例如,用户首选的结果集大小,时区,周初(周日/周一)等.

在加载时将变量传输到客户端应用程序的可能方法是什么(隐藏变量?嵌入某处的JSON?),每种方法的优点/缺点是什么?

我知道有几种方法可以同时解决问题,但我很好奇是否有人确定了要使用的好设计模式,或者他们可以分享的最佳实践.

虽然我更喜欢这方面的一般信息,但我的主要堆栈是jLAMP(jQuery,Apache,MySQL,PHP)

编辑:我已经有应用程序执行此操作,所以我不是在寻找快速修复,或建议完全不同的范例(如,不加载配置).我正在寻找与每个选项和优缺点的讨论,以便我可以调整我所拥有的内容,或者为新用户提供大量选项以从一开始就做出好的设计决策.谢谢!

ajax lamp jquery configuration-management

6
推荐指数
1
解决办法
560
查看次数

如何使用一个saltstack状态在同一个文件上进行多次替换?

这是我的目标文件:

Sonatype Nexus
# ==============
# This is the most basic configuration of Nexus.

# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus
nexus-webapp-context-path=/nexus

# Nexus section
nexus-work=/opt/nexuswork
runtime=${bundleBasedir}/nexus/WEB-INF
Run Code Online (Sandbox Code Playgroud)

我知道使用正则表达式或简单的sed脚本有一种简单的方法:

sed -i 's/${bundleBasedir}\/..\/my\/second\/path\/002\/\/nexus/\/myfirstdir001\/g'
Run Code Online (Sandbox Code Playgroud)

但是,理想情况下,我更喜欢盐栈方式.

我希望它看起来像这样:

Sonatype Nexus
# ==============
# This is the most basic configuration of Nexus.

# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-webapp=/my/second/path/002/nexus # changed
nexus-webapp-context-path=/nexus

# Nexus section
nexus-work=/opt/nexuswork
runtime=/myfirstdir001/nexus/WEB-INF # changed 
Run Code Online (Sandbox Code Playgroud)

我还没有弄清楚这方面的saltstack文档.

Saltstack的salt.states.file.replace文档似乎相当简单:

http://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#salt.states.file.replace

这是我试过的:

/opt/nexus-2.8.0/conf/nexus.properties
  file:                                  # state
    - replace
    - pattern: '\$\{bundleBasedir\}'  # without escapes: '${bundleBasedir}/nexus' …
Run Code Online (Sandbox Code Playgroud)

replace configuration-management nexus salt-stack

6
推荐指数
2
解决办法
6271
查看次数

Consul等配置工具如何"推送"配置更新到客户端?

有一种新兴的趋势是将全局状态传统的"静态"配置管理工具(例如Chef/Puppet/Ansible)中删除,而是将配置存储在某些集中/分布式工具中,其中主要参与者似乎是:

  • ZooKeeper(Apache)
  • 领事(Hashicorp)
  • 尤里卡(Netflix)

这些工具中的每一个都有不同的工作方式,但原理是相同的:

  • 将这些工具中的env变量和其他动态配置(即可以更改的内容)存储为键/值对
  • 在启动时通过客户端连接到这些工具/服务,并下拉配置KV对.这通常要求客户端提供服务名称(" MY_APP")和环境(" DEV"," PROD"等).

有一个优秀的Consul Java客户端,它可以很好地解释所有这些,并提供了充足的代码示例.

这些工具的理解是,它们建立在Zab,Paxos和Gossip等共识算法的基础之上,这些算法允许配置更新在整个节点中几乎以病毒式传播,最终保持一致.这样的想法存在,如果你有一个myapp有20个节点的应用程序,比如myapp01通过myapp20,如果你做一个配置改变其中之一,这种变化自然会"蔓延"遍及20个节点在一段秒/分钟.

我的问题是:这些更新如何实际部署到每个节点?在任何客户端API(我上面链接的那个,ZooKeeper API或Eureka API)中都没有看到某种回调功能,可以设置并用于在集中服务(例如领事)时通知客户端cluster)想要推送和重新加载配置更新.

所以我问:这应该如何工作(动态配置部署和客户端重装)?虽然Consul的API似乎是最先进的恕我直言,但我对这三种工具中的任何一种都有任何可行的答案感兴趣.

configuration-management consul netflix-eureka apache-zookeeper

6
推荐指数
1
解决办法
1822
查看次数

如何检测 cloud-init 完成初始化

我正在使用 cloud-init/cloud-config 配置 OpenStack 框。我打算等到它完全配置好再开始使用它。

使用一些标记文件或检测 cloud-init 进程是否仍在运行,这并不难,尽管在每个 cloud-init 脚本中这样做似乎很麻烦。有什么推荐的方法吗?理想情况下,由 cloud-init 原生支持?

provisioning configuration-management cloud-init

6
推荐指数
3
解决办法
3702
查看次数

使用 lineinfile 和 blockinfile 编辑文件还是仅使用模板复制整个文件?

我开始使用 Ansible 编写一个剧本,为我们的应用程序部署临时环境。我试图了解对文件应用更改的最佳实践是否是在控制计算机上本地更改它们,然后将它们传播到远程服务器,或者是否应该在剧本内操作文件。

通过剧本操作文件在可读性和文档方面似乎更好,并且将整个配置过程保留在一个工具中以实现整个配置过程。另一方面,更改本地服务器上的文件更加容易和快捷。

解决这些问题的最佳方法是什么?

谢谢,亚龙。

configuration-management ansible

6
推荐指数
1
解决办法
5521
查看次数

厨师喜欢盐堆中的版本管理?

我真的很喜欢你可以将同一本食谱的多个版本上传到Chef服务器的方式.您还可以在元数据文件中指定cookbook版本.例如

depends 'base-config', '= 1.2.1'
Run Code Online (Sandbox Code Playgroud)

我喜欢Salt.但是,我找不到任何版本管理和盐状态/公式的必备条件.我真的很惊讶,因为我认为这是配置管理的基本要求.我错过了什么吗?salt如何处理状态/公式文件版本?

configuration-management salt-stack

6
推荐指数
1
解决办法
73
查看次数

在Java中支持2个API版本

我正在尝试找到一种方法来支持我的代码库中的两个不同版本的API.它们具有相同的封装名称,但在引擎盖下工作方式有很大不同(两个完全不同的系统).我怎样才能做到这一点?

这两个API也依赖于Bouncy Castle,但它们使用不同的版本.我该如何考虑这一点?

java configuration-management

6
推荐指数
1
解决办法
236
查看次数