Ansible05-部署文件

目录

一、部署文件的常用模块

二、使用jinja2文件部署自定义文件


一、部署文件的常用模块

部署文件常用模块有

  • file 创建、删除文件或目录,修改selinux上下文。
  • copy 复制文件到受控节点上,也可以直接在受控结点上创建文件。
  • fetch 从受控结点获取文件。
  • lineinfile 修改文件。
  • blockinfile 修改文件。
  • sefcontext 和 seport 模块可以持久修改 selinux 上下文。

这些模块的使用方法都可以通过 ansible-doc 查看文档,找例子修改一下就可以使用。

二、使用jinja2文件部署自定义文件

Ansible 将 jinja2 模板系统用于模板文件。Ansible 还使用 jinja2 语法来引用 playbook 中的变量。

  • 使用 {% EXPR %} 表达式反映循环或判断
  • 使用 {{ }} 反映变量的替换
  • 使用 {# COMMENT #} 语法括起不应出现在最终文件中的注释

jinja2 模板通过 template 模块部署到受管主机上,用法类似于 copy,但是生成文件的内容就很牛逼了。

注意:可以在 Ansible 模板中使用 jinja2 循环和条件,但不能在 Ansible Playbook 中使用。

.j2 模板编写举例,结合 hostvars、groups、ansible_facts 等来编写 jinja2 模板,并用 plabook 生成 /etc/myhosts 文件。

我们把 dev 组上的 /etc/hosts 文件获取到本地,命名为 hosts.j2。

[student@workstation ansible]$ ansible dev -m fetch -a "src=/etc/hosts dest=./hosts.j2 flat=yes"
[student@workstation ansible]$ cat hosts.j2 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

编辑 hosts.j2。用魔法变量 groups.all 遍历所有主机。用魔法变量 hostvars 获取所有主机的 ansible_facts ,从而取得他们的IP地址、FQDN 和 hostname。

[student@workstation ansible]$ vim hosts.j2 

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

{% for host in groups.all %}
{{ hostvars[host].ansible_facts.default_ipv4.address }} {{ hostvars[host].ansible_facts.fqdn }} {{ hostvars[host].ansible_facts.hostname }}
{% endfor %}

编写 hosts.yml 对所有主机生成 /tmp/hosts 文件,里面应当包含所有主机的IP地址、FQDN 和 hostname。

[student@workstation ansible]$ vim hosts.yml

---
- hosts: all
  tasks:
    - name: Create /tmp/hosts
      template:
        src: hosts.j2
        dest: /tmp/hosts

执行并验证。

[student@workstation ansible]$ ansible-playbook hosts.yml --syntax-check
[student@workstation ansible]$ ansible-playbook hosts.yml --check
[student@workstation ansible]$ ansible-playbook hosts.yml
[student@workstation ansible]$ ansible all -a "cat /tmp/hosts"

serverb.lab.example.com | CHANGED | rc=0 >>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.27.133 servera.lab.example.com servera
192.168.27.134 serverb.lab.example.com serverb
192.168.27.135 serverc.lab.example.com serverc
192.168.27.136 serverd.lab.example.com serverd

serverc.lab.example.com | CHANGED | rc=0 >>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.27.133 servera.lab.example.com servera
192.168.27.134 serverb.lab.example.com serverb
192.168.27.135 serverc.lab.example.com serverc
192.168.27.136 serverd.lab.example.com serverd

......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据引用中的信息,运行命令`ansible --version`可以查看Ansible的版本信息。在引用中提供的示例输出中,可见Ansible的版本为[core 2.12.4],配置文件路径为`/private/etc/ansible/ansible.cfg`,配置的模块搜索路径为`['/Users/tangliqi/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']`,Ansible的Python模块位置为`/Users/tangliqi/opt/anaconda3/lib/python3.8/site-packages/ansible`,Ansible的集合位置为`/Users/tangliqi/.ansible/collections:/usr/share/ansible/collections`,可执行文件位置为`/Users/tangliqi/opt/anaconda3/bin/ansible`,Python版本为3.8.8,Jinja版本为2.11.3,并且已安装libyaml库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [认识Ansible](https://blog.csdn.net/tlqwanttolearnit/article/details/123980225)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Ansible的安装部署](https://blog.csdn.net/oyan110/article/details/122276302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦行僧(csdn)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值