首页 > 其他分享 >ansible剧本进阶

ansible剧本进阶

时间:2024-04-26 22:44:48浏览次数:24  
标签:进阶 create ansible nfs user 剧本 backup name

ansible剧本进阶

一.剧本的高级特性

  • 剧本高级特性是完全遵循python的循环结构来的
  • 编程语言特有的逻辑控制语句
  • 变量
  • 循环
  • 等等

你的剧本,可以考虑用高级特性,也可以不用

高级特性是为了简化剧本

比如,创建10个系统的用户

不用循环
手写
ansible bakcup -m user  -a "name=cc01"
ansible bakcup -m user  -a "name=cc02"
ansible bakcup -m user  -a "name=cc03"
ansible bakcup -m user  -a "name=cc04"

写在剧本中,ad-hoc命令转为剧本模式,转变为了剧本的四个tasks任务元素
- hosts: backup
  tasks:
    - name:  01 创建用户
      user:  "创建用户的参数"
      
    - name:  02 创建用户
      user:  "创建用户的参数"
      
    - name:  03 创建用户
      user:  "创建用户的参数"
      
    - name:  04 启动nginx
      systemd:  "启动服务的参数"  
    
    - name:  04 启动nginx
      systemd:  "启动服务的参数"  
      
      
这个写法太繁琐,可以优化
loop循环特性
直接用这种普通办法,也没毛病 



关于剧本中模块的参数写法

有两个风格

风格1:是最正确的字典写法,参数,以字典形式去表示

---
- name: create user test1~5
  hosts: nfs
  tasks:
    - name: create test1
      user: 
        name: test1
        state: present
        
        
               
风格2:简写,这个写法不属于yaml的语法,只是ansible剧本认识.
这叫做一个 缩写写法,简写写法
因为在剧本中,有单独的 关键字vars定义剧本变量

---
- name: create user test1~5
  hosts: nfs
  tasks:
    - name: create test1
      user: "name=test1  state=present"  
      
      
      
      


#剧本注释
---
- name: create user test1~5    # Play的描述,说明此play的目的为创建用户test1至test5
  hosts: nfs                    # 指定此play将被执行的主机或主机组,这里是nfs组内的所有主机

  tasks:                        # 开始定义任务列表
    - name: create test1       # 任务的描述,简要说明此任务的目的,即创建用户test1
      user:                     # 使用user模块来管理用户账户
        name: test1             # user模块的参数,指定要创建的用户名为test1
        state: present          # user模块的另一个参数,指明用户账户的状态应为"存在"(present)
                                 # 这意味着如果用户test1尚不存在,Ansible将创建它;
                                 # 如果用户已存在,则该任务不会对现有用户做出改动,因为用户已经满足"存在"的状态要求。
                                 
      

二.循环

务必记住,对比理解
ad-hoc命令模式
转化为
yaml剧本模式

最新用法,循环的内置关键字是用loop定义循环变量
item关键字,去提取loop每次循环出来的值
简单理解为shell的for循环就行   

不用循环,去批量的创建,删除用户

[root@master-61 ~/my_scripts]#cat create_user.yml 
- name: create user test1~5
  hosts: backup
  tasks:
    - name: create test1
      user: 
        name: test1
        state: present
    - name: create test2
      user: 
        name: test2
        state: present
    - name: create test3
      user: 
        name: test3
        state: present
    - name: create tes4
      user: 
        name: test4
        state: present
    - name: create test5
      user: 
        name: test5 
        state: present

[root@master-61 ~/my_scripts]#sed -i  's#present#absent#g'  create_user.yml   







关于loop循环参数的语法

ansible剧本进阶_ansible

创建多个系统用户

ansible剧本进阶_ansible_02

[root@master-61 ~/my_scripts]#cat create_user.yml 
---
- name: create test1~5
  hosts: backup
  tasks:
    - name: create test1~5
      user:
        name: "{{ item }}"
        state: present
      loop:
        - test1
        - test2
        - test3
        - test4
        - test5
    - name: set password
      shell: echo 'yuchao666' |passwd --stdin "{{item}}"
      loop:
        - test1
        - test2
        - test3
        - test4
        - test5      
        
        
      结果:
      [root@ansible-1 backup]# tail -5 /etc/passwd
test1:x:1005:1006::/home/test1:/bin/bash
test2:x:1006:1007::/home/test2:/bin/bash
test3:x:1007:1008::/home/test3:/bin/bash
test4:x:1008:1009::/home/test4:/bin/bash
test5:x:1009:1010::/home/test5:/bin/bash


        

