今天的都很重要呀!!
有些比較難的個人理解有限,就只PO比較簡單的部分
(如果理解有誤,再麻煩大大們留言勘誤,感恩)
有用到時還是建議查官網手冊,或GOOGLE找解答喔~
閒聊的部分打在結語好了~GOGO~
# 假設你已在ansible專案目錄了
$ mkdir -p /group_vars/all/
$ export EDITOR=vi # ansible 2.1以前預設是vim(有的電腦沒vim,還是指定一下編輯器)
$ cd /group_vars/all/
$ ansible-vault create vault
Vault password: # 會問你vault密碼,這個檔案要設定的vault password
Confirm Vault password:
# 接著會用vi編輯檔案,你打明文
---
vault_db_pass: GWF@$TVASV
# 實際上會變成密文
$ANSIBLE_VAULT;1.1;AES256
31326664313635666139646530343436636439393631313266353235393335643639343932623535
3561366265333735616236353263633134363564653766310a303932653039613161623864366263
33386537306131323166663564663436613136393461643263346465613134393966333763646330
3561366265333735616236353263633134363564653766310a303932653039613161623864366263
33386537306131323166663564663436613136393461643263346465613134393966333763646330
633163626635303238306233633164313566663337306323830623
# 後續俢改
$ ansible-vault edit vault
問題來了,我的ansible專案怎麼用vault裡的變數呢?
設定在ansible.cfg的vault_password_file
例如:
# 把密碼放在一個檔案,只有owner可以讀寫(0600=>110 read/write/exec)
$ echo "your vault's password" > ~/.vault_passwd.txt
$ chmod 0600 !$
# 「!$」補充說明:
# 「!$」是指「上個command」的「end」
# 例如:
# $ grep -i joe /some/long/directory/structure/user-lists/list-15 # /some/.../list-15 就是這個the end of the command
# $ vi !$
# 等於 $ vi /some/long/directory/structure/user-lists/list-15
# ansible.cfg
vault_password_file = ~/.vault_passwd
看過簡單的範例,我們來review一下官網文件囉
https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#best-practices-for-variables-and-vaults
這是官方建議的作法,代表,很多高級專案也可能長這樣
了解best practices對你看網路上的專案有幫助
官方建議把「變數名稱」放在未加密的檔案,這樣才好維護
只加密「變數的內容」(用vault加密
在跑Playbook時,Ansible會在沒加密的文件中找到「變數名稱」,而所有「機敏內容」都在加密文件裡
Ansible Vault可以加密Ansible的任何結構化文件(檔案)、資料都可以加密
包括
從版本2.3開始,Ansible支持加密YAML文件中的單個值,使用!vault標記讓YAML和Ansible知道它使用特殊處理。下面將詳細介紹此功能。
# 加密
$ ansible-vault create foo.yml # 建新檔案,用create
$ ansible-vault encrypt foo.yml bar.yml baz.yml # 已經存在的檔案,用encrypt
# 預設用AES加密(對稱式金鑰),所以檔案如果被copy走,可以被慢慢暴力破解
# 所以valut password最好不要跟其他密碼一樣,降低風險
# 修改
$ ansible-vault edit foo.yml
# 只看不改
$ ansible-vault view foo.yml bar.yml baz.yml
# 設新密碼(rekeying)
$ ansible-vault rekey foo.yml bar.yml baz.yml # 會先問舊密碼,再輸入新密碼
# 解密
$ ansible-vault decrypt foo.yml bar.yml baz.yml
# Use encrypt_string to create encrypted variables to embed in yaml
這段有關--vault-id我看不太懂,怕被誤導的請略過,或直接看原文喔
# 對字串加密
$ ansible-vault encrypt_string --vault-id a_password_file 'foobar' --name 'the_secret'
# 字串: 'foobar'
# 變數名稱: 'the_secret'
# --vault-id: 密碼
# 密碼檔: a_password_file
# 幫--vault-id,設一個label,dev
# --vault-id => label@password
$ ansible-vault encrypt_string --vault-id dev@password 'foooodev' --name 'the_dev_secret'
$ ansible-playbook --vault-id /path/to/my/vault-password-file site.yml
$ ansible-playbook --vault-id @prompt site.yml # 提示輸入密碼
$ ansible-playbook --ask-vault-pass site.yml # 不知道有何差別?
$ ansible-playbook --vault-password-file dev-password site.yml
# 前面應該有講過了
# 可設定環境變數DEFAULT_VAULT_PASSWORD_FILE,指定預設的密碼檔位置
# 也可餵多個密碼檔
$ ansible-playbook --vault-id dev@dev-password --vault-id prod@prompt site.yml
最常用的,
例如:dev:開發環境、prod:正式環境
$ ansible-playbook --vault-id dev@dev-password --vault-id prod@prompt site.yml
https://docs.ansible.com/ansible/latest/user_guide/playbooks_vault.html
有3種作法
$ ansible-playbook site.yml --ask-vault-pass
$ ansible-playbook site.yml --vault-password-file ~/.vault_pass.txt
$ ansible-playbook site.yml --vault-password-file ~/.vault_pass.py
export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt
通常都寫到 ~/.bash_profile 或 ~/.bashhrc
官網文件:
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#information-discovered-from-systems-facts
https://docs.ansible.com/ansible/2.7/user_guide/playbooks_variables.html
$ ansible 127.0.0.1 -m setup
"ansible_en0": { # 這邊我的網卡就不是eth0,而是en0,ubuntu應該就是eth0
"device": "en0",
"ipv4": [
{
"address": "172.20.10.5",
"broadcast": "172.20.10.15",
"netmask": "255.255.255.240",
"network": "172.20.10.0"
}
],
- host: databse
become: true
tasks:
- name: ensure mysql listening on all ports
lineinfile: dest=/etc/mysql/my.cnf regexp=^bind-address # 用正則表達式找line
line="bind-address = {{ ansible_eth0.ipv4.address }}" # 讓我的mysql bind正確的ip
https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html#role-default-variables
---
dependencies:
- role: common
vars:
some_parameter: 3
- role: apache
vars:
apache_port: 80
- role: postgres
vars:
dbname: blarg
other_parameter: 12
假設有一個role,叫mysql
/mysql/defaults/main.yml 定義了這個role預設的變數,內容如下
---
db_name: myapp
db_user_name: dbuser
db_user_pass: dbpass
db_user_host: localhost
mysql/tasks/main.yml 就能用這些變數
- name: create database
mysql_db: name={{ db_name }} state=present
- name: create user
mysql_user: name={{ db_user_name }} password={{ db_user_pass }} priv={{ db_name }}.*:ALL
host='{{ db_user_host }}' state=present
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html
跳離role/,我們回到專案的根目錄
---
db_name: demo
db_user: demo
db_pass: "{{ vault_db_pass }}"
例如:kube-ansible,/inventory/group_vars/all/vars
然後在ansible-playbook的yaml檔,要用role時,就可以傳參數進去
---
- hosts: database
become: true
roles:
- role: mysql
db_user_name: "{{ db_user }}" # 把/group_vars/all/vars 的變數傳給role mysql
db_user_pass: "{{ db_pass }}"
db_user_host: '%'
# 也可以寫成一行
- { role: mysql, db_user_name: "{{ db_user }}", db_user_pass: "{{ db_pass }}", db_user_host: '%'}
今天11/11,個人反而覺得是閃光節,
原為:出雙入對,雙雙對對
實際上被操作成「電商節」
SATA3 的 SSD 變好便宜喔,忍住忍住,
為了2年後換 macbook 不能再亂買其他 3C 產品惹
昨天udemy變成300$(最近比較少變300$了,幾乎都360$)
又買了幾門課 = =
依我買課的coco(一個月超過3門)的用量來看,
pluralsight好像比較便宜na
(用ios訂閱的話,一個月890$,如果有更便宜的訂閱方式歡迎留言分享喔)
不過我的udemy已經買很齊了,而且一堆買了都還沒看,還是忍住別再去訂閱pluralsight
可能明年要一次參加多個鐵人賽,才能逼自己把買的課程看完了 = ="
不過google了一下,Visual Studio Dev Essentials(免費),
可以免費用pluralsight 3個月,
等有時間學的時候再來啟用&評估,聽說課程很優質,很多課又有中文字幕
https://samtsai.org/2017/09/15/160-visual-studio-essentials-pluralsight-free/
https://docs.microsoft.com/zh-tw/visualstudio/subscriptions/vs-pluralsight