Tas*_*man 21 ansible ansible-template
我有我的目录结构
??? digitalocean
??? README.md
??? play.yml
??? roles
??? bootstrap_server
? ??? tasks
? ??? main.yml
??? create_new_user
? ??? tasks
? ??? main.yml
??? update
? ??? tasks
? ??? main.yml
??? vimserver
??? files
? ??? vimrc_server
??? tasks
??? main.yml
Run Code Online (Sandbox Code Playgroud)
当我在角色下创建用户时create_new_user,我将用户名硬编码为
---
- name: Creating a user named username on the specified web server.
user:
name: username
state: present
shell: /bin/bash
groups: admin
generate_ssh_key: yes
ssh_key_bits: 2048
ssh_key_file: .ssh/id_rsa
- name: Copy .ssh/id_rsa from host box to the remote box for user username
become: true
copy:
src: ~/.ssh/id_rsa.pub
dest: /home/usernmame/.ssh/authorized_keys
mode: 0600
owner: username
group: username
Run Code Online (Sandbox Code Playgroud)
解决这个问题的一种方法可能是创建一个var/main.yml并将用户名放在那里.但是我想要一些可以指定用户名的东西play.yml.因为我也在角色中使用用户名vimrcserver.
我正在调用角色 play.yml
---
- hosts: testdroplets
roles:
- update
- bootstrap_server
- create_new_user
- vimserver
Run Code Online (Sandbox Code Playgroud)
Tas*_*man 25
我做了一个工作
---
- hosts: testdroplets
roles:
- update
- bootstrap_server
- role: create_new_user
username: username
- role: vimserver
username: username
Run Code Online (Sandbox Code Playgroud)
上 play.yml
虽然很想看到不同的方法然后这个
文档:http://docs.ansible.com/ansible/playbooks_roles.html#roles
编辑
我终于解决了一个类似的目录结构
$ tree
.
??? README.md
??? ansible.cfg
??? play.yml
??? roles
??? bootstrap_server
? ??? tasks
? ??? main.yml
??? create_new_user
? ??? defaults
? ? ??? main.yml
? ??? tasks
? ??? main.yml
??? update
? ??? tasks
? ??? main.yml
??? vimserver
??? defaults
? ??? main.yml
??? files
? ??? vimrc_server
??? tasks
??? main.yml
Run Code Online (Sandbox Code Playgroud)
我defaults/main.yml在我需要使用的角色里面创建文件的地方{{username}}
如果有人对代码感兴趣,
sou*_*edi 11
你应该能够在play.yml username中vars输入一个条目.
变量也可以拆分为单独的文件.
这是一个显示两个选项的示例:
- hosts: all
vars:
favcolor: blue
vars_files:
- /vars/external_vars.yml
tasks:
- name: this is just a placeholder
command: /bin/echo foo
Run Code Online (Sandbox Code Playgroud)
https://docs.ansible.com/ansible/playbooks_variables.html#variable-file-separation
Ansible似乎很高兴有不同的方法来做同样的事情,没有一个很好的综合参考,或理论讨论每种不同方法的全部含义:).如果你不记得以上是可能的(我已经完全忘记了vars_files),从文档中找到的最简单的选项可能是第三种方式,这是最复杂的方法.
对于ansible-examples有一个显着的建议.您可以看到一个group_vars目录,其中的文件会根据其组(包括魔术all组)自动为主机提供值.group_vars目录可以放在与playbook相同的目录中.
https://github.com/ansible/ansible-examples/tree/master/lamp_simple
Lah*_*ima 10
如果您使用include_role,则可以像下面一样传递变量。
- hosts: all_hosts
tasks:
- include_role:
name: "path/to/role"
vars:
var1: "var2_value"
var2: "var2_value"
Run Code Online (Sandbox Code Playgroud)
小智 9
也许这就是你想要的?
---
- hosts: testdroplets
roles:
- update
- bootstrap_server
- { role: create_new_user, username: 'foobar' }
- vimserver
Run Code Online (Sandbox Code Playgroud)
https://docs.ansible.com/ansible/2.5/user_guide/playbooks_reuse_roles.html#using-roles
小智 5
不能只使用 -e 参数从命令行传递变量吗?因此您甚至可以在执行之前指定变量。这也会导致最强的变量声明始终优先(请参阅变量优先级)。
如果您想将其放入剧本中,我建议使用set_fact剧本中的指令定义用户名。然后,该变量可用于所有角色以及包含的剧本。就像是:
---
- hosts: testdroplets
pre_tasks:
- set_fact:
username: my_username
roles:
- update
- bootstrap_server
- create_new_user
- vimserver
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56862 次 |
| 最近记录: |