本文共 7012 字,大约阅读时间需要 23 分钟。
sysadmin默认密码
在上一篇文章中,我讨论了 。 在本文中,我将向您展示如何使用Ansible进行其他操作,这将使您作为系统管理员的生活更加轻松。 不过,首先,我想分享我加入Ansible的原因。
模块,老实说,我的regex
技术不存在。 由于管理层的指示和指示,我的能力也受到限制:“您只能运行此剧本,而这就是您能做的。” 辞去工作后,我开始在一个团队中工作,该团队的大部分基础架构都在云中。 在适应团队并学习了一切工作原理之后,我开始尝试寻找使更多事情自动化的方法。 我们花了两到三个月的时间来大量部署虚拟机-手动完成所有工作,包括每个虚拟机的生命周期(从供应到停用)。 我们的工作经常落后于计划,因为我们花费了大量时间进行维护。 当人们去度假时,其他人不得不接管他们正在做的任务。
共享有关如何解决问题的想法是我们在IT和开源世界中可以做的最好的事情之一,因此我通过并以 寻求帮助。
阅读文档(包括以下主题)是开始学习Ansible的最佳方法。
如果您想弄清楚您可以使用Ansible做什么,请花点时间思考一下您的日常活动,那些花费很多时间的活动可能会花在其他事情上。 这里有些例子:
/etc/ssh/sshd_config
,或者您可能希望文件在您所使用的每个系统中看起来都是特定的方式重新管理。 现在,让我们看看如何使用Ansible来自动化其中一些重复性任务。
如果您需要创建一个庞大的用户和组列表,并且用户分布在不同的组中,则可以使用 。 让我们从创建组开始:
- name: create user groups group: name: "{ { item }}" loop: - postgresql - nginx-test - admin - dbadmin - hadoop
您可以使用以下特定参数创建用户:
- name: all users in the department user: name: "{ { item.name }}" group: "{ { item.group }}" groups: "{ { item.groups }}" uid: "{ { item.uid }}" state: "{ { item.state }}" loop: - { name: 'admin1', group: 'admin', groups: 'nginx', uid: '1234', state: 'present' } - { name: 'dbadmin1', group: 'dbadmin', groups: 'postgres', uid: '4321', state: 'present' } - { name: 'user1', group: 'hadoop', groups: 'wheel', uid: '1067', state: 'present' } - { name: 'jose', group: 'admin', groups: 'wheel', uid: '9000', state: 'absent' }
查看用户jose
,您可能会发现该state: 'absent'
会删除该用户帐户,并且您可能想知道为什么在删除用户帐户时需要包括所有其他参数。 这是因为这是保留重要更改文档以进行审核或安全合规性的好地方。 通过将角色存储在Git中作为事实的来源,如果以后需要回答有关为何进行更改的问题,则可以回头查看Git中的旧版本。
要为某些用户部署SSH密钥,可以使用与上一个示例相同的循环类型。
- name: copy admin1 and dbadmin ssh keys authorized_key: user: "{ { item.user }}" key: "{ { item.key }}" state: "{ { item.state }}" comment: "{ { item.comment }}" loop: - { user: 'admin1', key: "{ { lookup('file', '/data/test_temp_key.pub'), state: 'present', comment: 'admin1 key' } - { user: 'dbadmin', key: "{ { lookup('file', '/data/vm_temp_key.pub'), state: 'absent', comment: 'dbadmin key' }
在这里,我们指定user
,如何通过使用lookup
, state
和描述密钥用途的comment
来lookup
密钥。
软件包的安装可能会因所使用的打包系统而异。 您可以使用来确定要使用哪个模块。 Ansible确实提供了一个名为的通用模块,该模块使用ansible_pkg_mgr
并为系统调用适当的软件包管理器。 例如,如果您使用的是Fedora,则软件包模块将调用DNF软件包管理器。
如果您要简单安装软件包,则软件包模块将起作用。 如果您要进行更复杂的工作,则必须为系统使用正确的模块。 例如,如果要忽略GPG密钥并在基于RHEL的系统上安装所有安全软件包,则需要使用yum模块。 根据不同,您将有不同的选择,但是与Ansible的通用包装模块相比,它们通常提供更多的参数。
这是使用package模块的示例:
- name: install a package package: name: nginx state: installed
以下使用yum模块安装NGINX,从存储库中禁用gpg_check
,忽略存储库的证书,并跳过可能显示的任何损坏的软件包。
- name: install a package yum: name: nginx state: installed disable_gpg_check: yes validate_certs: no skip_broken: yes
这是使用的示例。 Apt模块告诉Ansible卸载NGINX而不更新缓存:
- name: install a package apt: name: nginx state: absent update_cache: no
您可以在安装软件包时使用loop
,但是如果您通过以下列表将对它们进行单独处理:
- name: - nginx - postgresql-server - ansible - httpd
注意:请确保您在使用的程序包管理器中知道所需程序包的正确名称。 有些名称会根据程序包管理器而变化。
与软件包非常相似,Ansible具有不同的模块来启动 。 就像在前面的示例中一样,我们使用package模块进行软件包的常规安装,而模块则对服务(包括systemd和Upstart)执行类似的工作。 (请查看模块的文档以获取完整列表。)这是一个示例:
- name: start nginx service: name: nginx state: started
如果您只是启动和停止应用程序并且不需要任何更复杂的内容,则可以使用Ansible的服务模块。 但是,与yum模块一样,如果需要更多选项,则需要使用systemd模块。 例如,如果您修改systemd文件,则需要执行daemon-reload
,服务模块将无法正常运行; 您将必须使用systemd模块。
- name: reload postgresql for new configuration and reload daemon systemd: name: postgresql state: reload daemon-reload: yes
这是一个很好的起点,但是由于该服务将始终重新加载/重新启动,因此可能会变得很麻烦。 这是使用的好地方。
如果您使用最佳实践并使用ansible-galaxy init "role name"
创建了角色,那么您应该具有完整的 。 您可以将上面的代码包含在handlers/main.yml
,并在对应用程序进行更改时调用它。 例如:
handlers/main.yml - name: reload postgresql for new configuration and reload daemon systemd: name: postgresql state: reload daemon-reload: yes
这是调用处理程序的任务:
- name: configure postgresql template: src: postgresql.service.j2 dest: /usr/lib/systemd/system/postgresql.service notify: reload postgresql for new configuration and reload daemon
它通过更改systemd文件来配置PostgreSQL,但是它没有在任务中定义重启(如之前),而是在运行结束时调用处理程序进行重启。 这是配置应用程序并保持幂等的好方法,因为处理程序仅在任务更改时才运行,而不是在配置过程中运行。
前面的示例使用和 。 使用Ansible配置应用程序最美妙的事情之一就是使用模板。 您可以使用所需的完整配置来配置整个文件,例如postgresql.service
。 但是,不必更改每一行,而可以使用变量并在其他位置定义选项。 这将使您可以随时更改任何变量,并且用途更多。 例如:
[database] DB_TYPE = "{ { gitea_db }}" HOST = "{ { ansible_fqdn}}:3306" NAME = gitea USER = gitea PASSWD = "{ { gitea_db_passwd }}" SSL_MODE = disable PATH = "{ { gitea_db_dir }}/gitea.db
此配置文件上的数据库选项app.ini
为 。 即使它是一个配置文件,这也类似于编写Ansible任务,并且可以轻松定义变量和进行更改。 如果使用 ,则可以进一步扩展,它允许您为所有系统和特定组定义变量(例如,生产与开发)。 这样可以更轻松地管理变量,并且您不必在每个角色中都指定相同的变量。
我们已经讨论了您可以在系统上使用Ansible进行的几项操作,但尚未讨论如何配置系统。 这是一个使用OpenStack云解决方案配置虚拟机(VM)的示例。
- name: create a VM in openstack osp_server: name: cloudera-namenode state: present cloud: openstack region_name: andromeda image: 923569a-c777-4g52-t3y9-cxvhl86zx345 flavor_ram: 20146 flavor: big auto_ip: yes volumes: cloudera-namenode
所有OpenStack模块均以os
开头,这使得查找它们变得更加容易。 上面的配置使用osp-server模块,该模块允许您添加或删除实例。 它包括VM的名称,其状态,其云选项以及如何向API进行身份验证。 OpenStack文档中提供了有关更多信息,但是如果您不想使用cloud.yml,则可以使用字典,使用auth
选项列出您的凭据。 如果要删除VM,只需将state:
更改为absent
。
假设您有一个关闭的服务器列表,因为您不知道如何使应用程序正常工作,而您想重新启动它们。 您可以使用os_server_action
重新启动它们(如果要从头开始,则可以重新构建它们)。
这是一个启动服务器并告知模块实例名称的示例:
- name: restart some servers os_server_action: action: start cloud: openstack region_name: andromeda server: cloudera-namenode
大多数OpenStack模块使用类似的选项。 因此,要重建服务器,我们可以使用相同的选项,但是要更改action
以rebuild
并添加我们要使用的image
:
os_server_action: action: rebuild image: 923569a-c777-4g52-t3y9-cxvhl86zx345
有许多系统管理员任务的模块,但是如果您没有要执行的任务,该怎么办? 使用和模块,它们使您可以像在命令行上一样运行任何命令。 这是使用的示例:
- name: run an opencli command command: "openstack hypervisor list"
您可以通过多种方式用Ansible执行日常sysadmin任务。 使用此自动化工具可以将最艰巨的任务转变为简单的解决方案,节省时间,并使工作时间更短,更轻松。
翻译自:
sysadmin默认密码
转载地址:http://nwnzd.baihongyu.com/