ansible剧本进阶_ansible_03

删除多个用户

[root@master-61 ~/my_scripts]#cat delete_user.yml 
---
- name: delete test1~5
  hosts: backup
  tasks:
    - name: delete user01
      user:
        name: "{{ item }}"
        state: absent
      loop:
        - test1
        - test2
        - test3
        - test4
        - test5    
        
   结果:
   [root@ansible-1 backup]# tail -5 /etc/passwd
test1:x:1005:1006::/home/test1:/bin/bash
test2:x:1006:1007::/home/test2:/bin/bash
test3:x:1007:1008::/home/test3:/bin/bash
test4:x:1008:1009::/home/test4:/bin/bash
test5:x:1009:1010::/home/test5:/bin/bash
[root@ansible-1 backup]# tail -5 /etc/passwd
rsync:x:998:1001::/home/rsync:/bin/bash
cc01:x:1001:1002::/home/cc01:/bin/bash
cc02:x:1002:1003::/home/cc02:/bin/bash
cc03:x:1003:1004::/home/cc03:/bin/bash
cc04:x:1004:1005::/home/cc04:/bin/bash


        
        

三.vars关键字定义循环变量

上面会发现已然有重复的变量,还可以再简化

  • 通过vars关键字定义用户列表,变量一般定义在任务开始之前
  • 通过item关键字提取loop中每次循环的数据

ansible剧本进阶_ansible_04

循环创建用户且设置密码,通过vars关键字,定义好用户列表变量user_list

然后通过loop去循环变量

通过item去提取每次循环的值

这是在通过loop提取列表的值

loop还可以循环字典的值

ansible剧本进阶_ansible_05

ansible剧本进阶_ansible_06

---
- name: create user
  hosts: backup
  vars:
     users_list:
      - test1
      - test2
      - test3
  tasks:
    - name: create user
      user:
        name: "{{ item }}"
        state: present
      loop: "{{ users_list }}"

    - name: set password
      shell: echo 'yuchao666' | passwd --stdin "{{ item }}"
      loop: "{{ users_list }}"   
      
      
      
  
  效果:
  [root@ansible-1 backup]# tail -5 /etc/passwd
cc03:x:1003:1004::/home/cc03:/bin/bash
cc04:x:1004:1005::/home/cc04:/bin/bash
test1:x:1005:1006::/home/test1:/bin/bash
test2:x:1006:1007::/home/test2:/bin/bash
test3:x:1007:1008::/home/test3:/bin/bash
[root@ansible-1 backup]# su test1
[test1@backup backup]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:5a:5f:57 brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.189/24 brd 10.0.1.255 scope global noprefixroute dynamic eth0
       valid_lft 1485sec preferred_lft 1485sec
    inet6 fe80::def:df2b:b8be:8dab/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[test1@backup backup]$ exit
exit


      

loop结合vars循环提取字典的值

循环创建用户,且设置用户uid

结合变量,循环,字典数据,创建用户信息

---
- name: create user
  hosts: backup
  vars:
    users_info:
      - {user: 't1', uid: '2000'}
      - {user: 't2', uid: '2001'}
      - {user: 't3', uid: '2002'}
      - {user: 't4', uid: '2003'}

  tasks: 
  - name: create user and uid
    user:
        name: "{{ item.user }}"
        uid: "{{ item.uid }}"

    loop:
      "{{users_info}}"            
      
      
      
      效果:
      [root@ansible-1 script]# ansible-playbook create_user_id.yaml 

PLAY [create user] ****************************************************************************************

TASK [Gathering Facts] ************************************************************************************
ok: [10.0.1.189]

TASK [create user and uid] ********************************************************************************
changed: [10.0.1.189] => (item={u'user': u't1', u'uid': u'2000'})
changed: [10.0.1.189] => (item={u'user': u't2', u'uid': u'2001'})
changed: [10.0.1.189] => (item={u'user': u't3', u'uid': u'2002'})
changed: [10.0.1.189] => (item={u'user': u't4', u'uid': u'2003'})

PLAY RECAP ************************************************************************************************
10.0.1.189                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   



      

ansible剧本进阶_ansible_07

ansible剧本进阶_ansible_08

循环
1.  loop关键字用于对某变量进行循环提取值
2.  item去取值
3. "{{ item }}"

