RedHat红帽认证---RHCE

news2025/1/16 3:56:56

在这里插入图片描述

💗wei_shuo的个人主页

💫wei_shuo的学习社区

🌐Hello World !


RHCE

1.安装和配置 Ansible

    安装和配置 Ansible

    按照下方所述,在控制节点 control 上安装和配置 Ansible:

        安装所需的软件包

        创建名为 /home/greg/ansible/inventory 的静态清单文件,以满足以下要求:

            node1 是 dev 主机组的成员

            node2 是 test 主机组的成员

            node3 和 node4 是 prod 主机组的成员

            node5 是 balancers 主机组的成员

            prod 组是 webservers 主机组的成员

        创建名为 /home/greg/ansible/ansible.cfg 的配置文件,以满足以下要求:

            主机清单文件为 /home/greg/ansible/inventory

            playbook 中使用的角色的位置包括 /home/greg/ansible/roles
#1.连接至普通用户greg,控制节点control
[kiosk@foundation0 ~]$ ssh greg@control

#2.安装ansible软件包
[greg@control ~]$ sudo yum install -y ansible
[greg@control ~]$ rpm -q ansible 
ansible-2.9.15-1.el8ae.noarch

#3.创建角色路径,并进入ansible目录
[greg@control ~]$ mkdir -p /home/greg/ansible/roles
[greg@control ~]$ cd ansible/
[greg@control ansible]$ 

#4.创建名为 /home/greg/ansible/ansible.cfg 的配置文件
[greg@control ansible]$ ansible --version
  config file = /etc/ansible/ansible.cfg

[greg@control ansible]$ cp /etc/ansible/ansible.cfg .

[greg@control ansible]$ ansible --version
  config file = /home/greg/ansible/ansible.cfg
 
[greg@control ansible]$ ls
ansible.cfg  roles

#5.修改配置文件,在配置文件做免密操作
[greg@control ansible]$ vim ansible.cfg 

inventory      = /home/greg/ansible/inventory		#清单文件路径
#inventory      = /etc/ansible/hosts

/host
host_key_checking = False							#是否指纹解锁
#host_key_checking = False

/remote
remote_user = root									#远程用户身份为root
#remote_user = root

/become
[privilege_escalation]
become=True											#sudo提权
become_method=sudo
become_user=root
become_ask_pass=False

#6.编写主机清单,在主机清单做免密操作
[greg@control ansible]$ vim /home/greg/ansible/inventory

[all:vars]
ansible_password=flectrag

[dev]
node1

[test]
node2

[prod]
node3
node4

[balancers]
node5

[webservers:children]
prod

#7.进入ansible主配置文件,修改角色路径
[greg@control ansible]$ vim ansible.cfg 
roles_path    = /home/greg/ansible/roles
#roles_path    = /etc/ansible/roles

#8.检查清单是否正确
[greg@control ansible]$ ansible-inventory --graph			#查看清单树
@all:
  |--@balancers:
  |  |--node5
  |--@dev:
  |  |--node1
  |--@test:
  |  |--node2
  |--@ungrouped:
  |--@webservers:
  |  |--@prod:
  |  |  |--node3
  |  |  |--node4
  
  #9.测试免密
[greg@control ansible]$ ansible all -a "hostname"
node4 | CHANGED | rc=0 >>
node4.lab.example.com

2.创建和运行 Ansible 临时命令

    创建和运行 Ansible 临时命令

    作为系统管理员,您需要在受管节点上安装软件。

    请按照正文所述,创建一个名为 /home/greg/ansible/adhoc.sh 的 shell 脚本,该脚本将使用 Ansible 临时命令在各个受管节点上安装 yum 存储库:

    存储库1:

        存储库的名称为 EX294_BASE

        描述为 EX294 base software

        基础 URL 为 http://content/rhel8.4/x86_64/dvd/BaseOS

        GPG 签名检查为启用状态

        GPG 密钥 URL 为 http://content/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-release

        存储库为启用状态

    存储库2:

        存储库的名称为 EX294_STREAM

        描述为 EX294 stream software

        基础 URL 为 http://content/rhel8.4/x86_64/dvd/AppStream

        GPG 签名检查为启用状态

        GPG 密钥 URL 为 http://content/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-release

        存储库为启用状态
#ansible-doc查询文档
[greg@control ansible]$ ansible-doc -l | grep yum
yum                                                         
yum_repository 

[greg@control ansible]$ ansible-doc yum_repository 
/EX
gg
/gpgkey
/enabled

#2.创建shell脚本文件
[greg@control ansible]$ vim /home/greg/ansible/adhoc.sh
=========================================================================================
#!/bin/bash

ansible all -m yum_repository -a "name=EX294_BASE description='EX294 base software' baseurl=http://content/rhel8.4/x86_64/dvd/BaseOS gpgcheck=yes gpgkey=http://content/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-release enabled=yes"
ansible all -m yum_repository -a "name=EX294_STREAM description='EX294 stream software' baseurl=http://content/rhel8.4/x86_64/dvd/AppStream gpgcheck=yes gpgkey=http://content/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-release enabled=yes"
=========================================================================================

#3.shell脚本文件添加执行权限,并运行
[greg@control ansible]$ chmod +x /home/greg/ansible/adhoc.sh
[greg@control ansible]$ vim /home/greg/ansible/adhoc.sh
[greg@control ansible]$ /home/greg/ansible/adhoc.sh

#4.测试,验证
[greg@control ansible]$ ansible all -a "yum install -y ftp"
Complete!

3.安装软件包

    安装软件包

    创建一个名为 /home/greg/ansible/packages.yml 的 playbook :

        将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上

        将 RPM Development Tools 软件包组安装到 dev 主机组中的主机上

        将 dev 主机组中主机上的所有软件包更新为最新版本
