【Ansible面试题】

1、Ansible是什么?

Ansible是一个自动化运维工具,基于Python开发,集合了众多运维工具的优点,可以实现批量系统配置、批量程序部署、批量运行命令等功能。并且它是基于模块工作的,本身没有批量部署的能力,真正批量部署的是ansible所运行的模块,而ansible只是提供一种框架。

2、Ansible常用模块(至少6个)?

command ping yum copy service shell file replace user group

3、什么是 Ansible 模块?

模块被认为是 Ansible 的工作单元。每个模块大多是独立的,可以用标准的脚本语言编写,如 Python、Perl、Ruby、bash 等。模块的一个重要属性是幂等性,意味着一个操作执行多次不会产生副作用

4、什么是 Ansible 的 playbooks ?

Playbooks 是 Ansible 的配置、部署和编排语言,它是基于YAML语言编写的。他们可以描述您希望远程系统实施的策略,或者描述一般 IT 流程中的一系列步骤。

5、描述Ansible是如何工作的?

Ansible由节点和控制机器组成。 控制机器是安装Ansibles的地方,节点由这些机器通过SSH管理。 借助SSH协议,控制机器可以部署临时存储在远程节点上的模块。
控制机器使用ansible或者ansible-playbooks在服务器终端输入的Ansible命令集或者playbook后,Ansible会遵循预先编排的规则将PLAYbook逐条拆解为Play,再将Play组织成Ansible可以识别的任务tasks,随后调用任务涉及到的所有MODULES及PLUGINS,根据主机清单INVENTORY中定义的主机列表通过SSH协议将任务集以临时文件或者命令的形式传输到远程节点并返回结果,如果是临时文件则执行完毕后自动删除。

练习题:

1、ansible使用copy模块来将/opt/aa.txt复制到/home/jack中

ansible node1 -m copy -a 'src=/opt/aa.txt dest=/home/jack/'

[root@manager ~]# ansible node1 -m copy -a 'src=/opt/aa.txt dest=/home/jack/'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/home/jack/aa.txt", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "mode": "0644", 
    "owner": "root", 
    "size": 0, 
    "src": "/root/.ansible/tmp/ansible-tmp-1592384605.11-1992-33979510717979/source", 
    "state": "file", 
    "uid": 0
}
[root@manager ~]# ansible node1 -a 'ls -l /home/jack'
node1 | CHANGED | rc=0 >>
总用量 0
-rw-r--r-- 1 root root 0 617 17:03 aa.txt

2、使用file模块,来定义/home/jack/aa.txt的权限为777,归属为所有者是jack,所属组为jack

ansible node1 -m file -a 'path=/home/jack/aa.txt owner=jack group=jack mode=0777’

[root@manager ~]# ansible node1 -m file -a 'path=/home/jack/aa.txt owner=jack group=jack mode=0777'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 1001, 
    "group": "jack", 
    "mode": "0777", 
    "owner": "jack", 
    "path": "/home/jack/aa.txt", 
    "size": 0, 
    "state": "file", 
    "uid": 1001
}
[root@manager ~]# ansible node1 -a 'ls -l /home/jack'
node1 | CHANGED | rc=0 >>
总用量 0
-rwxrwxrwx 1 jack jack 0 617 17:03 aa.txt

3、使用yum模块,安装httpd服务

ansible node1 -m yum -a 'name=httpd state=present’

[root@manager ~]# ansible node1 -m yum -a 'name=httpd state=present'

