标签: configuration-management

在同一Java源代码中处理不同的API版本

我确定这是一个愚蠢的问题,但是..我们有相同的Java源文件,我们想要使用不同版本的Java API(jar文件),具体取决于我们构建应用程序的客户端.

较新版本的API具有我们在Java源代码中引用的方法setAAA()和setBBB():

if (...) {
  api.setAAA(a);
  api.setBBB(b);
} 
Run Code Online (Sandbox Code Playgroud)

如果使用旧API编译,旧代码API没有这些setter,则此代码将失败.如果我们使用新的API,有没有办法条件化此代码只编译setter行?

谢谢.

java build-process configuration-management

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

更新已部署的SharePoint内容类型以处理其他项目事件

我有一个网站内容类型,用于整个网站集中的一些列表.在该内容类型中,我描述了一个事件接收器来处理ItemAdding事件.这很好用.现在我需要更新内容类型,以便也处理ItemUpdating.OTTOMH,我尝试简单地修改我的内容类型的xml,因为这似乎允许简单的版本跟踪.这是因为我的更新应用于网站内容类型,但不适用于我使用此内容类型的列表.这是预期的.然后我注意到SharePoint SDK对此有一个严峻的看法:

在安装和激活该内容类型之后,在任何情况下都不应更新内容类型的内容类型定义文件.Windows SharePoint Services不跟踪对内容类型定义文件所做的更改.因此,您无法将对网站内容类型所做的更改推送到子内容类型.

然后SDK指向几个部分,描述如何使用UI或代码推送更改.由于UI不提供事件接收器的挂钩,我想我将选择代码路径.

我以为我可以做这样的事情,只需在列表的内容类型副本中添加一个新的事件接收器:

SPList list = web.Lists["My list"];
SPContentType ctype = list.ContentTypes["My content type"];
// Doesn't work -- EventReceivers is null below.
ctype.EventReceivers.Add(SPEventReceiverType.ItemUpdating, 
                         "My assembly name", "My class name");
Run Code Online (Sandbox Code Playgroud)

但问题是ctype.EventReceivers在这里为null,即使我已经将ItemAdding连接到此列表.它似乎被移动到列表本身.因此,该列表具有有效的EventReceivers集合.

SPList list = web.Lists["My list"];
list.EventReceivers.Add(SPEventReceiverType.ItemUpdating, 
                        "My assembly name", "My class name");
Run Code Online (Sandbox Code Playgroud)

所以,我有几个问题:

  1. 这样做的正确方法是将任何新的事件接收器直接添加到列表中,只是完全忘记我的内容类型?
  2. 要完成此更改,在配置管理方面处理此问题的最佳方法是什么?我应该创建一个简单的控制台应用程序来查找所有适当的列表并修改它们吗?或者以某种方式创建一个功能更好的选择?无论哪种方式,似乎这种变化本身就会发生变化,很难被未来的开发者发现,他们可能需要使用这种内容类型.

deployment sharepoint content-type configuration-management

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

Subversion - 是否可以禁用所有提交并使存储库只读?

我有一个subversion存储库,它是另一个远程存储库的镜像.我每周都使用svnsync镜像存储库.镜像存储库(本地副本)仅用于备份.

我想将镜像存储库保持为READ-ONLY,即没有人应该能够对此存储库提交任何更改,但是它们可以使用它来读取源文件,因为它比远程存储库更快.

我浏览了一下Google,看起来Hook可能是最好的选择.唯一的问题是我在Google上看到的所有示例都是基于Unix的,我无法找到适合Windows的示例,因为镜像存储库在Windows Server上运行.

有任何想法吗?

svn build-process configuration-management

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

Android App白色标签

我正在尝试找到白色标记Android应用程序的最佳方法.基本上我希望能够构建几乎相同的应用程序的多个版本,每个版本将具有不同的资源(例如可绘制的图标,颜色等),但它们将共享许多代码库.一些应用程序也将具有其他功能,因此它们不仅仅是彼此的克隆.