#1.设置行号显示,设置Tab格式
[greg@control ansible]$ vim ~/.vimrc
set number ts=2 sw=2 et

#2.创建playbook,编写playbook
[greg@control ansible]$ ansible-doc yum
/EX

- name: ensure a list of packages installed
  yum:
    name: "{{ packages }}"
  vars:
    packages:
    - httpd
    - httpd-tools

- name: install the 'Development tools' package group
  yum:
    name: "@Development tools"
    state: present

- name: upgrade all packages
  yum:
    name: '*'
    state: latest

[greg@control ansible]$ vim /home/greg/ansible/packages.yml
=========================================================================================  1 ---
  2 - name: 安装软件包
  3   hosts: dev,test,prod
  4   tasks:
  5   - name: ensure a list of packages installed
  6     yum:
  7       name: "{{ packages }}"
  8     vars:
  9       packages:
 10       - php
 11       - mariadb
 12 
 13 - name: 安装软件包2
 14   hosts: dev
 15   tasks:
 16   - name: install the package group
 17     yum:
 18       name: "@RPM Development Tools"
 19       state: present
 20   - name: upgrade all packages
 21     yum:
 22       name: '*'
 23       state: latest
=========================================================================================

#3.playbook安装
[greg@control ansible]$ ansible-playbook packages.yml 

#4.验证
[greg@control ansible]$ ansible dev,test,prod -a "rpm -q php mariadb"
[greg@control ansible]$ ansible dev -a "yum grouplist"
[greg@control ansible]$ ansible dev -a "yum update"

4.A 使用 RHEL 系统角色(NEW)

    使用 RHEL 系统角色

    安装 RHEL 系统角色软件包,并创建符合以下条件的 playbook /home/greg/ansible/selinux.yml :

        在所有受管节点上运行

        使用 selinux 角色

        配置该角色,配置被管理节点的 selinux 为enforcing
#1.搜索软件包
[greg@control ansible]$ yum search roles
rhel-system-roles.noarch 
#2.安装角色软件包
[greg@control ansible]$ sudo yum install -y rhel-system-roles.noarch 

#3.查看角色路径,角色路径放到配置文件
[greg@control ansible]$ rpm -ql rhel-system-roles.noarch
/usr/share/ansible/roles

[greg@control ansible]$ vim ansible.cfg
 70 roles_path    = /home/greg/ansible/roles:/usr/share/ansible/roles 
 
[greg@control ansible]$ ansible-galaxy list
# /home/greg/ansible/roles
- apache, (unknown version)
# /usr/share/ansible/roles

#4.查找配置文件样例,复制样例到playbook,修改playbook
[greg@control ansible]$ rpm -ql rhel-system-roles.noarch | grep example
/usr/share/doc/rhel-system-roles/selinux/example-selinux-playbook.yml

[greg@control ansible]$ cp /usr/share/doc/rhel-system-roles/selinux/example-selinux-playbook.yml /home/greg/ansible/selinux.yml

[greg@control ansible]$ vim /home/greg/ansible/selinux.yml

#5.运行playbook
[greg@control ansible]$ ansible-playbook selinux.yml 

#6.验证
[greg@control ansible]$ ansible all -a "grep ^SELINUX /etc/selinux/config"
node4 | CHANGED | rc=0 >>
SELINUX=enforcing
SELINUXTYPE=targeted

4.B 使用 RHEL 系统角色(OLD)

    使用 RHEL 系统角色

    安装 RHEL 系统角色软件包,并创建符合以下条件的 playbook /home/greg/ansible/timesync.yml :

        在所有受管节点上运行

        使用 timesync 角色

        配置该角色,以使用当前有效的 NTP 提供商

        配置该角色,以使用时间服务器 172.25.254.254

        配置该角色,以启用 iburst 参数
#1.搜索软件包
[greg@control ansible]$ yum search roles

#2.查找配置文件样例,复制样例到playbook,修改playbook
[greg@control ansible]$ rpm -ql rhel-system-roles.noarch | grep example
/usr/share/doc/rhel-system-roles/timesync/example-timesync-playbook.yml

[greg@control ansible]$ cp /usr/share/doc/rhel-system-roles/timesync/example-timesync-playbook.yml /home/greg/ansible/timesync.yml

[greg@control ansible]$ vim /home/greg/ansible/timesync.yml

#3.运行playbook
[greg@control ansible]$ ansible-playbook timesync.yml

#4.验证
[greg@control ansible]$ ansible all -m shell -a "timedatectl"
[greg@control ansible]$ ansible all -m shell -a 'chronyc sources -v | grep classroom'
 1 ---
  2 - hosts: all
  3   vars:
  4     timesync_ntp_servers:
  5       - hostname: 172.25.254.254
  6         iburst: yes
  7   roles:
  8     - rhel-system-roles.timesync

5.使用 Ansible Galaxy 安装角色

    使用 Ansible Galaxy 安装角色

    使用 Ansible Galaxy 和要求文件 /home/greg/ansible/roles/requirements.yml 。从以下 URL 下载角色并安装到 /home/greg/ansible/roles :

        http://materials/haproxy.tar 此角色的名称应当为 balancer

        http://materials/phpinfo.tar 此角色的名称应当为 phpinfo
#1.编写playbook文件
[greg@control ansible]$ vim /home/greg/ansible/roles/requirements.yml

#2.安装角色
[greg@control ansible]$ ansible-galaxy role install -r  /home/greg/ansible/roles/requirements.yml