变量两个用法       

例如rsync创建备份文件夹

比如部署nfs、rsync、nginx的综合剧本;
1.要安装多个软件  nfs-utils   rpcbind  nginx  wget  net-tools vim 
(定义为列表,循环去提取列表中的值,)
loop循环的知识用在 yum安装多个软件

2.创建多个目录rsynd.conf设置了多个备份目录,
ad-hoc临时命令模式
file 创建文件夹
file 创建文件夹
file 创建文件夹

loop循环的知识用在 file创建多个文件

3.复制多个目录
loop循环的知识用在 copy拷贝多个文件

4.每个文件的权限都不一样               

繁琐的写法

- hosts: backup
  tasks:
  - name: 01安装rsync
    yum: 
      name: rsync
      state: installed
  - name: 02 发送配置文件模板
    copy:
      src: /script/rsyncd.conf
      dest: /etc/rsyncd.conf
  - name: 02 发送密码文件
    copy:
      src: /script/rsync.passwd
      dest: /etc/rsync.passwd
      mode: '600'

  - name: 03 创建www用户组
    group:
      name: www
      gid: 1000
  - name: 04 创建www用户
    user:
      name: www
      uid: 1000
      group: www
      create_home: no
      shell: /sbin/nologin
  - name: 05 备份目录创建与授权/data
    file:
      path: /data
      state: directory
      owner: www
      group: www
      mode: '755'
  - name: 06 备份目录创建与授权/backup
    file:
      path: /backup
      state: directory
      owner: www
      group: www
      mode: '755'
  - name: 07 启动服务
    systemd:
      name: rsyncd
      state: started
      enabled: yes        

循环优化写法(利用loop循环的知识点,简化一些操作)

前提条件是,原本的动作是重复的,不是重复,就没办法

如下yaml

- name: yuchaoit.cn
  hosts: backup
  tasks:
  - name: create_data
    file:
      path: "{{ item.file_path }}"
      state: directory
      owner: www
      group: www
      mode: "{{ item.mode }}"
    loop:
      - { file_path:'/data' ,mode:'755' }
      - { file_path:'/backup' ,mode:'755' }  
      
      
      
      

ansible剧本进阶_ansible_09

四.变量定义

vars自定义变量

ansible剧本进阶_ansible_10

- hosts: backup
  vars:
    data_path: /data
    dest_path: /etc
    config_path: /etc/rsync.passwd
  tasks:
    - name: 01 mkdir data dir
      file:
        path: "{{ data_path }}" 
        state: directory

    - name: 02 copy  config file
      copy:
        src: "{{ config_path }}"
        dest: "{{ dest_path }}"    
        
        
        
        

ansible内置变量

ansible剧本进阶_ansible_11

ansible默认提供了一个模块,setup模块,

master-61在通过ssh远程连接,操作目标机器的时候
ansible会默认收集这个机器的所有信息,放入到一个setup模块中
这个机器的 主机名,ip地址,mac地址,磁盘数量,是否是虚拟化,cpu核数
所有的这些静态数据

ansible backup -m setup
这个模块会默认采集目标机器的所有静态信息 

1. ansible提供了大量的内置变量,去获取机器的属性
(setup模块去采集客户端机器的属性,然后放入到了json数据中,存储为键值对形式,ansible默认输出的结果不是json格式)

1.1 当然了,ansible默认输出的格式不是json,如果你想提取主机的数据,得额外的学习filter过滤语法,这个内容就太多了,这里咱们先不学
简单看一下是如何使用这些内置变量即可
语法如下
[root@master-61 ~]#cat get_ip.yaml 
- hosts: backup
  tasks:
  - name: 01 get ip address
    debug: msg="该web组机器,ip是  {{ ansible_all_ipv4_addresses }}" 
  - name: 02 get hostname
    debug: msg="该web组,主机名是 {{ ansible_hostname }}"
  - name: 03 单ip
    debug: msg="{{ansible_default_ipv4.address }}"
  - name: 04 eth0 ip地址是
    debug: msg="{{ansible_facts.eth0.ipv4.address}}"
  - name: 05 eth1 ip地址是
    debug: msg="{{ansible_facts.eth1.ipv4.address}}"
   
2. 修改ansible的配置文件,让命令输出的结果改为json

3. 后续的通过jq命令方便的提取数据