我想到的一种方法是将共享代码分离到库中,但问题是一些共享代码包含活动,因此我不确定如何在每个应用程序中更改资源.

另一种方法是克隆和拥有,但是一个存储库中的任何错误或更改都必须应用于另一个.

还有其他选择吗?在两个Android应用程序之间共享代码(包括活动,某些资源和其他常规Java类)的最佳实践是什么?

java android configuration-management

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

验证maven托管依赖项

maven允许你在pom文件中定义:

(A)dependencies- >项目的实际直接依赖关系

(B)dependencyManagement/ dependencies- >管理依赖关系,它们影响类别(A)与未定义版本和传递依赖关系的依赖关系.

  • 如果我在A类上放错了/未知的神器 - maven肯定会失败.
  • 如果我在类别B上放置错误/未知工件 - 只有当maven影响类别A时,maven才会失败(例如,A定义dep on foo:bar,B定义dep on foo:bar:<unknown-version>.

我想知道是否有任何现有的插件可以让我验证所有托管代表(B类) - 确保它们确实存在.

我有一个带有deps管理的全局pom项目,它为多个项目提供服务,我想在将新版本上传到远程存储库之前验证CI中deps的任何更改

java configuration-management dependency-management maven

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

J2EE应用程序/ Bean配置最佳实践?

管理属性集以应用于EJB的最佳方法是什么,并且可以轻松地在机器/环境(例如DEV,TEST,PROD)之间进行更改?例如,有没有办法在App Server上配置EJB属性(这可以保证您可以根据计算机/环境改变它们).

特别:

1)我有一个Singleton EJB,需要特定的某些属性集(环境).是否有注释用于告诉EJB容器在哪里查找这些属性并自动将它们应用于bean?

2)管理不同属性集的最佳方法是什么,即dev,test,prod,以便J2EE应用程序可以在服务器之间移植,并且您可以无缝地管理特定于每个服务器的属性?

如果有任何良好的文档链接 - 让我知道.我用Google搜索并没有直接看到上述各点.

configuration stateless-session-bean configuration-management java-ee

5
推荐指数
1
解决办法
877
查看次数

Ansible MySQL 用户需要 SSL

我今天刚刚开始学习 Ansible,并且已经取得了快速进步,并且即将能够实现整个 IT 堆栈的自动化。那很好!:)

\n\n

然而我遇到了障碍。我们选择采取较小的性能损失并使用 SSL 功能加密所有 MySQL 连接。这是为了让我们的办公室 IP 远程管理它,以及跨数据中心。

\n\n

使用 mysql_user 模块,我可以确保添加用户并设置密码等。但我似乎找不到要求用户使用 SSL 的地方?根据快速谷歌,以及文档中缺乏选项,我想我不能用 mysql_user 来做到这一点。

\n\n

但真正的问题是:您知道(最好是干净的)解决方法吗?

\n\n

如果我能以某种方式使用 Ansible 执行原始查询,那就完美了。具体来说,我需要在 Ansible 中复制此 SQL,但可能:

\n\n
GRANT ALL PRIVILEGES ON *.* TO \xe2\x80\x98ssluser\xe2\x80\x99@\xe2\x80\x99%\xe2\x80\x99 IDENTIFIED BY \xe2\x80\x98pass\xe2\x80\x99 REQUIRE SSL;\n
Run Code Online (Sandbox Code Playgroud)\n

mysql configuration-management ansible

5
推荐指数
1
解决办法
2911
查看次数

如何使用Docker实施“一个二进制”原则

One Binary原则在这里说明:http : //programmer.97things.oreilly.com/wiki/index.php/One_Binary指出一个人应该...

“构建一个二进制文件,您可以在发布管道的所有阶段中进行标识和升级。在环境中保留特定于环境的详细信息。这可能意味着,例如,将它们保存在组件容器,已知文件或文件中。路径。”