#3.验证
[greg@control ansible]$ ansible-galaxy list
# /home/greg/ansible/roles
- apache, (unknown version)
- balancer, (unknown version)
- phpinfo, (unknown version)
# /usr/share/ansible/roles
 1 ---
  2 - src: http://materials/haproxy.tar
  3   name: balancer
  4 - src: http://materials/phpinfo.tar
  5   name: phpinfo

6.创建和使用角色

    创建和使用角色

    根据下列要求,在 /home/greg/ansible/roles 中创建名为 apache 的角色:

        httpd 软件包已安装,设为在系统启动时启用并启动

        防火墙已启用并正在运行,并使用允许访问 Web 服务器的规则

        模板文件 index.html.j2 已存在,用于创建具有以下输出的文件 /var/www/html/index.html :

        1	Welcome to HOSTNAME on IPADDRESS

        其中,HOSTNAME 是受管节点的完全限定域名,IPADDRESS 则是受管节点的 IP 地址。

    创建一个名为 /home/greg/ansible/apache.yml 的 playbook:

        该 play 在 webservers 主机组中的主机上运行并将使用 apache 角色
[greg@control ansible]$ ansible-doc service
/EX
- name: Start service httpd, if not started
  service:
    name: httpd
    state: started

[greg@control ansible]$ ansible-doc firewalld
/EX		/imm #立即生效
- firewalld:
    service: https
    permanent: yes
    state: enabled

[greg@control ansible]$ ansible-doc template
/EX
- name: Template a file to /etc/files.conf
  template:
    src: /mytemplates/foo.j2
    dest: /etc/file.conf
    owner: bin
    group: wheel
    mode: '0644'
    
[greg@control ansible]$ ansible dev -m setup -a "filter=*name*"
[greg@control ansible]$ ansible dev -m setup -a "filter=*ipv4*"
#1.进入角色路径,创建名为 apache 的角色
[greg@control ansible]$ cd roles/
[greg@control roles]$ ansible-galaxy init apache
- Role apache was created successfully

[greg@control roles]$ tree apache/
apache/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml
    
#2.编写任务tasks文件
[greg@control roles]$ vim apache/tasks/main.yml

#3.编写模板文件
[greg@control roles]$ vim apache/templates/index.html.j2
Welcome to {{ ansible_nodename }} on {{ ansible_default_ipv4.address }}

#4.编写playbook文件
[greg@control roles]$ vim /home/greg/ansible/apache.yml
  1 ---
  2 - name: 创建和使用角色
  3   hosts: webservers
  4   roles:
  5   - apache
  
#5.回到ansible路径,执行playbook文件
[greg@control roles]$ cd ..
[greg@control ansible]$ ansible-playbook apache.yml

#6.验证
[greg@control ansible]$ ansible-inventory --graph

[greg@control ansible]$ curl node3
Welcome to node3.lab.example.com on 172.25.250.11
[greg@control ansible]$ curl node4
Welcome to node4.lab.example.com on 172.25.250.12

  1 ---
  2 # tasks file for apache
  3 - name: Start service httpd, if not started
  4   service:
  5     name: httpd
  6     state: started
  7     enabled: yes
  8 - name: Start service httpd, if not started
  9   service:
 10     name: firewalld
 11     state: started
 12     enabled: yes
 13 - firewalld:
 14     service: http
 15     permanent: yes
 16     state: enabled
 17     immediate: yes
 18 - name: Template a file to /etc/files.conf
 19   template:
 20     src: index.html.j2
 21     dest: /var/www/html/index.html

