Initial commit 🚀 🐒
This commit is contained in:
commit
ebab5d44f0
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"ansible.python.interpreterPath": "/run/current-system/sw/bin/python",
|
||||
"ansible.validation.lint.path": "",
|
||||
"ansible.validation.lint.enabled": false
|
||||
}
|
150
README.md
Normal file
150
README.md
Normal file
@ -0,0 +1,150 @@
|
||||
# Ansible Starter Kit
|
||||
|
||||
Easy way for my homies to start up an ansible project for their homelab or local machine.
|
||||
|
||||
# Prerequisites
|
||||
|
||||
The ideal setup for a homelab is to have:
|
||||
|
||||
- The same username/password in all vms/hosts so you don't have to type a different password for each host
|
||||
- SSH key auth on each host so you don't have to type a password at all
|
||||
|
||||
# Ansible basics
|
||||
|
||||
I'll explain the basic units of an ansible project. For this example we're going to assume you want to mount
|
||||
an NFS share in all your hosts.
|
||||
|
||||
From bottom to top we have:
|
||||
|
||||
## Tasks
|
||||
|
||||
A task is the lowest unit in an ansible project.
|
||||
|
||||
A task could be:
|
||||
|
||||
- Creating a directory
|
||||
- Installing an os package (curl, docker, nfs-common, etc)
|
||||
- Starting a docker container
|
||||
|
||||
### Examples
|
||||
|
||||
```yml
|
||||
- name: Add SSH key for remote user
|
||||
ansible.posix.authorized_key:
|
||||
user: javi
|
||||
state: present
|
||||
key: "{{ lookup('file', '/home/javi/.ssh/homelab_keypair_ed25519.pub') }}"
|
||||
```
|
||||
|
||||
```yml
|
||||
- name: Ensure NFS client is installed
|
||||
ansible.builtin.package:
|
||||
name: nfs-common
|
||||
state: present
|
||||
become: true
|
||||
```
|
||||
|
||||
## Role
|
||||
|
||||
A role is a self contained, re-usable unit that will give a meaningful result. Think of it like a class in a program.
|
||||
|
||||
Roles have a list of tasks, as well as variables and files associated with those tasks. All contained in a folder.
|
||||
|
||||
A role can look like:
|
||||
|
||||
```
|
||||
roles/
|
||||
portainer/
|
||||
├── defaults/
|
||||
│ └── main.yml # Default variables
|
||||
├── files/
|
||||
│ └── ... # Static files to be copied (e.g., configs, scripts)
|
||||
├── handlers/
|
||||
│ └── main.yml # Handlers (e.g., service restart)
|
||||
├── meta/
|
||||
│ └── main.yml # Role metadata (e.g., dependencies)
|
||||
├── tasks/
|
||||
│ └── main.yml # Main list of tasks to execute
|
||||
├── templates/
|
||||
│ └── ... # Jinja2 templates
|
||||
├── vars/
|
||||
│ └── main.yml # Non-overridable variables
|
||||
└── README.md # Optional: Document what this role does
|
||||
sshkey/
|
||||
├── defaults/
|
||||
│ └── main.yml # Default variables
|
||||
├── files/
|
||||
│ └── ... # Static files to be copied (e.g., configs, scripts)
|
||||
├── handlers/
|
||||
│ └── main.yml # Handlers (e.g., service restart)
|
||||
├── meta/
|
||||
│ └── main.yml # Role metadata (e.g., dependencies)
|
||||
├── tasks/
|
||||
│ └── main.yml # Main list of tasks to execute
|
||||
├── templates/
|
||||
│ └── ... # Jinja2 templates
|
||||
├── vars/
|
||||
│ └── main.yml # Non-overridable variables
|
||||
└── README.md # Optional: Document what this role does
|
||||
|
||||
```
|
||||
|
||||
However, only the `defaults` and `tasks` subfolders and subsequent `main.yml` are required. Everything else is optional.
|
||||
|
||||
A role can be:
|
||||
|
||||
- Mounting a share
|
||||
- Deploying a docker container with all its requirements like a database and mapped volumes
|
||||
|
||||
# Playbook
|
||||
|
||||
A playbook combines roles and task to create a final state in a host or group of hosts.
|
||||
|
||||
A playbook can be:
|
||||
|
||||
- Make sure all your hosts have sshkey auth, portainer, docker and an nfs share mounted.
|
||||
- Deploy a suite of apps to a host or multiple hosts
|
||||
|
||||
## Example
|
||||
|
||||
```yml
|
||||
---
|
||||
- name: Deploy apps to apps-1 node
|
||||
hosts: apps
|
||||
become: true
|
||||
roles:
|
||||
- role: apps/kan
|
||||
vars:
|
||||
port: 7070
|
||||
- role: apps/memos
|
||||
vars:
|
||||
port: 7071
|
||||
- role: apps/vaultwarden
|
||||
vars:
|
||||
port: 7072
|
||||
- role: apps/erugo
|
||||
vars:
|
||||
port: 7073
|
||||
- role: apps/tianji
|
||||
vars:
|
||||
port: 7074
|
||||
- role: apps/stirling-pdf o
|
||||
vars:
|
||||
port: 7075
|
||||
- role: apps/dumbware-todo
|
||||
vars:
|
||||
port: 7076
|
||||
pin: 8989
|
||||
- role: apps/dumbware-drop
|
||||
vars:
|
||||
port: 7077
|
||||
pin: "8989"
|
||||
```
|
||||
|
||||
# Setup
|
||||
|
||||
1. Clone this repo `git clone git@gitgud.foo:javif89/ansible-starter-kit.git [your project name]`
|
||||
2. Run `setup.sh` to set up the vault password and become password
|
||||
3. Set up your hosts in `hosts.yml`
|
||||
4. Start making your roles and playbooks
|
||||
|
5
ansible.cfg
Executable file
5
ansible.cfg
Executable file
@ -0,0 +1,5 @@
|
||||
[defaults]
|
||||
remote_user = ansible
|
||||
inventory = inventory/hosts.yml
|
||||
roles_path = ./roles
|
||||
vault_password_file = ~/.ansible-vault-key
|
96
inventory/group_vars/all.yml
Normal file
96
inventory/group_vars/all.yml
Normal file
@ -0,0 +1,96 @@
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
38333861353432643165366435353534316564346533666439376631373562366530386636623333
|
||||
6130343936376163336432366437623062643161636466640a383232343564636234376330323138
|
||||
37393731643030313230613363343639363737393364346231643835613532636530363964383933
|
||||
3834343936353965390a313439663463626461376461636462316237366430356437346164393034
|
||||
38633331646465666165343365616366623636613264663062613238656466326537373135393234
|
||||
38623034306461386132373262666532633562376532303762356663343930623464376661366238
|
||||
33373638386366643030366632636138653032633436373932613261656331633663643839306633
|
||||
39613136306130626635393333366136646665393932383563373739323730396633363334643639
|
||||
36323337336563616165626463306637653865643931613731636233313061616130623662393465
|
||||
63366131643135623337313735386566616663343263353561316132343138653761303436386433
|
||||
64653736616439623331373865383439343637343737313466363265333033663836633635623732
|
||||
30643137633738356665326138363734623766613462323831623931633163373933353661653434
|
||||
35343466363132663765623739336136656332333932303332363164366630376638353166316636
|
||||
31653133386461323532666661363865383430653230636233616238356431623462316133633239
|
||||
34316561333530353166626632653566333966326663383635323165356231386232346263363666
|
||||
61366430353239353732663437353165353562313438383063393935306534646165336232333861
|
||||
32633138323036323334343866333963353965303536373930336164323565333862353032336566
|
||||
39613263303966343337393165633866323233653132626264316238313131663961613037643865
|
||||
35376138643934383435636534343231303933396138643231613336613536333961333562343963
|
||||
31376438366438346231656364303535336465623237336263383761363630623632356335326231
|
||||
61366132613062353833613162623634383134666334366435646238343462396535336534316264
|
||||
35326461653331636462366536653430646438626562373635613464313031666434333732616239
|
||||
61383536623762653463363031343332393166646264663031656531363761666364653866326230
|
||||
33363264663366653930616133363539633463306434653732383435613430626439313935633162
|
||||
62323366653639343063353662383265626538646361383030396533366635353830383365636435
|
||||
36636433393635633237316131616630383464313535303137376131646566383366333935303830
|
||||
34663630613438613836393333626463623466393831303833626666636338356533616436636331
|
||||
32393665346538353539633634303161616662366433386139343034333963336630353634346232
|
||||
63333561326532336533326333613961643134306264373730346137653962663930326261333763
|
||||
32353264616333313263343964663465636235333438343334393963653530663130366133353031
|
||||
64626537663362316239643436646236636361656365373232663931613634333465643137313964
|
||||
31323464303432346337616530333135346166623561623531313561633533643161363930323265
|
||||
32363538323134383434316332383064663437653161316162636339663036316139633636646131
|
||||
34343939383935623333613835613431346532323530366331613065666566323731663336623137
|
||||
36653165623235343832653438393836353630663063613337346364393439303738656564626432
|
||||
64613863376463343433303933656163666532326430383863383636386331643265623963653730
|
||||
31666430303666373030343831383436376666346236646231346565643564656339326231383337
|
||||
32386239646634643261393531636666666637386633396136653661373835636237323031333434
|
||||
31633237633566313131306261613834356139306436393862333533336534383662663837626464
|
||||
63653831373235373638303864323531623965333662386239396637636562373632393365663062
|
||||
61333934613865626639393236303562643165316466386461636239373336623965333531303335
|
||||
63393030326230303537383431663634616133353734353835636565326261386165633730386665
|
||||
61363736653762326634316634663530306163366165303464373833633363613338383330353062
|
||||
62313331343830323063663363386566373964356566313638653331336366343236356565656331
|
||||
61326466653362326337626532353637636535373762383034653464313961353430666132376163
|
||||
63323636393331376565343037613631323130646466656531663335373461653063353166346336
|
||||
32613564373634663863343036623038656462643532653539396538646532383161333535313164
|
||||
66306532393137393736316330383466646265633539326437643039643037393735306136383337
|
||||
35353465643762313762653938376331356232356131336131616531303162383737623736363130
|
||||
38336634653564363564323964356564313665396461623836633533633534653961323632653766
|
||||
39383236663664643666333730623731663438326539346135326564326666396463323661393132
|
||||
35343862653264323564343730313938663664663035303332333163633137323661323431343138
|
||||
66336666386635643662323431626636636231666561396438336234366331616138323636336664
|
||||
36396133323937306463386261363766623366663965623361313264663861626161366166366237
|
||||
36393962613135326339623261333635326138336466306132333230643536376334386166346364
|
||||
61643231363737656131363935626433373164363161646365633536383563343936653333333832
|
||||
33383565346366616365363030646432363633663537316335376333313236616637633066333664
|
||||
63313039656664663664393633353466376264356161343532353838373366393835653134353438
|
||||
61396164636566313535656533396332316565336664363034353235643635616564663563633338
|
||||
32313662666566336437366666376630336466373831343431636662323431393061326139326537
|
||||
35303362366338383230643734333533323535303534303637623136613634333436656131376635
|
||||
30623736356634616366323563636535633530623435613634636662636436303337373762393734
|
||||
63363637323733306532343239303030626135663366333763623933613034333339323636653338
|
||||
37646665343632363466383762623763363238633265333166396165633461666662303332373164
|
||||
30356231356132323037396231613939353463656333613735376562323837323430623665373364
|
||||
63656238356161303462366130636236633238623861373830323237376563353934356239656539
|
||||
62346638643263383636666437646466393361366465366362336634663636306230373466366266
|
||||
38353133383937336336633239373739663731666162643037623630323739363464623763353163
|
||||
36653733663138386432323465383537383137623333333933366232323934623730613139656536
|
||||
39623564316135373830316238396664323663663137653130326163356566653630613662613638
|
||||
32626261383533393833633539633330383537323534346134366333346438323232336337623861
|
||||
35306632356165313063373738303130386436396532616365313633656637373362313639626338
|
||||
36616665386663303636323264623839303562303064306139333263343839323436333930393136
|
||||
36663531643363643537636437646266643032616437656239666539653163343935633366646534
|
||||
36623935356565653831366462653830393465353065386130303065626365663235366530303431
|
||||
63353635653163303138383163663931356139626264383331346532663961316261393832626430
|
||||
66303435393739303461363731363733646534363766626462333761623537343734343833393634
|
||||
31356537653630363563313539356535663032613538303264633864396365613366386366656336
|
||||
37643666636436626162636234333938303266393162393933393038366437613165366630386438
|
||||
37313634656632653238383134653039323739643366343631343530386237336139313164393133
|
||||
64653638363662333461323365333861396266653238306530613064316362663131633461366161
|
||||
32633835393832646530623033346238343761393036353137626463613139393839616432626263
|
||||
35663232323734333631613139666366666436653566653064393666356165336439303937326637
|
||||
36633438623933323964303065313332373762346463343263386439646533306332363136386434
|
||||
34363236383733323232306264613137383831633534666337356137316433656238363864646138
|
||||
39303661383963313833323330656666373536303931383464343036663035616630343063383139
|
||||
63653263323533303933653138666138336530633162653533336466353235366333643835313365
|
||||
38303462623430356339323731646238636663393838653466323030653866646435323636343337
|
||||
37316336383234323336383061666235663539616631663936613430313138643061393439383636
|
||||
31656535366361326566666264656465633337643365393765303732633238653231623735313638
|
||||
36303537393038306165393365343334373333393933356133313264396236623936343763366330
|
||||
37373262393230326132393237633335353964346434616137636662343635306632373532663830
|
||||
66333039613330306231363364323861363964313336666165616635363166623435636366343364
|
||||
64356364373832366435656539613238646538623035346434346364386434623461653763656135
|
||||
646161643166613037303031663863666465
|
2
inventory/group_vars/cluster_prep.yml
Normal file
2
inventory/group_vars/cluster_prep.yml
Normal file
@ -0,0 +1,2 @@
|
||||
iscsi_target_ip: nas.lan.xbazzi.com # TrueNAS IP
|
||||
iscsi_target_iqn: iqn.2005-10.org.freenas.ctl:pve-iscsi
|
11
inventory/host_vars/pve1.yml
Normal file
11
inventory/host_vars/pve1.yml
Normal file
@ -0,0 +1,11 @@
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
61636264373765333930663036663164363332363765353836326361383438303065623938353338
|
||||
3861383264346132613466666363623562383437643464640a343830356164323732313631666532
|
||||
61646636633062333539393266366537613037646137376463343638356562383538376534376533
|
||||
6361373233623565310a343466666233623138316439616239376266343932616366636232633735
|
||||
32623335633732653637336163666265383066303565386261353539656333656337393530323639
|
||||
65313233376434343761653264626563653031623236616362396262643463656535613237383435
|
||||
35343439643330343362333362396338646162313063623334326264316235636333376434626535
|
||||
34353332653138653765323936346536323038366238323932393335363762623237653962616664
|
||||
37653963633936653866656537663435333731343937616237353734383537316361633836363666
|
||||
3064366264653335663331383332656638323335633731353531
|
11
inventory/host_vars/pve2.yml
Normal file
11
inventory/host_vars/pve2.yml
Normal file
@ -0,0 +1,11 @@
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
64366635666462636332636564316263363561326366646531626365633431373934306334373432
|
||||
6635396564336238383563613231373339616164326630330a333031643734653738666537386337
|
||||
34366264356237613534356330393130376262383361636638316562636463633239643264343564
|
||||
6236663764623439360a333165363430373561336334663739353738343364656432363939383234
|
||||
32343363373164303130376133633265656564363532663336326263636464623339353966366430
|
||||
33313339343534386664663361616438346136643361346264393563633630333562346338366530
|
||||
33666261633236363833343931353535366565363733326661626338363030383365383332373837
|
||||
62623537396666363265346333366661396139363732666261343132333237636335363338303033
|
||||
61376630333263313166356334383931326665383631363961633066396539393963313433373763
|
||||
6362323162346164633639623064376265313764353032663434
|
11
inventory/host_vars/pve3.yml
Normal file
11
inventory/host_vars/pve3.yml
Normal file
@ -0,0 +1,11 @@
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
34386433623163393561646137313364663363363138336164363561666533323565653464373961
|
||||
3061643566303432623963636530303530306433343666350a663933663935643635366561336630
|
||||
37653433666364366431363032633738646436626336323037343730376662363266333038613064
|
||||
6131363532623766320a656330613439363562653263666138336639663965303236356139336630
|
||||
33663961393438316333333030663236623934666632346566363739316262346538626434393066
|
||||
37663563363038393137353336393233316630323734346439663836313065386536326465626632
|
||||
30636165626132376138326331663965623965353561616536376266313430373839353230653332
|
||||
30653866323231333335313261636336333161363334663734633534343561623764393531386239
|
||||
62343136336332666237353863623330336564313130336239323639303766303361616664623331
|
||||
3638656138333862366138366539666232376164666239323132
|
36
inventory/hosts.yml
Normal file
36
inventory/hosts.yml
Normal file
@ -0,0 +1,36 @@
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
64363164666338376439386465623133383736636361353661303464666164616232366431626333
|
||||
3437666365663839343866613537323366333564646234350a363434303639333535643039313039
|
||||
61306663306134666139303061316163323033353366386233643039613365386536333336663864
|
||||
6463316237376364660a313639623233326634366635313962373830393165343130363337353135
|
||||
39616535373561353064373139356362663739363138326237393630326535353961623733323766
|
||||
61366665346365626637626531666434336366643061663363323237613065613638353731663834
|
||||
63386361646161303339653433316232323135323561363161643833373865366162316465383930
|
||||
66346466346433643264633162326665613731383036616437643537383833616262646331356638
|
||||
61336331636334343465316366323861326365386136303565363564343438613866326162613930
|
||||
35643230316237383865616164653038306339306130316534303230383966353934356366633961
|
||||
64623761646138633931356230633961353361376239656364326338646436663831323631346531
|
||||
37633261646635633665663037663733313332396666636435383166343262663834383633646335
|
||||
39383137383436643865383065613533636132326331303731306465636465613136646462643336
|
||||
63386635346534343961626339393330633638633263326131313065353164353833333833326164
|
||||
36613462393334333166613765343938393132363165316532396237636137323262616631393930
|
||||
32323437316430306532653937613937663963613738323231366565313838656434656532623062
|
||||
36633561376536373036323330623539383763306561383136633434623062376266333361306266
|
||||
35333431626230316630626663376462653838656330376266396664323238323234306362343633
|
||||
66333463646665306561313033313464633231316366633031303863636264333363366666376163
|
||||
31663464643331666461353331663936656539616235353530366238326333663966386639353334
|
||||
65626330613330303930643835393365383739313831333235633261356331346161333765323335
|
||||
39393534393166383161376530623739336635303363393633653666633363656334653961643964
|
||||
65373237333338313162626636366264356663616261633734613330626562666538313165663562
|
||||
33393336613963353330336238656433613363306535323930623037663463613136643735613337
|
||||
63396334626334373737663461386663653865626136353761666531623563643465356366666266
|
||||
32393536643638303862353234366233323566623862316636323866323336366434376463306661
|
||||
31313133313639313635333335643836373437306535383734373031306539643738326238373366
|
||||
31393734383738636333643437393238336365376332643861636435303036653065613164363031
|
||||
63373632343634303236653036636134306237663462633861366630633034333832646362303236
|
||||
32636166366430343063316333636134616236373866373865316261626239376639366537306461
|
||||
33636265313262366264306331313039363734633766323932363465353032633764373332326466
|
||||
31363034326161643062343230333435343435623336653163323365363233643231306538373939
|
||||
35643338396661356332343431383232376238626434613462306437653537343530643030333735
|
||||
38393532303533323430373066343938396533656564663731393738363863663864356462663565
|
||||
656438663662326136393134643136663737
|
5
playbooks/apply-firewalld.yml
Normal file
5
playbooks/apply-firewalld.yml
Normal file
@ -0,0 +1,5 @@
|
||||
- name: Apply firewalld config
|
||||
hosts: staging-vm
|
||||
become: yes
|
||||
roles:
|
||||
- role: provision/alma/firewall
|
6
playbooks/backup-pve.yml
Normal file
6
playbooks/backup-pve.yml
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
- name: Backup /etc/pve from all Proxmox nodes
|
||||
hosts: pve-nodes
|
||||
become: yes
|
||||
roles:
|
||||
- role: utility/pve_backup
|
BIN
playbooks/backups/pve1.tar.gz
Normal file
BIN
playbooks/backups/pve1.tar.gz
Normal file
Binary file not shown.
BIN
playbooks/backups/pve2.tar.gz
Normal file
BIN
playbooks/backups/pve2.tar.gz
Normal file
Binary file not shown.
BIN
playbooks/backups/pve3.tar.gz
Normal file
BIN
playbooks/backups/pve3.tar.gz
Normal file
Binary file not shown.
6
playbooks/configure-pve.yml
Normal file
6
playbooks/configure-pve.yml
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
- name: Configure networking for a new node
|
||||
hosts: pve-nodes
|
||||
become: true
|
||||
roles:
|
||||
- role: pve/setup_networking
|
15
playbooks/deploy-dbgate.yml
Normal file
15
playbooks/deploy-dbgate.yml
Normal file
@ -0,0 +1,15 @@
|
||||
---
|
||||
- name: Deploy DBGate container
|
||||
hosts: prod1
|
||||
become: true
|
||||
roles:
|
||||
- role: apps/dbgate
|
||||
vars:
|
||||
directory: "pg-dev"
|
||||
container_name: "postgres-dev"
|
||||
port: 7000
|
||||
- role: services/postgres
|
||||
vars:
|
||||
directory: "pg-beta"
|
||||
container_name: "postgres-beta"
|
||||
port: 7001
|
16
playbooks/deploy-postgres.yml
Normal file
16
playbooks/deploy-postgres.yml
Normal file
@ -0,0 +1,16 @@
|
||||
---
|
||||
- name: Deploy PostgreSQL container
|
||||
hosts: prod1
|
||||
become: true
|
||||
roles:
|
||||
- role: services/postgres
|
||||
- role: services/postgres
|
||||
vars:
|
||||
directory: "pg-dev"
|
||||
container_name: "postgres-dev"
|
||||
port: 7000
|
||||
- role: services/postgres
|
||||
vars:
|
||||
directory: "pg-beta"
|
||||
container_name: "postgres-beta"
|
||||
port: 7001
|
6
playbooks/example.yml
Normal file
6
playbooks/example.yml
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
- name: Example playbook
|
||||
hosts: vms
|
||||
become: true
|
||||
roles:
|
||||
- role: server/sshkey
|
5
playbooks/prep-pve-for-cluster.yml
Normal file
5
playbooks/prep-pve-for-cluster.yml
Normal file
@ -0,0 +1,5 @@
|
||||
- name: Prep all Proxmox nodes for clustering
|
||||
hosts: pve-nodes
|
||||
become: yes
|
||||
roles:
|
||||
- role: utility/cluster_prep
|
13
playbooks/provision-alma.yml
Normal file
13
playbooks/provision-alma.yml
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
- name: Provision AlmaLinux 9 VM
|
||||
hosts: staging-vm
|
||||
become: yes
|
||||
roles:
|
||||
- role: server/users
|
||||
- role: server/sshkey
|
||||
# - role: server/network
|
||||
# - role: server/firewall
|
||||
# - role: provision/alma/common
|
||||
# - role: provision/alma/nfs
|
||||
# - role: docker/install
|
||||
# - role: server/reboot
|
9
playbooks/sysprep-alma.yml
Normal file
9
playbooks/sysprep-alma.yml
Normal file
@ -0,0 +1,9 @@
|
||||
- name: Sysprep Alma Linux machine
|
||||
hosts: staging-vm
|
||||
become: yes
|
||||
roles:
|
||||
- role: server/users
|
||||
- role: server/sysprep
|
||||
- role: server/sshkey
|
||||
- role: server/network
|
||||
- role: server/reboot
|
0
roles/app/database/defaults/main.yml
Executable file
0
roles/app/database/defaults/main.yml
Executable file
20
roles/app/database/tasks/main.yml
Executable file
20
roles/app/database/tasks/main.yml
Executable file
@ -0,0 +1,20 @@
|
||||
---
|
||||
- name: Create app database
|
||||
ansible.builtin.include_role:
|
||||
name: postgres/database
|
||||
vars:
|
||||
database: "{{ app_name }}"
|
||||
|
||||
- name: Create app db user
|
||||
ansible.builtin.include_role:
|
||||
name: postgres/user
|
||||
vars:
|
||||
user: "{{ app_name }}"
|
||||
password: "password"
|
||||
|
||||
- name: Give app user full priviledges on DB
|
||||
ansible.builtin.include_role:
|
||||
name: postgres/priviledges
|
||||
vars:
|
||||
database: "{{ app_name }}"
|
||||
user: "{{ app_name }}"
|
4
roles/apps/dbgate/defaults/main.yml
Normal file
4
roles/apps/dbgate/defaults/main.yml
Normal file
@ -0,0 +1,4 @@
|
||||
docker_dir: "/data/docker/dbgate"
|
||||
port: "6001"
|
||||
app_port: "3000"
|
||||
container_name: "postgres"
|
19
roles/apps/dbgate/tasks/main.yml
Normal file
19
roles/apps/dbgate/tasks/main.yml
Normal file
@ -0,0 +1,19 @@
|
||||
- name: Create docker folder
|
||||
ansible.builtin.file:
|
||||
dest: "{{ docker_dir }}"
|
||||
state: directory
|
||||
mode: '0770'
|
||||
|
||||
- name: Put up the postgres container
|
||||
community.docker.docker_container:
|
||||
name: "{{container_name}}"
|
||||
image: postgres:17.4
|
||||
restart_policy: always
|
||||
state: started
|
||||
pull: true
|
||||
ports:
|
||||
- "{{ port }}:{{ app_port }}"
|
||||
env:
|
||||
CONNECTIONS: postgres_con
|
||||
volumes:
|
||||
- "dbgate-data:/root/.dbgate"
|
0
roles/docker/install/defaults/main.yml
Executable file
0
roles/docker/install/defaults/main.yml
Executable file
40
roles/docker/install/tasks/main.yml
Executable file
40
roles/docker/install/tasks/main.yml
Executable file
@ -0,0 +1,40 @@
|
||||
---
|
||||
- name: Install plugins-core to manage DNF repos
|
||||
ansible.builtin.dnf:
|
||||
name:
|
||||
- dnf-plugins-core
|
||||
state: present
|
||||
# - name: Install plugins-core to manage DNF repos
|
||||
# ansible.builtin.command: dnf -y install dnf-plugins-core
|
||||
|
||||
- name: Add Docker repo
|
||||
ansible.builtin.command: dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
|
||||
register: docker_repo
|
||||
|
||||
- name: Verify Docker repo added
|
||||
ansible.builtin.debug:
|
||||
var: docker_repo.stdout
|
||||
|
||||
- name: Install Docker Engine
|
||||
ansible.builtin.dnf:
|
||||
name:
|
||||
- docker-ce
|
||||
- docker-ce-cli
|
||||
- containerd.io
|
||||
- docker-buildx-plugin
|
||||
- docker-compose-plugin
|
||||
state: present
|
||||
|
||||
- name: Enable and start Docker Engine
|
||||
ansible.builtin.systemd_service:
|
||||
name: docker
|
||||
state: started
|
||||
enabled: true
|
||||
|
||||
- name: Verify with Hello World
|
||||
ansible.builtin.command: docker run hello-world
|
||||
register: docker_hello
|
||||
|
||||
- name: Test
|
||||
ansible.builtin.debug:
|
||||
var: docker_hello.stdout_lines
|
45
roles/docker/install/tasks/main2.yml
Normal file
45
roles/docker/install/tasks/main2.yml
Normal file
@ -0,0 +1,45 @@
|
||||
---
|
||||
- name: Update apt cache
|
||||
ansible.builtin.apt:
|
||||
update_cache: yes
|
||||
|
||||
- name: Install prerequisite packages
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- ca-certificates
|
||||
- curl
|
||||
state: present
|
||||
|
||||
- name: Create apt keyrings directory
|
||||
ansible.builtin.file:
|
||||
path: /etc/apt/keyrings
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: Download Docker GPG key
|
||||
ansible.builtin.get_url:
|
||||
url: "https://download.docker.com/linux/ubuntu/gpg"
|
||||
dest: /etc/apt/keyrings/docker.asc
|
||||
mode: '0644'
|
||||
|
||||
- name: Add Docker apt repository
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "deb [arch={{ docker_arch }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"
|
||||
filename: docker
|
||||
state: present
|
||||
vars:
|
||||
docker_arch: "{{ ansible_architecture | regex_replace('x86_64', 'amd64') }}"
|
||||
|
||||
- name: Update apt cache after adding Docker repository
|
||||
ansible.builtin.apt:
|
||||
update_cache: true
|
||||
|
||||
- name: Install Docker packages
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- docker-ce
|
||||
- docker-ce-cli
|
||||
- containerd.io
|
||||
- docker-buildx-plugin
|
||||
- docker-compose-plugin
|
||||
state: present
|
0
roles/docker/portainer/defaults/main.yml
Executable file
0
roles/docker/portainer/defaults/main.yml
Executable file
22
roles/docker/portainer/tasks/main.yml
Executable file
22
roles/docker/portainer/tasks/main.yml
Executable file
@ -0,0 +1,22 @@
|
||||
- name: Pull Portainer Agent image
|
||||
become: true
|
||||
community.docker.docker_image:
|
||||
name: portainer/agent
|
||||
tag: latest
|
||||
source: pull
|
||||
|
||||
- name: Deploy Portainer Agent container
|
||||
become: true
|
||||
community.docker.docker_container:
|
||||
name: portainer_agent
|
||||
image: portainer/agent
|
||||
pull: false # we already pulled above
|
||||
state: started
|
||||
restart_policy: always
|
||||
ports:
|
||||
- "9001:9001"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- /var/lib/docker/volumes:/var/lib/docker/volumes
|
||||
- /:/host
|
||||
timeout: 120 # wait up to 2m for it to come up
|
0
roles/docker/remove/defaults/main.yml
Normal file
0
roles/docker/remove/defaults/main.yml
Normal file
0
roles/docker/remove/handlers/main.yml
Normal file
0
roles/docker/remove/handlers/main.yml
Normal file
13
roles/docker/remove/tasks/main.yml
Normal file
13
roles/docker/remove/tasks/main.yml
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
- name: Remove old docker stuff
|
||||
ansible.builtin.dnf:
|
||||
name:
|
||||
- docker
|
||||
- docker-client
|
||||
- docker-client-latest
|
||||
- docker-common
|
||||
- docker-latest
|
||||
- docker-latest-logrotate
|
||||
- docker-logrotate
|
||||
- docker-engine
|
||||
state: absent
|
0
roles/docker/remove/templates/main.yml
Normal file
0
roles/docker/remove/templates/main.yml
Normal file
2
roles/docker/stack/defaults/main.yml
Executable file
2
roles/docker/stack/defaults/main.yml
Executable file
@ -0,0 +1,2 @@
|
||||
apps: []
|
||||
stack_name: "willneverexist"
|
27
roles/docker/stack/tasks/main.yml
Executable file
27
roles/docker/stack/tasks/main.yml
Executable file
@ -0,0 +1,27 @@
|
||||
---
|
||||
- name: Create app mount directories
|
||||
ansible.builtin.file:
|
||||
path: "{{ remote_app_mounts }}/{{ item }}"
|
||||
state: directory
|
||||
mode: '0777'
|
||||
loop: "{{ apps }}"
|
||||
|
||||
- name: Create stack directory
|
||||
ansible.builtin.file:
|
||||
path: "{{ remote_stacks }}/{{ stack_name }}"
|
||||
state: directory
|
||||
mode: '0777'
|
||||
|
||||
- name: Copy docker-compose.yml to server
|
||||
ansible.builtin.copy:
|
||||
src: '{{ docker_stacks }}/{{ stack_name }}/docker-compose.yml'
|
||||
dest: '{{ remote_stacks }}/{{ stack_name }}/docker-compose.yml'
|
||||
owner: javi
|
||||
group: javi
|
||||
mode: '0777'
|
||||
|
||||
- name: Start up the containers
|
||||
ansible.builtin.command: docker compose up -d
|
||||
become: true
|
||||
args:
|
||||
chdir: "{{ remote_stacks }}/{{ stack_name }}"
|
0
roles/postgres/database/defaults/main.yml
Executable file
0
roles/postgres/database/defaults/main.yml
Executable file
10
roles/postgres/database/tasks/main.yml
Executable file
10
roles/postgres/database/tasks/main.yml
Executable file
@ -0,0 +1,10 @@
|
||||
---
|
||||
- name: Create database
|
||||
delegate_to: localhost
|
||||
community.postgresql.postgresql_db:
|
||||
name: "{{ database }}"
|
||||
state: present
|
||||
login_host: "{{ pg_host }}"
|
||||
login_port: "{{ pg_port }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
login_password: "{{ pg_password }}"
|
1
roles/postgres/priviledges/defaults/main.yml
Executable file
1
roles/postgres/priviledges/defaults/main.yml
Executable file
@ -0,0 +1 @@
|
||||
priviledges: ALL
|
28
roles/postgres/priviledges/tasks/main.yml
Executable file
28
roles/postgres/priviledges/tasks/main.yml
Executable file
@ -0,0 +1,28 @@
|
||||
---
|
||||
- name: Grant database-level privileges on "{{ database }}"
|
||||
delegate_to: localhost
|
||||
community.postgresql.postgresql_privs:
|
||||
db: "{{ database }}"
|
||||
type: database
|
||||
objs: "{{ database }}"
|
||||
privs: "CREATE"
|
||||
role: "{{ user }}"
|
||||
state: present
|
||||
login_host: "{{ pg_host }}"
|
||||
login_port: "{{ pg_port }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
login_password: "{{ pg_password }}"
|
||||
|
||||
- name: Give user full priviledges on database
|
||||
delegate_to: localhost
|
||||
community.postgresql.postgresql_privs:
|
||||
db: "{{ database }}"
|
||||
type: schema
|
||||
objs: public
|
||||
privs: "{{ priviledges }}"
|
||||
role: "{{ user }}"
|
||||
state: present
|
||||
login_host: "{{ pg_host }}"
|
||||
login_port: "{{ pg_port }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
login_password: "{{ pg_password }}"
|
1
roles/postgres/user/defaults/main.yml
Executable file
1
roles/postgres/user/defaults/main.yml
Executable file
@ -0,0 +1 @@
|
||||
password: "password"
|
11
roles/postgres/user/tasks/main.yml
Executable file
11
roles/postgres/user/tasks/main.yml
Executable file
@ -0,0 +1,11 @@
|
||||
---
|
||||
- name: Create postgres user
|
||||
delegate_to: localhost
|
||||
community.postgresql.postgresql_user:
|
||||
name: "{{ user }}"
|
||||
password: "{{ password }}"
|
||||
state: present
|
||||
login_host: "{{ pg_host }}"
|
||||
login_port: "{{ pg_port }}"
|
||||
login_user: "{{ pg_user }}"
|
||||
login_password: "{{ pg_password }}"
|
0
roles/provision/alma/common/defaults/main.yml
Normal file
0
roles/provision/alma/common/defaults/main.yml
Normal file
0
roles/provision/alma/common/handlers/main.yml
Normal file
0
roles/provision/alma/common/handlers/main.yml
Normal file
56
roles/provision/alma/common/tasks/main.yml
Normal file
56
roles/provision/alma/common/tasks/main.yml
Normal file
@ -0,0 +1,56 @@
|
||||
---
|
||||
- name: Set system timezone
|
||||
ansible.builtin.command: timedatectl set-timezone "{{ timezone }}"
|
||||
register: output
|
||||
changed_when: output.rc != 0
|
||||
|
||||
- name: Set hostname
|
||||
ansible.builtin.hostname:
|
||||
name: "{{ provision_hostname }}"
|
||||
use: systemd
|
||||
|
||||
- name: Upgrade all packages
|
||||
ansible.builtin.dnf:
|
||||
name: "*"
|
||||
update_only: true
|
||||
|
||||
- name: Add CodeReady Builder repo
|
||||
ansible.builtin.command: dnf config-manager --set-enabled crb
|
||||
register: output
|
||||
changed_when: output.rc != 0
|
||||
|
||||
- name: Install QEMU Guest Agent
|
||||
ansible.builtin.dnf:
|
||||
name:
|
||||
- 'qemu-guest-agent'
|
||||
|
||||
- name: Enable and start QEMU Guest Agent
|
||||
ansible.builtin.service:
|
||||
name: qemu-guest-agent
|
||||
enabled: yes
|
||||
state: started
|
||||
|
||||
- name: Install EPEL
|
||||
ansible.builtin.dnf:
|
||||
name:
|
||||
- 'epel-release'
|
||||
update_cache: true
|
||||
|
||||
- name: Install Dev Tools
|
||||
ansible.builtin.dnf:
|
||||
name:
|
||||
- '@Development tools'
|
||||
update_cache: true
|
||||
|
||||
- name: Install baseline packages
|
||||
ansible.builtin.dnf:
|
||||
name:
|
||||
- vim
|
||||
- curl
|
||||
- git
|
||||
- bash-completion
|
||||
- firewalld
|
||||
- fastfetch
|
||||
- btop
|
||||
state: latest
|
||||
update_cache: true
|
0
roles/provision/alma/common/templates/main.yml
Normal file
0
roles/provision/alma/common/templates/main.yml
Normal file
0
roles/provision/alma/docker/defaults/main.yml
Normal file
0
roles/provision/alma/docker/defaults/main.yml
Normal file
0
roles/provision/alma/docker/handlers/main.yml
Normal file
0
roles/provision/alma/docker/handlers/main.yml
Normal file
18
roles/provision/alma/docker/tasks/main.yml
Normal file
18
roles/provision/alma/docker/tasks/main.yml
Normal file
@ -0,0 +1,18 @@
|
||||
- name: Add Docker repository
|
||||
ansible.builtin.get_url:
|
||||
url: https://download.docker.com/linux/centos/docker-ce.repo
|
||||
dest: /etc/yum.repos.d/docker-ce.repo
|
||||
|
||||
- name: Install Docker packages
|
||||
ansible.builtin.dnf:
|
||||
name:
|
||||
- docker-ce
|
||||
- docker-ce-cli
|
||||
- containerd.io
|
||||
state: present
|
||||
|
||||
- name: Enable and start Docker
|
||||
ansible.builtin.service:
|
||||
name: docker
|
||||
enabled: yes
|
||||
state: started
|
0
roles/provision/alma/docker/templates/main.yml
Normal file
0
roles/provision/alma/docker/templates/main.yml
Normal file
0
roles/provision/alma/nfs/defaults/main.yml
Normal file
0
roles/provision/alma/nfs/defaults/main.yml
Normal file
0
roles/provision/alma/nfs/handlers/main.yml
Normal file
0
roles/provision/alma/nfs/handlers/main.yml
Normal file
23
roles/provision/alma/nfs/tasks/main.yml
Normal file
23
roles/provision/alma/nfs/tasks/main.yml
Normal file
@ -0,0 +1,23 @@
|
||||
---
|
||||
- name: Install NFS client
|
||||
ansible.builtin.dnf:
|
||||
name: nfs-utils
|
||||
state: present
|
||||
|
||||
- name: Create mount points
|
||||
ansible.builtin.file:
|
||||
path: "{{ item.path }}"
|
||||
state: directory
|
||||
owner: nfsuser
|
||||
group: nfsuser
|
||||
mode: '0755'
|
||||
loop: "{{ nfs_mounts }}"
|
||||
|
||||
- name: Mount NFS shares
|
||||
ansible.posix.mount:
|
||||
src: "{{ item.src }}"
|
||||
path: "{{ item.path }}"
|
||||
fstype: nfs
|
||||
opts: "{{ item.opts }}"
|
||||
state: mounted
|
||||
loop: "{{ nfs_mounts }}"
|
0
roles/provision/alma/nfs/templates/main.yml
Normal file
0
roles/provision/alma/nfs/templates/main.yml
Normal file
0
roles/pve/cluster_prep/defaults/main.yml
Normal file
0
roles/pve/cluster_prep/defaults/main.yml
Normal file
107
roles/pve/cluster_prep/tasks/main.yml
Normal file
107
roles/pve/cluster_prep/tasks/main.yml
Normal file
@ -0,0 +1,107 @@
|
||||
---
|
||||
# - name: Set hostname
|
||||
# hostname:
|
||||
# name: "{{ inventory_hostname }}"
|
||||
# - name: Disable Proxmox Enterprise repo
|
||||
# lineinfile:
|
||||
# path: /etc/apt/sources.list.d/pve-enterprise.list
|
||||
# regexp: '^deb'
|
||||
# line: '# deb ...'
|
||||
# state: present
|
||||
# ignore_errors: yes # In case the file doesn't exist
|
||||
|
||||
- name: Find all sources.list.d files
|
||||
find:
|
||||
paths: /etc/apt/sources.list.d
|
||||
patterns: "*.list"
|
||||
file_type: file
|
||||
register: list_files
|
||||
|
||||
- name: Comment out any line with 'enterprise' in each file
|
||||
lineinfile:
|
||||
path: "{{ item.path }}"
|
||||
regexp: '^(?!#).*enterprise'
|
||||
line: '# \g<0>'
|
||||
backrefs: yes
|
||||
state: present
|
||||
loop: "{{ list_files.files }}"
|
||||
|
||||
- name: Overwrite sources.list with Proxmox-recommended repos
|
||||
copy:
|
||||
dest: /etc/apt/sources.list
|
||||
content: |
|
||||
deb http://ftp.debian.org/debian bookworm main contrib
|
||||
deb http://ftp.debian.org/debian bookworm-updates main contrib
|
||||
|
||||
# Proxmox VE pve-no-subscription repository provided by proxmox.com,
|
||||
# NOT recommended for production use
|
||||
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
|
||||
|
||||
# security updates
|
||||
deb http://security.debian.org/debian-security bookworm-security main contrib
|
||||
mode: '0644'
|
||||
|
||||
- name: Add Proxmox no-subscription repo to sources.list.d
|
||||
copy:
|
||||
dest: /etc/apt/sources.list.d/pve-no-subscription.list
|
||||
content: |
|
||||
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
|
||||
|
||||
- name: Update apt cache
|
||||
apt:
|
||||
update_cache: yes
|
||||
|
||||
- name: Update /etc/hosts with all PVE nodes
|
||||
template:
|
||||
src: hosts.j2
|
||||
dest: /etc/hosts
|
||||
mode: "0644"
|
||||
|
||||
- name: Ensure search domain and nameserver set properly
|
||||
template:
|
||||
src: resolv.j2
|
||||
dest: /etc/resolv.conf
|
||||
mode: "0644"
|
||||
|
||||
- name: Ensure chrony is installed
|
||||
apt:
|
||||
name: chrony
|
||||
state: present
|
||||
update_cache: yes
|
||||
|
||||
- name: Enable and start chronyd
|
||||
service:
|
||||
name: chrony
|
||||
state: started
|
||||
enabled: yes
|
||||
|
||||
- name: Discover iSCSI targets from TrueNAS
|
||||
shell: |
|
||||
iscsiadm -m discovery -t st -p {{ iscsi_target_ip }}
|
||||
register: iscsi_discovery
|
||||
changed_when: false
|
||||
|
||||
- name: Login to discovered iSCSI target (unauthenticated)
|
||||
shell: |
|
||||
iscsiadm -m node -T {{ iscsi_target_iqn }} -p {{ iscsi_target_ip }} --login
|
||||
register: iscsi_login
|
||||
changed_when: "'Login to' in iscsi_login.stdout or 'already present' in iscsi_login.stdout"
|
||||
|
||||
- name: Make iSCSI login persistent across reboots
|
||||
shell: |
|
||||
iscsiadm -m node -T {{ iscsi_target_iqn }} -p {{ iscsi_target_ip }} --op update -n node.startup -v automatic
|
||||
changed_when: false
|
||||
|
||||
# - name: Ensure vg_ha exists
|
||||
# command: vgs vg_ha
|
||||
# register: vg_result
|
||||
# failed_when: vg_result.rc != 0
|
||||
# changed_when: false
|
||||
|
||||
# - name: Debug VG presence
|
||||
# debug:
|
||||
# msg: "VG 'vg_ha' found on {{ inventory_hostname }}"
|
6
roles/pve/cluster_prep/templates/hosts.j2
Normal file
6
roles/pve/cluster_prep/templates/hosts.j2
Normal file
@ -0,0 +1,6 @@
|
||||
127.0.0.1 localhost
|
||||
{% for host in groups['pve-nodes'] %}
|
||||
{{ hostvars[host]['ansible_default_ipv4']['address'] }} {{ host }} {{ host }}.lan.xbazzi.com
|
||||
{{ hostvars[host]['cluster_ip'] }} {{ host }}-cluster
|
||||
{% endfor %}
|
||||
|
2
roles/pve/cluster_prep/templates/resolv.j2
Normal file
2
roles/pve/cluster_prep/templates/resolv.j2
Normal file
@ -0,0 +1,2 @@
|
||||
search lan.xbazzi.com
|
||||
nameserver 10.133.7.1
|
0
roles/pve/pve_backup/defaults/main.yml
Normal file
0
roles/pve/pve_backup/defaults/main.yml
Normal file
26
roles/pve/pve_backup/tasks/main.yml
Normal file
26
roles/pve/pve_backup/tasks/main.yml
Normal file
@ -0,0 +1,26 @@
|
||||
---
|
||||
- name: Copy /etc/ backup script to PVE node
|
||||
template:
|
||||
src: backup_pve_config.sh.j2
|
||||
dest: /home/xbazzi/backup_pve.sh
|
||||
mode: '0755'
|
||||
|
||||
- name: Run backup script
|
||||
shell: /home/xbazzi/backup_pve.sh
|
||||
|
||||
- name: Find most recent backup directory
|
||||
shell: "ls -td /home/xbazzi/pve_backup_* | head -1"
|
||||
register: latest_backup_dir
|
||||
changed_when: false
|
||||
|
||||
- name: Archive backup folder
|
||||
archive:
|
||||
path: "{{ latest_backup_dir.stdout }}"
|
||||
dest: "{{ latest_backup_dir.stdout }}.tar.gz"
|
||||
format: gz
|
||||
|
||||
- name: Fetch backup archive to control machine
|
||||
fetch:
|
||||
src: "{{ latest_backup_dir.stdout }}.tar.gz"
|
||||
dest: "backups/{{ inventory_hostname }}.tar.gz"
|
||||
flat: yes
|
23
roles/pve/pve_backup/templates/backup_pve_config.sh.j2
Normal file
23
roles/pve/pve_backup/templates/backup_pve_config.sh.j2
Normal file
@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
|
||||
BACKUP_DIR="/home/xbazzi/pve_backup_${TIMESTAMP}"
|
||||
NODE_NAME=$(hostname)
|
||||
|
||||
echo "🔒 Creating backup directory at $BACKUP_DIR..."
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
echo "📁 Backing up /etc/pve..."
|
||||
cp -a /etc/pve "$BACKUP_DIR/etc_pve"
|
||||
|
||||
echo "📄 Saving VM and container config files..."
|
||||
mkdir -p "$BACKUP_DIR/qemu-server" "$BACKUP_DIR/lxc"
|
||||
cp -a /etc/pve/qemu-server/*.conf "$BACKUP_DIR/qemu-server/" 2>/dev/null || true
|
||||
cp -a /etc/pve/lxc/*.conf "$BACKUP_DIR/lxc/" 2>/dev/null || true
|
||||
|
||||
echo "💽 Saving storage.cfg..."
|
||||
cp -a /etc/pve/storage.cfg "$BACKUP_DIR/" 2>/dev/null || true
|
||||
|
||||
echo "📦 Backup complete on $NODE_NAME."
|
||||
echo "🗃️ Location: $BACKUP_DIR"
|
0
roles/pve/setup_networking/defaults/main.yml
Normal file
0
roles/pve/setup_networking/defaults/main.yml
Normal file
5
roles/pve/setup_networking/handlers/main.yml
Normal file
5
roles/pve/setup_networking/handlers/main.yml
Normal file
@ -0,0 +1,5 @@
|
||||
# - name: Restart networking
|
||||
# ansible.builtin.systemd:
|
||||
# name: networking
|
||||
# state: restarted
|
||||
|
46
roles/pve/setup_networking/tasks/main.yml
Normal file
46
roles/pve/setup_networking/tasks/main.yml
Normal file
@ -0,0 +1,46 @@
|
||||
---
|
||||
- name: Set up network interfaces for new PVE node
|
||||
template:
|
||||
src: interfaces-xbazzi.j2
|
||||
# dest: /etc/network/interfaces.d/interfaces-xbazzi
|
||||
dest: /etc/network/interfaces
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
|
||||
- name: Apply correct permissions to interfaces.d
|
||||
file:
|
||||
path: "/etc/network/interfaces.d"
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
|
||||
- name: Find all files in the directory
|
||||
ansible.builtin.find:
|
||||
paths: /etc/network/interfaces.d/
|
||||
file_type: file
|
||||
register: files_to_delete
|
||||
|
||||
- name: Delete all files
|
||||
ansible.builtin.file:
|
||||
path: "{{ item.path }}"
|
||||
state: absent
|
||||
loop: "{{ files_to_delete.files }}"
|
||||
|
||||
- name: Update /etc/hosts with all PVE nodes
|
||||
template:
|
||||
src: hosts.j2
|
||||
dest: /etc/hosts
|
||||
mode: "0644"
|
||||
|
||||
- name: Ensure search domain and nameserver set properly
|
||||
template:
|
||||
src: resolv.j2
|
||||
dest: /etc/resolv.conf
|
||||
mode: "0644"
|
||||
|
||||
|
||||
- name: Restart networking
|
||||
ansible.builtin.systemd:
|
||||
name: networking
|
||||
state: restarted
|
6
roles/pve/setup_networking/templates/hosts.j2
Normal file
6
roles/pve/setup_networking/templates/hosts.j2
Normal file
@ -0,0 +1,6 @@
|
||||
127.0.0.1 localhost
|
||||
{% for host in groups['pve-nodes'] %}
|
||||
{{ hostvars[host]['ansible_default_ipv4']['address'] }} {{ host }} {{ host }}.lan.xbazzi.com
|
||||
{{ hostvars[host]['cluster_ip'] }} {{ host }}-cluster
|
||||
{% endfor %}
|
||||
|
48
roles/pve/setup_networking/templates/interfaces-xbazzi.j2
Normal file
48
roles/pve/setup_networking/templates/interfaces-xbazzi.j2
Normal file
@ -0,0 +1,48 @@
|
||||
auto eno1
|
||||
iface eno1 inet manual
|
||||
mtu 1500
|
||||
|
||||
auto enp1s0f0
|
||||
iface enp1s0f0 inet manual
|
||||
mtu 9000
|
||||
|
||||
iface enp1s0f1 inet manual
|
||||
mtu 9000
|
||||
|
||||
# Mgmt interface
|
||||
auto vmbr0
|
||||
iface vmbr0 inet static
|
||||
address {{ vmbr0_ip }}/22
|
||||
bridge-ports eno1
|
||||
bridge-stp off
|
||||
bridge-fd 0
|
||||
mtu 1500
|
||||
|
||||
auto vmbr1
|
||||
iface vmbr1 inet manual
|
||||
bridge-ports enp1s0f0
|
||||
bridge-stp off
|
||||
bridge-fd 0
|
||||
bridge-vlan-aware yes
|
||||
bridge-vids 2-4094
|
||||
mtu 9000
|
||||
|
||||
# Prod interface
|
||||
auto vmbr1.1337
|
||||
iface vmbr1.1337 inet static
|
||||
address {{ vmbr1_1337_ip }}/22
|
||||
gateway 10.133.7.1
|
||||
mtu 9000
|
||||
|
||||
# DMZ interface
|
||||
auto vmbr1.666
|
||||
iface vmbr1.666 inet static
|
||||
address {{ vmbr1_666_ip }}/22
|
||||
mtu 1500
|
||||
|
||||
# Cluster network
|
||||
auto {{ cluster_iface }}
|
||||
iface {{ cluster_iface }} inet static
|
||||
address {{ cluster_ip }}/28
|
||||
mtu 1500
|
||||
|
2
roles/pve/setup_networking/templates/resolv.j2
Normal file
2
roles/pve/setup_networking/templates/resolv.j2
Normal file
@ -0,0 +1,2 @@
|
||||
search lan.xbazzi.com
|
||||
nameserver 10.133.7.1
|
0
roles/server/firewall/defaults/main.yml
Normal file
0
roles/server/firewall/defaults/main.yml
Normal file
0
roles/server/firewall/handlers/main.yml
Normal file
0
roles/server/firewall/handlers/main.yml
Normal file
43
roles/server/firewall/tasks/main.yml
Normal file
43
roles/server/firewall/tasks/main.yml
Normal file
@ -0,0 +1,43 @@
|
||||
---
|
||||
- name: Enable and start firewalld
|
||||
ansible.builtin.systemd:
|
||||
name: firewalld
|
||||
enabled: yes
|
||||
state: started
|
||||
|
||||
- name: Assign interface ens18 to core zone
|
||||
ansible.posix.firewalld:
|
||||
interface: ens18
|
||||
zone: core
|
||||
state: enabled
|
||||
permanent: true
|
||||
|
||||
- name: Assign interface ens19 to mgmt zone
|
||||
ansible.posix.firewalld:
|
||||
interface: ens19
|
||||
zone: mgmt
|
||||
state: enabled
|
||||
permanent: true
|
||||
|
||||
- name: Assign interface ens20 to dmz zone
|
||||
ansible.posix.firewalld:
|
||||
interface: ens20
|
||||
zone: dmz
|
||||
state: enabled
|
||||
permanent: true
|
||||
|
||||
- name: Set core to default
|
||||
ansible.builtin.command: firewall-cmd --set-default-zone=core
|
||||
|
||||
# - name: Remove ens18 from public
|
||||
# ansible.builtin.command: firewall-cmd --zone=public --remove-interface=ens18
|
||||
|
||||
# - name: Assign interface ens18 to "internal" zone
|
||||
# ansible.posix.firewalld:
|
||||
# interface: ens18
|
||||
# zone: internal
|
||||
# state: enabled
|
||||
# permanent: true
|
||||
|
||||
- name: Reload firewalld to apply changes
|
||||
ansible.builtin.command: firewall-cmd --reload
|
0
roles/server/firewall/templates/main.yml
Normal file
0
roles/server/firewall/templates/main.yml
Normal file
0
roles/server/ftp/defaults/main.yml
Executable file
0
roles/server/ftp/defaults/main.yml
Executable file
23
roles/server/ftp/tasks/main.yml
Executable file
23
roles/server/ftp/tasks/main.yml
Executable file
@ -0,0 +1,23 @@
|
||||
---
|
||||
- name: Update apt cache
|
||||
ansible.builtin.apt:
|
||||
update_cache: true
|
||||
|
||||
- name: Install proftpd package
|
||||
ansible.builtin.apt:
|
||||
name: proftpd
|
||||
state: present
|
||||
|
||||
- name: Ensure proftpd is enabled and started
|
||||
ansible.builtin.service:
|
||||
name: proftpd
|
||||
state: started
|
||||
enabled: true
|
||||
become: true
|
||||
|
||||
- name: Allow FTP through UFW firewall (if UFW is enabled)
|
||||
community.general.ufw:
|
||||
rule: allow
|
||||
port: 21
|
||||
proto: tcp
|
||||
ignore_errors: false
|
0
roles/server/network/defaults/main.yml
Normal file
0
roles/server/network/defaults/main.yml
Normal file
0
roles/server/network/handlers/main.yml
Normal file
0
roles/server/network/handlers/main.yml
Normal file
136
roles/server/network/tasks/main.yml
Normal file
136
roles/server/network/tasks/main.yml
Normal file
@ -0,0 +1,136 @@
|
||||
---
|
||||
- name: Enable and start firewalld
|
||||
ansible.builtin.systemd:
|
||||
name: firewalld
|
||||
enabled: yes
|
||||
state: started
|
||||
|
||||
- name: Enable and start NetworkManager
|
||||
ansible.builtin.systemd:
|
||||
name: NetworkManager
|
||||
enabled: yes
|
||||
state: started
|
||||
|
||||
- name: Check existing zones
|
||||
ansible.builtin.command: firewall-cmd --get-zones
|
||||
register: firewalld_zones
|
||||
|
||||
- name: Debug output
|
||||
ansible.builtin.debug:
|
||||
var: firewalld_zones.stdout
|
||||
|
||||
# - name: Create zone "core"
|
||||
# ansible.builtin.command: firewall-cmd --permanent --new-zone="{{ item }}"
|
||||
# loop: ["core", "mgmt"]
|
||||
# # loop: "{{ firewalld_zones.stdout | split }}"
|
||||
# when: item in firewalld_zones.stdout.split()
|
||||
# (item != "core" and
|
||||
# item != "dmz")
|
||||
|
||||
- name: Create firewalld core zone
|
||||
ansible.posix.firewalld:
|
||||
zone: core
|
||||
state: present
|
||||
permanent: true
|
||||
|
||||
- name: Create firewalld mgmt zone
|
||||
ansible.posix.firewalld:
|
||||
zone: mgmt
|
||||
state: present
|
||||
permanent: true
|
||||
|
||||
- name: Create firewalld dmz zone
|
||||
ansible.posix.firewalld:
|
||||
zone: dmz
|
||||
state: present
|
||||
permanent: true
|
||||
|
||||
- name: Reload firewalld to apply changes
|
||||
ansible.builtin.command: firewall-cmd --reload
|
||||
|
||||
- name: Enable ssh rule in core for initial ansible config
|
||||
ansible.posix.firewalld:
|
||||
zone: core
|
||||
service: ssh
|
||||
state: enabled
|
||||
permanent: true
|
||||
|
||||
# - name: Ensure all other zones are disabled
|
||||
# ansible.posix.firewalld:
|
||||
# zone: "{{ item }}"
|
||||
# state: disabled
|
||||
# permanent: true
|
||||
# when: item not in zones
|
||||
# loop: "{{ firewalld_zones.stdout | split }}"
|
||||
|
||||
- name: Set up CORE interface manually
|
||||
nmcli:
|
||||
conn_name: CORE
|
||||
zone: core
|
||||
type: ethernet
|
||||
ip4: "{{ provision_core_ip4 }}"
|
||||
gw4: "{{ core_gw4 }}"
|
||||
dns4: "{{ core_gw4 }}"
|
||||
method4: "manual"
|
||||
ifname: ens18
|
||||
dns4_search: lan.xbazzi.com
|
||||
state: present
|
||||
# delegate_to: "{{ provision_core_ip4_no_subnet }}"
|
||||
|
||||
- name: Set up mgmt interface manually
|
||||
nmcli:
|
||||
conn_name: MGMT
|
||||
zone: mgmt
|
||||
type: ethernet
|
||||
ip4: "{{ provision_mgmt_ip4 }}"
|
||||
routes4: "0.0.0.0/0 {{ mgmt_gw4 }}"
|
||||
routing_rules4:
|
||||
- "priority 2 from {{ mgmt_net }} table 200"
|
||||
route_metric4: 102
|
||||
dns4: "{{ mgmt_gw4 }}"
|
||||
method4: "manual"
|
||||
ifname: "ens19"
|
||||
dns4_search: "lan.xbazzi.com"
|
||||
state: present
|
||||
# delegate_to: "{{ provision_core_ip4_no_subnet }}"
|
||||
|
||||
- name: Set up dmz interface manually
|
||||
nmcli:
|
||||
conn_name: DMZ
|
||||
zone: dmz
|
||||
type: ethernet
|
||||
ip4: "{{ provision_dmz_ip4 }}"
|
||||
routes4: "0.0.0.0/0 {{ dmz_gw4 }}"
|
||||
routing_rules4:
|
||||
- "priority 3 from {{ dmz_net }} table 300"
|
||||
route_metric4: 103
|
||||
dns4: "{{ dmz_gw4 }}"
|
||||
method4: "manual"
|
||||
ifname: "ens20"
|
||||
dns4_search: "lan.xbazzi.com"
|
||||
state: present
|
||||
# delegate_to: "{{ provision_core_ip4_no_subnet }}"
|
||||
|
||||
- name: Remove ens18 default connection
|
||||
nmcli:
|
||||
conn_name: ens18
|
||||
state: absent
|
||||
# delegate_to: "{{ provision_core_ip4_no_subnet }}"
|
||||
|
||||
- name: Remove ens19 default connection
|
||||
nmcli:
|
||||
conn_name: ens19
|
||||
state: absent
|
||||
# delegate_to: "{{ provision_core_ip4_no_subnet }}"
|
||||
|
||||
- name: Remove ens20 default connection
|
||||
nmcli:
|
||||
conn_name: ens20
|
||||
state: absent
|
||||
# delegate_to: "{{ provision_core_ip4_no_subnet }}"
|
||||
|
||||
- name: Remove "Wired connection 1"
|
||||
nmcli:
|
||||
conn_name: Wired connection 1
|
||||
state: absent
|
||||
# delegate_to: "{{ provision_core_ip4_no_subnet }}"
|
6
roles/server/network/templates/ifcfg-template.j2
Normal file
6
roles/server/network/templates/ifcfg-template.j2
Normal file
@ -0,0 +1,6 @@
|
||||
DEVICE={{ network_config.interface }}
|
||||
BOOTPROTO=none
|
||||
ONBOOT=yes
|
||||
IPADDR={{ network_config.address }}
|
||||
NETMASK={{ network_config.netmask }}
|
||||
GATEWAY={{ network_config.gateway }}
|
0
roles/server/network/templates/main.yml
Normal file
0
roles/server/network/templates/main.yml
Normal file
0
roles/server/reboot/defaults/main.yml
Normal file
0
roles/server/reboot/defaults/main.yml
Normal file
0
roles/server/reboot/handlers/main.yml
Normal file
0
roles/server/reboot/handlers/main.yml
Normal file
5
roles/server/reboot/tasks/main.yml
Normal file
5
roles/server/reboot/tasks/main.yml
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
- name: Reboot machine and send a message
|
||||
ansible.builtin.shell: "reboot"
|
||||
async: 1
|
||||
poll: 0
|
0
roles/server/reboot/templates/main.yml
Normal file
0
roles/server/reboot/templates/main.yml
Normal file
0
roles/server/sshkey/defaults/main.yml
Executable file
0
roles/server/sshkey/defaults/main.yml
Executable file
12
roles/server/sshkey/tasks/main.yml
Normal file
12
roles/server/sshkey/tasks/main.yml
Normal file
@ -0,0 +1,12 @@
|
||||
---
|
||||
- name: Add ansible user SSH public key
|
||||
ansible.posix.authorized_key:
|
||||
user: ansible
|
||||
key: "{{ lookup('file', '/home/xbazzi/.ssh/ansible_ed25519.pub') }}"
|
||||
state: present
|
||||
|
||||
- name: Add xbazzi user SSH public key
|
||||
ansible.posix.authorized_key:
|
||||
user: xbazzi
|
||||
key: "{{ lookup('file', '/home/xbazzi/.ssh/lan_id_ed25519.pub') }}"
|
||||
state: present
|
0
roles/server/sysprep/defaults/main.yml
Normal file
0
roles/server/sysprep/defaults/main.yml
Normal file
0
roles/server/sysprep/handlers/main.yml
Normal file
0
roles/server/sysprep/handlers/main.yml
Normal file
115
roles/server/sysprep/tasks/main.yml
Normal file
115
roles/server/sysprep/tasks/main.yml
Normal file
@ -0,0 +1,115 @@
|
||||
---
|
||||
- name: Set hostname to generic localhost
|
||||
ansible.builtin.hostname:
|
||||
name: localhost.localdomain
|
||||
# use: systemd
|
||||
|
||||
- name: Ensure IPv4 localhost entry exists in /etc/hosts
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/hosts
|
||||
line: "127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4"
|
||||
state: present
|
||||
create: yes
|
||||
regexp: '^127\.0\.0\.1\s+localhost'
|
||||
|
||||
- name: Remove IPv6 localhost entry (::1) from /etc/hosts
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/hosts
|
||||
regexp: '^::1\s+localhost'
|
||||
state: absent
|
||||
|
||||
# - name: Remove xbazzi user
|
||||
# ansible.builtin.user:
|
||||
# name: xbazzi
|
||||
# state: absent
|
||||
# remove: true
|
||||
|
||||
# - name: Truncate machine-id
|
||||
# ansible.builtin.command: truncate -s 0 /etc/machine-id
|
||||
|
||||
- name: Remove DBus machine-id if exists
|
||||
ansible.builtin.file:
|
||||
path: /var/lib/dbus/machine-id
|
||||
state: absent
|
||||
|
||||
- name: Remove root SSH folder
|
||||
ansible.builtin.file:
|
||||
path: /root/.ssh
|
||||
state: absent
|
||||
|
||||
- name: Remove anaconda kickstart config
|
||||
ansible.builtin.file:
|
||||
path: /root/anaconda-ks.cfg
|
||||
state: absent
|
||||
|
||||
- name: Clear logs
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: absent
|
||||
loop:
|
||||
- /var/log/boot.log
|
||||
- /var/log/cron
|
||||
- /var/log/dmesg
|
||||
- /var/log/grubby
|
||||
- /var/log/lastlog
|
||||
- /var/log/maillog
|
||||
- /var/log/messages
|
||||
- /var/log/secure
|
||||
- /var/log/spooler
|
||||
- /var/log/tallylog
|
||||
- /var/log/wtmp
|
||||
- /var/log/yum.log
|
||||
- /var/log/audit/audit.log
|
||||
- /var/log/tuned/tuned.log
|
||||
- /var/log/wpa_supplicant.log
|
||||
- /var/log/ovirt-guest-agent/ovirt-guest-agent.log
|
||||
|
||||
- name: Rotate and vacuum journal logs
|
||||
ansible.builtin.shell: |
|
||||
journalctl --rotate
|
||||
journalctl --vacuum-time=1s
|
||||
when: ansible_facts['distribution_major_version'] is version('8', '>=')
|
||||
|
||||
- name: Clear shell history
|
||||
ansible.builtin.copy:
|
||||
content: ""
|
||||
dest: /root/.bash_history
|
||||
force: true
|
||||
|
||||
- name: Find all SSH keys
|
||||
ansible.builtin.find:
|
||||
paths:
|
||||
- /etc/ssh
|
||||
- /home/
|
||||
patterns:
|
||||
- "ssh_host*"
|
||||
- "id_*"
|
||||
- "authorized_keys"
|
||||
- "known_hosts"
|
||||
- "config"
|
||||
use_regex: false
|
||||
recurse: true
|
||||
file_type: file
|
||||
register: ssh_files
|
||||
|
||||
- name: Debug found SSH keys
|
||||
debug:
|
||||
msg: "{{ item.path }}"
|
||||
loop: "{{ ssh_files.files }}"
|
||||
|
||||
- name: Remove SSH keys
|
||||
ansible.builtin.file:
|
||||
path: "{{ item.path }}"
|
||||
state: absent
|
||||
loop: "{{ ssh_files.files }}"
|
||||
# loop: "{{ ssh_keys.results | map(attribute='files') | flatten }}"
|
||||
|
||||
- name: Sync changes to disk
|
||||
ansible.builtin.command: sync
|
||||
|
||||
- name: Remove old local SSH known_hosts entry (necessary to avoid fingerprint warning)
|
||||
become_user: xbazzi
|
||||
local_action:
|
||||
module: command
|
||||
args:
|
||||
cmd: ssh-keygen -R "{{ hostvars['staging-vm'].ansible_host }}"
|
0
roles/server/sysprep/templates/main.yml
Normal file
0
roles/server/sysprep/templates/main.yml
Normal file
0
roles/server/users/defaults/main.yml
Normal file
0
roles/server/users/defaults/main.yml
Normal file
0
roles/server/users/handlers/main.yml
Normal file
0
roles/server/users/handlers/main.yml
Normal file
45
roles/server/users/tasks/main.yml
Normal file
45
roles/server/users/tasks/main.yml
Normal file
@ -0,0 +1,45 @@
|
||||
---
|
||||
- name: Add xbazzi group
|
||||
ansible.builtin.group:
|
||||
name: xbazzi
|
||||
state: present
|
||||
gid: 1337
|
||||
|
||||
- name: Add xbazzi user
|
||||
ansible.builtin.user:
|
||||
name: xbazzi
|
||||
create_home: true
|
||||
shell: /bin/bash
|
||||
groups: wheel,xbazzi
|
||||
uid: 1337
|
||||
state: present
|
||||
|
||||
# - name: Add ansible group
|
||||
# ansible.builtin.group:
|
||||
# name: ansible
|
||||
# state: present
|
||||
# gid: 1001
|
||||
|
||||
# - name: Add ansible user
|
||||
# ansible.builtin.user:
|
||||
# name: ansible
|
||||
# create_home: true
|
||||
# shell: /bin/bash
|
||||
# groups: wheel,ansible
|
||||
# state: present
|
||||
# uid: 1001
|
||||
|
||||
- name: Add nfsuser group
|
||||
ansible.builtin.group:
|
||||
name: nfsuser
|
||||
state: present
|
||||
gid: 3005
|
||||
|
||||
- name: Add nfsuser user
|
||||
ansible.builtin.user:
|
||||
name: nfsuser
|
||||
create_home: true
|
||||
shell: /bin/bash
|
||||
groups: wheel
|
||||
state: present
|
||||
uid: 3005
|
0
roles/server/users/templates/main.yml
Normal file
0
roles/server/users/templates/main.yml
Normal file
5
roles/services/postgres/defaults/main.yml
Normal file
5
roles/services/postgres/defaults/main.yml
Normal file
@ -0,0 +1,5 @@
|
||||
directory: "postgres"
|
||||
default_user: "postgres"
|
||||
default_password: "password"
|
||||
port: "5432"
|
||||
container_name: "postgres"
|
23
roles/services/postgres/tasks/main.yml
Normal file
23
roles/services/postgres/tasks/main.yml
Normal file
@ -0,0 +1,23 @@
|
||||
- name: Create data folder
|
||||
ansible.builtin.file:
|
||||
dest: "{{ docker_dir }}/{{ directory }}"
|
||||
state: directory
|
||||
owner: root
|
||||
group: docker
|
||||
mode: '0770'
|
||||
recurse: yes
|
||||
|
||||
- name: Put up the postgres container
|
||||
community.docker.docker_container:
|
||||
name: "{{container_name}}"
|
||||
image: postgres:17.4
|
||||
restart_policy: always
|
||||
state: started
|
||||
pull: true
|
||||
ports:
|
||||
- "{{ port }}:5432"
|
||||
env:
|
||||
POSTGRES_USER: "{{ default_user }}"
|
||||
POSTGRES_PASSWORD: "{{ default_password }}"
|
||||
volumes:
|
||||
- "{{ docker_dir }}/{{ directory }}/data:/var/lib/postgresql/data/"
|
3
roles/util/mount_nfs/defaults/main.yml
Executable file
3
roles/util/mount_nfs/defaults/main.yml
Executable file
@ -0,0 +1,3 @@
|
||||
mount_host: "{{ hostvars['nas'].ansible_host }}"
|
||||
share: "/mnt/ALEXANDRIA/"
|
||||
mount_path: "/mnt/unspecifiedshare"
|
21
roles/util/mount_nfs/tasks/main.yml
Executable file
21
roles/util/mount_nfs/tasks/main.yml
Executable file
@ -0,0 +1,21 @@
|
||||
---
|
||||
- name: Ensure NFS client is installed
|
||||
ansible.builtin.package:
|
||||
name: nfs-common
|
||||
state: present
|
||||
become: true
|
||||
|
||||
- name: Create mount point directory
|
||||
ansible.builtin.file:
|
||||
path: "{{ mount_path }}"
|
||||
state: directory
|
||||
mode: '0777'
|
||||
become: true
|
||||
|
||||
- name: Mount share
|
||||
ansible.posix.mount:
|
||||
src: "{{ mount_host }}:{{ share }}"
|
||||
path: "{{ mount_path }}"
|
||||
fstype: nfs
|
||||
state: mounted
|
||||
become: true
|
28
setup.sh
Executable file
28
setup.sh
Executable file
@ -0,0 +1,28 @@
|
||||
echo "**Deleting .git so you can start your own repo"
|
||||
rm -rf .git
|
||||
echo "***Ansible vault password***"
|
||||
echo "This is used to encrypt/descrypt secrets in your vault"
|
||||
echo "We'll save it to a file in ~/.[file name] so it doesn't have to be typed every time"
|
||||
echo
|
||||
read -p "File name (no . prefix): " ansible_vault_pass_filename
|
||||
read -s -p "Password: " ansible_vault_pass
|
||||
|
||||
echo $ansible_vault_pass > ~/.$ansible_vault_pass_filename
|
||||
echo "vault_password_file = ~/.$ansible_vault_pass_filename" >>ansible.cfg
|
||||
|
||||
echo
|
||||
echo
|
||||
|
||||
echo "***Ansible become password***"
|
||||
echo "A lot of actions need sudo. This password will be stored in group_vars/all.yml encrypted"
|
||||
read -s -p "Password: " ansible_become_pass
|
||||
echo "# Sudo password for your servers" >>./group_vars/all.yml
|
||||
ansible-vault encrypt_string "$ansible_become_pass" --name 'ansible_become_pass' >>./group_vars/all.yml
|
||||
|
||||
echo
|
||||
echo
|
||||
|
||||
echo "Setup complete"
|
||||
echo "You can delete setup.sh since running it again would cause issues"
|
||||
echo "Config for vault password was output to ./ansible.cfg"
|
||||
echo "Config for sudo (become) password was output to ./group_vars/all.yml"
|
Loading…
x
Reference in New Issue
Block a user