标签: yaml

在ansible中引用冒号

我正在尝试使用 ansible 来检查特定程序的输出是否设置为某个值。该值包括一个冒号,后跟一个空格,无论我如何引用它,这似乎都会注册为语法错误。

例子:

---
- hosts: all
  tasks:
    - raw: echo "something: else"
  register: progOutput

- debug:
    msg: "something else happened!"
  when: progOutput.stdout_lines[-1] != "something: else"
Run Code Online (Sandbox Code Playgroud)

当我运行它时,第一个“原始”命令出现错误:

ERROR! Syntax Error while loading YAML.


The error appears to have been in '<snip>/test.yml': line 4, column 27, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  tasks:
    - raw: echo "something: else"
                          ^ here
Run Code Online (Sandbox Code Playgroud)

(自然,我的实际用例涉及一个真实的程序,它的输出中有一个冒号,而不是 'raw: echo'。然而,这仍然是我看到的错误。)

显然,引用有问题的字符串并不能解决问题。我还尝试使用反斜杠 ( \)转义 …

ansible yaml

7
推荐指数
2
解决办法
9154
查看次数

如何在ansible中跨不同变量文件合并hash类型的变量?

我有两个 YAML 变量文件,它们被许多剧本重用:

# playbook/group_vars/all

settings:
  a: 1
  b: 2

# inventory/group_vars/main.yml

settings:
  c: 3
Run Code Online (Sandbox Code Playgroud)

我希望在我的剧本中settings保持平等{ a: 1, b: 2, c: 3 }