4.简单的构造了,模拟setup输出的数据,然后我可以根据key,提取value        
{
    "ansible_facts":{
        "ansible_all_ipv4_addresses":[
            "10.0.0.41",
            "172.16.1.41",
            "192.168.1.41"
        ]
    }
}   

主机清单文件的变量

cat /etc/ansible/hosts 

[web:vars]
ansible_port=22
ansible_password='123456'

[web]
192.168.106.[7:9]

[nfs]
192.168.106.31

[backup]
192.168.106.41  ansible_port=22  ansible_password='123456'          

loop循环使用变量

[root@master-61 ~/my_scripts]#cat loop_install_rsync.yaml 
- name: yuchaoit.cn
  hosts: backup
  vars:
    my_files:
      - { file_path: '/data' ,mode: '755' }
      - { file_path: '/backup' ,mode: '755' }

  tasks:
  - name: create_data
    file:
      path: "{{ item.file_path }}"
      state: directory
      owner: www
      group: www
      mode: "{{ item.mode }}"
    loop:
      "{{ my_files }}"              
关于ansible变量的知识
1. vars定义自定义变量,可以在剧本中使用 ,结合loop循环提取
2. 学了ansible的内置变量,setup模块采集的静态属性,可以通过过滤器语法提取,也可以转为json输出格式,用jq命令提取
3. 主机清单中的变量  /etc/ansible/hosts
4. 注册变量       

register注册变量

ansible剧本进阶_ansible_12

官网文档
讲解了 register模块的用法
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#registering-variables

关于命令执行结果的返回值信息提取
关于ansible中的返回值提供了哪些参数
比如解释了 msg: "{{ about_ip_log.stdout_lines }}" 这个stdout_lines提取返回值的结果的用法
https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html   

获取内置变量的信息,写入到文件,然后读取该文件

- hosts: backup
  tasks:
  - name: echo ip address
    shell: "echo {{ ansible_default_ipv4.address }} >> /tmp/ip.log"

  - name: cat ip.log
    shell: "cat /tmp/ip.log"
    register: about_ip_log

  - name: debug about_ip_log
    debug: 
      msg: "{{ about_ip_log.stdout_lines }}"          
1. 执行了个命令,默认有返回值
2. 通过register提取该返回值,写入到变量
3. 通过debug模块,msg参数 ,打印了这个变量的信息


ansible剧本进阶_ansible_13

注册多个变量

执行多个命令,并且注册多个变量,提取多个返回值

ansible剧本进阶_ansible_14

ansible剧本进阶_ansible_15

实践得出真知

[root@master-61 ~/my_scripts]#cat test2_register.yml 
- name: yuchaoit.cn
  hosts: backup
  tasks:
  - name: 01 get ip
    shell: "echo {{ ansible_default_ipv4.address }} > /tmp/ip.log"

  - name: 02 get hostname
    shell: "echo {{ ansible_hostname }} > /tmp/hostname.log"

  - name: 03 echo hostname
    shell: "cat /tmp/hostname.log"
    register: hostname_log

  - name: 04 echo ip
    shell: "cat /tmp/ip.log"
    register: ip_log

  - name: 05 show mount info
    shell: "showmount -e 172.16.1.41"
    register: showmount_log

  - debug:
      msg: "{{item}}"

    loop:
      - "{{ showmount_log.stdout_lines}}"
      - "{{ ip_log.stdout_lines}}"
      - "{{ hostname_log.stdout_lines}}" 
- name: yuchaoit.cn
  hosts: backup
  tasks:
  - name: 01 get ip
    shell: "echo {{ ansible_default_ipv4.address }} > /tmp/ip.log"

  - name: 02 get hostname
    shell: "echo {{ ansible_hostname }} > /tmp/hostname.log"

  - name: 03 echo hostname
    shell: "cat /tmp/hostname.log"
    register: hostname_log

  - name: 04 echo ip
    shell: "cat /tmp/ip.log"
    register: ip_log

  - name: 05 show mount info
    shell: "showmount -e 172.16.1.31"
    register: showmount_log

  - debug:
      msg: "{{item}}"

    loop:
      - "{{ showmount_log.stdout_lines}}"
      - "{{ ip_log.stdout_lines}}"
      - "{{ hostname_log.stdout_lines}}"             

下一个知识点

register注册变量
1. 获取命令的执行结果(返回值)
2. 这个返回值被注册为变量之后,可以交给后续的任务去使用
3. 这个注册变量(命令的返回值),还提供了很多的功能去使用
3.1 获取返回值的文本信息
my_log.stdout_lines

