小编Bru*_*e P的帖子

在Ansible中一起使用set_facts和with_items

我目前正在使用Ansible 1.7.2.我有以下测试剧本:

---
- hosts: localhost
  tasks:
  - name: set fact 1
    set_fact: foo="[ 'zero' ]"

  - name: set fact 2
    set_fact: foo="{{ foo }} + [ 'one' ]"

  - name: set fact 3
    set_fact: foo="{{ foo }} + [ 'two', 'three' ]"

  - name: set fact 4
    set_fact: foo="{{ foo }} + [ '{{ item }}' ]"
    with_items:
      - four
      - five
      - six

  - debug: var=foo
Run Code Online (Sandbox Code Playgroud)

第一个任务设置一个事实,即列表中包含一个项目.后续任务将附加更多值附加到该列表.前三个任务按预期工作,但最后一个没有.这是我运行时的输出:

PLAY [localhost] **************************************************************

GATHERING FACTS ***************************************************************
ok: [localhost]

TASK: [set fact …
Run Code Online (Sandbox Code Playgroud)

ansible

52
推荐指数
6
解决办法
8万
查看次数

如何设置注册变量以在ansible中播放之间保持?

我有一个ansible playbook,我想在一台机器上注册的变量在另一台机器上可用.

在我的情况下,我想localhost在这种情况下 运行命令git rev-parse --abbrev-ref HEAD,所以我可以记下当前的git分支和sha1,并注册这个输出,所以我可以在以后工作任何机器时参考它该main集团在第二个上场.

但是,我不清楚如何在localhost上注册变量,所以我可以从main访问它.当我尝试在第二次播放中访问变量时,我收到以下消息:

TASK: [debug msg={{ app_git_sha1.stdout }}] ***********************************
fatal: [main] => One or more undefined variables: 'app_git_sha1' is undefined
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的剧本.有什么明显我应该做的吗?

---
- hosts: localhost
  connection: local
  gather_facts: no
  tasks:
    - name: register current branch
      command: git rev-parse --abbrev-ref HEAD
      register: git_branch
      sudo: no
      when: vagrant
      tags:
        - debugsha

    - debug: msg={{ git_branch.stdout }}
      tags:
        - debugsha

    - name: register the SHA1 of the branch being deployed
      command: git …
Run Code Online (Sandbox Code Playgroud)

deployment ansible

52
推荐指数
3
解决办法
5万
查看次数

与CloudFront结合使用时,AWS S3标准不频繁访问与减少冗余存储类别?

我正在使用CloudFront缓存和分发当前存储在标准存储类S3中的所有缩略图.由于CloudFront仅缓存原始数据并且每24小时访问它们,因此使用比标准更便宜的存储类是有意义的:标准不常访问(IA)或减少冗余(RR).但我不确定哪一种更合适且更具成本效益.

标准IA具有最便宜的存储(比标准类便宜58%,比RR便宜47%),但比标准和RR要贵60%.但是,在计算成本时,存储在Standard-IA类中的128kb以下的所有文件都会舍入到128kb,这适用于我的大多数缩略图.

同时,RR级的存储仅比标准级便宜20%,但其请求成本比标准IA低60%.

我不确定哪一个在实践中最具成本效益,并且会感谢任何有经验的人都能提供一些反馈.

amazon-s3 amazon-web-services amazon-cloudfront

14
推荐指数
1
解决办法
7575
查看次数

如何定义登录用户并成为playbook中的root用户

我的loginuser是user1,我想用root执行playbook.我怎样才能做到这一点.如果我在cmdline中使用它不会像这样工作

ansible-playbook main.yaml -i hosts --user=git -k --become-user=root --ask-become-pass --become-method=su
Run Code Online (Sandbox Code Playgroud)

请告诉我如何实现这一点.

name: Install and Configure IEM
hosts: rhel
ansible_become: yes
ansible_become_method: su
ansible_become_user: root
ansible_become_pass: passw0rd
tasks:

 - name: Creating masthead file path
   file: path=/etc/opt/BESClient state=directory

 - name: Creating install directory
Run Code Online (Sandbox Code Playgroud)

ansible

12
推荐指数
2
解决办法
4万
查看次数

在Solr客户端上指定ZooKeeper主机的最佳方法?

我们在AWS EC2中运行了一些SolrCloud和ZooKeeper设置,并且在大多数情况下它们运行顺利,但是在最近我们的一个ZooKeeper节点发生故障后,我开始想知道是否有任何一种让客户端解决ZooKeeper的方法是比别人好.我们的客户端是基于Java的,使用Solr 4.1 java客户端.

最初我们使用hostfile条目来识别ZooKeepers,但/etc/hosts考虑到AWS的性质,确保条目是最新的,这样做变得非常繁琐.所以我们现在通过Route53使用自定义DNS来识别ZooKeepers.但是我们仍然单独识别ZooKeeper节点,因此我们当前在启动客户端时指定了这一点:

-Dsolr.zookeeperHosts='zk-1.mydomain.com:2181,zk-2.mydomain.com:2181,zk-3.mydomain.com:2181'
Run Code Online (Sandbox Code Playgroud)

主机zk-1.mydomain.com等只是每个ZooKeeper EC2实例的DNS的CNAME.所以现在如果亚马逊强迫我们重新启动ZooKeeper,导致它获得一个新的IP地址,那么当DNS记录更新时,客户端最终将获得新的IP.

我的问题与想知道是否有更好的方法来处理这个问题有关.假设我们想要在混合中添加额外的ZooKeepers,所以我们有5个节点的法定数量而不是3个.(我实际上想要这样做.)拥有包含所有的单个DNS循环记录会更有意义吗ZooKeepers在其中并将该单个DNS名称传递给客户端?

例如,成立了DNS记录zookeepers.mydomain.com的CNAME指向zk-1.mydomain.com,zk-2.mydomain.com并且zk-mydomain.com,然后简单地PAS这给我的客户:

-Dsolr.zookeeperHosts='zookeepers.mydomain.com:2181'
Run Code Online (Sandbox Code Playgroud)

这样,当我将新的ZooKeepers添加到集群时,我可以简单地添加另一个CNAME记录,zookeepers.mydomain.com而不必担心更新所有客户端上的配置.

Solr客户端是否足够智能,可以使用包含多条记录的DNS记录?具体来说,如果一个ZooKeeper碰巧关闭,并且客户端试图连接到它,客户端是否会知道再次查询DNS以获取下一个ZooKeeper的IP并尝试与之通信?

solr amazon-web-services solrcloud apache-zookeeper

11
推荐指数
1
解决办法
943
查看次数

向现有mysql用户添加新的主机条目

我在mysql数据库中有一个包含50个左右用户的相当明确的列表.用户表中的所有内容都如下所示:

mysql> select user,host,password from user where host = '1.2.3.4';
+--------+---------+----------+
| user   | host    | password |
+--------+---------+----------+
| user1  | 1.2.3.4 | *XXX...  |
| user2  | 1.2.3.4 | *YYY...  |
| user3  | 1.2.3.4 | *ZZZ...  |
etc.
Run Code Online (Sandbox Code Playgroud)

我想要做的是为每个用户添加第二个条目,以便他们也可以使用相同的密码从10.%连接并从10.%授予完全访问权限,但保留现有授权.

有没有办法可以在mysql中完成所有这些操作(出于自动化目的)或者我是否必须编写一个转储用户和密码哈希值的脚本然后为10.%主机发出新的授权语句?

mysql

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

如何确定从最新/稳定标签构建的 Docker 映像的特定版本?

我有一个大约一年前创建的 Docker 镜像。Dockerfile 包含:

FROM docker:stable

如何确定stable构建映像时所引用的 docker 映像的实际版本?

编辑:简而言之,我想做的是替换FROM docker:stableFROM docker:X.Y.ZXYZ 是一年前最初构建映像时“稳定”所指向的版本标签。

docker dockerfile

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

rsyslog使用不同的TLS配置登录到多个服务器

是否可以将rsyslog日志记录到具有不同TLS配置的多个服务器?我们当前正在使用以下内容登录到本地syslog服务器:

$DefaultNetstreamDriver gtls
$DefaultNetstreamDriverCAFile /etc/pki/rsyslog/ca.pem
$DefaultNetstreamDriverCertFile /etc/pki/rsyslog/local-cert.pem
$DefaultNetstreamDriverKeyFile /etc/pki/rsyslog/local-key.pem
$ActionSendStreamDriverAuthMode anon
$ActionSendStreamDriverMode 1

*.* @@10.50.59.241:6514
Run Code Online (Sandbox Code Playgroud)

我们现在正在设置日志记录到第三方,并希望在那里使用TLS.他们声明我们应该像这样设置rsyslog:

$DefaultNetstreamDriverCAFile /path/to/their/ca.crt
$ActionSendStreamDriver gtls
$ActionSendStreamDriverMode 1
$ActionSendStreamDriverAuthMode x509/name
$ActionSendStreamDriverPermittedPeer *.theirhost.theirdomain

*.* @@theirhost.theirdomain:6514
Run Code Online (Sandbox Code Playgroud)

我想我可以简单地将CA组合到一个文件中,并将DefaultNetstreamDriverCAFile设置为该文件.但是,如果我只是将剩下的第二组选项添加到我的rsyslog.conf的底部,那么允许的对等体会导致与第一个主机发生冲突.那么有没有办法配置rsyslog(我们目前使用7.4.8)对两个不同的目标使用截然不同的TLS设置?

rsyslog

4
推荐指数
1
解决办法
4145
查看次数

Google Guava EventBus和事件处理程序中的异常

Guava EventBus文档说 "一般情况下,处理程序不应抛出.如果这样做,EventBus将捕获并记录异常.这很少是错误处理的正确解决方案,不应该依赖;它仅用于帮助在开发过程中发现问题."

如果您知道可能发生某些异常,则可以使用EventBus注册SubscriberExceptionHandler并使用它来处理这些异常.

但是如果发生未处理的异常会发生什么?通常情况下,我希望一个未处理的异常"冒泡"调用链.使用SubscriberExceptionHandler时,我可以访问事件处理程序中抛出的原始异常,我只想重新抛出它.但我无法弄清楚如何.

那么,无论是否使用SubscriberExceptionHandler,如何确保事件处理程序中的意外异常不会被"吞噬"?

任何帮助将不胜感激.

java guava event-bus

4
推荐指数
2
解决办法
2779
查看次数

外部表未从火花流写入的镶木地板文件更新

我正在使用 Spark 流将聚合输出作为镶木地板文件写入使用 SaveMode.Append 的 hdfs。我创建了一个外部表,如:

CREATE TABLE if not exists rolluptable
USING org.apache.spark.sql.parquet
OPTIONS (
  path "hdfs:////"
);
Run Code Online (Sandbox Code Playgroud)

我的印象是,在外部表的情况下,查询也应该从新添加的镶木地板文件中获取数据。但是,似乎新写入的文件没有被提取。

每次删除并重新创建表都可以正常工作,但不是解决方案。

请建议我的表如何也有来自较新文件的数据。

hive apache-spark parquet apache-spark-sql

4
推荐指数
1
解决办法
5538
查看次数

NSThread gtm_performBlock错误

我正在尝试在Google Maps SDK for iOS文档中运行街景示例,并收到以下错误:

` - [NSThread gtm_performBlock:]:无法识别的选择器发送到实例0x1d55d1f0.***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [NSThread gtm_performBlock:]:无法识别的选择器发送到实例0x1d55d1f0'.libc ++ abi.dylib:terminate调用抛出异常.

奇怪的是,我可以让街景视图在某些项目中工作而不是其他项目.我已经尝试了Google 1.4.3和1.4.2框架,但仍然遇到此错误.知道是什么原因引起的吗?

sdk google-maps ios

3
推荐指数
1
解决办法
606
查看次数

如何使用ansible将主机添加到known_host文件?

我想将我的私有git服务器的ssh密钥添加到带有ansible 1.9.3的known_hosts文件,但它不起作用.

我的剧本中有以下条目:

- name: add SSH host key
  known_hosts: name='myhost.com'
               key="{{ lookup('file', 'host_key.pub') }}"
Run Code Online (Sandbox Code Playgroud)

我已将/etc/ssh/ssh_host_rsa_key.pub复制到host_key.pub,文件如下:

ssh-rsa AAAAB3NzaC1... root@myhost.com
Run Code Online (Sandbox Code Playgroud)

如果我运行我的剧本我总是收到以下错误消息:

TASK: [add SSH host key]
****************************************************** 
failed: [default] => {"cmd": "/usr/bin/ssh-keygen -F myhost.com -f /tmp/tmpe5KNIW", "failed": true, "rc": 1}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

ansible ansible-playbook

3
推荐指数
2
解决办法
4751
查看次数

为什么要创建一个新实例?

我想知道为什么我们需要一个新的类实例?

int coin;

Random randomNum = new Random();
coin = randomNum.Next(0, 2);
Run Code Online (Sandbox Code Playgroud)

我必须这样做...... Random randomNum = new Random();
为此...randomNum.Next(0, 2)

为什么我不能......

coin = random.Next(0, 2);

为什么我必须首先给它一个变量"randomnum"?

c#

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