相反,它等于{ c: 3 },因为inventory/group_vars/*具有比playbook/group_vars/all和 更高的优先级,因为哈希值被覆盖,而不是合并

我看到以下选项:

  • 使用命名约定和前缀单独定义变量,而不是使用哈希,如下所示:

    # playbook/group_vars/all
    
    settings_a: 1
    settings_b: 2
    
    # inventory/group_vars/main.yml
    
    settings_c: 3
    
    Run Code Online (Sandbox Code Playgroud)

我们的团队认为这个解决方案不够优雅。

  • 使用 set_fact 和/或 Jinja 的“+”运算符

{{ list_common + list_specific }}

这需要对许多剧本进行更改(我们确实有很多),而且看起来也很糟糕。

--

是否有其他选项可以合并来自不同文件的哈希值,而不是重新定义(覆盖)它们?

我们试图实现的是停止跨变量文件重复列表并仅定义特定于组/主机的那些参数。

automation linux ansible yaml

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

添加现有安全组 CloudFormation EC2 模板

我无需设置入口和出口规则,而是如何在 CloudFormation 模板中引用现有 EC2 安全组?

   Resources:
      EC2Instance:
        Type: AWS::EC2::Instance
        Properties:
          InstanceType:
            Ref: InstanceType
          SecurityGroups:
          - Ref: InstanceSecurityGroup
          KeyName:
            Ref: KeyName
          ImageId:
            Fn::FindInMap:
            - AWSRegionArch2AMI
            - Ref: AWS::Region
            - Fn::FindInMap:
              - AWSInstanceType2Arch
              - Ref: InstanceType
              - Arch
      InstanceSecurityGroup:
        Type: AWS::EC2::SecurityGroup
        Properties:
          GroupDescription: Existing Groups
          SecurityGroupIds:
          - Ref: sg-12345
          - Ref: sg-12312
Run Code Online (Sandbox Code Playgroud)
  SecurityGroupIngress:
  - IpProtocol: tcp
    FromPort: 80
    ToPort: 80
    CidrIp: 0.0.0.0/0
  SecurityGroupEgress:
  - IpProtocol: tcp
    FromPort: 80
    ToPort: 80
    CidrIp: 0.0.0.0/0
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 amazon-web-services amazon-cloudformation yaml

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

为什么一些 r10k 配置文件以 : 开始它们的 YAML 行?

我正在考虑为 Puppet 部署设置 r10k,我有各种示例 r10k.yaml 配置文件,但有些似乎在许多行的开头使用了额外的 :,例如,在http://www.rubydoc。信息/宝石/r10k/1.1.4

---
:cachedir: '/var/cache/r10k'
Run Code Online (Sandbox Code Playgroud)

但是,在https://github.com/puppetlabs/r10k/blob/master/r10k.yaml.example

---
cachedir: '/var/cache/r10k'
Run Code Online (Sandbox Code Playgroud)

有什么区别,为什么我要使用另一个?

puppet yaml r10k

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

获取当前主机名并使用 ansible 将其推送到 conf 文件中

我正在编写 ansible playbook 以获取服务器的当前主机名,然后将其设置为配置文件。我无法弄清楚如何使用 lineinfile 模块推送 shell 输出。

  - name: Get hostname
    shell: echo $HOSTNAME
    register: result

  - name: Set hostname on conf file
    lineinfile: dest=/etc/teste/linux/zabbix_agentd.conf regexp="^Hostname=.*" insertafter="^# Hostname=" line=Hostname=????
Run Code Online (Sandbox Code Playgroud)

linux ansible yaml

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

是否可以使用ansible在带内更改当前用户的密码?

我有一个新安装的 Linux 发行版。它有一个具有默认密码的普通用户和一个锁定的 root 帐户(root 上没有密码 - 不能直接通过 SSH 连接)。我希望能够运行 ansible playbook 来配置此服务器,并通过更改其密码锁定此默认帐户,而无需执行额外的带外步骤。

我的剧本所做的大部分设置都需要 root,所以它被配置为作为默认用户 ssh 进入,成为 root,并运行所有命令。这很好用。问题是更改密码。

如果我尝试使用用户模块更改用户的密码,它会成功,但之后的所有任务都会失败。即使我将更改作为剧本中的最后一步进行,所有应该在最后运行的处理程序都会失败。

对于类似的问题,我在网上遇到了 2 个建议:

  • 使用 RSA 密钥
  • 使用初始播放以某种方式测试并更改密码

使用 RSA 密钥需要您提前设置 RSA,因此不是带内的。

我一直在尝试使用初始播放以某种方式执行此操作,但到目前为止,第二个初始播放无法使用默认密码登录,ansible 退出并出现错误,并忽略其他任务,以及下一个播放。

还有一个办法做到这一点使用ssh通,这表现在这里,它应该工作,但似乎更多的是黑客攻击,和ssh通并不总是容易获得,就像上运行MacOS的ansible机器。

十多年前这里讨论过一个类似的主题,但看起来 Dave 通过将 Linux 设置为在您尝试以默认用户身份登录时显示“帐户已禁用”消息并改为更改用户来解决此问题,这听起来也像它应该可以工作,但与简单地更改默认用户的密码不同。

ansible 是否可以在不断开连接的情况下更改其运行用户的密码?

linux ansible yaml

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

在提交之前验证 Salt 状态

我将我的 salt sls 文件存储在一个 git 存储库中,但我有一个长期存在的问题,即我无法验证我的 YAML 是否代表了一组可以应用的有效状态(我也很难验证我的 YAML -- 那是不过要容易得多)。理想情况下,我想要某种方式在提交之前在我的工作站上验证我的状态。如果做不到这一点,某种方式可以检查预接收挂钩,这样我至少可以阻止狡猾的代码访问服务器。

git yaml saltstack

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

如何使用 Puppet ENC 定义多个 /etc/hosts 条目?

我正在为我的 Puppet 基础设施编写一个外部节点分类器,我需要/etc/hosts在每个节点上操作文件。以下(由于重复键)是无效的 YAML:

---
  host:
    name: www1.example.com
    host_aliases: www1
    ip: 1.2.3.4
  host:
    name: www2.example.com
    host_aliases: www2
    ip: 1.2.3.5
Run Code Online (Sandbox Code Playgroud)

我看到了这个相关的答案,它有以下代码:

host {
  # Public IPs - eth0
  'front-01': ip => '192.168.1.103';
  'front-02': ip => '192.168.1.106';

  # Private IPs - eth1
  'priv0-0': ip => '192.169.40.201';
  'priv0-1': ip => '192.169.40.202';
  'priv1-0': ip => '192.169.40.207';
  'priv1-1': ip => '192.169.40.208';

  # Virtual IPs - eth0:1
  'vip-01': ip => '192.169.50.202';
  'vip-02': ip => '192.169.50.205';
}
Run Code Online (Sandbox Code Playgroud)

然而,

  1. 对我来说,这里实际发生的事情并不是很明显。
  2. 我在任何地方都找不到这方面的文档。
  3. Because these (don't …

hosts puppet yaml

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

自 Ansible 2.0 以来,格式化策略如何?

我在 github 和 ansible docs 中看到了多个 Ansible 示例,例如:

---
# this might be in a file like handlers/handlers.yml
- name: restart apache
  service: name=apache state=restarted
Run Code Online (Sandbox Code Playgroud)

Github 示例

以下示例同时包含注释作为name.

# Make sure Jenkins starts, then configure Jenkins.
- name: Ensure Jenkins is started and runs on startup.
  service: name=jenkins state=started enabled=yes
Run Code Online (Sandbox Code Playgroud)

讨论

Aname将是足够的权利还是应该使用评论?

应该是:

- name: Symlink RabbitMQ bin to sbin
  file: state=link src=/usr/lib/rabbitmq/bin dest=/usr/lib/rabbitmq/sbin
Run Code Online (Sandbox Code Playgroud)

或者:

#Symlink RabbitMQ bin to sbin
file: 
  state: link
  src: /usr/lib/rabbitmq/binhttp://docs.ansible.com/ansible/YAMLSyntax.html …
Run Code Online (Sandbox Code Playgroud)

ansible yaml

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

CloudFormation 堆栈 yaml 语法?

我正在尝试创建一个 SecurityGroup,它的标签类似于Name: SG-StackName. 此代码在 json 中完美运行:

"Resources": {
    "SecurityGroup": {
        "Type": "AWS::EC2::SecurityGroup",
        "Properties": {
            ...
            "Tags": [{
                    "Key": "Name",
                    "Value": {
                        "Fn::Join" : [ "", [
                            "SG-",
                            {   "Ref" : "AWS::StackName"    }
                        ]]
                    }
                }
            ]
        }
    },
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试将其转换为 yaml:

Resources: 
  SecurityGroup: 
    Type: AWS::EC2::SecurityGroup
    Properties: 
      ...
      Tags: 
        - Key: Name
        - Value: !Join
          - ''
          - - 'SG-'
            - Ref: AWS::StackName
Run Code Online (Sandbox Code Playgroud)

堆栈构建失败并显示错误“在标签属性中找不到密钥”。模板中的错误在哪里?

syntax amazon-web-services amazon-cloudformation yaml

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

如何在 ansible 角色中使用 vars

我想创建一个 ansible 角色来使用 ssh_keys 添加用户

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ansible.cfg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 hosts\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 playbooks\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 add_user.yml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 roles\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 add-user\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 files\n        \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ansible.pub\n        \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dhirendra.pub\n        \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 nitigyas.pub\n        \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vinayaks.pub\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tasks\n        \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.yml\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vars\n            \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.yml\n
Run Code Online (Sandbox Code Playgroud)\n\n

tasks/main.yml 文件是:

\n\n
---\n- name: AddUser in the server\n  user: \n   name: ansible\n   password: $6$sHQAZJ32E$ujHauabN7ZTbOQ/zhT5899EIaFErOecXYvTEyhekexy4dydsAXTGdUpaB8M4fQf2UGpZgX/Zg2Uv6areeuv/r0\n   comment: Ansible Configuration Mgmt\n   shell: /bin/bash\n\n- name: Add SSH key to users home direcotory\n  authorized_key: \n   user: "{{ item.name }}"\n   key: "{{ item.file }}"\n   state: present\n …
Run Code Online (Sandbox Code Playgroud)

ansible yaml

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

CloudFormation 模板:如何在短格式中同时使用 Sub 和 GetAtt?

我正在使用 yaml。所以,我们可以使用:

!GetAtt [ WebServer, AvailabilityZone ]
!GetAtt WebServer.AvailabilityZone
Run Code Online (Sandbox Code Playgroud)

此外,我们可以使用:

!Sub 'sometext-${AWS::StackName}'
Run Code Online (Sandbox Code Playgroud)

如何使用 GetAtt 输出而不是${AWS::StackName},最好使用 的第二种形式GetAtt?我知道如何使用,Join但我想继续使用Sub.

amazon-web-services amazon-cloudformation yaml

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