写一个示例
copy:  src='xxx'   dest='/etc/rsyncd.conf'
shell:  "cat  /etc/rsyncd.conf" 
register: my_config

my_config.changed   # 判断这个返回值,如果有更改,说明

4.想知道关于注册变量的返回值,可以用哪些方法,看这个官网即可
https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html
关于命令的返回结果,可以使用的所有方法               

ansible剧本进阶_ansible_16

判断当配置文件变化后,就重启服务(register+when).

yaml作用是判断配置文件变化后,就重启服务

以前写的剧本
都是固定的,定义tasks任务列表
1. 修改配置文件(判断配置文件是否变化)
2. 重启服务(只有配置文件变化,才有必要重启服务,否则是没变要)
register和when都是针对tasks任务列表下,某一个任务设置的
- name:  01  修改配置文件
  register

- name: 02 重启服务

作用分别是
1.获取某任务的命令执行结果(返回值) register
 
2.利用when条件判断,针对返回值的不同状态(决定做什么事) ,ansible进阶篇,都是在大量使用编程语言的特性,以及语法了   

我们重启配置服务的标准是,修改了配置文件,否则无须重启

例如,判断rsyncd.conf文件状态发生变化后,就重启服务。

- name: yuchaoit.cn
  hosts: backup
  tasks:
  - name: 01 copy rsyncd.conf
    copy: src=/script/rsyncd.conf dest=/etc/
    register: conf_status

  - name: 02 start rsyncd.service
    systemd: name=rsyncd state=started enabled=yes

  - name: 03 restart rsyncd.service
    systemd:
      name: rsyncd
      state: restarted
    when: conf_status.changed        

ansible剧本进阶_ansible_17

ansible剧本进阶_ansible_18

ansible剧本进阶_ansible_19

关于注册变量,以及注册变量.changed属性
结合when的一个实际应用成精1.2.

when条件语句

官网文档 https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html

当nfs配置文件存在,就显示其内容

ansible剧本进阶_ansible_20

- name: yuchaoit.cn
  hosts: backup
  vars:
    nfs_file: /etc/exports
  tasks:
  - name: 01 check nfs config
    shell: "cat {{nfs_file}}"
    register: nfs_result
    ignore_errors: true

  - name: 02 debug nfs config
    debug:
      msg: "{{ansible_hostname}} has {{nfs_file}},file content is : {{nfs_result.stdout}}"
    when: nfs_result is success

  - name: 03 debug nfs not exists
    debug: msg="{{nfs_file}} is not exists."
    when: nfs_result is failed              
1.剧本提供的handler特性,是专门用于实现,任务触发的模块,机制 
- 当你改了配置文件,是必须得重启服务
- /etc/exports             systemctl restart nfs
- /etc/nginx/nginx.conf    systemctl restart nginx

文件变化,则重启
文化不变化,则无序重启

利用了register+when 这俩结合,实现了 判断文件变化,才重启程序
2.其实ansible还提供了更专业的 handler机制

官网文档
https://docs.ansible.com/ansible/latest/user_guide/playbooks_handlers.html          

handler特性

有任务1,发生变化后 必须要执行任务2
使用handler特性

ansible剧本进阶_ansible_21

[root@master-61 ~]#cat restart_rsync.yaml 
- name: yuchaoit.cn
  hosts: backup
  remote_user: root
  tasks:
  - name: copy rsyncd.conf
    copy:
      src=/script/rsyncd.conf
      dest=/etc/
  - name: restart rsyncd.service
    systemd:
      name=rsyncd
      state=restarted          

当配置文件变化,就重启rsync

handler+ notify 这两个关键字,来组合定义一个

任务1,一旦发生变化
触发任务2的必然执行

具体的yaml

解读handler和notify的机制

ansible剧本进阶_ansible_22

解释
  handlers:
  - name: restart rsyncd.service
    systemd:
      name: rsyncd
      state: restarted
  - name: restart nginx
    systemd:
      name: nginx
      state: restarted
            
1. handler关键字必须写在剧本结尾
2. handler是定义事件列表,可以定义多个要执行的事件,给每一个事件起好名字

如何调用这个事件,通过notify关键字。notify是写在tasks任务列表里的
(当某一个任务,的确执行了,发生了change更改状态,就会触发notify的执行,执行notify指定的名称的 handler事件)

