ansible 在参数中传入密码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible 在参数中传入密码相关的知识,希望对你有一定的参考价值。
参考技术Aansible是一个基于python开发自动化的运维工具,这个工具强大的地方是,被操作的机器上不需要安装任何软件,只需要在发起操作的机器上安装就可以使用了。而且ansible支持很多模块,还可以基于ansible二次开发,添加自己的功能
ansible功能和模块很多,这次我们只讲其中的一个。在命令行中,直接把要操作主机的用户名和密码传入。别的东西等以后有时间会继续写的,毕竟996太累了
正常使用ansible一般都是 在 /ect/ansible/hosts 中配置远程主机的用户和密码
一般写法
然后使用命令行
ansible test -m ping
看到截图,说明已经ping通,说明配置是没问题的
有时候,需要单独指定连接一台主机,或者只是临时连接一次,这时候没必要在 hosts 文件中配置,可以直接在命令行中传入主机ip和连接用户名和密码
ansible all -i "192.168.199.209:22," -m ping -e"ansible_user=root ansible_password=123456"
注意 :ip后面一定要有一个","
截图中,说明没问题
好了先写这些,ansible模块跟多,功能很多。尤其是playbook这个东西,更是牛逼,以后有时间继续写
ansible中playbook使用
palybook使用
#####定义/etc/ansible/hosts
两种方式:
基于ssh密码登录
不配置免密码登录,需要在hosts文件中配置
第一种:基于ssh密码登录
参数一:inventory
ansible的主要功能用于批量管理主机操作,便捷的使用部分主机,可以在inventory file中分组
默认的inventory file为/etc/ansible/hosts
1.inventory文件格式
同一主机归并到一个或者多个组中,主机使用非默认的22端口,也可以在主机名称后加冒号端口标明
www.ab.com
[webservers] www.abc.com:222 www.abcd.com [dbservers] db1.abc.com db2.abc.com db3.abc.com
如果主机遵循相似的命名模式,可以使用列表标记各个主机
[webserver] www[01:30].example.com [dbserver] db-[a:f].example.com
2.主机变量
可以在定义主机时添加远程主机变量便于在playbook中使用{http中的变量,在j2中配置}
[webserver] www.ab.com http_port=80 maxRequestsPerChild=808 www.abc.com http_port=8080 maxRequestsPerChild=909
3.组变量
赋予指定组内的所有主机在playbook中用的变量(vars)
可以调用组里面的变量。
[webserver] www.ab.com www.bc.com [webserver:vars] host_port=80 maxRequestsPerChild=890
4.组嵌套
组还包括其他组,可以在其他组中指定变量,只能在ansible-playbook中使用,ansible不支持
children中包括apache,nginx的主机。,共四台主机
[apache] http1.abc.com http2.abc.com [nginx] nginx1.abc.com nginx2.abc.com [webservers:children] apache nginx [webservers:vars] host_port=80
ansible基于ssh连接inventory可以指定远程主机,通过参数指定交互式,参数如下:
ansible_ssh_host ansible_ssh_port ansible_ssh_user ansible_ssh_pass ansible_sudo_pass ansible_connection ansible_ssh_private_key_file ansible_shell_type ansible_python_interpreter
第二种:不基于ssh免密码登录
即便是我们没有做关于秘钥的认证,我们也会自动使用账户和密码来登录该主机。
[webservers] 192.168.133.2 ansible_ssh_user=root ansible_ssh_pass=123456 192.168.133.3 testvar="2.100
####基本结构
module_name: module_args 模块名和模块参数
- host: webserver remote_user: task: - task1 module_name: module_args - name: test connection ping: remote_user; www sudo: yes command: /sbin/setenforce 0 shell: /usr/bin/somecommand || /bin/true ignore_errors: True - task2 module_name: module_args - host:dbservers
在运行playbook是中途发生错误,可能会回滚,更正后,重新执行一次。
可以指定使用sudo的方式远程执行任务,用sudo到root用户执行命令。
众多模块中,只有command和shell模块仅使用给定一个列表而无需使用"key=value"
命令或脚本的退出码不为0,可以使用如上替代,命令不成功强行成功。
使用ignore_errors忽略错误信息
handlers:
在notify中列出的操作为handler,比如之前配置了apache的配置文件,http.conf端口发生变化后,重新执行ansible-playbook后,查看远程的端口,并未发生变化。需要用到notify
引入变量:
vars:在后面添加变量名,然后再引入变量,必须加{{}},用变量名替换。
- host: webservers remote_user: root
vars:
- packages: httpd tasks: - name: install httpd packages yum: name={{ packages }} state=lastest - name: install configuration file for httpd copy: src=/root/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf notify: - restart httpd - name: start httpd service service: enabled=true name={{ packages }} state=started handlers: - name: restart httpd service: name={{ packages }} state=restarted