淫秽易怒的人

bigsudo的Python项目详细描述


bigsudo是ansible playbook的一个固执己见的命令行包装器。

功能

它接受作为第一个参数:角色名、路径或url或剧本路径 或网址:

bigsudo role.name # download role and run tasks/main.yml on localhost

bigsudo role.name update # do tasks/update.yml
bigsudo role.name user@host update # do tasks/update.yml on host
bigsudo role.name @host update # with current user
bigsudo role.name @host update foo=bar # custom variable
bigsudo role.name {"foo":"bar"} # also accepts json without space
bigsudo role.name -v # forwards any ansible-playbook argument

注意,bigsudo将自动调用ansible galaxy install on 在任何角色中都可以找到requirements.yml,递归地找到它得到的每个角色 要安装的Galaxy。这意味着yourlabs.docker/requirements.yml也将 如果您的回购协议有此要求,则由Bigsudo安装。yml:

- src: git+https://yourlabs.io/oss/yourlabs.docker

命令行解析的工作原理

两条黄金法则:

  • 默认情况下,bigsudo使用--become运行(好吧,它是“bigsudo”),以避免 这个,通过--nosudo。这只是因为我是根 忘记--become比我需要的--nosudo更频繁。
  • bigsudo将首先接受bigsudo参数,它们不以破折号开头, 它们要么是没有=的字符串,这意味着它们是位置的 bigsudo python函数的参数,或者是带=的字符串,这意味着 它们是bigsudo命令的关键字参数。
  • 从一个参数以破折号开头开始,所有参数都是 转发给Ansible。在传递 以破折号开头的参数。

因此,这两个调用是等价的:

bigsudo yourlabs.fqdn -e foo=bar
bigsudo yourlabs.fqdn foo=bar

但这不起作用:

bigsudo yourlabs.fqdn -v foo=bar

因为它将生成ansible将在其中查找的命令 foo=barplaybook:

ansible-playbook -v foo=bar ...

无论如何,bigsudo总是会打印出生成的ansible playbook命令行。

使用Gitlab CI持续部署

使用gitlab ci或drone ci,您可以定义多行env vars,即 $STAGING_HOST=deploy@yourstaging和用于$staging\u vars的json字符串:

{
  "security_salt": "yoursecretsalf",
  "mysql_password": "...",
  // ....
}

然后,您可以在.gitlab-ci.yml:

image: yourlabs/python

# example running tasks/update.yml, using the repo as role
script: bigsudo . update $staging_host $staging_vars

# example running playbook update.yml
script: bigsudo ./update.yml $staging_host $staging_vars

本章介绍在 .gitlab-ci.yml:

deploy-staging:
  image: yourlabs/python
  stage: deploy

  script:
  - mkdir -p ~/.ssh; echo $staging_key > ~/.ssh/id_ed25519; echo $staging_fingerprint > ~/.ssh/known_hosts; chmod 700 ~/.ssh; chmod 600 ~/.ssh/*
  - bigsudo . $staging_host --extra-vars=$staging_vars

  only:
    refs: [master]

  environment:
    name: staging
    url: https://staging.example.com

使用以下命令创建ED25519部署密钥:

ssh-keygen -t ed25519 -a 100 -f deploy.key

将部署密钥上载到目标:

ssh-copy-id -i deploy.key user@staging.host

将其添加到环境变量$staging_key

cat deploy.key

还要在$staging_fingerprint

中添加主机指纹
ssh-keyscan staging.host

$staging_varsenv var中添加任务所需的所有变量 作为json dict,如前一章所述。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
servlet控制器中的java空指针异常   java部署Maven项目无法添加jersey原型   Java邮件跳回了邮件的地址   java Android Studio:尝试调用虚拟方法“void Android”。小装置。图像按钮。空对象引用上的setImageResource(int)“”   java如何在服务中使用倒计时更新文本   java如果没有更多的异常,我如何停止获取输入?   java将页码放入文档中   名为[<name>]的java hibernate参数不存在   java如何在JTextPane中动态生成新行?   java LinkedList对“get()”使用迭代器以加快迭代速度   java Junit 4.12问题测试异常   rest密钥斗篷从Java导入领域“创建”?   如何并行执行oracle java存储过程   java如何保存用户上次读取的页码   java操作系统。getSystemCpuLoad()始终返回相同的值