node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "changes": {
        "installed": [
            "httpd"
        ]
    }, 
    "msg": "Repository base is listed more than once in the configuration\n", 
    "rc": 0, 
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirrors.aliyun.com\n * epel: mirrors.yun-idc.com\n * extras: mirrors.aliyun.com\n * updates: mirrors.aliyun.com\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.4.6-93.el7.centos will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package       Arch           Version                        Repository    Size\n================================================================================\nInstalling:\n httpd         x86_64         2.4.6-93.el7.centos            base         2.7 M\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 2.7 M\nInstalled size: 9.4 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : httpd-2.4.6-93.el7.centos.x86_64                             1/1 \n  Verifying  : httpd-2.4.6-93.el7.centos.x86_64                             1/1 \n\nInstalled:\n  httpd.x86_64 0:2.4.6-93.el7.centos                                            \n\nComplete!\n"
    ]
}
[root@manager ~]# 
[root@manager ~]# ansible node1 -a 'rpm -q httpd'
[WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.
If you need to use command because yum, dnf or zypper is insufficient you can add
'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg
to get rid of this message.
node1 | CHANGED | rc=0 >>
httpd-2.4.6-93.el7.centos.x86_64

4、使用cron模块,定义一个任务,每周五的14点30分执行备份/var

ansible node1 -m cron -a 'name=“crontab test” weekday=5 hour=14 minute=30 job="/usr/bin/tar -czf /opt/var.tar.gz /var"'

[root@manager ~]# ansible node1 -m cron -a 'name="crontab test" weekday=5 hour=14 minute=30 job="/usr/bin/tar -czf /opt/var.tar.gz /var"'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "crontab test"
    ]
}

5、使用user模块,创建用户student,让其是系统用户,属组为root,uid为2000

ansible node1 -m user -a 'name=student system=yes group=root uid=2000’

[root@manager ~]# ansible node1 -m user -a 'name=student system=yes group=root uid=2000'
node1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": true, 
    "group": 0, 
    "home": "/home/student", 
    "name": "student", 
    "shell": "/bin/bash", 
    "state": "present", 
    "system": true, 
    "uid": 2000
}
[root@manager ~]# ansible node1 -m shell -a 'id student'
node1 | CHANGED | rc=0 >>
uid=2000(student) gid=0(root)=0(root)
)

  • 26
    点赞
  • 289
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Ansible面试题通常涉及到Ansible的基本概念、使用方法和常见任务。以下是一些常见的Ansible面试题及其答案: 1. 什么是AnsibleAnsible是一种自动化工具,用于配置和管理计算机系统。它使用简单的语法和模块化的架构,可以轻松地自动化各种任务,包括配置管理、应用部署和编排。 2. Ansible与其他自动化工具的区别是什么? 与其他自动化工具相比,Ansible具有以下特点: - 无需在被管理的主机上安装客户端,只需通过SSH进行通信。 - 使用简单的YAML语法来描述任务和配置。 - 可以轻松扩展和自定义,支持自定义模块和插件。 - 具有强大的编排功能,可以在多个主机上并行执行任务。 3. 如何安装Ansible? 可以使用以下命令在Linux上安装Ansible: ```shell sudo apt-get install ansible ``` 4. 如何编写一个简单的Ansible Playbook? Ansible Playbook是一个YAML文件,用于描述Ansible任务的执行步骤。以下是一个简单的示例: ```yaml - name: Install Apache hosts: webserver tasks: - name: Install Apache package apt: name: apache2 state: present ``` 这个Playbook的作用是在名为"webserver"的主机上安装Apache软件包。 5. 如何在Ansible中使用变量? 可以在Ansible Playbook中定义变量,并在任务中使用它们。以下是一个示例: ```yaml - name: Install Nginx hosts: webserver vars: nginx_version: 1.18.0 tasks: - name: Install Nginx package apt: name: nginx={{ nginx_version }} state: present ``` 在这个示例中,我们定义了一个名为"nginx_version"的变量,并在安装Nginx任务中使用它。 6. 如何在Ansible中使用条件语句? 可以使用条件语句来根据不同的条件执行不同的任务。以下是一个示例: ```yaml - name: Install Apache or Nginx hosts: webserver tasks: - name: Install Apache package apt: name: apache2 state: present when: webserver_type == "apache" - name: Install Nginx package apt: name: nginx state: present when: webserver_type == "nginx" ``` 在这个示例中,根据变量"webserver_type"的值来决定安装Apache还是Nginx。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

骑着蜗牛追汤圆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值