Ansible第四天
本文最后更新于 253 天前,其中的信息可能已经有所发展或是发生改变。

1. 在playbook中实现以下目标

1. 从主控节点复制一个文件到其他机器。

这里可以使用copy模块实现。

  • copy模块的效果字如其名,就是把主控节点的东西复制到被控节点下。
  • 把被控节点的东西拉取到主控,可以看第三点的fetch模块。

假设我们要把主控模块的/opt/AAA.txt复制到其他机器的/opt下,则:

- name : copy file
hosts: all
tasks:
- name : config copy
    copy :
  src: /opt/AAA.txt
  dest: /opt/

2. 更新被控节点的系统。

如果要更新被控节点系统,则使用apt模块即可。(适用于ubuntu、debian系统)

  • yum模块则是在centos,红帽使用
    • 它的主要作用都是管理,安装,卸载,更新安装包。
    • 在进行这些操作时最好使用become:yes这个参数提高权限至root。
- name:update
hosts:all
become:yes #安装软件包需要系统管理权限
tasks:
- name: update package #更新
apt:
update_cache: yes
- name: upgrade package #相当于执行apt-get update
apt:
upgrade: yes #相当于执行aptitude safe-upgrade

3. 复制某个被控节点的文件到主控节点。

负责被控节点的文件到本地也可以理解为拉取被控节点的文件,我们使用Fetch模块来实现这个功能。

假设我们要把被控节点/etc/bbb.txt拉取到主控节点/opt/pull/下时:

- name: fetch file
host: all
tasks:
- name: just fetch
fetch:
src: /etc/bbb.txt
dest: /opt/pull/

4. 使用apt模块在被控节点上安装Nginx,并设置为开机不启动。

这里我们可以拆分为两个task来做。

  • 第一个task用apt模块安装nginx
  • 第二个则使用systemd模块来设置开机不启动。

这两个模块的功能都有点类似linux里自带的程序,systemd可以理解为用来管理进程的模块

- name: Nginx config
hosts: all
become: yes
tasks:
- name: install nginx
apt:
  name: nginx
  state: present
- name: nginx disable
systemd:
name: nginx
enabled: no
state: stopped

5. 在playbook中定义一个变量,通过变量的形式将每个机器的IP地址写入到被控机器中的/opt/ip.txt中。

变量可以使用内置的ansible_default_ipv4.address获取每个ip的地址,再用template模块进行渲染。

ansible_default_ipv4.address是什么

  • 获取到每个ip值的内置变量

template模块的作用

  • 生成配置文件或其他文本文件
  • 发送到被控节点中(指定src,dest等)

.j2是什么?

  • 一个模板文件
    • 除了变量的值因机而异外,其他的都一样。

我们把主机的j2写在/templates(一般都在这个下边)下,并传到被控的/opt下即可

- name: var into iptxt
hosts: all
become: yes
vars:
node_ip: "{{ansible_default_ipv4.address}}"
task:
- name: ip file
template:
src: templates/ip.j2
dest: /opt/ip.txt

 

6. 替换上面/opt/ip.txt的IP地址,IP地址的前两段替换为111.222。

替换的模块则可以使用replace

replace的作用:

  • 顾名思义,替换内容
  • 一般通过正则表达式或是replace参数来替换。

要将ip地址的前两段替换成111.222,则需要使用正则表达式替换。

- name: Replace IP 
hosts: all
become: yes
tasks:
  - name: Replace
    replace:
      path: /opt/ip.txt
      regexp: '(\d+\.\d+)\.\d+\.\d+'
      replace: '111.222.\\3.\\4' #替换后的结果

7. 在playbook中插入一个task,使用错误的shell命令(比如:aabb /xxx),并忽略错误让playbook可以继续执行。

忽略错误让playbook继续执行,只需要加入ignore_errors参数就可以了。

  • ignore_errors参数能够忽略错误让playbook继续执行。
- name: ignore errors
hosts: all
tasks:
  - name: echo
shell:
cmd: echo "AAA"
  - name: aaa
    shell:
    cmd: aaa?
    ignore_errors: yes
  - name: echo 2
    shell:
    cmd: echo "2"
   

2. Ansible项目相关内容

1. 为什么使用Ansible项目,而不是直接使用系统的Ansible配置。

解答这个问题,我们首先要明白Ansible项目和Ansible系统配置的区别。

1. 什么是ansible配置

在我们安装完成ansible时,系统会自动给我们生成如/ansible/ansible.cfg/ansible/inventory/ansible/hosts这类配置文件。我们称之为ansible系统配置文件。

这些配置文件通常是影响全局的,如果直接使用系统的ansible配置,后续的备份修改也麻烦,处于生产环境下就容易产生混乱,所以我们就引出了ansible项目的概念。

2. 什么是ansible项目

ansible项目其实就是把所有ansible目录放在自己指定的文件路径下的意思。

  • 本质上是一个包括所有资源的,具有结构化特点的目录结构(?)
  • 通常版本控制的(比如Git)目录结构
    • 包含了用于配置和管理一组服务器(或任何资源)所需的所有Ansible资源。

2. Ansible项目由哪些目录组成。

大概由这些核心目录构成:

  • ansible.cfg
  • README.md
  • inventory/
  • group_vars/
  • host_vars/
  • roles/
  • playbooks/

大概长这样:

3. 这些目录的作用是什么

  1. ansible.cfg
  • Ansible项目的配置文件,定义了Ansible如何运行。包括但不限于:
    • 默认的主机清单文件位置
    • 默认的远程用户
  1. README.md
  • Ansible项目的说明文档。一般是用来解释整个项目,包括但不限于:
    • 如何设置和使用这个项目。
    • 项目的作用
  1. inventory/
  • 定义Ansible要管理的主机列表。包括但不限于:
    • 定义指定主机的IP地址或域名
    • 对被控主机进行分组
  1. groupvars/(AOE?)
  • 放着按主机组定义的变量文件。(相当于局部变量存储点)
    • 文件名会对应主机组,存放自定义的变量
    • 对应组会自动应用这些变量
  1. hostvars/(单体)
  • 存放着按单个主机名定义的变量文件。
    • 优先级大于group_var,遇上时会覆盖groupvars
    • 不会影响同个组的其他主机,仅对单体有用
  1. playbooks/
  • 存放着Play文件,每一个play里边存放着roles列表
    • 是定义了达成什么目的(蓝图),实际上执行操作的地方
    • 定义了:
      • 哪些主机或主机组(通过 hosts 指定)需要执行任务。
      • 具体要执行哪些任务(通过 tasks 列表指定)。
      • 在哪些情况下执行特定操作(例如 handlers,在某个任务成功后才触发)。
      • ….
  • 它相当于我们linux的用户,当进行某一类操作时,通过调用指定的模块来完成具体的动作(?
    • 就像我们在linux上负责东西使用 cp /opt/AAA.txt /file/ 一样
      • 他也是一开始封装内置在/usr/bin下边的
    • 而在ansible,我们会在roles下边先写好这个task,等到要用的时候调用就可以了
  1. roles/
  • Roles是一个结构化的目录集合,包含用于完成特定任务(如安装Web服务器、配置数据库)所需的所有内容。不过它不是执行的地方,是被封装起来的结构。
    • 就有点像linux的命令,命令被放在usr/bin目录下,但是真正派上用场是等用户的调用操作。
      • playbook就相当于用户的角色
感谢大家参观我的毛坯房。
暂无评论

发送评�? 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