- name: yuchaoit.cn
  hosts: backup
  remote_user: root
  tasks:
  - name: 01 copy rsyncd.conf
    copy:
      src=/script/rsyncd.conf
      dest=/etc/
    notify:
      - restart rsyncd.service
      - restart nginx             
- name: yuchaoit.cn
  hosts: backup
  remote_user: root
  tasks:
  - name: 01 copy rsyncd.conf
    copy:
      src=/script/rsyncd.conf
      dest=/etc/
    notify:
      - restart rsyncd.service

  handlers:
  - name: restart rsyncd.service
    systemd:
      name: rsyncd
      state: restarted       

ansible剧本进阶_ansible_23

tag标签

给部署nfs-server的任务添加标签

- name: yuchaoit.cn
  hosts: nfs
  tasks:
  - name: 01 安装nfs-utils 服务
    yum: name=nfs-utils state=installed
    tags: 01_install_nfs_service

  - name: 02 安装rpcbind 服务
    yum: name=rpcbind state=installed
    tags: 02_install_rpcbind_service

  - name: 03 创建组
    group: name=www gid=666
    tags: 03_add_group

  - name: 04 创建用户
    user: name=www uid=666 group=www create_home=no shell=/sbin/nologin
    tags: 04_add_user

  - name: 05 创建共享目录
    file: path=/data owner=www group=www state=directory
    tags: 05_create_data_dir

  - name: 06 拷贝配置文件
    copy: src=/script/exports dest=/etc/exports
    tags: 06_copy_nfs_exports

  - name: 07 创建关于rsync密码文件
    copy: content='yuchao666' dest=/etc/rsync.passwd mode=600
    tags: 07_create_rsync_passwd

  - name: 08 启动rpcbind
    service: name=rpcbind state=started enabled=yes
    tags: 08_start_rpcbind

  - name:  09 启动nfs
    systemd: name=nfs state=started enabled=yes
    tags: 09_start_nfs               
    
    

列出查看当前剧本有没有标签可用

ansible剧本进阶_ansible_24

[root@master-61 ~/my_scripts]#ansible-playbook --list-tags install_nfs.yaml 

playbook: install_nfs.yaml

  play #1 (nfs): yuchaoit.cn    TAGS: []
      TASK TAGS: [01_install_nfs_service, 02_install_rpcbind_service, 03_add_group, 04_add_user, 05_create_data_dir, 06_copy_nfs_exports, 07_create_rsync_passwd, 08_start_rpcbind, 09_start_nfs]       

选择运行某个标签

[root@master-61 ~/my_scripts]#ansible-playbook -t 01_install_nfs_service    install_nfs.yaml 

PLAY [yuchaoit.cn] ****************************************************************************************

TASK [Gathering Facts] ************************************************************************************
ok: [172.16.1.41]

TASK [01 安装nfs-utils 服务] **********************************************************************************
changed: [172.16.1.41]

PLAY RECAP ************************************************************************************************
172.16.1.41                : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
          

跳过某些个标签

跳过,5 6 7 标签指定的任务了,执行了

1 2 3 4 8 9

[root@master-61 ~/my_scripts]#ansible-playbook --skip-tags  05_create_data_dir,06_copy_nfs_exports,07_create_rsync_passwd    install_nfs.yaml 

选择tasks执行

1.列出当前剧本有多少个任务(查看任务列表)

复制

--list-tasks          list all tasks that would be executed
查看有多少个任务需要执行,以及该任务是否有tag标签

[root@master-61 ~/my_scripts]#ansible-playbook --list-tasks  install_nfs.yaml 

playbook: install_nfs.yaml

  play #1 (backup): yuchaoit.cn TAGS: []
    tasks:
      01 安装nfs-utils 服务 TAGS: [01_install_nfs_service]
      02 安装rpcbind 服务   TAGS: [02_install_rpcbind_service]
      03 创建组    TAGS: [03_add_group]
      04 创建用户   TAGS: [04_add_user]
      05 创建共享目录 TAGS: [05_create_data_dir]
      06 拷贝配置文件 TAGS: [06_copy_nfs_exports]
      07 创建关于rsync密码文件  TAGS: [07_create_rsync_passwd]
      08 启动rpcbind  TAGS: [08_start_rpcbind]
      09 启动nfs  TAGS: [09_start_nfs]              

2.指定从哪个tasks开始运行

--start-at-task START_AT_TASK

ansible-playbook --start-at-task  "07 创建关于rsync密码文件"  install_nfs.yaml