我看到许多开发运营工程师可以通过在每个环境中创建一个docker映像(即,my-app-qa,my-app-prod等)来违反这一原则。我知道Docker支持不变的基础架构,这意味着部署后不更改映像,因此部署后不上载或下载配置。在不变的基础架构和一个二进制原则之间是否需要权衡取舍,或者它们可以相互补充?在将配置与代码分离时,Docker世界中的最佳实践是什么???应采用以下哪一种方法...

1)创建一个基本的二进制映像,然后进行配置Dockerfile,通过添加特定于环境的配置来扩展该映像。(即my-app-> my-app-prod)

2)在部署时将仅二进制的docker映像部署到容器,并通过环境变量等传递配置。

3)将Docker文件部署到容器后上传配置

4)从容器内正在运行的docker映像中,从配置管理服务器下载配置。

5)将配置保留在主机环境中,并通过绑定安装将其提供给正在运行的Docker实例。

还有上面没有提到的更好的方法吗?

如何使用不可变的基础结构来实施一种二进制原则?可以做到还是需要权衡?最佳做法是什么?

deployment immutability configuration-management continuous-delivery docker

5
推荐指数
1
解决办法
342
查看次数

如何防止 Ansible 剧本中的 Jinja2 替换?

在我的剧本中,使用include_vars模块包含了一个 JSON 文件。JSON 文件的内容如下:

{
  "Component1": {
    "parameter1" : "value1",
    "parameter2" : "value2"
  },

  "Component2": {
    "parameter1" : "{{ NET_SEG_VLAN }}",
    "parameter2": "value2"       
  }
}
Run Code Online (Sandbox Code Playgroud)

将 JSON 文件包含在剧本中后,我正在使用uri模块发送 http 请求,如下所示:

- name: Configure Component2 variables using REST API
  uri:
      url: "http://0.0.0.0:5000/vse/api/v1.0/config/working/Component2/configvars/"
      method: POST
      return_content: yes
      HEADER_x-auth-token: "{{ login_resp.json.token }}"
      HEADER_Content-Type: "application/json"
      body:  "{{ Component2 }}"
      body_format: json
Run Code Online (Sandbox Code Playgroud)

可以看出,http 请求的正文与 JSON 数据一起发送Component2。但是,Jinja2 尝试替换{{ NET_SEG_VLAN }}JSON 文件中的 并抛出undefined错误。目的不是使用 Jinja2 替换 JSON 文件中的任何内容,而是像在 …

configuration-management jinja2 ansible ansible-playbook

5
推荐指数
1
解决办法
2646
查看次数

如何在出现第一个错误时停止 Cloud-init

当我使用 Cloud-init 启动 Linux 服务器时,我有一些脚本,/etc/cloud/cloud.cfg.d/它们按相反的字母顺序运行

# ll /etc/cloud/cloud.cfg.d/
total 28
-rw-r--r-- 1 root root  173 Dec 10 12:38 00-cloudinit-lifecycle-hook.cfg
-rw-r--r-- 1 root root 2120 Jun  1  2021 05_logging.cfg
-rw-r--r-- 1 root root  590 Oct 26 17:55 10_aws_yumvars.cfg
-rw-r--r-- 1 root root   29 Dec  1 18:22 20_amazonlinux_repo_https.cfg
-rw-r--r-- 1 root root  586 Dec 10 12:38 50-cloudinit-tomcat.cfg
-rw-r--r-- 1 root root  585 Dec 10 12:40 60-cloudinit-newrelic.cfg
Run Code Online (Sandbox Code Playgroud)

最后执行的是00-cloudinit-lifecycle-hook.cfg,我使用 .txt 文件完成 Auto Scaling 组的生命周期CONTINUE。如果 ASG 在给定超时后未收到此信号,则它会失败。

问题是,即使出现错误50-cloudinit-tomcat.cfg …

provisioning configuration-management cloud-init

5
推荐指数
0
解决办法
1004
查看次数