7.从 Ansible Galaxy 使用角色

    从 Ansible Galaxy 使用角色

    根据下列要求,创建一个名为 /home/greg/ansible/roles.yml 的 playbook :

        playbook 中包含一个 play, 该 play 在 balancers 主机组中的主机上运行并将使用 balancer 角色。

            此角色配置一项服务,以在 webservers 主机组中的主机之间平衡 Web 服务器请求的负载。

            浏览到 balancers 主机组中的主机(例如 http://172.25.250.13 )将生成以下输出:

            1	Welcome to node3.lab.example.com on 172.25.250.11

            重新加载浏览器将从另一 Web 服务器生成输出:

            1	Welcome to node4.lab.example.com on 172.25.250.12

        playbook 中包含一个 play, 该 play 在 webservers 主机组中的主机上运行并将使用 phpinfo 角色。

            请通过 URL /hello.php 浏览到 webservers 主机组中的主机将生成以下输出:

            1	Hello PHP World from FQDN

            其中,FQDN 是主机的完全限定名称。

            1	Hello PHP World from node3.lab.example.com

    另外还有 PHP 配置的各种详细信息,如安装的 PHP 版本等。

        同样,浏览到 http://172.25.250.12/hello.php 会生成以下输出:

        1	Hello PHP World from node4.lab.example.com

     另外还有 PHP 配置的各种详细信息,如安装的 PHP 版本等。
#1.编写playbook
[greg@control ansible]$ vim /home/greg/ansible/roles.yml

#2.执行playbook
[greg@control ansible]$ ansible-playbook /home/greg/ansible/roles.yml

#3.验证
浏览器访问http://172.25.250.13
Welcome to node4.lab.example.com on 172.25.250.11
Welcome to node4.lab.example.com on 172.25.250.12

浏览器访问http://172.25.250.13/hello.php
Hello PHP World from node4.lab.example.com 
  1 ---
  2 - name: 从 Ansible Galaxy 使用角色
  3   hosts: webservers
  4   roles:
  5   - phpinfo
  6 - name: 从 Ansible Galaxy 使用角色
  7   hosts: balancers
  8   roles:
  9   - balancer

8.A 创建和使用分区(NEW)

    创建和使用分区

    创建一个名为 /home/greg/ansible/partition.yml 的 playbook ,它将在所有受管节点上创建分区:

        在vdb创建一个1500M主分区,分区号1,并格式化ext4

            prod组将分区永久挂载到/data

        如果磁盘空间不够,

            给出提示信息Could not create partition of that size

            创建800MiB分区

        如果 vdb不存在,则给出提示信息this disk is not exist
[greg@control ansible]$ ansible-doc parted
/EX
- name: Create a new primary partition with a size of 1GiB
  parted:
    device: /dev/sdb
    number: 1
    state: present
    part_end: 1GiB

[greg@control ansible]$ ansible-doc filesystem
/EX
- name: Create a ext2 filesystem on /dev/sdb1
  filesystem:
    fstype: ext2
    dev: /dev/sdb1

[greg@control ansible]$ ansible-doc mount
/EX
- name: Mount DVD read-only
  mount:
    path: /mnt/dvd
    src: /dev/sr0
    fstype: iso9660
    opts: ro,noauto
    state: present

[greg@control ansible]$ ansible-doc debug
/EX
- debug:
    msg: System {{ inventory_hostname }} has gateway {{ ansible_default_ipv4.gatewa>
  when: ansible_default_ipv4.gateway is defined
  
[greg@control ansible]$ ansible dev -m setup -a "filter=*device*"

#1.创建playbook
[greg@control ansible]$ vim /home/greg/ansible/partition.yml


#2.执行playbook
[greg@control ansible]$ ansible-playbook partition.yml 

#3.验证
[greg@control ansible]$ ansible all -a "blkid | grep /dev/vdb1"
  1 ---
  2 - name: 创建和使用分区
  3   hosts: all
  4   tasks:
  5   - block:
  6     - name: Create a new primary partition
  7       parted:
  8         device: /dev/vdb
  9         number: 1
 10         state: present
 11         part_end: 1500MiB
 12     - name: Create a ext2 filesystem on /dev/sdb1
 13       filesystem:
 14         fstype: ext4
 15         dev: /dev/vdb1
 16     - name: Mount DVD read-only
 17       mount:
 18         path: /data
 19         src: /dev/vdb1
 20         fstype: ext4
 21         state: mounted
 22       when: inventory_hostname in groups.prod
 23     rescue:
 24     - debug:
 25         msg: Could not create partition of that size
 26     - name: Create a new primary partition
 27       parted:
 28         device: /dev/vdb
 29         number: 1
 30         state: present
 31         part_end: 800MiB
 32       when: ansible_devices.vdb is defined
 33   - debug:
 34       msg: this disk is not exist
 35     when: ansible_devices.vdb is not defined

8.B 创建和使用逻辑卷(OLD)

    创建和使用逻辑卷

    创建一个名为 /home/greg/ansible/lv.yml 的 playbook ,它将在所有受管节点上运行以执行下列任务:

        创建符合以下要求的逻辑卷:

            逻辑卷创建在 research 卷组中

            逻辑卷名称为 data

            逻辑卷大小为 1500 MiB

        使用 ext4 文件系统格式化逻辑卷

        如果无法创建请求的逻辑卷大小,应显示错误信息

        1	Could not create logical volume of that size

         ,并且应改为使用大小 800 MiB。

        如果卷组 research 不存在,应显示错误信息

        1	Volume group done not exist。

        不要以任何方式挂载逻辑卷
[greg@control ansible]$ ansible-doc lvol
/EX
- name: Create a logical volume of 512m
  lvol:
    vg: firefly
    lv: test
    size: 512

[greg@control ansible]$ ansible-doc filesystem
/EX
- name: Create a ext2 filesystem on /dev/sdb1
  filesystem:
    fstype: ext2
    dev: /dev/sdb1

[greg@control ansible]$ ansible-doc debug
/EX
- debug:
    msg: System {{ inventory_hostname }} has gatew>
  when: ansible_default_ipv4.gateway is defined

[greg@control ansible]$ ansible dev -m setup -a "filter=*lvm*"
#1.创建playbook文件
[greg@control ansible]$ vim /home/greg/ansible/lv.yml

#2.执行playbook文件
[greg@control ansible]$ ansible-playbook lv.yml 

#3.验证
[greg@control ansible]$ ansible all -a "lvs"
1 ---
  2 - name: 创建和使用逻辑卷
  3   hosts: all
  4   tasks:
  5   - block:
  6     - name: Create a logical volume of 512m
  7       lvol:
  8         vg: research
  9         lv: data
 10         size: 1500
 11     - name: Create a ext2 filesystem on /dev/sdb1
 12       filesystem:
 13         fstype: ext4
 14         dev: /dev/research/data
 15     rescue:
 16     - debug:
 17         msg: Could not create logical volume of that size
 18     - name: Create a logical volume of 512m
 19       lvol: 
 20         vg: research
 21         lv: data
 22         size: 800
 23       when: ansible_lvm.vgs.research is defined
 24   - debug: 
 25       msg: Volume group done not exist 
 26     when: ansible_lvm.vgs.research is not defined

9.生成主机文件

生成主机文件

    将一个初始模板文件从 http://materials/hosts.j2 下载到 /home/greg/ansible

    完成该模板,以便用它生成以下文件:针对每个清单主机包含一行内容,其格式与 /etc/hosts 相同

    创建名为 /home/greg/ansible/hosts.yml 的 playbook ,它将使用此模板在 dev 主机组中的主机上生成文件 /etc/myhosts 。

该 playbook 运行后, dev 主机组中主机上的文件 /etc/myhosts 应针对每个受管主机包含一行内容:

1	127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

2	::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

3

4	172.25.250.9    node1.lab.example.com node1

5	172.25.250.10   node2.lab.example.com node2

6	172.25.250.11   node3.lab.example.com node3

7	172.25.250.12   node4.lab.example.com node4

8	172.25.250.13   node5.lab.example.com node5
[greg@control ansible]$ ansible-doc template
/EX
- name: Template a file to /etc/files.conf
  template:
    src: /mytemplates/foo.j2
    dest: /etc/file.conf
    owner: bin
    group: wheel
    mode: '0644'
[greg@control ansible]$ ansible dev -m setup -a "filter=*address*"
[greg@control ansible]$ ansible dev -m setup -a "filter=*name*"
#1.下载初始模板文件
[greg@control ansible]$ wget http://materials/hosts.j2

#2.创建playbook
[greg@control ansible]$ vim /home/greg/ansible/hosts.yml

#3.编写hosts.j2文件
[greg@control ansible]$ vim hosts.j2 

#4.运行playbook
[greg@control ansible]$ ansible-playbook hosts.yml

#5.验证
[greg@control ansible]$ ansible dev -a "cat /etc/myhosts"
 1 ---
  2 - name: 生成主机文件
  3   hosts: all
  4   tasks:
  5   - name: Template 
  6     template:
  7       src: /home/greg/ansible/hosts.j2
  8       dest: /etc/myhosts
  9     when: inventory_hostname in groups.dev

方法一:

 1 127.0.0.1 localhost localhost.localdomain localhost4 localho    st4.localdomain4
  2 ::1 localhost localhost.localdomain localhost6 localhost6.lo    caldomain6
  3 
  4 {% for host in groups['all'] %}
  5 {{ hostvars[host].ansible_default_ipv4.address }} {{ hostvars[host].ansible_nodename }} {{ hostvars[host].ansible_hostname }}
  6 {% endfor %}

方法二:

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

方法三:

#直接复制 /etc/hosts 内容到 hosts.j2 文件 
#运行playbook

10.修改文件内容

    修改文件内容

    按照下方所述,创建一个名为 /home/greg/ansible/issue.yml 的 playbook :

        该 playbook 将在所有清单主机上运行

        该 playbook 会将 /etc/issue 的内容替换为下方所示的一行文本:

            在 dev 主机组中的主机上,这行文本显示 为:Development

            在 test 主机组中的主机上,这行文本显示 为:Test

            在 prod 主机组中的主机上,这行文本显示 为:Production
[greg@control ansible]$ ansible-doc copy
- name: Copy using inline content
  copy:
    content: '# This file was moved to /etc/other.con>
    dest: /etc/mine.conf

#1.创建playbook,并编写
[greg@control ansible]$ vim /home/greg/ansible/issue.yml

#2.运行playbook
[greg@control ansible]$ ansible-playbook issue.yml 

#3.验证
[greg@control ansible]$ ansible all -a "cat  /etc/issue"
[greg@control ansible]$ ansible-inventory --graph
  1 ---
  2 - name: 修改文件内容
  3   hosts: all
  4   tasks:
  5   - name: Copy using inline content
  6     copy:
  7       content: 'Development'
  8       dest: /etc/issue
  9     when: inventory_hostname in groups.dev
 10   - name: Copy using inline content
 11     copy:
 12       content: 'Test'
 13       dest: /etc/issue
 14     when: inventory_hostname in groups.test
 15   - name: Copy using inline content
 16     copy:
 17       content: 'Production'
 18       dest: /etc/issue
 19     when: inventory_hostname in groups.prod

11.创建 Web 内容目录

创建 Web 内容目录

按照下方所述,创建一个名为 /home/greg/ansible/webcontent.yml 的 playbook :

    该 playbook 在 dev 主机组中的受管节点上运行

    创建符合下列要求的目录 /webdev :

        所有者为 webdev 组

        具有常规权限:owner=read+write+execute , group=read+write+execute ,other=read+execute

        具有特殊权限:设置组 ID

    用符号链接将 /var/www/html/webdev 链接到 /webdev

    创建文件 /webdev/index.html ,其中包含如下所示的单行文件: Development

    在 dev 主机组中主机上浏览此目录(例如 http://172.25.250.9/webdev/ )将生成以下输出:

    1 Development
#1.检查webdev 组是否存在
[greg@control ansible]$ ansible dev -a "grep webdev /etc/group"
node1 | CHANGED | rc=0 >>
webdev:x:1003:

#2.创建playbook
[greg@control ansible]$ /home/greg/ansible/webcontent.yml

#3.运行playbook
[greg@control ansible]$ ansible-playbook webcontent.yml

#3.浏览器浏览http://172.25.250.9/webdev/
Development
[greg@control ansible]$ ansible-doc file
/EX
- name: Change file ownership, group and permissions
  file:
    path: /etc/foo.conf
    owner: foo
    group: foo
    mode: '0644'
    
- name: Create a directory if it does not exist
  file:
    path: /etc/some_directory
    state: directory
    mode: '0755'

- name: Create a symbolic link
  file:
    src: /file/to/link/to
    dest: /path/to/symlink
    owner: foo
    group: foo
    state: link

[greg@control ansible]$ ansible-doc copy
/EX

- name: Copy using inline content
  copy:
    content: '# This file was moved to /etc/other.conf'
    dest: /etc/mine.conf
    
- setype
        The type part of the SELinux file context.
        When set to `_default', it will use the `type' portion of>
        policy if available.
        [Default: (null)]
        type: str
        
- name: Start service httpd, if not started
  service:
    name: httpd
    state: started
	enabled: yes
  1 ---
  2 - name: 创建 Web 内容目录
  3   hosts: dev
  4   tasks:
  5   - name: Change file ownership
  6     file:
  7       path: /webdev
  8       state: directory
  9       group: webdev
 10       mode: '2775'
 11   - name: Create a symbolic link
 12     file:
 13       src: /webdev
 14       dest: /var/www/html/webdev
 15       state: link
 16   - name: Copy using inline content
 17     copy:
 18       content: 'Development'
 19       dest: /webdev/index.html
 20       setype: httpd_sys_content_t
 21   - name: Start service httpd, if not started
 22     service:
 23       name: httpd
 24       state: started
 25       enabled: yes

12.生成硬件报告

    生成硬件报告

    创建一个名为 /home/greg/ansible/hwreport.yml 的 playbook ,它将在所有受管节点上生成含有以下信息的输出文件 /root/hwreport.txt :

        清单主机名称

        以 MB 表示的总内存大小

        BIOS 版本

        磁盘设备 vda 的大小

        磁盘设备 vdb 的大小

        输出文件中的每一行含有一个 key=value 对。

    您的 playbook 应当:

        从 http://materials/hwreport.empty 下载文件,并将它保存为 /root/hwreport.txt

        使用正确的值改为 /root/hwreport.txt

        如果硬件项不存在,相关的值应设为 NONE
#1.创建playbook
[greg@control ansible]$ vim /home/greg/ansible/hwreport.yml

#2.运行playbook
[greg@control ansible]$ ansible-playbook hwreport.yml

#3.验证
 [greg@control ansible]$ ansible all -a 'cat /root/hwreport.txt'
[greg@control ansible]$ ansible-doc lineinfile
/EX
- name: Ensure SELinux is set to enforcing mode
  lineinfile:
    path: /etc/selinux/config
    regexp: '^SELINUX='
    line: SELINUX=enforcing

[greg@control ansible]$ ansible-doc get_url
/EX
- name: Download foo.conf
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    mode: '0440'
    
[greg@control ansible]$ ansible dev -m debug -a "var=inventory_hostname"
[greg@control ansible]$ ansible dev -m setup -a "filter=*mem*"
[greg@control ansible]$ ansible dev -m setup -a "filter=*bios*"
[greg@control ansible]$ ansible dev -m setup -a "filter=*device*"
  1 ---
  2 - name: 生成硬件报告
  3   hosts: all
  4   tasks:
  5   - name: Download
  6     get_url:
  7       url: http://materials/hwreport.empty
  8       dest: /root/hwreport.txt
  9   - name: Ensure1
 10     lineinfile:
 11       path: /root/hwreport.txt
 12       regexp: '^HOST='
 13       line: HOST={{ inventory_hostname }}
 14   - name: Ensure2
 15     lineinfile:
 16       path: /root/hwreport.txt
 17       regexp: '^MEMORY='
 18       line: MEMORY={{ ansible_memtotal_mb }}
 19 
 20   - name: Ensure3
 21     lineinfile:
 22       path: /root/hwreport.txt
 23       regexp: '^BIOS='
 24       line: BIOS={{ ansible_bios_version }}
 25   - name: Ensure4
 26     lineinfile:
 27       path: /root/hwreport.txt
 28       regexp: '^DISK_SIZE_VDA='
 29       line: DISK_SIZE_VDA={{ ansible_devices.vda.size }}
 30 
 31   - name: Ensure5
 32     lineinfile:
 33       path: /root/hwreport.txt
 34       regexp: '^DISK_SIZE_VDB='
 35       line: DISK_SIZE_VDB={{ ansible_devices.vdb.size | default('NONE', true) }}

13.创建密码库

(15题先,13题后,再14题)

    创建密码库

    按照下方所述,创建一个 Ansible 库来存储用户密码:

        库名称为 /home/greg/ansible/locker.yml

        库中含有两个变量,名称如下:

            pw_developer,值为 Imadev

            pw_manager,值为 Imamgr

        用于加密和解密该库的密码为 whenyouwishuponastar

        密码存储在文件 /home/greg/ansible/secret.txt 中
#1.密码导入密码存储文件
[greg@control ansible]$ echo "whenyouwishuponastar" > /home/greg/ansible/secret.txt

#2.修改配置文件存储路径
[greg@control ansible]$ vim ansible.cfg
/password
144 #vault_password_file = /path/to/vault_password_file
145 vault_password_file = /home/greg/ansible/secret.txt 

#3.创建Ansible 库,存储用户密码
[greg@control ansible]$ ansible-vault create /home/greg/ansible/locker.yml
pw_developer: Imadev
pw_manager: Imamgr

#4.验证
[greg@control ansible]$ ansible-vault view /home/greg/ansible/locker.yml

---
pw_developer: Imadev
pw_manager: Imamgr

[greg@control ansible]$ cat /home/greg/ansible/locker.yml

14.创建用户帐户

(15题先,13题后,再14题)

    创建用户帐户

        从 http://materials/user_list.yml 下载要创建的用户的列表,并将它保存到 /home/greg/ansible

        在本次练习中使用在其他位置创建的密码库 /home/greg/ansible/locker.yml 。创建名为 /home/greg/ansible/users.yml 的 playbook ,从而按以下所述创建用户帐户:

            职位描述为 developer 的用户应当:

                在 dev 和 test 主机组中的受管节点上创建

                从 pw_developer 变量分配密码

                是补充组 devops 的成员

            职位描述为 manager 的用户应当:

                在 prod 主机组中的受管节点上创建

                从 pw_manager 变量分配密码

                是补充组 opsmgr 的成员

        密码采用 SHA512 哈希格式。

        您的 playbook 应能够在本次练习中使用在其他位置创建的库密码文件 /home/greg/ansible/secret.txt 正常运行。
#查看组是否存在
[greg@control ansible]$ ansible dev,test -a "grep devops /etc/group"

#playbook查询文档
[greg@control ansible]$ ansible-doc group
/EX
- name: Ensure group "somegroup" exists
  group:
    name: somegroup
    state: present

[greg@control ansible]$ ansible-doc user
/EX
- name: Add the user 'james' with a bash shell, appen>
  user:
    name: james
    shell: /bin/bash
    groups: admins,developers
    append: yes
#1.下载要创建的用户的列表
[greg@control ansible]$ wget http://materials/user_list.yml

#2.创建playbook,并编写
[greg@control ansible]$ vim /home/greg/ansible/users.yml


#3.运行playbook
[greg@control ansible]$ ansible-playbook users.yml

#4.验证
[greg@control ansible]$ ansible-inventory --graph

[greg@control ansible]$ ansible dev,test -m shell -a "id bob; id sally; id fred" 
[greg@control ansible]$ ssh bob@node1

[greg@control ansible]$ ansible prod -m shell -a "id bob; id sally; id fred"
[greg@control ansible]$ ssh sally@node3
  1 ---
  2 - name: 创建用户帐户
  3   hosts: dev,test
  4   vars_files:
  5   - /home/greg/ansible/locker.yml
  6   - /home/greg/ansible/user_list.yml
  7   tasks:
  8   - name: Ensure group "somegroup" exists
  9     group:
 10       name: devops
 11       state: present
 12   - name: Add the user
 13     user:
 14       name: "{{ item.name }}"
 15       groups: devops
 16       password: "{{ pw_developer | password_hash('sha512') }}"
 17       append: yes
 18     loop: "{{ users }}"
 19     when: item.job == 'developer'
 20 
 21 - name: 创建用户帐户
 22   hosts: prod
 23   vars_files:
 24   - /home/greg/ansible/locker.yml
 25   - /home/greg/ansible/user_list.yml
 26   tasks:
 27   - name: Ensure group "somegroup" exists
 28     group:
 29       name: opsmgr
 30       state: present
 31   - name: Add the user
 32     user:
 33       name: "{{ item.name }}"
 34       groups: opsmgr
 35       password: "{{ pw_manager | password_hash('sha512') }}"
 36       append: yes
 37     loop: "{{ users }}"
 38     when: item.job == 'manager'

15.更新 Ansible 库的密钥

(15题先,13题后,再14题)

    更新 Ansible 库的密钥

    按照下方所述,更新现有 Ansible 库的密钥:

        从 http://materials/salaries.yml 下载 Ansible 库到 /home/greg/ansible

        当前的库密码为 insecure8sure

        新的库密码为 bbs2you9527

        库使用新密码保持加密状态
#1.下载Ansible 库
[greg@control ansible]$ wget http://materials/salaries.yml

#2.重设密码
[greg@control ansible]$ ansible-vault rekey  /home/greg/ansible/salaries.yml 

#3.验证
[greg@control ansible]$ ansible-vault view  /home/greg/ansible/salaries.yml 
Vault password: 
haha

16.配置 cron 作业(增加)

    配置 cron 作业

    创建一个名为 /home/greg/ansible/cron.yml 的 playbook :

        该 playbook 在 test 主机组中的受管节点上运行

        配置 cron 作业,该作业每隔 2 分钟运行并执行以下命令:

        logger "EX200 in progress",以用户 bob 身份运行
[greg@control ansible]$ ansible-doc cron
/EX
- name: Creates a cron file under /etc/cron.d
  cron:
    name: yum autoupdate
    weekday: "2"
    minute: "0"
    hour: "12"
    user: root
    job: "YUMINTERACTIVE=0 /usr/sbin/yum-autoupdate"
    cron_file: ansible_yum-autoupdate

#1.创建playbook
[greg@control ansible]$ vim /home/greg/ansible/cron.yml

#2.运行playbook
[greg@control ansible]$ ansible-playbook cron.yml 

#3.验证
[greg@control ansible]$ ansible test -a "grep EX200 /var/log/cron"

node2 | CHANGED | rc=0 >>
Jul  8 15:34:02 node2 CROND[6182]: (bob) CMD (logger "EX200 in progress")

[greg@control ansible]$ ansible test -a "crontab -l -u bob"
  1 ---
  2 - name: cron
  3   hosts: test
  4   tasks:
  5   - name: Creates a cron
  6     cron:
  7       name: yum autoupdate
  8       minute: "*/2"
  9       user: bob
 10       job: logger "EX200 in progress"

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/678848.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

认识区块链

文章目录 前言从交易说起线下交易&线上交易存在的隐患线上交易隐患引发的思考 货币发展史解决线上交易存在的隐患比特币的诞生比特币价值的产生 比特币&区块链 前言 我想大多数的 IT 人,即便不是 IT 人,或多说少都听说过“比特币”“区块链”这…

InceptionNext:当Inception遇到ConvNeXt

摘要 https://arxiv.org/pdf/2303.16900.pdf 受 Vision Transformer 长距离依赖关系建模能力的启发,大核卷积最近被广泛研究和采用,以扩大感受野和提高模型性能,如采用77深度卷积的杰出工作connext。虽然这种深度算子只消耗少量的flop&…

初识mysql数据库之数据库介绍

目录 一、什么是数据库 1. 数据库的概念 2. 为什么要有数据库 3. 数据库样例 二、 主流数据库 三、服务器、数据库和表之间的关系 四、mysql存储架构 五、sql语句分类 一、什么是数据库 1. 数据库的概念 如果大家现在已经安装好了mysql,想必大家应该也都知…

数字逻辑与模拟电子技术-部分知识点(1)——模电部分-半导体二极管,半导体的基础知识、本征半导体、杂质半导体、PN结的形成、PN结的特性、二极管的伏安特性

目录 半导体二极管 半导体的基础知识 本征半导体(经过加工处理) 杂质半导体 PN结的形成 PN结的特性 二极管的伏安特性 半导体二极管 半导体的基础知识 半导体器件的材料主要是硅(Si)、锗(Ge)和砷化镓(GaAs&…

Airtest框架和Poco框架常见问题

Airtest 报告可以导出发给别人看吗 Airtest的报告是可以打包发给别人看的。 ① 想要导出报告发给别人观看,我们需要生成报告的命令中传入 --export 参数,这样就可以将 包含静态资源文件和图片文件的报告 导出到一个指定的文件夹内,之后直接…

Qt绘图(线条、椭圆、矩形、图片滚动)

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();//绘图事件void paintEvent(QPaintE…

XML系列篇之dtd约束

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于xml的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.XML 是什么 &#x1f4a1;辉辉小贴士&a…

STM32时钟系统

时钟 时钟是具有周期性的脉冲信号&#xff0c;最常用的是占空比50%的方波。 时钟是单片机的脉搏。 时钟树 HSE&#xff1a;高速外部振荡器&#xff0c;4~16MHz&#xff0c;&#xff08;晶体&#xff0c;陶瓷&#xff09;LSE&#xff1a;低速外部振荡器&#xff0c;32.768KHz…

ADC0808/ADC0809引脚图及功能和工作原理介绍

ADC0808芯片有28条引脚&#xff0c;采用双列直插式封装。如图所示&#xff1a; . . . 各引脚功能如下&#xff1a; 1-5和26-28&#xff08;IN0-IN7&#xff09;&#xff1a;8路模拟量输入端。 8、14、15和17-21&#xff1a;8位数字量输出端。 22&#xff08;ALE&#xff09…

深度学习代码环境配置(编译器, git, anaconda)

内容 编译器 gcc&#xff1a;GNU编译器套装C builderMicrosoft Visual C&#xff08;MSVC&#xff09;&#xff1a;微软的VC编译器MinGW&#xff08;Minimalist GNU on Windows&#xff09;&#xff1a;可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合&…

【设计模式】面向对象的设计原则

(一) UML 和面向对象设计原则 1. 一种某唱片播放器不仅可以播放唱片&#xff0c;而且可以连接计算机并把计算机中的歌曲刻录到 唱片上&#xff08;同步歌曲&#xff09;。连接计算机的过程中还可自动完成充电。 关于唱片&#xff0c;还有如下描述信息&#xff1a; &#xf…

ChatGPT底层架构Transformer技术及源码实现(一)

ChatGPT底层架构Transformer技术及源码实现 Language Model底层的数学原理之最大似然估计MLE及最大后验概率MAP内部机制详解 Gavin大咖微信:NLP_Matrix_Space 传统人工智能算法的真相(The Truth Under Traditional AI Algorithms),传统人工智能算法是相对于贝叶斯(Bayesia…

【软件设计师暴击考点】程序设计语言-高频考点暴击系列

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

碳中和城市建筑能源系统(4):储能篇(龙惟定)2022

碳中和城市建筑能源系统(4):储能篇 摘要 本文是碳中和城市建筑能源系统系列文章的第四篇。在碳中和语境下&#xff0c;无论是增加可再生能源应用的渗透率&#xff0c;还是平抑负荷、提高电网的灵活性&#xff0c;都离不开储能。本文介绍了当今储能技术的主要类型&#xff0c;…

【新星计划·2023】Centos 7安装教程(一步一图)

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、下载VMware 二、下载镜像的方式 三、安装Linux ’前言 本文将讲解下载VMware和下载镜像的方式&#xff0c;以及安装centos 7的教…

webpack编译打包从入门到放弃

写在前面的话&#xff1a;推荐学习vite。当然&#xff0c;我更推荐你直接上手体验webpack_demo与vite_demo 看看他们的编译、打包、热更新速度等差距。你也可以直接通过vite开发lib库&#xff0c;一句话就是比webpack快&#xff0c;它有的vite都有&#xff0c;并且更好&#x…

NCI-NFCEE

10.5 NFCEE 状态 NFCC 使用此控制消息向 DH 通知启用的 NFCEE 状态的变化。 NFCC 发送 NFCEE_STATUS_NTF 来报告启用的 NFCEE 状态的变化。 对于任何禁用或无响应的 NFCEE&#xff0c;NFCC 不应发送 NFCEE_STATUS_NTF。 当启用 NFCEE 并且 NFCC 检测到与该 NFCEE 通信时存在不…

C++布隆过滤器

目录 布隆过滤器介绍实现哈希函数布隆过滤器删除 小结使用——题目 布隆过滤器 介绍 在许多场景下&#xff0c;如设置昵称时&#xff0c;往往要求唯一性。这时就需要高效判断该昵称是否被使用过。 使用红黑树的kv模型或者哈希表来组织昵称集合&#xff0c;可以&#xff0c;但缺…

Qt中的日期和时间

目录 QDate 示例&#xff08;打印年月日&#xff09;&#xff1a; QTime 示例&#xff08;显示时分秒&#xff09;&#xff1a; QDateTime 示例&#xff08;显示当前日期和时间&#xff09;&#xff1a; 示例&#xff08;分别取出 年 月 日 时 分 秒&#xff09;&#xff…

牛客网专项练习——C语言错题集(8)

文章目录 字符串拼接和拷贝while 与 fortypedef 和 define浮点类型的组成部分 字符串拼接和拷贝 这题并没有难度&#xff0c;但不知为什么我把该题空着。 strcpy 用于拷贝字符串&#xff0c;strcat 用于拼接字符串。 while 与 for 假如 i 0&#xff0c;while 循环里 s1 被执…