标签:进阶,create,ansible,nfs,user,剧本,backup,name
From: https://www.cnblogs.com/nwq1101/p/18161007

相关文章

  • 使用ansible-playbook自动化安装Oracle DG数据库19c
    【用剧本安装OracleDG数据库】源库是RAC,安装的话可以参考之前内容,目标库DG是单机文件系统说明:源库是RAC架构,DG是单机文件系统架构,管理使用dgbroker管理(这里使用命令行操作),安装单机数据库然后使用createDuplicateDB方式创建DG库,由于剧本脚本较多,可以留言发送脚本所有剧本目录信......
  • Redis进阶 -
    之前已经总结了Redis的基础使用  springboot3+vue3(八)Redis基础使用--登录优化Redis进阶主要总结一下以下知识点:Redis持久化Redis主从Redis哨兵Redis分片集群 Redis单节点问题,以及解决方案:1、数据丢失问题(Redis是内存存储,服务器重启可能会丢失数据。)-----解决......
  • SpringCloud(十一)ES 进阶 -- ES集群
    单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题。解决方案:海量数据存储问题:将索引库从逻辑上拆分为N个分片,存储到多个节点。单点故障问题:将分片数据在不同节点备份。(这样有一个点挂掉,还能保证数据是完整的,如图:比如说node1挂掉了,node1的主数据sh......
  • ansible相比shell脚本自动化有什么优势
    Ansible自动化与Shell脚本自动化相比,具有以下几个显著的优势:轻量级与无需代理:Ansible的一个关键优势在于其轻量级和无需在被控制服务器上安装任何代理或客户端的特点。这极大地简化了部署和维护的流程,降低了复杂性和出错的可能性。而Shell脚本通常需要在每台服务器上单独执行,这......
  • C进阶总结一 -- <<C语言深度解剖>>
    C进阶总结--<<C语言深度解剖>>程序的本质:二进制文件运行程序,即将程序中的数据加载到内存中运行为什么要加载到内存?1.冯诺依曼体系决定2.快变量1.变量:内存上的某个位置开辟的空间因为变量都是程序运行起来才开辟的2.变量的初始化:变量的空间被开辟后,就应当具......
  • ansible 安装以及简单使用
    自动化运维工具-ansible1.ansible的安装我选择的是rpm包安装下载地址:链接:https://pan.baidu.com/s/1dqm_QDGjd9oSNS5qEZzD5Q?pwd=34s5提取码:34s5 下载之后直接rpm-ivh sshpass-1.06-2.el7.x86_64.rpmrpm-ivh ansible-2.9.5-1.el7.ans.noarch.rpm2.ansible配置修改......
  • ansible 删除密码过期账户
    hosts[centos-root]192.168.174.129ansible_ssh_port=22192.168.174.130ansible_ssh_port=22192.168.174.131ansible_ssh_port=22AnsibleVault文件创建AnsibleVault文件#ansible-vaultcreatepasswords.ymlNewVaultpassword:#12345......
  • SpringCloud(十)ES 进阶 -- 数据同步
    Demo案例,两个微服务项目,一个操作MySql,一个操作EShotel-admin:酒店管理微服务demo,实现对酒店信息的增、删、改(操作MySql)hotel-demo:ESdemo,实现了对索引库、文档的操作,以及高亮显示、搜索自动补全功能(操作ES)Demo源码下载地址(两个微服务在一起):链接:https://pan.baidu.com/s/1nPTCnL......
  • 在Linux中,如何使用Jenkins和Ansible进行虚拟化环境的自动化和持续集成/持续部署(CI/CD)?
    在Linux中,使用Jenkins和Ansible进行虚拟化环境的自动化和持续集成/持续部署(CI/CD)是一个强大的组合,可以大大提高开发和部署的效率。下面将详细阐述如何配置和使用这两个工具来实现这一目标。1.Jenkins配置安装Jenkins你可以从Jenkins官网下载最新的安装包,或者使用包管理器(如a......
  • 《算法竞赛进阶指南》 第六章 291. 蒙德里安的梦想 状态压缩DP
    https://www.acwing.com/problem/content/293/求把N×M的棋盘分割成若干个1×2的长方形,有多少种方案。例如当N=2,M=4时,共有5种方案。当N=2,M=3时,共有3种方案。如下图所示:输入格式输入包含多组测试用例。每组测试用例占一行,包含两个整数N和M。当输入用例N=0......